item_set and item_del packets normalized to server

This commit is contained in:
d1str4ught
2025-08-28 22:41:41 +02:00
parent 6b97701f0e
commit 85920e442d
9 changed files with 40 additions and 146 deletions

View File

@@ -606,7 +606,8 @@ const char * GetRecvHeaderName(BYTE header)
stringList[17] = "HEADER_GC_PLAYER_POINT_CHANGE";
stringList[18] = "HEADER_GC_CHANGE_SPEED";
stringList[19] = "HEADER_GC_CHARACTER_UPDATE";
stringList[20] = "HEADER_GC_ITEM_SET";
stringList[20] = "HEADER_GC_ITEM_DEL";
stringList[21] = "HEADER_GC_ITEM_SET";
stringList[22] = "HEADER_GC_ITEM_USE";
stringList[23] = "HEADER_GC_ITEM_DROP";
stringList[25] = "HEADER_GC_ITEM_UPDATE";

View File

@@ -31,9 +31,6 @@ class IAbstractPlayer : public TAbstractSingleton<IAbstractPlayer>
virtual void SetItemCount(TItemPos itemPos, BYTE byCount) = 0;
virtual void SetItemMetinSocket(TItemPos itemPos, DWORD dwMetinSocketIndex, DWORD dwMetinNumber) = 0;
virtual void SetItemAttribute(TItemPos itemPos, DWORD dwAttrIndex, BYTE byType, short sValue) = 0;
#if defined(GAIDEN)
virtual void SetItemUnbindTime(DWORD dwItemSlotIndex, DWORD dwUnbindSecondsLeft) = 0;
#endif
virtual DWORD GetItemIndex(TItemPos itemPos) = 0;
virtual DWORD GetItemFlags(TItemPos itemPos) = 0;

View File

@@ -1,18 +1,4 @@
#pragma once
#pragma pack(push) //기존 alignment 저장
#pragma pack(8)
#define ANTICPX_TRANS_BUFFER_MAX 400
typedef struct _AHNHS_TRANS_BUFFER
{
unsigned char byBuffer[ANTICPX_TRANS_BUFFER_MAX/* 송수신 패킷의 최대 크기 */];
uint16_t nLength;
} AHNHS_TRANS_BUFFER, *PAHNHS_TRANS_BUFFER;
#pragma pack(pop) // 기존 alignment 복구.
#include "Gamelib/RaceData.h"
typedef uint8_t TPacketHeader;
@@ -179,16 +165,13 @@ enum
HEADER_GC_PLAYER_POINT_CHANGE = 17,
HEADER_GC_CHANGE_SPEED = 18,
HEADER_GC_CHARACTER_UPDATE = 19,
#if defined(GAIDEN)
HEADER_GC_ITEM_DEL = 20, // 아이템 창에 추가
HEADER_GC_ITEM_SET = 21, // 아이템 창에 추가
#else
HEADER_GC_ITEM_SET = 20, // 아이템 창에 추가
HEADER_GC_ITEM_SET2 = 21, // 아이템 창에 추가
#endif
HEADER_GC_ITEM_USE = 22, // 아이템 사용 (주위 사람들에게 보여주기 위해)
HEADER_GC_ITEM_DROP = 23, // 아이템 버리기
HEADER_GC_ITEM_UPDATE = 25, // 아이템 수치 업데이트
HEADER_GC_ITEM_GROUND_ADD = 26, // 바닥에 아이템 추가
HEADER_GC_ITEM_GROUND_DEL = 27, // 바닥에서 아이템 삭제
HEADER_GC_QUICKSLOT_ADD = 28,
@@ -271,15 +254,9 @@ enum
HEADER_GC_WALK_MODE = 111,
HEADER_GC_CHANGE_SKILL_GROUP = 112,
#if defined(GAIDEN)
HEADER_GC_MAIN_CHARACTER = 113,
HEADER_GC_MAIN_CHARACTER3_BGM = 137,
HEADER_GC_MAIN_CHARACTER4_BGM_VOL = 138,
#else
// SUPPORT_BGM
HEADER_GC_MAIN_CHARACTER2_EMPIRE = 113,
// END_OF_SUPPORT_BGM
#endif
HEADER_GC_SEPCIAL_EFFECT = 114,
HEADER_GC_NPC_POSITION = 115,
@@ -326,15 +303,6 @@ enum
HEADER_GC_RUNUP_MATRIX_QUIZ = 201,
HEADER_GC_NEWCIBN_PASSPOD_REQUEST = 202,
HEADER_GC_NEWCIBN_PASSPOD_FAILURE = 203,
#if defined(GAIDEN)
HEADER_GC_ONTIME = 204,
HEADER_GC_RESET_ONTIME = 205,
// AUTOBAN
HEADER_GC_AUTOBAN_QUIZ = 206,
// END_OF_AUTOBAN
#endif
#ifdef __AUCTION__
HEADER_GC_AUCTOIN_ITEM_LIST = 206,
@@ -1676,74 +1644,25 @@ typedef struct packet_motion
uint16_t motion;
} TPacketGCMotion;
#if defined(GAIDEN)
struct TPacketGCItemDelDeprecate
typedef struct packet_del_item
{
TPacketGCItemDelDeprecate() :
header(HEADER_GC_ITEM_DEL),
pos(0),
vnum(0),
count(0)
{
memset(&alSockets, 0, sizeof(alSockets));
memset(&aAttr, 0, sizeof(aAttr));
}
uint8_t header;
uint8_t pos;
uint32_t vnum;
uint8_t count;
int32_t alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
};
uint8_t header;
TItemPos pos;
} TPacketGCItemDel;
typedef struct packet_set_item
{
uint8_t header;
uint8_t pos;
uint32_t vnum;
uint8_t count;
uint32_t flags; // 플래그 추가
int32_t alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
uint8_t header;
TItemPos pos;
uint32_t vnum;
uint8_t count;
uint32_t flags; // 플래그 추가
uint32_t anti_flags; // 플래그 추가
uint8_t highlight;
int32_t alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
} TPacketGCItemSet;
typedef struct packet_item_del
{
uint8_t header;
uint8_t pos;
} TPacketGCItemDel;
#else
typedef struct packet_set_item
{
uint8_t header;
TItemPos Cell;
uint32_t vnum;
uint8_t count;
int32_t alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
} TPacketGCItemSet;
typedef struct packet_set_item2
{
uint8_t header;
TItemPos Cell;
uint32_t vnum;
uint8_t count;
uint32_t flags; // 플래그 추가
uint32_t anti_flags; // 플래그 추가
bool highlight;
int32_t alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
} TPacketGCItemSet2;
#endif
typedef struct packet_item_del
{
uint8_t header;
uint8_t pos;
} TPacketGCItemDel;
typedef struct packet_use_item
{
uint8_t header;

View File

@@ -69,8 +69,8 @@ class CMainPacketHeaderMap : public CNetworkPacketHeaderMap
Set(HEADER_GC_PLAYER_POINTS, CNetworkPacketHeaderMap::TPacketType(sizeof(TPacketGCPoints), STATIC_SIZE_PACKET));
Set(HEADER_GC_PLAYER_POINT_CHANGE, CNetworkPacketHeaderMap::TPacketType(sizeof(TPacketGCPointChange), STATIC_SIZE_PACKET));
Set(HEADER_GC_ITEM_DEL, CNetworkPacketHeaderMap::TPacketType(sizeof(TPacketGCItemDel), STATIC_SIZE_PACKET));
Set(HEADER_GC_ITEM_SET, CNetworkPacketHeaderMap::TPacketType(sizeof(TPacketGCItemSet), STATIC_SIZE_PACKET));
Set(HEADER_GC_ITEM_SET2, CNetworkPacketHeaderMap::TPacketType(sizeof(TPacketGCItemSet2), STATIC_SIZE_PACKET));
Set(HEADER_GC_ITEM_USE, CNetworkPacketHeaderMap::TPacketType(sizeof(TPacketGCItemUse), STATIC_SIZE_PACKET));
Set(HEADER_GC_ITEM_UPDATE, CNetworkPacketHeaderMap::TPacketType(sizeof(TPacketGCItemUpdate), STATIC_SIZE_PACKET));

View File

@@ -451,8 +451,8 @@ class CPythonNetworkStream : public CNetworkStream, public CSingleton<CPythonNet
bool RecvDeadPacket();
bool RecvCharacterMovePacket();
bool RecvItemDelPacket(); // Alarm to python
bool RecvItemSetPacket(); // Alarm to python
bool RecvItemSetPacket2(); // Alarm to python
bool RecvItemUsePacket(); // Alarm to python
bool RecvItemUpdatePacket(); // Alarm to python
bool RecvItemGroundAddPacket();

View File

@@ -313,12 +313,12 @@ void CPythonNetworkStream::GamePhase()
break;
// item packet.
case HEADER_GC_ITEM_SET:
ret = RecvItemSetPacket();
case HEADER_GC_ITEM_DEL:
ret = RecvItemDelPacket();
break;
case HEADER_GC_ITEM_SET2:
ret = RecvItemSetPacket2();
case HEADER_GC_ITEM_SET:
ret = RecvItemSetPacket();
break;
case HEADER_GC_ITEM_USE:

View File

@@ -71,7 +71,7 @@ bool CPythonNetworkStream::SendSafeBoxItemMovePacket(BYTE bySourcePos, BYTE byTa
bool CPythonNetworkStream::RecvSafeBoxSetPacket()
{
TPacketGCItemSet2 kItemSet;
TPacketGCItemSet kItemSet;
if (!Recv(sizeof(kItemSet), &kItemSet))
return false;
@@ -85,7 +85,7 @@ bool CPythonNetworkStream::RecvSafeBoxSetPacket()
for (int iattr=0; iattr<ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++iattr)
kItemData.aAttr[iattr] = kItemSet.aAttr[iattr];
CPythonSafeBox::Instance().SetItemData(kItemSet.Cell.cell, kItemData);
CPythonSafeBox::Instance().SetItemData(kItemSet.pos.cell, kItemData);
__RefreshSafeboxWindow();
@@ -98,7 +98,7 @@ bool CPythonNetworkStream::RecvSafeBoxDelPacket()
if (!Recv(sizeof(kItemDel), &kItemDel))
return false;
CPythonSafeBox::Instance().DelItemData(kItemDel.pos);
CPythonSafeBox::Instance().DelItemData(kItemDel.pos.cell);
__RefreshSafeboxWindow();
@@ -173,7 +173,7 @@ bool CPythonNetworkStream::RecvMallOpenPacket()
}
bool CPythonNetworkStream::RecvMallItemSetPacket()
{
TPacketGCItemSet2 kItemSet;
TPacketGCItemSet kItemSet;
if (!Recv(sizeof(kItemSet), &kItemSet))
return false;
@@ -187,7 +187,7 @@ bool CPythonNetworkStream::RecvMallItemSetPacket()
for (int iattr=0; iattr<ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++iattr)
kItemData.aAttr[iattr] = kItemSet.aAttr[iattr];
CPythonSafeBox::Instance().SetMallItemData(kItemSet.Cell.cell, kItemData);
CPythonSafeBox::Instance().SetMallItemData(kItemSet.pos.cell, kItemData);
__RefreshMallWindow();
@@ -199,7 +199,7 @@ bool CPythonNetworkStream::RecvMallItemDelPacket()
if (!Recv(sizeof(kItemDel), &kItemDel))
return false;
CPythonSafeBox::Instance().DelMallItemData(kItemDel.pos);
CPythonSafeBox::Instance().DelMallItemData(kItemDel.pos.cell);
__RefreshMallWindow();
Tracef(" >> CPythonNetworkStream::RecvMallItemDelPacket\n");
@@ -211,35 +211,26 @@ bool CPythonNetworkStream::RecvMallItemDelPacket()
// Item
// Recieve
bool CPythonNetworkStream::RecvItemSetPacket()
bool CPythonNetworkStream::RecvItemDelPacket()
{
TPacketGCItemSet packet_item_set;
if (!Recv(sizeof(TPacketGCItemSet), &packet_item_set))
TPacketGCItemDel packet_item_set;
if (!Recv(sizeof(TPacketGCItemDel), &packet_item_set))
return false;
TItemData kItemData;
kItemData.vnum = packet_item_set.vnum;
kItemData.count = packet_item_set.count;
kItemData.flags = 0;
for (int i=0; i<ITEM_SOCKET_SLOT_MAX_NUM; ++i)
kItemData.alSockets[i]=packet_item_set.alSockets[i];
for (int j=0; j<ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++j)
kItemData.aAttr[j]=packet_item_set.aAttr[j];
memset(&kItemData, 0, sizeof(TItemData));
IAbstractPlayer& rkPlayer=IAbstractPlayer::GetSingleton();
rkPlayer.SetItemData(packet_item_set.Cell, kItemData);
rkPlayer.SetItemData(packet_item_set.pos, kItemData);
__RefreshInventoryWindow();
return true;
}
bool CPythonNetworkStream::RecvItemSetPacket2()
bool CPythonNetworkStream::RecvItemSetPacket()
{
TPacketGCItemSet2 packet_item_set;
if (!Recv(sizeof(TPacketGCItemSet2), &packet_item_set))
TPacketGCItemSet packet_item_set;
if (!Recv(sizeof(TPacketGCItemSet), &packet_item_set))
return false;
TItemData kItemData;
@@ -254,10 +245,10 @@ bool CPythonNetworkStream::RecvItemSetPacket2()
kItemData.aAttr[j]=packet_item_set.aAttr[j];
IAbstractPlayer& rkPlayer=IAbstractPlayer::GetSingleton();
rkPlayer.SetItemData(packet_item_set.Cell, kItemData);
rkPlayer.SetItemData(packet_item_set.pos, kItemData);
if (packet_item_set.highlight)
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Highlight_Item", Py_BuildValue("(ii)", packet_item_set.Cell.window_type, packet_item_set.Cell.cell));
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Highlight_Item", Py_BuildValue("(ii)", packet_item_set.pos.window_type, packet_item_set.pos.cell));
__RefreshInventoryWindow();
return true;

View File

@@ -131,7 +131,7 @@ void CPythonNetworkStream::LoadingPhase()
return;
break;
case HEADER_GC_ITEM_SET:
case HEADER_GC_ITEM_DEL:
if (RecvItemSetPacket())
return;
break;

View File

@@ -1408,17 +1408,6 @@ PyObject * playerGetItemGrade(PyObject* poSelf, PyObject* poArgs)
return Py_BuildValue("i", GetItemGrade(pItemData->GetName()));
}
#if defined(GAIDEN)
PyObject * playerGetItemUnbindTime(PyObject* poSelf, PyObject* poArgs)
{
int iSlotIndex;
if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
return Py_BuildException();
return Py_BuildValue("i", (int) CPythonPlayer::instance().GetItemUnbindTime(iSlotIndex));
}
#endif
enum
{
REFINE_SCROLL_TYPE_MAKE_SOCKET = 1,
@@ -2230,9 +2219,6 @@ void initPlayer()
{ "GetItemCountByVnum", playerGetItemCountByVnum, METH_VARARGS },
{ "GetItemMetinSocket", playerGetItemMetinSocket, METH_VARARGS },
{ "GetItemAttribute", playerGetItemAttribute, METH_VARARGS },
#if defined(GAIDEN)
{ "GetItemUnbindTime", playerGetItemUnbindTime, METH_VARARGS },
#endif
{ "GetISellItemPrice", playerGetISellItemPrice, METH_VARARGS },
{ "MoveItem", playerMoveItem, METH_VARARGS },
{ "SendClickItemPacket", playerSendClickItemPacket, METH_VARARGS },