找回密码
 register

QQ登录

只需一步,快速开始

查看: 3|回复: 0

[系统函数] DarkLevelUp 突破暗器瓶颈

[复制链接]

[系统函数] DarkLevelUp 突破暗器瓶颈

[复制链接]
  • 打卡等级:热心大叔
  • 打卡总天数:126
  • 打卡月天数:22
  • 打卡总奖励:125
  • 最近打卡:2025-02-27 22:46:00
Waylee

主题

0

回帖

1万

积分

仙帝

积分
14054
Waylee 2025-2-27 23:23 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?register

×

参考代码:

    --突破瓶颈,让暗器升级
    local bDarkLevelup = DarkLevelUp(sceneId, selfId);
    if (bDarkLevelup == 1) then
        x000034_ShowNotice(sceneId, selfId, targetId, "#{FBSJ_081209_18}");
        --突破成功,记录统计日志
            local guid = LuaFnObjId2Guid(sceneId, selfId);
            local sLog = format("dark level now: %d", nDarkLevel + 1); 
            ScriptGlobal_AuditGeneralLog(LUAAUDIT_ANQITUPO, guid, sLog);
    else
        x900001_PushDebugMessage(sceneId, selfId, "突破失败");
    end

IDA逻辑:

int __cdecl LuaFnDarkLevelUp(lua_State *L)
{
  int i; // ebx
  Scene_3 *Scene; // ebx
  Obj_Human *v3; // ebx
  Item *DarkItemEquiped; // eax
  const CHAR *v6; // [esp-14h] [ebp-44Ch]
  SceneManager_1 *const v7; // [esp-10h] [ebp-448h]
  const CHAR *v8; // [esp-10h] [ebp-448h]
  double v9; // [esp-Ch] [ebp-444h]
  Item *pDarkItem; // [esp+8h] [ebp-430h]
  unsigned int selfId; // [esp+Ch] [ebp-42Ch]
  SceneID_t sceneId; // [esp+10h] [ebp-428h]
  int bStudyNewSkill; // [esp+1Ch] [ebp-41Ch] BYREF
  char s[1048]; // [esp+20h] [ebp-418h] BYREF

  for ( i = 1; i <= 2; ++i )
  {
    if ( L )
    {
      if ( lua_isnumber((lua_State_0 *)L, i) == 1 )
        continue;
      snprintf(s, 0x200u, "ERROR: [%s]Param %d is illegal!", "LuaFnDarkLevelUp", i);
    }
    else
    {
      snprintf(s, 0x200u, "ERROR: [%s] Lua_State==NULL!", "LuaFnDarkLevelUp");
    }
    CacheLog(3, s);
  }
  sceneId = (__int16)lua_tonumber((lua_State_0 *)L, 1);
  selfId = (int)lua_tonumber((lua_State_0 *)L, 2);
  Scene = SceneManager::GetScene(v7, *(int *)&g_pSceneManager, sceneId);
  if ( !Scene )
  {
    v8 = "Scene ID ErrorLuaFnDarkLevelUp";
    v6 = "pScene";
LABEL_23:
    __assertex__("./Script/LuaFnTbl_Misc.h", 0x149Bu, "int LuaFnDarkLevelUp(lua_State*)", v6, v8);
  }
  if ( ThreadValueManager::GetCurrentThreadID() != Scene->m_ThreadID )
    __assertex__(
      "./Script/LuaFnTbl_Misc.h",
      0x149Bu,
      "int LuaFnDarkLevelUp(lua_State*)",
      "ThreadValueManager::GetCurrentThreadID()==pScene->m_ThreadID",
      "ThreadValueManager::GetCurrentThreadID()==pScene->m_ThreadIDLuaFnDarkLevelUp");
  if ( selfId > 0x752F || (v3 = (Obj_Human *)Scene->m_pObjManager->m_pObj[selfId]) == 0 )
  {
    v8 = "selfId ErrorLuaFnDarkLevelUp";
    v6 = "pObj";
    goto LABEL_23;
  }
  if ( (*((int (__cdecl **)(Obj_Human *))v3->_vptr_Obj + 2))(v3) == 1 )
  {
    if ( !Obj_Human::IsCanLogic(v3) )
      __assertex__(
        "./Script/LuaFnTbl_Misc.h",
        0x149Bu,
        "int LuaFnDarkLevelUp(lua_State*)",
        "pHuman->IsCanLogic()",
        "IsCanLogic() test return falseLuaFnDarkLevelUp");
    DarkItemEquiped = Obj_Human::GetDarkItemEquiped(v3);
    pDarkItem = DarkItemEquiped;
    if ( DarkItemEquiped
      && (bStudyNewSkill = 0, Item::CanDarkLevelupNow(DarkItemEquiped))
      && Item::DarkLevelup(pDarkItem, &bStudyNewSkill) )
    {
      Obj_Human::OnDarkLevelUpOK(v3, pDarkItem, bStudyNewSkill);
      HIDWORD(v9) = 1072693248;
    }
    else
    {
      HIDWORD(v9) = 0;
    }
    LODWORD(v9) = 0;
    lua_pushnumber((lua_State_0 *)L, v9);
  }
  else
  {
    lua_pushnumber((lua_State_0 *)L, -1.0);
  }
  return 1;
}
您需要登录后才可以回帖 登录 | register

本版积分规则

雪舞知识库 | 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 |天天打卡

GMT+8, 2025-2-28 03:56 , Processed in 0.119700 second(s), 7 queries , Redis On.

Powered by XueWu Licensed

Copyright © Tencent Cloud.

快速回复 返回顶部 返回列表