***付费内容***
IDA伪代码(怀旧地址:8034735、经典地址:80392C2)
int __cdecl LuaFnMtl_GetCostNum(lua_State_0 *L)
{
long double v1; // 用于存储从 Lua 栈中获取的第一个参数
SceneManager *v2; // 存储场景管理器的指针
char v4; // 辅助变量,可能用于初始化场景管理器
int uItemIndex; // 用于存储从 Lua 栈获取的物品索引
int i; // 循环计数器
Obj_Human *pHuman; // 存储当前角色对象
Scene *Scene; // 存储当前场景对象
int v9; // 用于累计计算的物品数量
int v10; // 用于存储角色 ID(从 Lua 栈中获取)
// 从 Lua 栈中获取两个参数
lua_tonumber(L, 1); // 获取第一个参数,但未保存(没有使用)
v1 = lua_tonumber(L, 2); // 获取第二个参数,保存为 v1
// 初始化场景管理器的指针
LOBYTE(v2) = v4;
BYTE1(v2) = 12;
v10 = (int)v1; // 将参数 v1 转换为整数,作为角色 ID
v9 = 0; // 初始化物品数量计数器为 0
// 检查角色 ID 是否在有效范围(大于 14999 且小于等于 29999)
if ( (int)v1 > 14999 && v10 <= 29999 )
{
// 获取当前场景对象
Scene = SceneManager::GetScene(v2, SceneID);
// 检查场景是否有效
if ( (int)Scene > 0 )
{
// 获取角色对象(通过场景中的对象管理器)
pHuman = (Obj_Human *)Scene->m_pObjManager->m_pObj[v10];
// 检查角色对象是否有效
if ( (int)pHuman > 0 )
{
// 遍历 Lua 栈中的额外物品索引参数
for ( i = 1; i <= 8; ++i )
{
// 获取物品索引
uItemIndex = (int)lua_tonumber(L, i + 2);
// 如果物品索引大于等于 10000000,计算该物品的数量
if ( uItemIndex >= 10000000 )
v9 += HumanItemLogic::CalcBagItemUnLockCount(pHuman, uItemIndex);
}
}
}
// 将计算的物品数量推送到 Lua 栈
lua_pushnumber(L, (double)v9);
}
else
{
// 如果角色 ID 无效(不在有效范围内),推送 -1 返回给 Lua
lua_pushnumber(L, -1.0);
}
return 1; // 返回 1,表示 Lua 栈中有一个返回值(物品数量或错误标记)
}
***付费内容***
剩余 60% 内容需要支付 2.00
金币 后可完整阅读
支持付费阅读,激励作者创作更好的作品。
|