diff --git a/AllCallBack/AllCallBack.md b/AllCallBack/AllCallBack.md index 4c94b75..fd4d83a 100644 --- a/AllCallBack/AllCallBack.md +++ b/AllCallBack/AllCallBack.md @@ -42,101 +42,392 @@ Cb_User_Get_Item_Leave_Func.MyFunc <- function(args){ --- ->玩家新增道具时 ``` -Cb_User_Insert_Item_Enter_Func -Cb_User_Insert_Item_Leave_Func -``` ---- ->玩家捡起道具 -``` -Cb_User_Get_Item_Enter_Func -Cb_User_Get_Item_Leave_Func -``` ---- - ->服务器Chat日志HOOK -``` -Cb_Server_Chat_Log_Enter_Func -Cb_Server_Chat_Log_Leave_Func -``` ---- - ->玩家上线设置IP -``` -Cb_User_Set_WebAddress_Enter_Func -Cb_User_Set_WebAddress_Leave_Func -``` ---- - ->服务端关闭执行函数 -``` -Cb_Server_Close_Enter_Func -Cb_Server_Close_Leave_Func -``` ---- - ->检查地下城的状况 -``` -Cb_CheckInoutConditionDungeon_Enter_Func -Cb_CheckInoutConditionDungeon_Leave_Func -``` ---- - ->地下城现场杀死地狱党组怪物Cnt -``` -Cb_Field_KillHellPartyGroupMonsterCnt_Enter_Func -Cb_Field_KillHellPartyGroupMonsterCnt_Leave_Func -``` ---- - ->经验收益 -``` -Cb_Gain_Exp_Sp_Enter_Func -Cb_Gain_Exp_Sp_Leave_Func -``` ---- +//玩家新增道具时 +Cb_User_Insert_Item_Enter_Func <- {}; +Cb_User_Insert_Item_Leave_Func <- {}; +0x8502D86 ->货币收益 -``` -Cb_Gain_Money_Enter_Func -Cb_Gain_Money_Leave_Func -``` ---- +//玩家捡起道具 +Cb_User_Get_Item_Enter_Func <- {}; +Cb_User_Get_Item_Leave_Func <- {}; +0x85B949C ->GetItem检查错误 -``` -Cb_GetItem_Check_Error_Enter_Func -Cb_GetItem_Check_Error_Leave_Func -``` ---- +//服务器Chat日志HOOK +Cb_Server_Chat_Log_Enter_Func <- {}; +Cb_Server_Chat_Log_Leave_Func <- {}; +0x86C9638 ->队伍清除副本 -``` -Cb_ClearDungeon_Enter_Func -Cb_ClearDungeon_Leave_Func -``` ---- +//玩家上线设置IP +Cb_User_Set_WebAddress_Enter_Func <- {}; +Cb_User_Set_WebAddress_Leave_Func <- {}; +0x84EC918 ->检查选择进入副本时状态 -``` -Cb_SelectDungeon_Check_Error_Enter_Func -Cb_SelectDungeon_Check_Error_Leave_Func -``` ---- +//服务端关闭执行函数 +Cb_Server_Close_Enter_Func <- {}; +Cb_Server_Close_Leave_Func <- {}; +0x829F28B + +//检查地下城的状况 +Cb_CheckInoutConditionDungeon_Enter_Func <- {}; +Cb_CheckInoutConditionDungeon_Leave_Func <- {}; +0x85ABC80 + +//地下城现场杀死地狱党组怪物Cnt +Cb_Field_KillHellPartyGroupMonsterCnt_Enter_Func <- {}; +Cb_Field_KillHellPartyGroupMonsterCnt_Leave_Func <- {}; +0x830D704 + +//经验收益 +Cb_Gain_Exp_Sp_Enter_Func <- {}; +Cb_Gain_Exp_Sp_Leave_Func <- {}; +0x866A3FE + + +//货币收益 +Cb_Gain_Money_Enter_Func <- {}; +Cb_Gain_Money_Leave_Func <- {}; +0x84FF29C + +//GetItem检查错误 +Cb_GetItem_Check_Error_Enter_Func <- {}; +Cb_GetItem_Check_Error_Leave_Func <- {}; +0x81C35AC + +//队伍清除副本 +Cb_ClearDungeon_Enter_Func <- {}; +Cb_ClearDungeon_Leave_Func <- {}; +0x85a9330 + +//检查选择进入副本时状态 +Cb_SelectDungeon_Check_Error_Enter_Func <- {}; +Cb_SelectDungeon_Check_Error_Leave_Func <- {}; +0x81C7F32 + +//获取通关时间回调 +Cb_CParty_SetBestClearTime_Enter_Func <- {}; +Cb_CParty_SetBestClearTime_Leave_Func <- {}; +0x85BE178 + +//使用称号回收箱时检查使用条件 +Cb_UseLimitCube_Check_Error_Enter_Func <- {}; +Cb_UseLimitCube_Check_Error_Leave_Func <- {}; +0x081D3BBC + +//使用称号回收箱过程 +Cb_UseLimitCube_Process_Enter_Func <- {}; +Cb_UseLimitCube_Process_Leave_Func <- {}; +0x081D3D38 + +//购买商城物品时日志 +Cb_Log_BuyCashShopItem_Enter_Func <- {}; +Cb_Log_BuyCashShopItem_Leave_Func <- {}; +0x08686EA0 + +//购买道具获取信息 +Cb_BuyItem_Get_Data_Enter_Func <- {}; +Cb_BuyItem_Get_Data_Leave_Func <- {}; +0x81BE658 + +//设置角色详细信息 +Cb_Set_Charac_Info_Detail_Enter_Func <- {}; +Cb_Set_Charac_Info_Detail_Leave_Func <- {}; +0x0864AC1A + +//使用远古地下城道具 +Cb_UseAncientDungeonItems_Enter_Func <- {}; +Cb_UseAncientDungeonItems_Leave_Func <- {}; +0x859EAC2 + +//购买限时商品 +Cb_BuyCeraShopLimitItem_Enter_Func <- {}; +Cb_BuyCeraShopLimitItem_Leave_Func <- {}; +0x821F9BA + +//获取下次清除时间 +Cb_User_GetLastClearTime_Enter_Func <- {}; +Cb_User_GetLastClearTime_Leave_Func <- {}; +0x0864387E + +//每日可交易金币上限 +Cb_User_CharacInfo_IsAvailableCurCharacTradeGoldDaily_Enter_Func <- {}; +Cb_User_CharacInfo_IsAvailableCurCharacTradeGoldDaily_Leave_Func <- {}; +0x08646496 + +//进入副本加载完毕时 +Cb_Party_OnStartMapFinishLoading_Enter_Func <- {}; +Cb_Party_OnStartMapFinishLoading_Leave_Func <- {}; +0x085B170A + +//房间清理完毕 +Cb_Battle_Field_onClearMap_Enter_Func <- {}; +Cb_Battle_Field_onClearMap_Leave_Func <- {}; +0x0830DD2C + +//放弃副本 +Cb_Party_giveup_game_Enter_Func <- {}; +Cb_Party_giveup_game_Leave_Func <- {}; +0x085B2BAA + +//迷妄之塔 死亡之塔通关时 +Cb_CDeathTower_onClear_Enter_Func <- {}; +Cb_CDeathTower_onClear_Leave_Func <- {}; +0x08467E60 + +//无尽祭坛通关时 +Cb_CBloodClearRewardData_Enter_Func <- {}; +Cb_CBloodClearRewardData_Leave_Func <- {}; +0x08306FC4 + +//进入迷妄之塔 死亡之塔时 +Cb_DeathTowerStageCommand_Enter_Func <- {}; +Cb_DeathTowerStageCommand_Leave_Func <- {}; +0x08208A9E + +//离开迷妄之塔 死亡之塔时 +Cb_CDeathTower_onLeaveUser_Enter_Func <- {}; +Cb_CDeathTower_onLeaveUser_Leave_Func <- {}; +0x084636F2 + +//玩家交易过程 +Cb_TradeSpace_proceed_trade_Enter_Func <- {}; +Cb_TradeSpace_proceed_trade_Leave_Func <- {}; +0x0853087A + +//发送多物品邮件 +Cb_MultiMailBoxReqSend_Enter_Func <- {}; +Cb_MultiMailBoxReqSend_Leave_Func <- {}; +0x084E27B8 + +//发送单物品邮件 +Cb_MailBox_Send_Enter_Func <- {}; +Cb_MailBox_Send_Leave_Func <- {}; +0x081CC958 + +//发送金币邮件时是否通过验证 +Cb_checkHumanCertify_Enter_Func <- {}; +Cb_checkHumanCertify_Leave_Func <- {}; +0x0867F4C8 + +//摆摊购买 +Cb_CPrivateStore_BuyItem_Enter_Func <- {}; +Cb_CPrivateStore_BuyItem_Leave_Func <- {}; +0x085C924C + +//拍卖行上架 +Cb_AuctionResultAskRegistedItemNum_Enter_Func <- {}; +Cb_AuctionResultAskRegistedItemNum_Leave_Func <- {}; +0x084D5930 + +//拍卖行购买物品 +Cb_AuctionLogMessage_Enter_Func <- {}; +Cb_AuctionLogMessage_Leave_Func <- {}; +0x084D7A90 + +//副本内生成物品时 +Cb_Battle_Field_MakeDropItems_Enter_Func <- {}; +Cb_Battle_Field_MakeDropItems_Leave_Func <- {}; +0x0830ADF6 + +//独立掉落几率 +Cb_IndependentItemRateControl_Enter_Func <- {}; +Cb_IndependentItemRateControl_Leave_Func <- {}; +0x0834972F + +//黑钻机添加物品到User时 +Cb_UseVendingMachine_putItemIntoUser_Enter_Func <- {}; +Cb_UseVendingMachine_putItemIntoUser_Leave_Func <- {}; +0x0821B71C + + +//查看信息 +Cb_GetUserInfo_Enter_Func <- {}; +Cb_GetUserInfo_Leave_Func <- {}; +0x081C3DD8 + + +//初始化技能过程 +Cb_SkillInit_process_skill_Enter_Func <- {}; +Cb_SkillInit_process_skill_Leave_Func <- {}; +0x081E5BDC + +//转职 +Cb_User_set_grow_Enter_Func <- {}; +Cb_User_set_grow_Leave_Func <- {}; +0x086787FC + +//使用特殊道具时 +Cb_User_increase_status_Enter_Func <- {}; +Cb_User_increase_status_Leave_Func <- {}; +0x86657FC + +//更新物品 +Cb_User_SendUpdateItem_Enter_Func <- {}; +Cb_User_SendUpdateItem_Leave_Func <- {}; +0x0867C2D8 + +//幸运值获取装备品级 +Cb_LuckPoint_GetItemRarity_Enter_Func <- {}; +Cb_LuckPoint_GetItemRarity_Leave_Func <- {}; +0x08550BE4 + +//添加时装到背包 +Cb_Inventory_AddAvatarItem_Enter_Func <- {}; +Cb_Inventory_AddAvatarItem_Leave_Func <- {}; +0x08509B9E + +//是否开启潜能 +Cb_Item_IsHiddenOption_Enter_Func <- {}; +Cb_Item_IsHiddenOption_Leave_Func <- {}; +0x0817EDEC + +//返回1关闭商店回购 +Cb_Item_IsBanRedeemItem_Enter_Func <- {}; +Cb_Item_IsBanRedeemItem_Leave_Func <- {}; +0x085F7BE0 + +//副本内队伍加载完毕时 +Cb_CParty_finish_loading_Enter_Func <- {}; +Cb_CParty_finish_loading_Leave_Func <- {}; +0x085B15E0 + +//检查删除角色时间 返回1则可立马删除新建角色 +Cb_User_CheckDeleteCharacTime_Enter_Func <- {}; +Cb_User_CheckDeleteCharacTime_Leave_Func <- {}; +0x0864A830 + +//忽略在副本门口禁止摆摊 +Cb_CPrivateStore_IsAreaNearEntranceDungeon_Enter_Func <- {}; +Cb_CPrivateStore_IsAreaNearEntranceDungeon_Leave_Func <- {}; +0x085C5082 + +//解除每日创建角色数量限制 +Cb_CreateCharac_CheckLimitCreateNewCharac_Enter_Func <- {}; +Cb_CreateCharac_CheckLimitCreateNewCharac_Leave_Func <- {}; +0x08401922 + +//脱离公会时 +Cb_MonitorNoticeGuildSecede_dispatch_Enter_Func <- {}; +Cb_MonitorNoticeGuildSecede_dispatch_Leave_Func <- {}; +0x084C957E + + +//击杀怪物攻城怪物 +Cb_CVillageMonster_OnKillVillageMonster_Enter_Func <- {}; +Cb_CVillageMonster_OnKillVillageMonster_Leave_Func <- {}; +0x086B34A0 + +//挑战攻城怪物副本结束事件, 更新怪物攻城活动各阶段状态 +Cb_CVillageMonster_SendVillageMonsterFightResult_Enter_Func <- {}; +Cb_CVillageMonster_SendVillageMonsterFightResult_Leave_Func <- {}; +0x086B330A + +//刷新攻城怪物函数, 控制下一只刷新的攻城怪物id +Cb_CVillageMonsterArea_GetAttackedMonster_Enter_Func <- {}; +Cb_CVillageMonsterArea_GetAttackedMonster_Leave_Func <- {}; +0x086B3AEA + +//正在挑战的攻城怪物 +Cb_CVillageMonster_OnFightVillageMonster_Enter_Func <- {}; +Cb_CVillageMonster_OnFightVillageMonster_Leave_Func <- {}; +0x086B3240 + +//副本刷怪函数 控制副本内怪物的数量和属性 +Cb_MapInfo_Add_Mob_Enter_Func <- {}; +Cb_MapInfo_Add_Mob_Leave_Func <- {}; +0x08151612 + +//怪物攻城通关时获得经验 +Cb_CVillageMonsterMgr_OnKillVillageMonster_Enter_Func <- {}; +Cb_CVillageMonsterMgr_OnKillVillageMonster_Leave_Func <- {}; +0x086B4866 + +//玩家使用复活币 +Cb_UseCoin_Enter_Func <- {}; +Cb_UseCoin_Leave_Func <- {}; +0x81CA852 + +//玩家完成任务 +Cb_fnStatQuestClear_Enter_Func <- {}; +Cb_fnStatQuestClear_Leave_Func <- {}; +0x8664412 + +//深渊派对开始时 +Cb_HellPartyStart_dispatch_Enter_Func <- {}; +Cb_HellPartyStart_dispatch_Leave_Func <- {}; +0x821D9A6 + +//获取道具日志 +Cb_UserHistoryLog_ItemAdd_Enter_Func <- {}; +Cb_UserHistoryLog_ItemAdd_Leave_Func <- {}; +0x8682E84 + +//获取绝望之塔进入次数 +Cb_TOD_UserState_getEnterCount_Enter_Func <- {}; +Cb_TOD_UserState_getEnterCount_Leave_Func <- {}; +0x8643872 + + +//掉落道具 +Cb_GetItemRarity_Enter_Func <- {}; +Cb_GetItemRarity_Leave_Func <- {}; +0x8550BE4 + +//怪物死亡爆奖励的时候 +Cb_dispatch_sig_Enter_Func <- {}; +Cb_dispatch_sig_Leave_Func <- {}; +0x81EB0C4 + +//装备解锁动作 +Cb_CItemLock_DoItemUnlock_Enter_Func <- {}; +Cb_CItemLock_DoItemUnlock_Leave_Func <- {}; +0x854231A + +//丢弃物品检查错误 +Cb_DropItem_check_error_Enter_Func <- {}; +Cb_DropItem_check_error_Leave_Func <- {}; +0x81C2D9A + +//城镇瞬移 +Cb_GameWorld_move_area_Enter_Func <- {}; +Cb_GameWorld_move_area_Leave_Func <- {}; +0x086C5A84 + + +//称号回包 +Cb_CTitleBook_putItemData_Enter_Func <- {}; +Cb_CTitleBook_putItemData_Leave_Func <- {}; +0x08641A6A + +//设计图继承 +Cb_CUsercopyItemOption_Enter_Func <- {}; +Cb_CUsercopyItemOption_Leave_Func <- {}; +0x08671EB2 + + +//装备开孔 +Cb_AddSocketToAvatar_Enter_Func <- {}; +Cb_AddSocketToAvatar_Leave_Func <- {}; +0x0821A412 + +//装备镶嵌和时装镶嵌 +Cb_Dispatcher_UseJewel_Enter_Func <- {}; +Cb_Dispatcher_UseJewel_Leave_Func <- {}; +0x8217BD6 + +//额外数据包,发送装备镶嵌数据给本地处理 +Cb_InterfacePacketBuf_put_packet_Enter_Func <- {}; +Cb_InterfacePacketBuf_put_packet_Leave_Func <- {}; +0x0815098e + + +//额外数据包,发送装备镶嵌数据给本地处理 +Cb_PacketBuf_get_short_Enter_Func <- {}; +Cb_PacketBuf_get_short_Leave_Func <- {}; +0x0858D0B0 ->切换装备 -``` -Cb_CInventory_ChangeEquip_Enter_Func -Cb_CInventory_ChangeEquip_Leave_Func -``` ---- ->获取通关时间回调 -``` -Cb_CParty_SetBestClearTime_Enter_Func -Cb_CParty_SetBestClearTime_Leave_Func ``` --- \ No newline at end of file diff --git a/Object/GameManager/GameManager.md b/Object/GameManager/GameManager.md index 6a3cc35..962658d 100644 --- a/Object/GameManager/GameManager.md +++ b/Object/GameManager/GameManager.md @@ -84,3 +84,9 @@ - `function Fix14Skill()` --- + + +## 十三、修复拍卖行消耗品上架 +### 函数签名 +- `function Fix_Auction_Regist_Item()` +--- diff --git a/Start/Example/16.md b/Start/Example/16.md new file mode 100644 index 0000000..9fa6eaf --- /dev/null +++ b/Start/Example/16.md @@ -0,0 +1,100 @@ +## 仓库材料一键入库 (贡献者: 倾泪寒) + +> 首先我们先在dp_s文件夹中建立一个项目文件夹 MyProject 方便管理 + +![Alt text](../../image/6.png) + +> 然后我们建立一个新文件 仓库材料一键入库.nut 用于编写我们的代码 + +> 然后我们在仓库材料一键入库.nut中写入以下代码 + +``` +/* +文件名:一键入库.nut +路径:MyProject/一键入库.nut +创建日期:2025-03-25 14:42 +文件用途:一键入库 +*/ +//获取金库 +function User::GetCharacCargo() { + return Sq_CallFunc(S_Ptr("0x008151A94"), "pointer", ["pointer"], this.C_Object); +} + +//检查金库是否有指定ID道具 +function CharacCargo_Check_Item_Exist(Cargo_C_Object, ItemId) { + return Sq_CallFunc(S_Ptr("0x0850BC14"), "int", ["pointer", "int"], Cargo_C_Object, ItemId); +} + +//检查物上限品堆叠 +function Check_Item_Stack(ItemId, ItemCount) { + return Sq_CallFunc(S_Ptr("0x08501A79"), "int", ["int", "int"], ItemId, ItemCount); +} + +//将物品存入仓库 +function CharacCargo_Insert_Item(Cargo_C_Object, Item_C_Object) { + return Sq_CallFunc(S_Ptr("0x0850B400"), "int", ["pointer", "pointer"], Cargo_C_Object, Item_C_Object); +} + +Gm_InputFunc_Handle.AAWW <- function(SUser, CmdString) { + //获取金库 + local Cargo_C_Object = SUser.GetCharacCargo(); + //获取背包 + local InvenObj = SUser.GetInven(); + + // 物品槽范围: 57-152 (材料、消耗品栏) + local INVENTORY_SLOT_START = 57; + local INVENTORY_SLOT_END = 152; + + local anyItemInserted = false; // 标志变量,用于跟踪是否有物品被成功插入 + + for (local slot = INVENTORY_SLOT_START; slot <= INVENTORY_SLOT_END; slot++) { + local ItemObject = InvenObj.GetSlot(1, slot); + local ItemId = ItemObject.GetIndex(); + local ItemName = PvfItem.GetNameById(ItemId); + + // 如果物品ID无效,跳过当前循环 + if (ItemId <= 0) continue; + local CheckFlag = CharacCargo_Check_Item_Exist(Cargo_C_Object, ItemId); + // 如果仓库中没有该物品,跳过 + if (CheckFlag == -1) continue; + + local Cargo_M_Object = NativePointer(Cargo_C_Object); + // 获取仓库中对应物品的指针和数量 + local CargoItemPointer = NativePointer(Cargo_M_Object.add(4).readPointer()).add(61 * CheckFlag).readPointer(); + local CargoItem = Item(CargoItemPointer); + local CargoItemId = NativePointer(Cargo_M_Object.add(4).readPointer()).add(61 * CheckFlag + 2).readU32(); + //仓库中的数量 + local CargoItemCount = CargoItem.GetAdd_Info() ? CargoItem.GetAdd_Info() : 1; + //背包中的数量 + local InventoryItemCount = ItemObject.GetAdd_Info(); + + //检查物品堆叠是否超过上限 + local CanStack = Check_Item_Stack(ItemId, InventoryItemCount + CargoItemCount); + if (CanStack == 0) { + SUser.SendNotiPacketMessage("[ " + ItemName + " ]" + "超过堆叠上限,无法放入", 8); + continue; + } + + // 将物品存入仓库 + local InsertResult = CharacCargo_Insert_Item(Cargo_C_Object, ItemObject.C_Object); + if(InsertResult >= 0){ + SUser.SendNotiPacketMessage("[ " + ItemName + " ]" + "成功入库 x " + InventoryItemCount, 8); + InvenObj.DeleteItemCount(ItemId,InventoryItemCount); + SUser.SendUpdateItemList(1,0,slot); + } + } + + //更新仓库 + SUser.SendItemSpace(2); +}; +``` + + + +> 最后我们回到dp_s文件夹中,打开Main.nut 加载我们刚才编写的逻辑 如果你已经开启过数据库连接池则不需要初始化数据库连接池的代码 + +``` +sq_RunScript("MyProject/仓库材料一键入库.nut"); +``` + +> 至此一个简单的仓库材料一键入库的逻辑就写完了 \ No newline at end of file diff --git a/_sidebar.md b/_sidebar.md index fd5b113..5d6c322 100644 --- a/_sidebar.md +++ b/_sidebar.md @@ -19,6 +19,7 @@ - [副本难度解锁](Start/Example/13.md) - [反外挂](Start/Example/14.md) - [装备和时装镶嵌](Start/Example/15.md) + - [仓库材料一键入库](Start/Example/16.md) * [API文档](/) - [对象类](/) - [User 类](Object/User/User.md)