game2006/server/gameserver/attrhelper.cc
aozhiwei 6d43bec786 1
2022-09-09 11:07:14 +08:00

50 lines
1.3 KiB
C++

#include "precompile.h"
#include "attrhelper.h"
float* AttrHelper::GetAttrAbsPtr(std::array<float, kHAT_End>& attr, int attr_id)
{
if (!IsValidHumanAttr(attr_id)) {
return nullptr;
}
return &attr[attr_id];
}
float* AttrHelper::GetAttrRatePtr(std::array<float, kHAT_End>& attr, int attr_id)
{
if (!IsValidHumanAttr(attr_id)) {
return nullptr;
}
return &attr[attr_id];
}
bool AttrHelper::ParseAttr(std::shared_ptr<a8::XObject> xobj,
std::array<float, kHAT_End>& attr_abs,
std::array<float, kHAT_End>& attr_rate)
{
if (xobj->IsArray()) {
for (int i = 0; i < xobj->Size(); ++i) {
std::shared_ptr<a8::XObject> obj = xobj->At(i);
if (obj->IsObject()) {
int attr_id = obj->Get("attr_id", 0);
int type = obj->Get("type", 0);
int val = obj->Get("val", 0);
{
float* p = GetAttrAbsPtr(attr_abs, attr_id);
if (p) {
*p = val;
}
}
{
float* p = GetAttrRatePtr(attr_rate, attr_id);
if (p) {
*p = val;
}
}
}
}
}
return true;
}