forked from metin-server/m2dev-client-src
item_set and item_del packets normalized to server
This commit is contained in:
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -131,7 +131,7 @@ void CPythonNetworkStream::LoadingPhase()
|
||||
return;
|
||||
break;
|
||||
|
||||
case HEADER_GC_ITEM_SET:
|
||||
case HEADER_GC_ITEM_DEL:
|
||||
if (RecvItemSetPacket())
|
||||
return;
|
||||
break;
|
||||
|
||||
@@ -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 },
|
||||
|
||||
Reference in New Issue
Block a user