forked from metin2/server
394 lines
13 KiB
C++
394 lines
13 KiB
C++
#ifndef __INC_METIN_II_GAME_INPUT_PROCESSOR__
|
||
#define __INC_METIN_II_GAME_INPUT_PROCESSOR__
|
||
|
||
#include "packet_info.h"
|
||
|
||
enum
|
||
{
|
||
INPROC_CLOSE,
|
||
INPROC_HANDSHAKE,
|
||
INPROC_LOGIN,
|
||
INPROC_MAIN,
|
||
INPROC_DEAD,
|
||
INPROC_DB,
|
||
INPROC_UDP,
|
||
INPROC_P2P,
|
||
INPROC_AUTH,
|
||
INPROC_TEEN,
|
||
};
|
||
|
||
void LoginFailure(LPDESC d, const char * c_pszStatus);
|
||
|
||
|
||
class CInputProcessor
|
||
{
|
||
public:
|
||
CInputProcessor();
|
||
virtual ~CInputProcessor() {};
|
||
|
||
virtual bool Process(LPDESC d, const void * c_pvOrig, int iBytes, int & r_iBytesProceed);
|
||
virtual BYTE GetType() = 0;
|
||
|
||
void BindPacketInfo(CPacketInfo * pPacketInfo);
|
||
void Pong(LPDESC d);
|
||
void Handshake(LPDESC d, const char * c_pData);
|
||
void Version(LPCHARACTER ch, const char* c_pData);
|
||
|
||
protected:
|
||
virtual int Analyze(LPDESC d, BYTE bHeader, const char * c_pData) = 0;
|
||
|
||
CPacketInfo * m_pPacketInfo;
|
||
int m_iBufferLeft;
|
||
|
||
CPacketInfoCG m_packetInfoCG;
|
||
};
|
||
|
||
class CInputClose : public CInputProcessor
|
||
{
|
||
public:
|
||
virtual BYTE GetType() { return INPROC_CLOSE; }
|
||
|
||
protected:
|
||
virtual int Analyze(LPDESC d, BYTE bHeader, const char * c_pData) { return m_iBufferLeft; }
|
||
};
|
||
|
||
class CInputHandshake : public CInputProcessor
|
||
{
|
||
public:
|
||
CInputHandshake();
|
||
virtual ~CInputHandshake();
|
||
|
||
virtual BYTE GetType() { return INPROC_HANDSHAKE; }
|
||
|
||
protected:
|
||
virtual int Analyze(LPDESC d, BYTE bHeader, const char * c_pData);
|
||
|
||
protected:
|
||
void GuildMarkLogin(LPDESC d, const char* c_pData);
|
||
|
||
CPacketInfo * m_pMainPacketInfo;
|
||
};
|
||
|
||
class CInputLogin : public CInputProcessor
|
||
{
|
||
public:
|
||
virtual BYTE GetType() { return INPROC_LOGIN; }
|
||
|
||
protected:
|
||
virtual int Analyze(LPDESC d, BYTE bHeader, const char * c_pData);
|
||
|
||
protected:
|
||
void Login(LPDESC d, const char * data);
|
||
void LoginByKey(LPDESC d, const char * data);
|
||
|
||
void CharacterSelect(LPDESC d, const char * data);
|
||
void CharacterCreate(LPDESC d, const char * data);
|
||
void CharacterDelete(LPDESC d, const char * data);
|
||
void Entergame(LPDESC d, const char * data);
|
||
void Empire(LPDESC d, const char * c_pData);
|
||
void GuildMarkCRCList(LPDESC d, const char* c_pData);
|
||
// MARK_BUG_FIX
|
||
void GuildMarkIDXList(LPDESC d, const char* c_pData);
|
||
// END_OF_MARK_BUG_FIX
|
||
void GuildMarkUpload(LPDESC d, const char* c_pData);
|
||
int GuildSymbolUpload(LPDESC d, const char* c_pData, size_t uiBytes);
|
||
void GuildSymbolCRC(LPDESC d, const char* c_pData);
|
||
void ChangeName(LPDESC d, const char * data);
|
||
};
|
||
|
||
class CInputMain : public CInputProcessor
|
||
{
|
||
public:
|
||
virtual BYTE GetType() { return INPROC_MAIN; }
|
||
|
||
protected:
|
||
virtual int Analyze(LPDESC d, BYTE bHeader, const char * c_pData);
|
||
|
||
protected:
|
||
void Attack(LPCHARACTER ch, const BYTE header, const char* data);
|
||
|
||
int Whisper(LPCHARACTER ch, const char * data, size_t uiBytes);
|
||
int Chat(LPCHARACTER ch, const char * data, size_t uiBytes);
|
||
void ItemUse(LPCHARACTER ch, const char * data);
|
||
void ItemDrop(LPCHARACTER ch, const char * data);
|
||
void ItemDrop2(LPCHARACTER ch, const char * data);
|
||
void ItemMove(LPCHARACTER ch, const char * data);
|
||
void ItemPickup(LPCHARACTER ch, const char * data);
|
||
void ItemToItem(LPCHARACTER ch, const char * pcData);
|
||
void QuickslotAdd(LPCHARACTER ch, const char * data);
|
||
void QuickslotDelete(LPCHARACTER ch, const char * data);
|
||
void QuickslotSwap(LPCHARACTER ch, const char * data);
|
||
int Shop(LPCHARACTER ch, const char * data, size_t uiBytes);
|
||
void OnClick(LPCHARACTER ch, const char * data);
|
||
void Exchange(LPCHARACTER ch, const char * data);
|
||
void Position(LPCHARACTER ch, const char * data);
|
||
void Move(LPCHARACTER ch, const char * data);
|
||
int SyncPosition(LPCHARACTER ch, const char * data, size_t uiBytes);
|
||
void FlyTarget(LPCHARACTER ch, const char * pcData, BYTE bHeader);
|
||
void UseSkill(LPCHARACTER ch, const char * pcData);
|
||
|
||
void ScriptAnswer(LPCHARACTER ch, const void * pvData);
|
||
void ScriptButton(LPCHARACTER ch, const void * pvData);
|
||
void ScriptSelectItem(LPCHARACTER ch, const void * pvData);
|
||
|
||
void QuestInputString(LPCHARACTER ch, const void * pvData);
|
||
void QuestConfirm(LPCHARACTER ch, const void* pvData);
|
||
void Target(LPCHARACTER ch, const char * pcData);
|
||
void Warp(LPCHARACTER ch, const char * pcData);
|
||
void SafeboxCheckin(LPCHARACTER ch, const char * c_pData);
|
||
void SafeboxCheckout(LPCHARACTER ch, const char * c_pData, bool bMall);
|
||
void SafeboxItemMove(LPCHARACTER ch, const char * data);
|
||
int Messenger(LPCHARACTER ch, const char* c_pData, size_t uiBytes);
|
||
|
||
void PartyInvite(LPCHARACTER ch, const char * c_pData);
|
||
void PartyInviteAnswer(LPCHARACTER ch, const char * c_pData);
|
||
void PartyRemove(LPCHARACTER ch, const char * c_pData);
|
||
void PartySetState(LPCHARACTER ch, const char * c_pData);
|
||
void PartyUseSkill(LPCHARACTER ch, const char * c_pData);
|
||
void PartyParameter(LPCHARACTER ch, const char * c_pData);
|
||
|
||
int Guild(LPCHARACTER ch, const char * data, size_t uiBytes);
|
||
void AnswerMakeGuild(LPCHARACTER ch, const char* c_pData);
|
||
|
||
void Fishing(LPCHARACTER ch, const char* c_pData);
|
||
void ItemGive(LPCHARACTER ch, const char* c_pData);
|
||
int MyShop(LPCHARACTER ch, const char * c_pData, size_t uiBytes);
|
||
|
||
void Refine(LPCHARACTER ch, const char* c_pData);
|
||
|
||
void Roulette(LPCHARACTER ch, const char* c_pData);
|
||
};
|
||
|
||
class CInputDead : public CInputMain
|
||
{
|
||
public:
|
||
virtual BYTE GetType() { return INPROC_DEAD; }
|
||
|
||
protected:
|
||
virtual int Analyze(LPDESC d, BYTE bHeader, const char * c_pData);
|
||
};
|
||
|
||
class CInputDB : public CInputProcessor
|
||
{
|
||
public:
|
||
virtual bool Process(LPDESC d, const void * c_pvOrig, int iBytes, int & r_iBytesProceed);
|
||
virtual BYTE GetType() { return INPROC_DB; }
|
||
|
||
protected:
|
||
virtual int Analyze(LPDESC d, BYTE bHeader, const char * c_pData);
|
||
|
||
protected:
|
||
void MapLocations(const char * c_pData);
|
||
void LoginSuccess(DWORD dwHandle, const char *data);
|
||
void PlayerCreateFailure(LPDESC d, BYTE bType); // 0 = <20>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD> 1 = <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
void PlayerDeleteSuccess(LPDESC d, const char * data);
|
||
void PlayerDeleteFail(LPDESC d);
|
||
void PlayerLoad(LPDESC d, const char* data);
|
||
void PlayerCreateSuccess(LPDESC d, const char * data);
|
||
void Boot(const char* data);
|
||
void QuestLoad(LPDESC d, const char * c_pData);
|
||
void SafeboxLoad(LPDESC d, const char * c_pData);
|
||
void SafeboxChangeSize(LPDESC d, const char * c_pData);
|
||
void SafeboxWrongPassword(LPDESC d);
|
||
void SafeboxChangePasswordAnswer(LPDESC d, const char* c_pData);
|
||
void MallLoad(LPDESC d, const char * c_pData);
|
||
void EmpireSelect(LPDESC d, const char * c_pData);
|
||
void P2P(const char * c_pData);
|
||
void ItemLoad(LPDESC d, const char * c_pData);
|
||
void AffectLoad(LPDESC d, const char * c_pData);
|
||
|
||
void GuildLoad(const char * c_pData);
|
||
void GuildSkillUpdate(const char* c_pData);
|
||
void GuildSkillRecharge();
|
||
void GuildExpUpdate(const char* c_pData);
|
||
void GuildAddMember(const char* c_pData);
|
||
void GuildRemoveMember(const char* c_pData);
|
||
void GuildChangeGrade(const char* c_pData);
|
||
void GuildChangeMemberData(const char* c_pData);
|
||
void GuildDisband(const char* c_pData);
|
||
void GuildLadder(const char* c_pData);
|
||
void GuildWar(const char* c_pData);
|
||
void GuildWarScore(const char* c_pData);
|
||
void GuildSkillUsableChange(const char* c_pData);
|
||
void GuildMoneyChange(const char* c_pData);
|
||
void GuildWithdrawMoney(const char* c_pData);
|
||
void GuildWarReserveAdd(TGuildWarReserve * p);
|
||
void GuildWarReserveUpdate(TGuildWarReserve * p);
|
||
void GuildWarReserveDelete(DWORD dwID);
|
||
void GuildWarBet(TPacketGDGuildWarBet * p);
|
||
void GuildChangeMaster(TPacketChangeGuildMaster* p);
|
||
|
||
void LoginAlready(LPDESC d, const char * c_pData);
|
||
|
||
void PartyCreate(const char* c_pData);
|
||
void PartyDelete(const char* c_pData);
|
||
void PartyAdd(const char* c_pData);
|
||
void PartyRemove(const char* c_pData);
|
||
void PartyStateChange(const char* c_pData);
|
||
void PartySetMemberLevel(const char* c_pData);
|
||
|
||
void Time(const char * c_pData);
|
||
|
||
void ReloadProto(const char * c_pData);
|
||
void ChangeName(LPDESC d, const char * data);
|
||
|
||
void AuthLogin(LPDESC d, const char * c_pData);
|
||
void ItemAward(const char * c_pData);
|
||
|
||
void ChangeEmpirePriv(const char* c_pData);
|
||
void ChangeGuildPriv(const char* c_pData);
|
||
void ChangeCharacterPriv(const char* c_pData);
|
||
|
||
void MoneyLog(const char* c_pData);
|
||
|
||
void SetEventFlag(const char* c_pData);
|
||
|
||
void BillingRepair(const char * c_pData);
|
||
void BillingExpire(const char * c_pData);
|
||
void BillingLogin(const char * c_pData);
|
||
void BillingCheck(const char * c_pData);
|
||
void VCard(const char * c_pData);
|
||
|
||
void CreateObject(const char * c_pData);
|
||
void DeleteObject(const char * c_pData);
|
||
void UpdateLand(const char * c_pData);
|
||
|
||
void Notice(const char * c_pData);
|
||
|
||
void MarriageAdd(TPacketMarriageAdd * p);
|
||
void MarriageUpdate(TPacketMarriageUpdate * p);
|
||
void MarriageRemove(TPacketMarriageRemove * p);
|
||
|
||
void WeddingRequest(TPacketWeddingRequest* p);
|
||
void WeddingReady(TPacketWeddingReady* p);
|
||
void WeddingStart(TPacketWeddingStart* p);
|
||
void WeddingEnd(TPacketWeddingEnd* p);
|
||
|
||
void TakeMonarchMoney(LPDESC d, const char * data );
|
||
void AddMonarchMoney(LPDESC d, const char * data );
|
||
void DecMonarchMoney(LPDESC d, const char * data );
|
||
void SetMonarch( LPDESC d, const char * data );
|
||
|
||
void ChangeMonarchLord(TPacketChangeMonarchLordACK* data);
|
||
void UpdateMonarchInfo(TMonarchInfo* data);
|
||
void AddBlockCountryIp(TPacketBlockCountryIp * data);
|
||
void BlockException(TPacketBlockException * data);
|
||
|
||
// MYSHOP_PRICE_LIST
|
||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ(HEADER_DG_MYSHOP_PRICELIST_RES) ó<><C3B3><EFBFBD>Լ<EFBFBD>
|
||
/**
|
||
* @param d <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><>û<EFBFBD><C3BB> <20>÷<EFBFBD><C3B7>̾<EFBFBD><CCBE><EFBFBD> descriptor
|
||
* @param p <20><>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
*/
|
||
void MyshopPricelistRes( LPDESC d, const TPacketMyshopPricelistHeader* p );
|
||
// END_OF_MYSHOP_PRICE_LIST
|
||
//
|
||
//RELOAD_ADMIN
|
||
void ReloadAdmin( const char * c_pData );
|
||
//END_RELOAD_ADMIN
|
||
|
||
void DetailLog(const TPacketNeedLoginLogInfo* info);
|
||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD>Ʈ
|
||
void ItemAwardInformer(TPacketItemAwardInfromer* data);
|
||
|
||
void RespondChannelStatus(LPDESC desc, const char* pcData);
|
||
|
||
protected:
|
||
DWORD m_dwHandle;
|
||
};
|
||
|
||
class CInputUDP : public CInputProcessor
|
||
{
|
||
public:
|
||
CInputUDP();
|
||
virtual bool Process(LPDESC d, const void * c_pvOrig, int iBytes, int & r_iBytesProceed);
|
||
|
||
virtual BYTE GetType() { return INPROC_UDP; }
|
||
void SetSockAddr(struct sockaddr_in & rSockAddr) { m_SockAddr = rSockAddr; };
|
||
|
||
protected:
|
||
virtual int Analyze(LPDESC d, BYTE bHeader, const char * c_pData);
|
||
|
||
protected:
|
||
void Handshake(LPDESC lpDesc, const char * c_pData);
|
||
void StateChecker(const char * c_pData);
|
||
|
||
protected:
|
||
struct sockaddr_in m_SockAddr;
|
||
CPacketInfoUDP m_packetInfoUDP;
|
||
};
|
||
|
||
class CInputP2P : public CInputProcessor
|
||
{
|
||
public:
|
||
CInputP2P();
|
||
virtual BYTE GetType() { return INPROC_P2P; }
|
||
|
||
protected:
|
||
virtual int Analyze(LPDESC d, BYTE bHeader, const char * c_pData);
|
||
|
||
public:
|
||
void Setup(LPDESC d, const char * c_pData);
|
||
void Login(LPDESC d, const char * c_pData);
|
||
void Logout(LPDESC d, const char * c_pData);
|
||
int Relay(LPDESC d, const char * c_pData, size_t uiBytes);
|
||
int Notice(LPDESC d, const char * c_pData, size_t uiBytes);
|
||
int MonarchNotice(LPDESC d, const char * c_pData, size_t uiBytes);
|
||
int MonarchTransfer(LPDESC d, const char * c_pData);
|
||
int Guild(LPDESC d, const char* c_pData, size_t uiBytes);
|
||
void Shout(const char * c_pData);
|
||
void Disconnect(const char * c_pData);
|
||
void MessengerAdd(const char * c_pData);
|
||
void MessengerRemove(const char * c_pData);
|
||
void MessengerMobile(const char * c_pData);
|
||
void FindPosition(LPDESC d, const char* c_pData);
|
||
void WarpCharacter(const char* c_pData);
|
||
void GuildWarZoneMapIndex(const char* c_pData);
|
||
void Transfer(const char * c_pData);
|
||
void XmasWarpSanta(const char * c_pData);
|
||
void XmasWarpSantaReply(const char * c_pData);
|
||
void LoginPing(LPDESC d, const char * c_pData);
|
||
void BlockChat(const char * c_pData);
|
||
void PCBangUpdate(const char* c_pData);
|
||
void IamAwake(LPDESC d, const char * c_pData);
|
||
|
||
protected:
|
||
CPacketInfoGG m_packetInfoGG;
|
||
};
|
||
|
||
class CInputAuth : public CInputProcessor
|
||
{
|
||
public:
|
||
CInputAuth();
|
||
virtual BYTE GetType() { return INPROC_AUTH; }
|
||
|
||
protected:
|
||
virtual int Analyze(LPDESC d, BYTE bHeader, const char * c_pData);
|
||
|
||
public:
|
||
void Login(LPDESC d, const char * c_pData);
|
||
void PasspodAnswer(LPDESC d, const char * c_pData );
|
||
|
||
};
|
||
|
||
class CInputTeen : public CInputProcessor
|
||
{
|
||
public :
|
||
virtual BYTE GetType() { return INPROC_TEEN; }
|
||
|
||
void SetStep(int step);
|
||
|
||
protected :
|
||
virtual bool Process(LPDESC lpDesc, const void * c_pvOrig, int iBytes, int & r_iBytesProceed);
|
||
virtual int Analyze(LPDESC d, BYTE bHeader, const char * c_pData) { return 0; };
|
||
|
||
private:
|
||
int m_step;
|
||
|
||
bool ProcessHandshake(LPDESC lpDesc, const void * c_pvOrig, size_t uiBytes, int & r_iBytesProceed);
|
||
bool ProcessMain(LPDESC lpDesc, const void * c_pvOrig, size_t uiBytes, int & r_iBytesProceed);
|
||
};
|
||
|
||
#endif /* __INC_METIN_II_GAME_INPUT_PROCESSOR__ */
|
||
|