适用版本:逍遥子引擎
***付费内容***
IDA伪代码(经典地址:8037443 怀旧地址:8033127):
int __cdecl SetItemQual(lua_State_0 *L)
{
long double v1; // 用于存储物品的品质值
SceneManager *v2; // 存储场景管理器的指针
char v4; // 用于设置场景管理器的参数
_ITEM *m_pItem; // 存储物品的指针
Item *Item; // 存储物品结构体指针
Obj_Human *pHuman; // 存储人的对象(玩家/角色)
Scene *Scene; // 存储场景对象
int uBagIndex; // 背包中物品的索引
int v10; // 玩家(或对象)的 ID
// 获取 Lua 中传入的参数
lua_tonumber(L, 1); // 获取第一个参数,可能用于校验
v10 = (int)lua_tonumber(L, 2); // 获取第二个参数,代表玩家或对象的 ID
uBagIndex = (int)lua_tonumber(L, 3); // 获取第三个参数,物品的背包索引
v1 = lua_tonumber(L, 4); // 获取第四个参数,物品的品质值(`Qual`)
LOBYTE(v2) = v4; // 设置场景管理器的低字节为 v4
BYTE1(v2) = 12; // 设置场景管理器的次低字节为 12
// 进行一些条件判断,确保有效的玩家和物品
if ( v10 > 14999 && v10 <= 29999 &&
(Scene = SceneManager::GetScene(v2, SceneID), (int)Scene > 0) &&
(pHuman = (Obj_Human *)Scene->m_pObjManager->m_pObj[v10], (Item = HumanItemLogic::GetItem(pHuman, uBagIndex)) != 0) &&
(m_pItem = Item->m_pItem) != 0 )
{
// 如果条件成立,设置物品的品质(Qual)
m_pItem->_anon_1.m_Equip.m_Qual = (int)v1;
// 通知服务器物品属性变化
xyzServerNotifyEquipAttr(pHuman, uBagIndex, Item);
// 将成功结果推送到 Lua 栈中
lua_pushnumber(L, 1.0);
}
else
{
// 如果条件不成立,推送失败结果到 Lua 栈
lua_pushnumber(L, -1.0);
}
// 返回 1,表示有一个返回值
return 1;
}
剩余 16% 内容需要支付 2.00
金币 后可完整阅读
支持付费阅读,激励作者创作更好的作品。
|