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/UnlockGuard.h"
|
||||||
#include "../../lib/CConfigHandler.h"
|
#include "../../lib/CConfigHandler.h"
|
||||||
#include "../../lib/entities/artifact/CArtifact.h"
|
#include "../../lib/entities/artifact/CArtifact.h"
|
||||||
|
#include "../../lib/entities/ResourceTypeHandler.h"
|
||||||
#include "../../lib/mapObjects/MapObjects.h"
|
#include "../../lib/mapObjects/MapObjects.h"
|
||||||
#include "../../lib/mapObjects/CQuest.h"
|
#include "../../lib/mapObjects/CQuest.h"
|
||||||
#include "../../lib/mapping/TerrainTile.h"
|
#include "../../lib/mapping/TerrainTile.h"
|
||||||
@@ -470,7 +471,7 @@ int32_t getArtifactBonusScoreImpl(const std::shared_ptr<Bonus> & bonus)
|
|||||||
case BonusType::UNDEAD_RAISE_PERCENTAGE:
|
case BonusType::UNDEAD_RAISE_PERCENTAGE:
|
||||||
return bonus->val * 400;
|
return bonus->val * 400;
|
||||||
case BonusType::GENERATE_RESOURCE:
|
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:
|
case BonusType::SPELL_DURATION:
|
||||||
return bonus->val * 200;
|
return bonus->val * 200;
|
||||||
case BonusType::MAGIC_RESISTANCE:
|
case BonusType::MAGIC_RESISTANCE:
|
||||||
|
@@ -1,40 +1,56 @@
|
|||||||
{
|
{
|
||||||
"wood": {
|
"wood": {
|
||||||
|
"index" : 0,
|
||||||
|
"name": "Wood",
|
||||||
"price": 250
|
"price": 250
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"mercury": {
|
"mercury": {
|
||||||
|
"index" : 1,
|
||||||
|
"name": "Mercury",
|
||||||
"price": 500
|
"price": 500
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"ore": {
|
"ore": {
|
||||||
|
"index" : 2,
|
||||||
|
"name": "Ore",
|
||||||
"price": 250
|
"price": 250
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"sulfur": {
|
"sulfur": {
|
||||||
|
"index" : 3,
|
||||||
|
"name": "Sulfur",
|
||||||
"price": 500
|
"price": 500
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"crystal": {
|
"crystal": {
|
||||||
|
"index" : 4,
|
||||||
|
"name": "Crystal",
|
||||||
"price": 500
|
"price": 500
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"gems": {
|
"gems": {
|
||||||
|
"index" : 5,
|
||||||
|
"name": "Gems",
|
||||||
"price": 500
|
"price": 500
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"gold": {
|
"gold": {
|
||||||
|
"index" : 6,
|
||||||
|
"name": "Gold",
|
||||||
"price": 1
|
"price": 1
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"mithril": {
|
"mithril": {
|
||||||
|
"index" : 7,
|
||||||
|
"name": "Mithril",
|
||||||
"price": 0
|
"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 "ResourceSet.h"
|
||||||
#include "constants/StringConstants.h"
|
#include "constants/StringConstants.h"
|
||||||
#include "serializer/JsonSerializeFormat.h"
|
#include "serializer/JsonSerializeFormat.h"
|
||||||
#include "mapObjects/CObjectHandler.h"
|
#include "entities/ResourceTypeHandler.h"
|
||||||
#include "GameLibrary.h"
|
#include "GameLibrary.h"
|
||||||
|
|
||||||
VCMI_LIB_NAMESPACE_BEGIN
|
VCMI_LIB_NAMESPACE_BEGIN
|
||||||
@@ -98,7 +98,7 @@ TResourceCap ResourceSet::marketValue() const
|
|||||||
{
|
{
|
||||||
TResourceCap total = 0;
|
TResourceCap total = 0;
|
||||||
for(int i = 0; i < GameConstants::RESOURCE_QUANTITY; i++)
|
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;
|
return total;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -20,7 +20,7 @@ VCMI_LIB_NAMESPACE_BEGIN
|
|||||||
|
|
||||||
std::string resources::ResourceType::getNameTextID() const
|
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
|
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)
|
void ResourceTypeHandler::loadObject(std::string scope, std::string name, const JsonNode & data)
|
||||||
{
|
{
|
||||||
objects.push_back(loadObjectImpl(scope, name, data, objects.size()));
|
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)
|
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
|
assert(objects[index] == nullptr); // ensure that this id was not loaded before
|
||||||
objects[index] = loadObjectImpl(scope, name, data, index);
|
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> ResourceTypeHandler::getAllObjects() const
|
||||||
{
|
{
|
||||||
std::vector<GameResID> result;
|
std::vector<GameResID> result;
|
||||||
|
|
||||||
for (const auto & school : objects)
|
for (const auto & resource : objects)
|
||||||
result.push_back(school->id);
|
result.push_back(resource->id);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@@ -21,13 +21,6 @@ VCMI_LIB_NAMESPACE_BEGIN
|
|||||||
|
|
||||||
CObjectHandler::CObjectHandler()
|
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
|
VCMI_LIB_NAMESPACE_END
|
||||||
|
@@ -19,8 +19,6 @@ class int3;
|
|||||||
class DLL_LINKAGE CObjectHandler
|
class DLL_LINKAGE CObjectHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::map<GameResID, ui32> resVals; //default values of resources in gold
|
|
||||||
|
|
||||||
CObjectHandler();
|
CObjectHandler();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -13,10 +13,10 @@
|
|||||||
|
|
||||||
#include "CCreatureHandler.h"
|
#include "CCreatureHandler.h"
|
||||||
#include "CGObjectInstance.h"
|
#include "CGObjectInstance.h"
|
||||||
#include "CObjectHandler.h"
|
|
||||||
|
|
||||||
#include "../GameLibrary.h"
|
#include "../GameLibrary.h"
|
||||||
#include "../entities/artifact/CArtHandler.h"
|
#include "../entities/artifact/CArtHandler.h"
|
||||||
|
#include "../entities/ResourceTypeHandler.h"
|
||||||
|
|
||||||
VCMI_LIB_NAMESPACE_BEGIN
|
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 effectiveness = std::min((getMarketEfficiency() + 1.0) / 20.0, 0.5);
|
||||||
|
|
||||||
double r = LIBRARY->objh->resVals[id1]; //value of given resource
|
double r = LIBRARY->resourceTypeHandler->getById(id1)->getPrice(); //value of given resource
|
||||||
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
|
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 effectiveness = effectivenessArray[std::min(getMarketEfficiency(), 8)];
|
||||||
|
|
||||||
double r = LIBRARY->creatures()->getByIndex(id1)->getRecruitCost(EGameResID::GOLD); //value of given creature in gold
|
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
|
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:
|
case EMarketMode::RESOURCE_ARTIFACT:
|
||||||
{
|
{
|
||||||
double effectiveness = std::min((getMarketEfficiency() + 3.0) / 20.0, 0.6);
|
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
|
double g = LIBRARY->artifacts()->getByIndex(id2)->getPrice() / effectiveness; //value of bought artifact in gold
|
||||||
|
|
||||||
if(id1 != 6) //non-gold prices are doubled
|
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 effectiveness = std::min((getMarketEfficiency() + 3.0) / 20.0, 0.6);
|
||||||
double r = LIBRARY->artifacts()->getByIndex(id1)->getPrice() * effectiveness;
|
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
|
// if(id2 != 6) //non-gold prices are doubled
|
||||||
// r /= 2;
|
// r /= 2;
|
||||||
|
Reference in New Issue
Block a user