背包扩展到 5 页:服务端补丁 + DB 迁移 + 客户端 mt_inventory

- GameType.h: c_Inventory_Page_Count 2 -> 5; SQuickSlot.Position BYTE -> WORD
- quickslot 包/接口 pos 改为 WORD(CG/GC 5 字节),wire_classic 同步
- mt_inventory PORT 模块:inventorywindow.py 装备格 90 -> EQUIPMENT_SLOT_START 重映射、5 个小页签、
  自动药水高亮与 SelectItemWindow 扫描全部 5 页;40250 脚本保持不变
- tools/server/inventory-5-pages: server.patch(格子布局 +135、quickslot WORD)、migrate_db.py、README

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
shenlei
2026-09-29 22:37:44 +09:00
co-authored by Claude Opus 5.5
parent 22d534c5eb
commit e33e41c12b
13 changed files with 724 additions and 15 deletions
+1 -1
View File
@@ -41,7 +41,7 @@ class IAbstractPlayer : public TAbstractSingleton<IAbstractPlayer>
virtual bool IsEquipItemInSlot(TItemPos itemPos) = 0;
virtual void AddQuickSlot(int QuickslotIndex, char IconType, char IconPosition) = 0;
virtual void AddQuickSlot(int QuickslotIndex, char IconType, WORD IconPosition) = 0;
virtual void DeleteQuickSlot(int QuickslotIndex) = 0;
virtual void MoveQuickSlot(int Source, int Target) = 0;
+2 -2
View File
@@ -38,7 +38,7 @@ const DWORD c_FileName_Max_Length = 128;
const DWORD c_Short_Name_Max_Length = 32;
const DWORD c_Inventory_Page_Size = 5*9; // x*y
const DWORD c_Inventory_Page_Count = 2;
const DWORD c_Inventory_Page_Count = 5; // PORT: 2 in 40250; the 203 server patch widens the bag to 5 pages (tools/server/inventory-5-pages)
const DWORD c_ItemSlot_Count = c_Inventory_Page_Size * c_Inventory_Page_Count;
const DWORD c_Equipment_Count = 12;
@@ -306,7 +306,7 @@ enum
typedef struct SQuickSlot
{
BYTE Type;
BYTE Position;
WORD Position; // PORT: BYTE in 40250; cells past 255 once the bag has 5 pages
} TQuickSlot;
typedef struct TPlayerItemAttribute
+1 -1
View File
@@ -155,7 +155,7 @@ class CPythonNetworkStream : public CNetworkStream, public CSingleton<CPythonNet
bool SendItemMovePacket(TItemPos pos, TItemPos change_pos, BYTE num);
bool SendItemPickUpPacket(DWORD vid);
bool SendQuickSlotAddPacket(BYTE wpos, BYTE type, BYTE pos);
bool SendQuickSlotAddPacket(BYTE wpos, BYTE type, WORD pos);
bool SendQuickSlotDelPacket(BYTE wpos);
bool SendQuickSlotMovePacket(BYTE wpos, BYTE change_pos);
@@ -705,7 +705,7 @@ bool CPythonNetworkStream::SendItemPickUpPacket(DWORD vid)
}
bool CPythonNetworkStream::SendQuickSlotAddPacket(BYTE wpos, BYTE type, BYTE pos)
bool CPythonNetworkStream::SendQuickSlotAddPacket(BYTE wpos, BYTE type, WORD pos)
{
if (!__CanActMainInstance())
return true;
+3 -3
View File
@@ -781,7 +781,7 @@ void CPythonPlayer::RequestAddLocalQuickSlot(DWORD dwLocalSlotIndex, DWORD dwWnd
DWORD dwGlobalSlotIndex=LocalQuickSlotIndexToGlobalQuickSlotIndex(dwLocalSlotIndex);
CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
rkNetStream.SendQuickSlotAddPacket((BYTE)dwGlobalSlotIndex, (BYTE)dwWndType, (BYTE)dwWndItemPos);
rkNetStream.SendQuickSlotAddPacket((BYTE)dwGlobalSlotIndex, (BYTE)dwWndType, (WORD)dwWndItemPos);
}
void CPythonPlayer::RequestAddToEmptyLocalQuickSlot(DWORD dwWndType, DWORD dwWndItemPos)
@@ -794,7 +794,7 @@ void CPythonPlayer::RequestAddToEmptyLocalQuickSlot(DWORD dwWndType, DWORD dwWnd
{
DWORD dwGlobalQuickSlotIndex=LocalQuickSlotIndexToGlobalQuickSlotIndex(i);
CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
rkNetStream.SendQuickSlotAddPacket((BYTE)dwGlobalQuickSlotIndex, (BYTE)dwWndType, (BYTE)dwWndItemPos);
rkNetStream.SendQuickSlotAddPacket((BYTE)dwGlobalQuickSlotIndex, (BYTE)dwWndType, (WORD)dwWndItemPos);
return;
}
}
@@ -845,7 +845,7 @@ void CPythonPlayer::RequestUseLocalQuickSlot(DWORD dwLocalSlotIndex)
}
}
void CPythonPlayer::AddQuickSlot(int QuickSlotIndex, char IconType, char IconPosition)
void CPythonPlayer::AddQuickSlot(int QuickSlotIndex, char IconType, WORD IconPosition)
{
if (QuickSlotIndex < 0 || QuickSlotIndex >= QUICKSLOT_MAX_NUM)
return;
+1 -1
View File
@@ -317,7 +317,7 @@ class CPythonPlayer : public CSingleton<CPythonPlayer>, public IAbstractPlayer
// Quickslot
int GetQuickPage();
void SetQuickPage(int nPageIndex);
void AddQuickSlot(int QuickslotIndex, char IconType, char IconPosition);
void AddQuickSlot(int QuickslotIndex, char IconType, WORD IconPosition);
void DeleteQuickSlot(int QuickslotIndex);
void MoveQuickSlot(int Source, int Target);