找回密码
 register

QQ登录

只需一步,快速开始

查看: 71|回复: 0

副武器七情刃打造转移可以无限复制雕纹的解决方案

[复制链接]

副武器七情刃打造转移可以无限复制雕纹的解决方案

[复制链接]
  • 打卡等级:热心大叔
  • 打卡总天数:94
  • 打卡月天数:17
  • 打卡总奖励:94
  • 最近打卡:2025-01-18 01:28:20
Waylee

主题

0

回帖

1万

积分

仙帝

积分
11929
Waylee 2024-12-14 18:18 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

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

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

×

适用版本:大仓库引擎
脚本作者:小皇子
修复作者:雪舞
问题编号:XUEWU-CSX-038


问题视频



问题描述:
在大理(230,103)处进行打造转移,可以把雕纹信息一起复制到另外的七情刃装备上。就可以无限复制雕纹了。导致全部新的七情刃全部都是雕纹。
转移前的两个装备
源装备创建者信息1:083811870FB20F00690F00730F007D0F&DWA02000
新装备创建者信息2:013A115210B20F005E11006811007211

转换前

转换前

转换前

转换前

第一次转移后
源装备创建者信息1:013811870FB20F00690F00730F007D0F&DWA02000
新装备创建者信息2:083811870FB20F00690F00730F007D0F

转换后

转换后

转换后

转换后

可以看到装备信息中的雕纹信息没有被转移。
第二次转移后
源装备创建者信息1:083811870FB20F00690F00730F007D0F&DWA02000
新装备创建者信息2:013A115210B20F005E11006811007211&DWA02000
可以看到两个装备都有雕纹了。

[md]

解决方案

***付费内容***

IDA伪代码

int __cdecl LuaFnShenBingTransition(lua_State_0 *L)
{
  long double v1; // fst7
  SceneManager_1 *v2; // eax
  UINT v3; // eax
  UINT v4; // eax
  int v5; // eax
  int v6; // eax
  char v8; // [esp+6h] [ebp-A2h]
  int j; // [esp+8h] [ebp-A0h]
  int k; // [esp+8h] [ebp-A0h]
  unsigned int i; // [esp+Ch] [ebp-9Ch]
  CHAR v12[16]; // [esp+10h] [ebp-98h] BYREF
  CHAR pOut[16]; // [esp+20h] [ebp-88h] BYREF
  UINT pIn[17]; // [esp+30h] [ebp-78h] BYREF
  int v15; // [esp+74h] [ebp-34h]
  _ITEM *v16; // [esp+78h] [ebp-30h]
  _ITEM *m_pItem; // [esp+7Ch] [ebp-2Ch]
  Item *v18; // [esp+80h] [ebp-28h]
  Item *Item; // [esp+84h] [ebp-24h]
  Obj_Human *pHuman; // [esp+88h] [ebp-20h]
  Scene_3 *Scene; // [esp+8Ch] [ebp-1Ch]
  UINT v22; // [esp+90h] [ebp-18h]
  UINT uBagIndex; // [esp+94h] [ebp-14h]
  int v24; // [esp+98h] [ebp-10h]
  int v25; // [esp+9Ch] [ebp-Ch]

  v25 = (int)lua_tonumber(L, 1);
  v24 = (int)lua_tonumber(L, 2);
  uBagIndex = (int)lua_tonumber(L, 3);
  v1 = lua_tonumber(L, 4);
  LOBYTE(v2) = v8;
  BYTE1(v2) = 12;
  v22 = (int)v1;
  if ( v24 > 14999 && v24 <= 29999 )
  {
    Scene = SceneManager::GetScene(v2, SceneID);
    if ( (int)Scene > 0 )
    {
      pHuman = (Obj_Human *)Scene->m_pObjManager->m_pObj[v24];
      if ( (int)pHuman > 0 && uBagIndex <= 0x64 && v22 <= 0x64 )
      {
        Item = HumanItemLogic::GetItem(pHuman, uBagIndex);
        v18 = HumanItemLogic::GetItem(pHuman, v22);
        if ( Item )
        {
          if ( v18 )
          {
            m_pItem = Item->m_pItem;
            v16 = v18->m_pItem;
            v15 = 0;
            memset(pIn, 0, 0x3Au);
            sub_804AE40(pIn, "%s", m_pItem->m_Creator);
            v3 = sub_7FF6AC3(pIn);
            DBStr2Binary((const CHAR *)pIn, v3, pOut, 0x10u, pIn);
            sub_804AE40(pIn, "%s", v16->m_Creator);
            v4 = sub_7FF6AC3(pIn);
            DBStr2Binary((const CHAR *)pIn, v4, v12, 0x10u, pIn);
            for ( i = 0; i < *(_DWORD *)dword_22B63A2C; ++i )
            {
              if ( *(_DWORD *)(dword_22B63A2C + 52 * i + 4) == m_pItem->m_ItemIndex )
              {
                v12[0] = pOut[0];
                pOut[0] = 1;
                for ( j = 0; j <= 2; ++j )
                {
                  *(_WORD *)&v12[2 * j + 1] = *(_WORD *)&pOut[2 * j + 1];
                  *(_WORD *)&pOut[2 * j + 1] = *(_WORD *)(dword_22B63A2C + 2 * (j + 26 * i) + 26);
                }
                for ( k = 0; k <= 2; ++k )
                {
                  v12[3 * k + 7] = pOut[3 * k + 7];
                  *(_WORD *)&v12[3 * k + 8] = *(_WORD *)&pOut[3 * k + 8];
                  pOut[3 * k + 7] = 0;
                  *(_WORD *)&pOut[3 * k + 8] = *(_WORD *)(dword_22B63A2C + 2 * (k + 26 * i) + 32);
                }
                Binary2String(pOut, 0x10u, (CHAR *)pIn);
                v5 = sub_7FF6AC3(pIn);
                sub_804AD80(&m_pItem->m_DarksInfo, pIn, v5);
                m_pItem->m_Creator[57] = 0;
                _ITEM::SetCreatorVar(m_pItem, 1);
                Binary2String(v12, 0x10u, (CHAR *)pIn);
                v6 = sub_7FF6AC3(pIn);
                sub_804AD80(&v16->m_DarksInfo, pIn, v6);
                v16->m_Creator[57] = 0;
                _ITEM::SetCreatorVar(v16, 1);
                lua_pushnumber(L, 1.0);
                return 1;
              }
            }
          }
        }
      }
    }
    lua_pushnumber(L, -1.0);
  }
  else
  {
    lua_pushnumber(L, -1.0);
  }
  return 1;
}
付费看帖
剩余 27% 内容需要支付 300.00 金币 后可完整阅读
支持付费阅读,激励作者创作更好的作品。
您需要登录后才可以回帖 登录 | register

本版积分规则

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

GMT+8, 2025-1-18 15:48 , Processed in 0.127665 second(s), 8 queries , Redis On.

Powered by XueWu Licensed

Copyright © Tencent Cloud.

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