game2006/server/gameserver/attrhelper.cc
aozhiwei 4816e94a3d 1
2024-01-11 13:55:05 +08:00

66 lines
1.8 KiB
C++

#include "precompile.h"
#include <a8/magicenum.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);
float val = obj->Get("val", 0).GetDouble();
{
float* p = GetAttrAbsPtr(attr_abs, attr_id);
if (p) {
*p = val;
}
}
{
float* p = GetAttrRatePtr(attr_rate, attr_id);
if (p) {
*p = val;
}
}
}
}
}
return true;
}
std::string AttrHelper::GetAttrName(int attr_id)
{
if (IsValidHumanAttr(attr_id)) {
std::string name = a8::GetEnumName<HumanAttrType_e>(attr_id);
a8::ReplaceString(name, "kHAT_", "");
return name;
} else if (IsValidHumanVirtualAttr(attr_id)) {
std::string name = a8::GetEnumName<HumanVirtualAttrType_e>(attr_id);
a8::ReplaceString(name, "kHVAT_", "Virtual_");
return name;
} else {
return "None";
}
}