mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-19 21:23:52 +00:00
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)
|
void AttributeValue::setBase(int base)
|
||||||
{
|
{
|
||||||
mBase = std::max(0, base);
|
mBase = base;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AttributeValue::setModifier(int mod)
|
void AttributeValue::setModifier(int mod)
|
||||||
|
|
|
@ -123,7 +123,7 @@ namespace MWScript
|
||||||
runtime.pop();
|
runtime.pop();
|
||||||
|
|
||||||
MWMechanics::AttributeValue attribute = ptr.getClass().getCreatureStats(ptr).getAttribute(mIndex);
|
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);
|
ptr.getClass().getCreatureStats(ptr).setAttribute(mIndex, attribute);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -148,7 +148,18 @@ namespace MWScript
|
||||||
.getCreatureStats(ptr)
|
.getCreatureStats(ptr)
|
||||||
.getAttribute(mIndex);
|
.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);
|
ptr.getClass().getCreatureStats(ptr).setAttribute(mIndex, attribute);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -350,12 +361,7 @@ namespace MWScript
|
||||||
|
|
||||||
MWMechanics::NpcStats& stats = ptr.getClass().getNpcStats (ptr);
|
MWMechanics::NpcStats& stats = ptr.getClass().getNpcStats (ptr);
|
||||||
|
|
||||||
int newLevel = value - (stats.getSkill(mIndex).getModified() - stats.getSkill(mIndex).getBase());
|
stats.getSkill (mIndex).setBase (value);
|
||||||
|
|
||||||
if (newLevel<0)
|
|
||||||
newLevel = 0;
|
|
||||||
|
|
||||||
stats.getSkill (mIndex).setBase (newLevel);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -375,10 +381,21 @@ namespace MWScript
|
||||||
Interpreter::Type_Integer value = runtime[0].mInteger;
|
Interpreter::Type_Integer value = runtime[0].mInteger;
|
||||||
runtime.pop();
|
runtime.pop();
|
||||||
|
|
||||||
MWMechanics::NpcStats& stats = ptr.getClass().getNpcStats(ptr);
|
MWMechanics::SkillValue &skill = ptr.getClass()
|
||||||
|
.getNpcStats(ptr)
|
||||||
|
.getSkill(mIndex);
|
||||||
|
|
||||||
stats.getSkill(mIndex).
|
if (value == 0)
|
||||||
setBase (std::min(100, stats.getSkill(mIndex).getBase() + value));
|
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