Files
Sun1602/Tools/WiseClient/PacketHandler/Handler_CG.cpp
T
2022-10-26 12:25:11 +08:00

556 lines
17 KiB
C++

#include "stdafx.h"
#include "Handler_CG.h"
#include <Object/WiseUser.h>
#include <Object/WiseCharacter.h>
#include <Object/ObjectManager.h>
#include "SolarDateTime.h"
#define HANDLER_CG_RECV_IMPL(fnName) \
void Handler_CG::On##fnName(ServerSession* pSession, WiseUser* pUser, sSIG_NETMSG* pSIG_NETMSG)
sPACKET_HANDLER_INFO* Handler_CG::GetHandlerInfo()
{
static sPACKET_HANDLER_INFO s_pHandlerInfo[] =
{
#undef ADD_HANDLER_RECV_INFO_EOR
#undef ADD_HANDLER_RECV_INFO
#define ADD_HANDLER_RECV_INFO_EOR() { MAKEWORD(0, 0), PHASE_NOACTION, (PH_fnHandler)NULL }
#define ADD_HANDLER_RECV_INFO(c, p, accptablePHASE) \
{ MAKEWORD(c, p), (ePHASE_SHIFT)(accptablePHASE), (PH_fnHandler)&Handler_CG::On##p },
# include "Handler_CG.List.hxx"
ADD_HANDLER_RECV_INFO_EOR(),
#undef ADD_HANDLER_RECV_INFO
#undef ADD_HANDLER_RECV_INFO_EOR
};
return s_pHandlerInfo;
};
void Handler_CG::RegisterHandler_ALL(PACKET_HANDLER_DELEGATOR pInstance)
{
pInstance->RegisterHandler(AGENT_SESSION, GetHandlerInfo());
//pInstance->RegisterHandler(AGENT_SESSION, GetHandlerInfo_CHARINFO());
//pInstance->RegisterHandler(AGENT_SESSION, GetHandlerInfo_SYNC());
//pInstance->RegisterHandler(AGENT_SESSION, GetHandlerInfo_ZONE());
//pInstance->RegisterHandler(AGENT_SESSION, GetHandlerInfo_PARTY());
//pInstance->RegisterHandler(AGENT_SESSION, GetHandlerInfo_GM());
pInstance->RegisterHandler(AGENT_SESSION, GetHandlerInfo_SECURE());
}
//#define ADD_HANDLER_RECV_INFO(c, p, accptablePHASE) \
// void Handler_CG::On##p(ServerSession* pSession, WiseUser* pUser, sSIG_NETMSG* pSIG_NETMSG)
//
//
//
#include <PacketStruct_CG.h>
// (WAVERIX) (REMARK) <070318>
// Client handler들은 살펴볼 시간이 없었다.
HANDLER_CG_RECV_IMPL(CG_CRYPTOGRAPHY_KEY)
{
DEBUGGING_CODE_L3("");
MSG_CG_CRYPTOGRAPHY_KEY& rRecvMsg = pSIG_NETMSG->MsgTypeOf<MSG_CG_CRYPTOGRAPHY_KEY>();
LogicFlowDelegator& rLOGIC = pUser->GetLogicFlow();
UserSessionMgr& rMGR = pUser->GetSessionMgr();
ClientSecurePackNode4Session& rSECURE = pSession->SECURE_PACK();
ClientCryptPack4Packet& rSENDCRYPT = rSECURE.SEND_CRYPT_PACKET_INFO();
// 기존 코드... 좀더 생각해 보자.
//ClientCryptPack4Packet& rRECVCRYPT = rSECURE.RECV_CRYPT_PACKET_INFO();
//sSIG_STEP& rSIGNAL = sSIGNAL_BUFFER::InstanceOf<sSIG_STEP>();
//if(S_000540_WAIT_CG_CRYPTOGRAPHY_KEY_LF == rLOGIC.GetCurrentSTEP())
//{
// rSIGNAL.SUBTYPE() = sSIG_STEP::ACTIVATE_NEXT_STEP;
// sSIG_STEP_ARG& rARG = rSIGNAL.TypeOf<sSIG_STEP_ARG>();
// rARG.GROUP = LFG_CONNECTION;
// rARG.STEP = S_000920_CLOSURE_EXCEPTION_LF;
// rLOGIC.OnMsg(&rSIGNAL);
//}
//rSENDCRYPT.SetCryptographyInfo(pMsg);
MSG_CG_CRYPTOGRAPHY_ACK& rMsgACK = pUser->SEND_MSG().InstanceOf<MSG_CG_CRYPTOGRAPHY_ACK>();
rMGR.SendPacket(AGENT_SESSION, &rMsgACK, sizeof(rMsgACK));
rSENDCRYPT.SetCryptographyInfo(&rRecvMsg);
sSIG_STEP& rSIGNAL = sSIGNAL_BUFFER::InstanceOf<sSIG_STEP>();
if(S_000540_WAIT_CG_CRYPTOGRAPHY_KEY_LF == rLOGIC.GetCurrentSTEP())
{
rSIGNAL.SUBTYPE() = sSIG_STEP::ACTIVATE_NEXT_STEP;
sSIG_STEP_ARG& rARG = rSIGNAL.InstanceOf<sSIG_STEP_ARG>();
rARG.SetInfo(LFG_CONNECTION, S_000920_CLOSURE_EXCEPTION_LF);
rLOGIC.OnMsg(&rSIGNAL);
}
}
HANDLER_CG_RECV_IMPL(CG_CRYPTOGRAPHY_CMD)
{
DEBUGGING_CODE_L3("");
MSG_CG_CRYPTOGRAPHY_CMD& rRecvMsg = pSIG_NETMSG->MsgTypeOf<MSG_CG_CRYPTOGRAPHY_CMD>();
LogicFlowDelegator& rLOGIC = pUser->GetLogicFlow();
UserSessionMgr& rMGR = pUser->GetSessionMgr();
ClientSecurePackNode4Session& rSECURE = pSession->SECURE_PACK();
ClientCryptPack4Packet& rRECVCRYPT = rSECURE.RECV_CRYPT_PACKET_INFO();
ClientCryptPack4Packet& rSENDCRYPT = rSECURE.SEND_CRYPT_PACKET_INFO();
// Duplicate Info
rRECVCRYPT = ClientCryptPack4Packet(rSENDCRYPT);
sSIG_STEP& rSIGNAL = sSIGNAL_BUFFER::InstanceOf<sSIG_STEP>();
if(S_000560_WAIT_CG_CRYPTOGRAPHY_CMD_LF == rLOGIC.GetCurrentSTEP())
{
DEBUGGING_CODE_L3("CMD!!!");
rSIGNAL.SUBTYPE() = sSIG_STEP::ACTIVATE_NEXT_STEP;
sSIG_STEP_ARG& rARG = rSIGNAL.InstanceOf<sSIG_STEP_ARG>();
rARG.SetInfo(LFG_CONNECTION, S_000920_CLOSURE_EXCEPTION_LF);
rLOGIC.OnMsg(&rSIGNAL);
}
}
HANDLER_CG_RECV_IMPL(CG_CONNECTION_ENTERSERVER_ACK)
{
DEBUGGING_CODE_L3("");
MSG_CG_CONNECTION_ENTERSERVER_ACK& rRecvMsg = pSIG_NETMSG->MsgTypeOf<MSG_CG_CONNECTION_ENTERSERVER_ACK>();
LogicFlowDelegator& rLOGIC = pUser->GetLogicFlow();
UserSessionMgr& rMGR = pUser->GetSessionMgr();
CLIENT_CHARACTER_PART rCHAR_INFO[MAX_CHARACTER_LIST_NUM];
rRecvMsg.ConvertForRecv(rCHAR_INFO);
for(DWORD dwIdx=0 ; dwIdx<MAX_CHARACTER_LIST_NUM ; ++dwIdx)
{
SLOTIDX idx = rCHAR_INFO[dwIdx].m_bySlot;
pUser->AddChar(idx, rCHAR_INFO[dwIdx]);
}
ZoneControl& rZONE = pUser->ZoneController();
rZONE.ZoneMoveCmd(ZoneControl::CMD_ZONE_MOV_END, NULL);
sSIG_STEP& rSIGNAL = sSIGNAL_BUFFER::InstanceOf<sSIG_STEP>();
if(S_000570_WAIT_CG_CONNECTION_ENTERSERVER_ACK_LF == rLOGIC.GetCurrentSTEP())
{
rSIGNAL.SUBTYPE() = sSIG_STEP::ACTIVATE_NEXT_STEP;
sSIG_STEP_ARG& rARG = rSIGNAL.InstanceOf<sSIG_STEP_ARG>();
rARG.SetInfo(LFG_CONNECTION, S_000920_CLOSURE_EXCEPTION_LF);
rLOGIC.OnMsg(&rSIGNAL);
}
}
HANDLER_CG_RECV_IMPL(CG_CONNECTION_ENTERSERVER_NAK)
{
DEBUGGING_CODE_L3("");
LogicFlowDelegator& rLOGIC = pUser->GetLogicFlow();
UserSessionMgr& rMGR = pUser->GetSessionMgr();
sSIG_STEP& rSIGNAL = sSIGNAL_BUFFER::InstanceOf<sSIG_STEP>();
rSIGNAL.SUBTYPE() = sSIG_STEP::ACTIVATE_JUMP_STEP;
sSIG_STEP_ARG& rARG = rSIGNAL.InstanceOf<sSIG_STEP_ARG>();
rARG.SetInfo(LFG_CONNECTION, S_000920_CLOSURE_EXCEPTION_LF);
rLOGIC.OnMsg(&rSIGNAL);
}
HANDLER_CG_RECV_IMPL(CG_PREPARE_WORLD_CONNECT_ACK)
{
MSG_CG_PREPARE_WORLD_CONNECT_ACK& rRecvMsg = pSIG_NETMSG->MsgTypeOf<MSG_CG_PREPARE_WORLD_CONNECT_ACK>();
LogicFlowDelegator& rLOGIC = pUser->GetLogicFlow();
UserSessionMgr& rMGR = pUser->GetSessionMgr();
DEBUGGING_CODE_L3("");
}
HANDLER_CG_RECV_IMPL(CG_PREPARE_WORLD_CONNECT_NAK)
{
DEBUGGING_CODE_L3("");
}
HANDLER_CG_RECV_IMPL(CG_CONNECTION_ENTERVILLAGEREQ_ACK)
{
DEBUGGING_CODE_L3("");
MSG_CG_CONNECTION_ENTERVILLAGEREQ_ACK& rRecvMsg = pSIG_NETMSG->MsgTypeOf<MSG_CG_CONNECTION_ENTERVILLAGEREQ_ACK>();
LogicFlowDelegator& rLOGIC = pUser->GetLogicFlow();
UserSessionMgr& rMGR = pUser->GetSessionMgr();
// pUser->GetSelectedCharacter();
// 이 값이 NULL이 안되도록 하자.
WiseCharacter* pCHAR = pUser->GetSelectedCharacter();
DWORD dwPlayerKey = rRecvMsg.m_dwPlayerKey;
pCHAR->OBJECT_KEY() = dwPlayerKey;
sSIG_STEP& rSIGNAL = sSIGNAL_BUFFER::InstanceOf<sSIG_STEP>();
rSIGNAL.SUBTYPE() = sSIG_STEP::ACTIVATE_NEXT_STEP;
sSIG_STEP_ARG& rARG = rSIGNAL.InstanceOf<sSIG_STEP_ARG>();
rARG.SetInfo(LFG_ZONE, S_002950_CLOSURE_EXCEPTION_LF);
rLOGIC.OnMsg(&rSIGNAL);
}
HANDLER_CG_RECV_IMPL(CG_CHARINFO_CHAR_ITEM_CMD)
{
DEBUGGING_CODE_L3("");
}
HANDLER_CG_RECV_IMPL(CG_CHARINFO_SKILL_CMD)
{
DEBUGGING_CODE_L3("");
}
HANDLER_CG_RECV_IMPL(CG_CHARINFO_QUICK_CMD)
{
DEBUGGING_CODE_L3("");
}
HANDLER_CG_RECV_IMPL(CG_CHARINFO_STYLE_CMD)
{
DEBUGGING_CODE_L3("");
}
HANDLER_CG_RECV_IMPL(CG_MISSION_STREAM_CMD)
{
DEBUGGING_CODE_L3("");
}
HANDLER_CG_RECV_IMPL(CG_QUEST_STREAM_CMD)
{
DEBUGGING_CODE_L3("");
}
HANDLER_CG_RECV_IMPL(CG_AREACONQUEST_STREAM_CMD)
{
DEBUGGING_CODE_L3("");
}
HANDLER_CG_RECV_IMPL(CG_SYNC_PLAYER_ENTER_ACK)
{
DEBUGGING_CODE_L3("");
MSG_CG_SYNC_PLAYER_ENTER_ACK& rRecvMsg = pSIG_NETMSG->MsgTypeOf<MSG_CG_SYNC_PLAYER_ENTER_ACK>();
LogicFlowDelegator& rLOGIC = pUser->GetLogicFlow();
UserSessionMgr& rMGR = pUser->GetSessionMgr();
ZoneControl& rZONE = pUser->ZoneController();
rRecvMsg.Decode();
rZONE.MapPosCmdBlockMode() = FALSE;
//rRecvMsg.m_fPos;
//rRecvMsg.m_TransSkillCode;
sMAP_POS_ARG rPOS;
rPOS.SUBCMD = 0;
rPOS.ANGLE = 0;
rZONE.MapPosCmd(ZoneControl::CMD_POS_GET_CUR_INFO, &rPOS);
CopyMemory(rPOS.XYZ_CUR, rRecvMsg.m_fPos, sizeof(rPOS.XYZ_CUR));
CopyMemory(rPOS.XYZ_DEST, rRecvMsg.m_fPos, sizeof(rPOS.XYZ_DEST));
rZONE.MapPosCmd(ZoneControl::CMD_POS_SET_CUR_INFO, &rPOS);
#if CODE_BACKUP
ScriptLogic* pSLOGIC = Manipulater::GetScriptLogicInterface()->SCRIPTLOGIC;
if(pSLOGIC->IsAcceptPlay("[VILLAGE]"))
printf("Accept\n");
else
printf("Can't Accept\n");
// 위와 같은 샘플을 토대로 이후 플레이 이동에 관련한 플로우를 결정하자.
// 그 후의 액션은 UsrLogic.dll로 위임하자.
#endif
//////////////////////////////////////////////////////////////////////////
// 임시 위치 보정용
if(1)
{
// 벨트헨, 특정 위치
static float s_rVecSrc[3] =
{
-79.f, 78.f, -25.f
//-37.32f, 59.3f, -25.14f
};
rZONE.MapPosCmdBlockMode() = TRUE;
//CopyMemory(rPOS.XYZ_DEST, s_rVecSrc, sizeof(rPOS.XYZ_DEST));
SEND_MESSAGE_BLOCK& rSENDMSG = pUser->SEND_MSG();
if(1)
{
MSG_CG_MAP_TELEPORT_SYN& rMsgSYN = rSENDMSG.InstanceOf<MSG_CG_MAP_TELEPORT_SYN>();
CopyMemory(&rMsgSYN.vPos, &s_rVecSrc, sizeof(s_rVecSrc));
rMGR.SendPacket(AGENT_SESSION, &rMsgSYN, sizeof(rMsgSYN));
}
if(1)
{
MSG_CG_GM_STRING_CMD_SYN& rMsgSYN_T = rSENDMSG.InstanceOf<MSG_CG_GM_STRING_CMD_SYN>();
strncpy(rMsgSYN_T.m_szStringCmd, "부활" ,sizeof(rMsgSYN_T.m_szStringCmd));
rMGR.SendPacket(AGENT_SESSION, &rMsgSYN_T, sizeof(rMsgSYN_T));
}
if(0)
{
MSG_CG_GM_STRING_CMD_SYN& rMsgSYN_T = rSENDMSG.InstanceOf<MSG_CG_GM_STRING_CMD_SYN>();
strncpy(rMsgSYN_T.m_szStringCmd, "투명 켬" ,sizeof(rMsgSYN_T.m_szStringCmd));
rMGR.SendPacket(AGENT_SESSION, &rMsgSYN_T, sizeof(rMsgSYN_T));
}
if(1)
{
MSG_CG_GM_STRING_CMD_SYN& rMsgSYN_T2 = rSENDMSG.InstanceOf<MSG_CG_GM_STRING_CMD_SYN>();
strncpy(rMsgSYN_T2.m_szStringCmd, "무적 켬" ,sizeof(rMsgSYN_T2.m_szStringCmd));
rMGR.SendPacket(AGENT_SESSION, &rMsgSYN_T2, sizeof(rMsgSYN_T2));
}
if(0)
{
MSG_CG_GM_STRING_CMD_SYN& rMsgSYN_T3 = rSENDMSG.InstanceOf<MSG_CG_GM_STRING_CMD_SYN>();
strncpy(rMsgSYN_T3.m_szStringCmd, "몬스터소환 2211 1" ,sizeof(rMsgSYN_T3.m_szStringCmd));
rMGR.SendPacket(AGENT_SESSION, &rMsgSYN_T3, sizeof(rMsgSYN_T3));
}
if(0)
{
MSG_CG_GM_STRING_CMD_SYN& rMsgSYN_T4 = rSENDMSG.InstanceOf<MSG_CG_GM_STRING_CMD_SYN>();
strncpy(rMsgSYN_T4.m_szStringCmd, "몬스터제거" ,sizeof(rMsgSYN_T4.m_szStringCmd));
rMGR.SendPacket(AGENT_SESSION, &rMsgSYN_T4, sizeof(rMsgSYN_T4));
}
}
//
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// 임시 위치 보정용
//BOOL bPROC = FALSE;
//if(bPROC)
//{
// // 벨트헨, 특정 위치
// static float s_rVecSrc[3] =
// {
// -469.f,
// 343.f,
// 6.f
// };
// rZONE.MapPosCmdBlockMode() = TRUE;
// //CopyMemory(rPOS.XYZ_DEST, s_rVecSrc, sizeof(rPOS.XYZ_DEST));
// SEND_MESSAGE_BLOCK& rSENDMSG = pUser->SEND_MSG();
// MSG_CG_MAP_TELEPORT_SYN& rMsgSYN = rSENDMSG.InstanceOf<MSG_CG_MAP_TELEPORT_SYN>();
// CopyMemory(&rMsgSYN.vPos, &s_rVecSrc, sizeof(s_rVecSrc));
// rMGR.SendPacket(AGENT_SESSION, &rMsgSYN, sizeof(rMsgSYN));
//}
//
//////////////////////////////////////////////////////////////////////////
sSIG_STEP& rSIGNAL = sSIGNAL_BUFFER::InstanceOf<sSIG_STEP>();
rSIGNAL.SUBTYPE() = sSIG_STEP::ACTIVATE_NEXT_STEP;
sSIG_STEP_ARG& rARG = rSIGNAL.InstanceOf<sSIG_STEP_ARG>();
rARG.SetInfo(LFG_MAX, S_000090_CLOSURE_EXCEPTION_LF);
rLOGIC.OnMsg(&rSIGNAL);
rARG.SetInfo(LFG_ZONE, S_002950_CLOSURE_EXCEPTION_LF);
rLOGIC.OnMsg(&rSIGNAL);
}
HANDLER_CG_RECV_IMPL(CG_SYNC_KBMOVE_BRD)
{
DEBUGGING_CODE_L3("");
}
HANDLER_CG_RECV_IMPL(CG_MAP_TELEPORT_BRD)
{
DEBUGGING_CODE_L3("");
MSG_CG_MAP_TELEPORT_BRD& rRecvMsg = pSIG_NETMSG->MsgTypeOf<MSG_CG_MAP_TELEPORT_BRD>();
LogicFlowDelegator& rLOGIC = pUser->GetLogicFlow();
UserSessionMgr& rMGR = pUser->GetSessionMgr();
ZoneControl& rZONE = pUser->ZoneController();
// 명령 타입... 이것도 처리해야 할 것이다.
//rRecvMsg.m_bForcedCommand
WiseCharacter* pCHAR = pUser->GetSelectedCharacter();
if(pCHAR->OBJECT_KEY() == rRecvMsg.m_dwObjectKey)
{
rZONE.MapPosCmdBlockMode() = FALSE;
sMAP_POS_ARG rPOS;
//rPOS.SUBCMD = 0;
//rPOS.ANGLE = 0;
rZONE.MapPosCmd(ZoneControl::CMD_POS_GET_CUR_INFO, &rPOS);
CopyMemory(rPOS.XYZ_CUR, &rRecvMsg.vPos, sizeof(rPOS.XYZ_CUR));
CopyMemory(rPOS.XYZ_DEST, &rRecvMsg.vPos, sizeof(rPOS.XYZ_DEST));
rZONE.MapPosCmd(ZoneControl::CMD_POS_SET_CUR_INFO, &rPOS);
}
}
HANDLER_CG_RECV_IMPL(CG_SYNC_MONSTER_LEAVE_BRD)
{
DEBUGGING_CODE_L3("");
}
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
// MONSTER_RENDER_INFO
HANDLER_CG_RECV_IMPL(CG_SYNC_MONSTER_ENTER_BRD)
{
DEBUGGING_CODE_L3("");
MSG_CG_SYNC_MONSTER_ENTER_BRD& rRecvMsg = pSIG_NETMSG->MsgTypeOf<MSG_CG_SYNC_MONSTER_ENTER_BRD>();
LogicFlowDelegator& rLOGIC = pUser->GetLogicFlow();
UserSessionMgr& rMGR = pUser->GetSessionMgr();
sSIG_OBJCTRL& rOBJCTRL = sSIGNAL_BUFFER::InstanceOf<sSIG_OBJCTRL>();
rOBJCTRL.OBJTYPE() = OBJTYPE_MONSTER;// GAME_OBJECT::GOBJ_MONSTER;
rOBJCTRL.SUBTYPE() = sSIG_OBJCTRL::ST_ENTER;
rOBJCTRL.OBJECT_KEY() = 0;
rOBJCTRL.MSG_HDR() = (BYTE*)&rRecvMsg;
rOBJCTRL.MSG_LEN() = pSIG_NETMSG->MSG_LEN();
//rOBJCTRL.MsgTypeOf<MSG_CG_SYNC_MONSTER_ENTER_BRD*>() = &rRecvMsg;
ObjectManager::OnMsg(&rOBJCTRL);
}
HANDLER_CG_RECV_IMPL(CG_SYNC_MONSTER_DIR_ENTER_BRD)
{
DEBUGGING_CODE_L3("");
MSG_CG_SYNC_MONSTER_DIR_ENTER_BRD& rRecvMsg = pSIG_NETMSG->MsgTypeOf<MSG_CG_SYNC_MONSTER_DIR_ENTER_BRD>();
LogicFlowDelegator& rLOGIC = pUser->GetLogicFlow();
UserSessionMgr& rMGR = pUser->GetSessionMgr();
sSIG_OBJCTRL& rOBJCTRL = sSIGNAL_BUFFER::InstanceOf<sSIG_OBJCTRL>();
rOBJCTRL.OBJTYPE() = OBJTYPE_MONSTER;// GAME_OBJECT::GOBJ_MONSTER;
rOBJCTRL.SUBTYPE() = sSIG_OBJCTRL::ST_ENTER;
rOBJCTRL.OBJECT_KEY() = 0;
rOBJCTRL.MSG_HDR() = (BYTE*)&rRecvMsg;
rOBJCTRL.MSG_LEN() = pSIG_NETMSG->MSG_LEN();
//rOBJCTRL.MsgTypeOf<MSG_CG_SYNC_MONSTER_ENTER_BRD*>() = &rRecvMsg;
ObjectManager::OnMsg(&rOBJCTRL);
}
HANDLER_CG_RECV_IMPL(CG_SYNC_ALLMONSTERS_CMD)
{
DEBUGGING_CODE_L3("");
MSG_CG_SYNC_ALLMONSTERS_CMD& rRecvMsg = pSIG_NETMSG->MsgTypeOf<MSG_CG_SYNC_ALLMONSTERS_CMD>();
LogicFlowDelegator& rLOGIC = pUser->GetLogicFlow();
UserSessionMgr& rMGR = pUser->GetSessionMgr();
sSIG_OBJCTRL& rOBJCTRL = sSIGNAL_BUFFER::InstanceOf<sSIG_OBJCTRL>();
rOBJCTRL.OBJTYPE() = OBJTYPE_MONSTER;// GAME_OBJECT::GOBJ_MONSTER;
rOBJCTRL.SUBTYPE() = sSIG_OBJCTRL::ST_ENTER;
rOBJCTRL.OBJECT_KEY() = 0;
rOBJCTRL.MSG_HDR() = (BYTE*)&rRecvMsg;
rOBJCTRL.MSG_LEN() = pSIG_NETMSG->MSG_LEN();
//rOBJCTRL.MsgTypeOf<MSG_CG_SYNC_MONSTER_ENTER_BRD*>() = &rRecvMsg;
ObjectManager::OnMsg(&rOBJCTRL);
}
HANDLER_CG_RECV_IMPL(CG_SYNC_MAPNPC_ENTER_BRD)
{
DEBUGGING_CODE_L3("");
MSG_CG_SYNC_MAPNPC_ENTER_BRD& rRecvMsg = pSIG_NETMSG->MsgTypeOf<MSG_CG_SYNC_MAPNPC_ENTER_BRD>();
LogicFlowDelegator& rLOGIC = pUser->GetLogicFlow();
UserSessionMgr& rMGR = pUser->GetSessionMgr();
sSIG_OBJCTRL& rOBJCTRL = sSIGNAL_BUFFER::InstanceOf<sSIG_OBJCTRL>();
rOBJCTRL.OBJTYPE() = OBJTYPE_MONSTER;// GAME_OBJECT::GOBJ_MONSTER;
rOBJCTRL.SUBTYPE() = sSIG_OBJCTRL::ST_ENTER;
rOBJCTRL.OBJECT_KEY() = 0;
rOBJCTRL.MSG_HDR() = (BYTE*)&rRecvMsg;
rOBJCTRL.MSG_LEN() = pSIG_NETMSG->MSG_LEN();
//rOBJCTRL.MsgTypeOf<MSG_CG_SYNC_MONSTER_ENTER_BRD*>() = &rRecvMsg;
ObjectManager::OnMsg(&rOBJCTRL);
}
/*
HANDLER_CG_RECV_IMPL(CG_MISSION_TUTORIAL_WINDOW_CMD)
{
DEBUGGING_CODE_L3("");
MSG_CG_MISSION_TUTORIAL_WINDOW_CMD& rRecvMsg = pSIG_NETMSG->MsgTypeOf<MSG_CG_MISSION_TUTORIAL_WINDOW_CMD>();
LogicFlowDelegator& rLOGIC = pUser->GetLogicFlow();
UserSessionMgr& rMGR = pUser->GetSessionMgr();
ScriptLogic* pSCRIPT = Manipulater::GetScriptLogicInterface()->SCRIPTLOGIC;
#if CODE_BACKUP
CHAR* prValue;
if(!pSCRIPT->GetData("[TUTORIAL]", "ACCEPT", prValue))
return;
DWORD bAccept = Converter::String::ToDWORD(prValue);
if(!bAccept)
return;
#endif
#if CODE_RENEWAL
BOOL bAccept = pSCRIPT->IsAcceptPlay("[TUTORIAL]");
if(!bAccept)
return;
#endif
//// 튜토리얼 필드로의 이동 처리 시작
ZoneControl& rZONE = pUser->ZoneController();
sZONE_CTRL_INFO& rCTRL = rZONE.ZONE_CTRL_INFO();
rCTRL.Enabled(sZONE_CTRL_INFO::BIT_TUTORIAL_PROCESS);
//sSIG_STEP& rSIGNAL = sSIGNAL_BUFFER::InstanceOf<sSIG_STEP>();
//rSIGNAL.SUBTYPE() = sSIG_STEP::ACTIVATE_JUMP_STEP;
//sSIG_STEP_ARG& rARG = rSIGNAL.InstanceOf<sSIG_STEP_ARG>();
//rARG.SetInfo(LFG_ZONE, S_001700_START_MARK_TUTORIAL_FIELD_LF);
//rLOGIC.OnMsg(&rSIGNAL);
}
HANDLER_CG_RECV_IMPL(CG_MISSION_TUTORIAL_WINDOW_RET_ACCEPT_ACK)
{
DEBUGGING_CODE_L3("");
MSG_CG_MISSION_TUTORIAL_WINDOW_RET_ACCEPT_ACK& rRecvMsg = pSIG_NETMSG->MsgTypeOf<MSG_CG_MISSION_TUTORIAL_WINDOW_RET_ACCEPT_ACK>();
LogicFlowDelegator& rLOGIC = pUser->GetLogicFlow();
UserSessionMgr& rMGR = pUser->GetSessionMgr();
sSIG_STEP& rSIGNAL = sSIGNAL_BUFFER::InstanceOf<sSIG_STEP>();
rSIGNAL.SUBTYPE() = sSIG_STEP::ACTIVATE_NEXT_STEP;
sSIG_STEP_ARG& rARG = rSIGNAL.InstanceOf<sSIG_STEP_ARG>();
rARG.SetInfo(LFG_ZONE, S_001760_EOL_FLOW_CONTROL_LF);
rLOGIC.OnMsg(&rSIGNAL);
}
*/
HANDLER_CG_RECV_IMPL(CG_ZONE_PORTAL_FIELD_MOVE_ACK)
{
MSG_CG_ZONE_PORTAL_FIELD_MOVE_ACK& rRecvMsg = pSIG_NETMSG->MsgTypeOf<MSG_CG_ZONE_PORTAL_FIELD_MOVE_ACK>();
LogicFlowDelegator& rLOGIC = pUser->GetLogicFlow();
UserSessionMgr& rMGR = pUser->GetSessionMgr();
sSIG_STEP& rSIGNAL = sSIGNAL_BUFFER::InstanceOf<sSIG_STEP>();
rSIGNAL.SUBTYPE() = sSIG_STEP::ACTIVATE_NEXT_STEP;
sSIG_STEP_ARG& rARG = rSIGNAL.InstanceOf<sSIG_STEP_ARG>();
rARG.SetInfo(LFG_ZONE, S_001760_EOL_FLOW_CONTROL_LF);
rLOGIC.OnMsg(&rSIGNAL);
}