mirror of
https://github.com/glest/glest-source.git
synced 2025-08-23 00:12:49 +02:00
- fixed to handle duplicate resources in unit requirement costs without crashing
This commit is contained in:
@@ -468,11 +468,11 @@ void Faction::applyDiscount(const ProducibleType *p, int discount)
|
|||||||
void Faction::applyStaticCosts(const ProducibleType *p) {
|
void Faction::applyStaticCosts(const ProducibleType *p) {
|
||||||
assert(p != NULL);
|
assert(p != NULL);
|
||||||
//decrease static resources
|
//decrease static resources
|
||||||
for(int i=0; i<p->getCostCount(); ++i) {
|
for(int i=0; i < p->getCostCount(); ++i) {
|
||||||
const ResourceType *rt= p->getCost(i)->getType();
|
const ResourceType *rt= p->getCost(i)->getType();
|
||||||
//assert(rt != NULL);
|
//assert(rt != NULL);
|
||||||
if(rt == NULL) {
|
if(rt == NULL) {
|
||||||
throw runtime_error("rt == NULL - " + p->getName());
|
throw runtime_error(string(__FUNCTION__) + " rt == NULL for ProducibleType [" + p->getName() + "] index: " + intToStr(i));
|
||||||
}
|
}
|
||||||
if(rt->getClass() == rcStatic) {
|
if(rt->getClass() == rcStatic) {
|
||||||
int cost= p->getCost(i)->getAmount();
|
int cost= p->getCost(i)->getAmount();
|
||||||
|
@@ -363,6 +363,9 @@ void UnitType::load(int id,const string &dir, const TechTree *techTree,
|
|||||||
int amount= resourceNode->getAttribute("amount")->getIntValue();
|
int amount= resourceNode->getAttribute("amount")->getIntValue();
|
||||||
sortedItems[name] = amount;
|
sortedItems[name] = amount;
|
||||||
}
|
}
|
||||||
|
if(sortedItems.size() < costs.size()) {
|
||||||
|
costs.resize(sortedItems.size());
|
||||||
|
}
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for(std::map<string,int>::iterator iterMap = sortedItems.begin();
|
for(std::map<string,int>::iterator iterMap = sortedItems.begin();
|
||||||
iterMap != sortedItems.end(); ++iterMap) {
|
iterMap != sortedItems.end(); ++iterMap) {
|
||||||
@@ -380,6 +383,10 @@ void UnitType::load(int id,const string &dir, const TechTree *techTree,
|
|||||||
int amount= resourceNode->getAttribute("amount")->getIntValue();
|
int amount= resourceNode->getAttribute("amount")->getIntValue();
|
||||||
sortedItems[name] = amount;
|
sortedItems[name] = amount;
|
||||||
}
|
}
|
||||||
|
if(sortedItems.size() < storedResources.size()) {
|
||||||
|
storedResources.resize(sortedItems.size());
|
||||||
|
}
|
||||||
|
|
||||||
index = 0;
|
index = 0;
|
||||||
for(std::map<string,int>::iterator iterMap = sortedItems.begin();
|
for(std::map<string,int>::iterator iterMap = sortedItems.begin();
|
||||||
iterMap != sortedItems.end(); ++iterMap) {
|
iterMap != sortedItems.end(); ++iterMap) {
|
||||||
|
Reference in New Issue
Block a user