mirror of
https://github.com/vcmi/vcmi.git
synced 2025-10-08 23:22:25 +02:00
fix prices
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
#include "../../lib/UnlockGuard.h"
|
||||
#include "../../lib/CConfigHandler.h"
|
||||
#include "../../lib/entities/artifact/CArtifact.h"
|
||||
#include "../../lib/entities/ResourceTypeHandler.h"
|
||||
#include "../../lib/mapObjects/MapObjects.h"
|
||||
#include "../../lib/mapObjects/CQuest.h"
|
||||
#include "../../lib/mapping/TerrainTile.h"
|
||||
@@ -470,7 +471,7 @@ int32_t getArtifactBonusScoreImpl(const std::shared_ptr<Bonus> & bonus)
|
||||
case BonusType::UNDEAD_RAISE_PERCENTAGE:
|
||||
return bonus->val * 400;
|
||||
case BonusType::GENERATE_RESOURCE:
|
||||
return bonus->val * LIBRARY->objh->resVals.at(bonus->subtype.as<GameResID>().getNum()) * 10;
|
||||
return bonus->val * LIBRARY->resourceTypeHandler->getById(bonus->subtype.as<GameResID>())->getPrice() * 10;
|
||||
case BonusType::SPELL_DURATION:
|
||||
return bonus->val * 200;
|
||||
case BonusType::MAGIC_RESISTANCE:
|
||||
|
@@ -1,40 +1,56 @@
|
||||
{
|
||||
"wood": {
|
||||
"index" : 0,
|
||||
"name": "Wood",
|
||||
"price": 250
|
||||
|
||||
},
|
||||
|
||||
"mercury": {
|
||||
"index" : 1,
|
||||
"name": "Mercury",
|
||||
"price": 500
|
||||
|
||||
},
|
||||
|
||||
"ore": {
|
||||
"index" : 2,
|
||||
"name": "Ore",
|
||||
"price": 250
|
||||
|
||||
},
|
||||
|
||||
"sulfur": {
|
||||
"index" : 3,
|
||||
"name": "Sulfur",
|
||||
"price": 500
|
||||
|
||||
},
|
||||
|
||||
"crystal": {
|
||||
"index" : 4,
|
||||
"name": "Crystal",
|
||||
"price": 500
|
||||
|
||||
},
|
||||
|
||||
"gems": {
|
||||
"index" : 5,
|
||||
"name": "Gems",
|
||||
"price": 500
|
||||
|
||||
},
|
||||
|
||||
"gold": {
|
||||
"index" : 6,
|
||||
"name": "Gold",
|
||||
"price": 1
|
||||
|
||||
},
|
||||
|
||||
"mithril": {
|
||||
"index" : 7,
|
||||
"name": "Mithril",
|
||||
"price": 0
|
||||
|
||||
}
|
||||
|
22
config/schemas/resources.json
Normal file
22
config/schemas/resources.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"type" : "object",
|
||||
"$schema" : "http://json-schema.org/draft-04/schema",
|
||||
"title" : "VCMI resources format",
|
||||
"description" : "Format used to define new resources in VCMI",
|
||||
"required" : [ "name", "price" ],
|
||||
"additionalProperties" : false,
|
||||
"properties" : {
|
||||
"index" : {
|
||||
"type" : "number",
|
||||
"description" : "numeric id of h3 resource, prohibited for new resources"
|
||||
},
|
||||
"name" : {
|
||||
"type" : "string",
|
||||
"description" : "Localizable name of this resource"
|
||||
},
|
||||
"price" : {
|
||||
"type" : "number",
|
||||
"description" : "Price of resource in gold"
|
||||
}
|
||||
}
|
||||
}
|
@@ -13,7 +13,7 @@
|
||||
#include "ResourceSet.h"
|
||||
#include "constants/StringConstants.h"
|
||||
#include "serializer/JsonSerializeFormat.h"
|
||||
#include "mapObjects/CObjectHandler.h"
|
||||
#include "entities/ResourceTypeHandler.h"
|
||||
#include "GameLibrary.h"
|
||||
|
||||
VCMI_LIB_NAMESPACE_BEGIN
|
||||
@@ -98,7 +98,7 @@ TResourceCap ResourceSet::marketValue() const
|
||||
{
|
||||
TResourceCap total = 0;
|
||||
for(int i = 0; i < GameConstants::RESOURCE_QUANTITY; i++)
|
||||
total += static_cast<TResourceCap>(LIBRARY->objh->resVals[i]) * static_cast<TResourceCap>(operator[](i));
|
||||
total += static_cast<TResourceCap>(LIBRARY->resourceTypeHandler->getById(i)->getPrice()) * static_cast<TResourceCap>(operator[](i));
|
||||
return total;
|
||||
}
|
||||
|
||||
|
@@ -20,7 +20,7 @@ VCMI_LIB_NAMESPACE_BEGIN
|
||||
|
||||
std::string resources::ResourceType::getNameTextID() const
|
||||
{
|
||||
return TextIdentifier( "resourceType", modScope, identifier, "name" ).get();
|
||||
return TextIdentifier( "resources", modScope, identifier, "name" ).get();
|
||||
}
|
||||
|
||||
std::string resources::ResourceType::getNameTranslated() const
|
||||
@@ -54,22 +54,22 @@ std::shared_ptr<resources::ResourceType> ResourceTypeHandler::loadObjectImpl(std
|
||||
void ResourceTypeHandler::loadObject(std::string scope, std::string name, const JsonNode & data)
|
||||
{
|
||||
objects.push_back(loadObjectImpl(scope, name, data, objects.size()));
|
||||
registerObject(scope, "resourceType", name, objects.back()->getIndex());
|
||||
registerObject(scope, "resources", name, objects.back()->getIndex());
|
||||
}
|
||||
|
||||
void ResourceTypeHandler::loadObject(std::string scope, std::string name, const JsonNode & data, size_t index)
|
||||
{
|
||||
assert(objects[index] == nullptr); // ensure that this id was not loaded before
|
||||
objects[index] = loadObjectImpl(scope, name, data, index);
|
||||
registerObject(scope, "resourceType", name, objects[index]->getIndex());
|
||||
registerObject(scope, "resources", name, objects[index]->getIndex());
|
||||
}
|
||||
|
||||
std::vector<GameResID> ResourceTypeHandler::getAllObjects() const
|
||||
{
|
||||
std::vector<GameResID> result;
|
||||
|
||||
for (const auto & school : objects)
|
||||
result.push_back(school->id);
|
||||
for (const auto & resource : objects)
|
||||
result.push_back(resource->id);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@@ -21,13 +21,6 @@ VCMI_LIB_NAMESPACE_BEGIN
|
||||
|
||||
CObjectHandler::CObjectHandler()
|
||||
{
|
||||
logGlobal->trace("\t\tReading resources prices ");
|
||||
for(auto & res : LIBRARY->resourceTypeHandler->getAllObjects())
|
||||
{
|
||||
auto resType = LIBRARY->resourceTypeHandler->getById(res);
|
||||
resVals[res] = static_cast<ui32>(resType->getPrice());
|
||||
}
|
||||
logGlobal->trace("\t\tDone loading resource prices!");
|
||||
}
|
||||
|
||||
VCMI_LIB_NAMESPACE_END
|
||||
|
@@ -19,8 +19,6 @@ class int3;
|
||||
class DLL_LINKAGE CObjectHandler
|
||||
{
|
||||
public:
|
||||
std::map<GameResID, ui32> resVals; //default values of resources in gold
|
||||
|
||||
CObjectHandler();
|
||||
};
|
||||
|
||||
|
@@ -13,10 +13,10 @@
|
||||
|
||||
#include "CCreatureHandler.h"
|
||||
#include "CGObjectInstance.h"
|
||||
#include "CObjectHandler.h"
|
||||
|
||||
#include "../GameLibrary.h"
|
||||
#include "../entities/artifact/CArtHandler.h"
|
||||
#include "../entities/ResourceTypeHandler.h"
|
||||
|
||||
VCMI_LIB_NAMESPACE_BEGIN
|
||||
|
||||
@@ -33,8 +33,8 @@ bool IMarket::getOffer(int id1, int id2, int &val1, int &val2, EMarketMode mode)
|
||||
{
|
||||
double effectiveness = std::min((getMarketEfficiency() + 1.0) / 20.0, 0.5);
|
||||
|
||||
double r = LIBRARY->objh->resVals[id1]; //value of given resource
|
||||
double g = LIBRARY->objh->resVals[id2] / effectiveness; //value of wanted resource
|
||||
double r = LIBRARY->resourceTypeHandler->getById(id1)->getPrice(); //value of given resource
|
||||
double g = LIBRARY->resourceTypeHandler->getById(id2)->getPrice() / effectiveness; //value of wanted resource
|
||||
|
||||
if(r>g) //if given resource is more expensive than wanted
|
||||
{
|
||||
@@ -54,7 +54,7 @@ bool IMarket::getOffer(int id1, int id2, int &val1, int &val2, EMarketMode mode)
|
||||
double effectiveness = effectivenessArray[std::min(getMarketEfficiency(), 8)];
|
||||
|
||||
double r = LIBRARY->creatures()->getByIndex(id1)->getRecruitCost(EGameResID::GOLD); //value of given creature in gold
|
||||
double g = LIBRARY->objh->resVals[id2] / effectiveness; //value of wanted resource
|
||||
double g = LIBRARY->resourceTypeHandler->getById(id2)->getPrice() / effectiveness; //value of wanted resource
|
||||
|
||||
if(r>g) //if given resource is more expensive than wanted
|
||||
{
|
||||
@@ -75,7 +75,7 @@ bool IMarket::getOffer(int id1, int id2, int &val1, int &val2, EMarketMode mode)
|
||||
case EMarketMode::RESOURCE_ARTIFACT:
|
||||
{
|
||||
double effectiveness = std::min((getMarketEfficiency() + 3.0) / 20.0, 0.6);
|
||||
double r = LIBRARY->objh->resVals[id1]; //value of offered resource
|
||||
double r = LIBRARY->resourceTypeHandler->getById(id1)->getPrice(); //value of offered resource
|
||||
double g = LIBRARY->artifacts()->getByIndex(id2)->getPrice() / effectiveness; //value of bought artifact in gold
|
||||
|
||||
if(id1 != 6) //non-gold prices are doubled
|
||||
@@ -89,7 +89,7 @@ bool IMarket::getOffer(int id1, int id2, int &val1, int &val2, EMarketMode mode)
|
||||
{
|
||||
double effectiveness = std::min((getMarketEfficiency() + 3.0) / 20.0, 0.6);
|
||||
double r = LIBRARY->artifacts()->getByIndex(id1)->getPrice() * effectiveness;
|
||||
double g = LIBRARY->objh->resVals[id2];
|
||||
double g = LIBRARY->resourceTypeHandler->getById(id2)->getPrice();
|
||||
|
||||
// if(id2 != 6) //non-gold prices are doubled
|
||||
// r /= 2;
|
||||
|
Reference in New Issue
Block a user