forked from mirror/openmw-tes3mp
Merge pull request #1230 from Allofich/stats
Change bounds behavior of stat script commands
This commit is contained in:
commit
02c6c1897e
2 changed files with 29 additions and 12 deletions
|
@ -189,7 +189,7 @@ namespace MWMechanics
|
|||
|
||||
void AttributeValue::setBase(int base)
|
||||
{
|
||||
mBase = std::max(0, base);
|
||||
mBase = base;
|
||||
}
|
||||
|
||||
void AttributeValue::setModifier(int mod)
|
||||
|
|
|
@ -123,7 +123,7 @@ namespace MWScript
|
|||
runtime.pop();
|
||||
|
||||
MWMechanics::AttributeValue attribute = ptr.getClass().getCreatureStats(ptr).getAttribute(mIndex);
|
||||
attribute.setBase (value - (attribute.getModified() - attribute.getBase()));
|
||||
attribute.setBase (value);
|
||||
ptr.getClass().getCreatureStats(ptr).setAttribute(mIndex, attribute);
|
||||
}
|
||||
};
|
||||
|
@ -148,7 +148,18 @@ namespace MWScript
|
|||
.getCreatureStats(ptr)
|
||||
.getAttribute(mIndex);
|
||||
|
||||
attribute.setBase (std::min(100, attribute.getBase() + value));
|
||||
if (value == 0)
|
||||
return;
|
||||
|
||||
if (((attribute.getBase() <= 0) && (value < 0))
|
||||
|| ((attribute.getBase() >= 100) && (value > 0)))
|
||||
return;
|
||||
|
||||
if (value < 0)
|
||||
attribute.setBase(std::max(0, attribute.getBase() + value));
|
||||
else
|
||||
attribute.setBase(std::min(100, attribute.getBase() + value));
|
||||
|
||||
ptr.getClass().getCreatureStats(ptr).setAttribute(mIndex, attribute);
|
||||
}
|
||||
};
|
||||
|
@ -350,12 +361,7 @@ namespace MWScript
|
|||
|
||||
MWMechanics::NpcStats& stats = ptr.getClass().getNpcStats (ptr);
|
||||
|
||||
int newLevel = value - (stats.getSkill(mIndex).getModified() - stats.getSkill(mIndex).getBase());
|
||||
|
||||
if (newLevel<0)
|
||||
newLevel = 0;
|
||||
|
||||
stats.getSkill (mIndex).setBase (newLevel);
|
||||
stats.getSkill (mIndex).setBase (value);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -375,10 +381,21 @@ namespace MWScript
|
|||
Interpreter::Type_Integer value = runtime[0].mInteger;
|
||||
runtime.pop();
|
||||
|
||||
MWMechanics::NpcStats& stats = ptr.getClass().getNpcStats(ptr);
|
||||
MWMechanics::SkillValue &skill = ptr.getClass()
|
||||
.getNpcStats(ptr)
|
||||
.getSkill(mIndex);
|
||||
|
||||
stats.getSkill(mIndex).
|
||||
setBase (std::min(100, stats.getSkill(mIndex).getBase() + value));
|
||||
if (value == 0)
|
||||
return;
|
||||
|
||||
if (((skill.getBase() <= 0) && (value < 0))
|
||||
|| ((skill.getBase() >= 100) && (value > 0)))
|
||||
return;
|
||||
|
||||
if (value < 0)
|
||||
skill.setBase(std::max(0, skill.getBase() + value));
|
||||
else
|
||||
skill.setBase(std::min(100, skill.getBase() + value));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue