#include "stdafx.h" #include "ParseCastle.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // ±æµå ¿ä»õ ¸Þ¼¼Áö 󸮽à ÇÊ¿äÇÑ Ä³¸¯¸íÀ» ã´Â ÇÔ¼ö const char* GetCharacterName(unsigned long dwCID); unsigned char GetCharacterNation(unsigned long dwCID); namespace DBAgent { namespace ParseCastle { bool CastleCmd(CSendStream& SendStream, PktBase* lpPktBase) { PktCastleCmd* lpPktCastleCmd = static_cast(lpPktBase); unsigned short wError = PktBase::NO_SERVER_ERR; unsigned long dwCID = lpPktCastleCmd->m_dwCID; unsigned long dwCastleID = lpPktCastleCmd->m_dwCastleID; unsigned long dwCastleObjectID = lpPktCastleCmd->m_dwCastleObjectID; unsigned long dwValue1 = lpPktCastleCmd->m_dwValue1; unsigned long dwValue2 = lpPktCastleCmd->m_dwValue2; unsigned char cSubCmd = lpPktCastleCmd->m_cSubCmd; CSiegeObjectDB* lpCastleObject = CSiegeObjectDBMgr::GetInstance().GetSiegeObject(dwCastleObjectID); CCastleDB* lpCastle = CCastleDBMgr::GetInstance().GetCastle(dwCastleID); if (NULL == lpCastleObject || NULL == lpCastle) { wError = PktBase::SERVER_ERROR; } else { // ¼ö¼º º´±âÀÇ ¸¶Áö¸· »ç¿ë ½Ã°£À» ¾÷µ¥ÀÌÆ® if (cSubCmd != PktCastleCmd::CASTLE_UPDATE_HP && lpCastleObject->IsCastleArms()) { static_cast(lpCastleObject)->UpdateLastUseTime(); } switch (cSubCmd) { // ¼¼À² º¯°æ // [In/Out] dwValue1 : ¼¼À² ŸÀÔ // [In/Out] dwValue2 : ¼¼À² case PktCastleCmd::CASTLE_SET_TAX: { lpCastle->SetTax(static_cast(dwValue1), static_cast(dwValue2)); } break; // ¼º »ó¡¹° ¾÷±×·¹À̵å // [In/Out] dwValue1 : ¾÷±×·¹À̵å ŸÀÔ // [In/Out] dwValue2 : ¾÷±×·¹ÀÌµå ½Ã°£ (ºÐ) case PktCastleCmd::CASTLE_UPGRADE_EMBLEM: { CSiegeObjectDB* lpEmblem = lpCastle->GetCastleEmblem(); if (lpEmblem) { lpEmblem->Upgrade(static_cast(dwValue2), 0, static_cast(dwValue1)); lpCastle->SetUpgradeItemInfo( 0, 0 ); } else { wError = PktBase::SERVER_ERROR; } } break; // ¼º »ó¡¹°ÀÇ º¸¼® Á¤º¸ ¾÷µ¥ÀÌÆ® // [In] dwValue1 : º¸¼® ¾ÆÀÌÅÛ ID // [In] dwValue2 : ÃÑ °¹¼ö case PktCastleCmd::CASTLE_UPGRADE_ITEM_INFO: { lpCastle->SetUpgradeItemInfo( static_cast(dwValue1), static_cast(dwValue2) ); return true; } break; // ¼º »ó¡¹°ÀÌ ºÎ¼ÅÁú¶§¸¶´Ù // [In] dwValue1 : »ó¡¹°À» ºÎ¼ø ÀûÀÇ ±¹Àû // [Out] dwValue1 : ¼ÒȯÁßÀÎ »ó¡¹°ÀÌ ¾Æ±º°ÍÀÎÁö Àû±º°ÍÀÎÁö Á¤º¸ case PktCastleCmd::CASTLE_UPDATE_EMBLEM: { CSiegeObjectDB* lpEmblem = lpCastle->GetCastleEmblem(); if (lpEmblem) { lpEmblem->Destroy(static_cast(dwValue1)); dwValue1 = lpEmblem->GetSubState(); } else { wError = PktBase::SERVER_ERROR; } } break; // ¼¼±Ý ȸ¼ö // [In/Out] dwValue1 : ¼¼±Ý ŸÀÔ // [In/Out] dwValue2 : ȸ¼öÇÒ ¼¼±Ý case PktCastleCmd::CASTLE_TAKE_TAXMONEY: { lpCastle->TakeTaxMoney(static_cast(dwValue1), dwValue2); } break; // ±¤¹° ȹµæ // [In/Out] dwValue1 : ±¤¹°ID // [In/Out] dwValue2 : ȹµæ·® case PktCastleCmd::CASTLE_GAIN_MINERAL: { unsigned short wMineralID = static_cast( dwValue1 ); unsigned short wAmount = static_cast( dwValue2 ); if (!lpCastle->GainMineral(wMineralID, wAmount)) { ERRLOG3(g_Log, "¼º ´©Àû ±¤¹° ¼¼±Ý ȸ¼ö ½ÇÆÐ, CastleID : 0x%10u, MineralID : %d, Amount : %d", lpCastle->GetCastleID(), wMineralID, wAmount); return true; } } break; // ¼º¹® ¿­±â / ´Ý±â case PktCastleCmd::CASTLE_GATE_OPEN: case PktCastleCmd::CASTLE_GATE_CLOSE: break; // ¼º¹® ¾÷±×·¹À̵å // [In/Out] dwValue1 : ¾÷±×·¹ÀÌµå ºñ¿ë // [In/Out] dwValue2 : ¾÷±×·¹ÀÌµå ½Ã°£ (ºÐ) case PktCastleCmd::CASTLE_UPGRADE_GATE: { CSiegeObjectDB* lpGate = lpCastle->GetCastleObject(dwCastleObjectID); if (lpGate) { lpGate->Upgrade(static_cast(dwValue2), dwValue1); } else { wError = PktBase::SERVER_ERROR; } } break; // ¼º¹® ¼ö¸® // [In/Out] dwValue1 : ¼ö¸® ºñ¿ë // [In/Out] dwValue2 : ¼ö¸®ÇÒ HP ¾ç case PktCastleCmd::CASTLE_REPAIR_GATE: { CSiegeObjectDB* lpGate = lpCastle->GetCastleObject(dwCastleObjectID); if (lpGate) { lpGate->Repair(dwValue2, dwValue1); } else { wError = PktBase::SERVER_ERROR; } } break; // ¼º¹® º¹±¸ // [In/Out] dwValue1 : ¼º¹® º¹±¸ ºñ¿ë // [In/Out] dwValue2 : ¼º¹® º¹±¸ ½Ã°£ (ºÐ) case PktCastleCmd::CASTLE_RESTORE_GATE: { CSiegeObjectDB* lpGate = lpCastle->GetCastleObject(dwCastleObjectID); if (lpGate) { lpGate->Restore(static_cast(dwValue2), dwValue1); } else { wError = PktBase::SERVER_ERROR; } } break; // ¼º¹® ÆÄ±« case PktCastleCmd::CASTLE_DESTROY_GATE: { CSiegeObjectDB* lpGate = lpCastle->GetCastleObject(dwCastleObjectID); if (lpGate) { lpGate->Destroy(); } else { wError = PktBase::SERVER_ERROR; } } break; // ¼ö¼º º´±â °³¹ß // [In/Out] dwValue1 : °³¹ß ºñ¿ë // [In/Out] dwValue2 : »óÀ§ 16ºñÆ® : »ý»ê½Ã°£ / ÇÏÀ§ 16ºñÆ® : º´±â ŸÀÔ case PktCastleCmd::CASTLE_CREATE_ARMS: { CSiegeObjectDB* lpCastleArms = lpCastle->GetCastleObject(dwCastleObjectID); if (lpCastleArms) { unsigned short wArmsType = static_cast(dwValue2 & 0x0000FFFF); unsigned char cDevelopTime = static_cast( (dwValue2 >> 16) ); lpCastleArms->Build(wArmsType, cDevelopTime, dwValue1, dwCID); } else { wError = PktBase::SERVER_ERROR; } } break; // ¼ö¼º º´±â ž½Â case PktCastleCmd::CASTLE_RIDE_ARMS: { CSiegeObjectDB* lpCastleArms = lpCastle->GetCastleObject(dwCastleObjectID); if (lpCastleArms) { // ¼ö¼º º´±â°¡ ÀÚµ¿ ÆÄ±«µÇÁö ¾Êµµ·Ï ¸¶Áö¸· »ç¿ë ½Ã°£À» ÃʱâÈ­ ½ÃŲ´Ù. lpCastleArms->UpdateLastUseTime(true); } return true; } break; // ¼ö¼º º´±â ³»¸² case PktCastleCmd::CASTLE_GETOFF_ARMS: { return true; } break; // ¼ö¼º º´±â ¾÷±×·¹À̵å // [In/Out] dwValue1 : ¾÷±×·¹ÀÌµå ºñ¿ë // [In/Out] dwValue2 : ¾÷±×·¹ÀÌµå ½Ã°£ (ºÐ) case PktCastleCmd::CASTLE_UPGRADE_ARMS: { CSiegeObjectDB* lpCastleArms = lpCastle->GetCastleObject(dwCastleObjectID); if (lpCastleArms) { lpCastleArms->Upgrade(static_cast(dwValue2), dwValue1); } else { wError = PktBase::SERVER_ERROR; } } break; // ¼ö¼º º´±â ¼ö¸® // [In/Out] dwValue1 : ¼ö¸® ºñ¿ë // [In/Out] dwValue2 : ¼ö¸®ÇÒ HP ¾ç case PktCastleCmd::CASTLE_REPAIR_ARMS: { CSiegeObjectDB* lpCastleArms = lpCastle->GetCastleObject(dwCastleObjectID); if (lpCastleArms) { lpCastleArms->Repair(dwValue2, dwValue1); } else { wError = PktBase::SERVER_ERROR; } } break; // ¼ö¼º º´±â ÆÄ±« // [In/Out] dwValue1 : 0 : ÆÄ±«, 1 : º´±â°ü¸® NPC·Î º¯Çü( »ý»ê ºñ¿ë Àý¹ÝÀ» µ¹·ÁÁÜ ) case PktCastleCmd::CASTLE_DESTROY_ARMS: { CSiegeObjectDB* lpCastleArms = lpCastle->GetCastleObject(dwCastleObjectID); if (lpCastleArms) { lpCastleArms->Destroy(0, static_cast(dwValue1)); } else { wError = PktBase::SERVER_ERROR; } } break; // HP ¾÷µ¥ÀÌÆ® case PktCastleCmd::CASTLE_UPDATE_HP: { CSiegeObjectDB* lpCastleArms = lpCastle->GetCastleObject(dwCastleObjectID); if (lpCastleArms) { lpCastleArms->UpdateHP(dwValue1); } return true; } break; default: ERRLOG1(g_Log, "Cmd:0x%02X / Á¸Àç ÇÏÁö ¾Ê´Â ¼º °ü·Ã ¸í·ÉÀ» ¿äûÇÏ¿´½À´Ï´Ù.", cSubCmd); return true; } } PktCastleCmd pktCastleCmd; memset(&pktCastleCmd, 0, sizeof(PktCastleCmd)); if (0 == wError) { pktCastleCmd.m_dwCID = dwCID; pktCastleCmd.m_dwCastleID = lpCastle->GetCastleID(); pktCastleCmd.m_dwCastleObjectID = lpCastleObject->GetCID(); pktCastleCmd.m_cState = lpCastleObject->GetState(); pktCastleCmd.m_dwValue1 = dwValue1; pktCastleCmd.m_dwValue2 = dwValue2; pktCastleCmd.m_cSubCmd = cSubCmd; if (PacketWrap::WrapHeader(reinterpret_cast(&pktCastleCmd), sizeof(PktCastleCmd), CmdCastleCmd, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCastleCmd), sizeof(PktCastleCmd), CmdCastleCmd)); } } else { if (PacketWrap::WrapHeader(reinterpret_cast(&pktCastleCmd), sizeof(PktCastleCmd), CmdCastleCmd, 0, wError)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCastleCmd), sizeof(PktCastleCmd), CmdCastleCmd)); } pktCastleCmd = *lpPktCastleCmd; SendStream.WrapCompress(reinterpret_cast(&pktCastleCmd), sizeof(PktCastleCmd), CmdCastleCmd, 0, wError); } return true; } bool SiegeArmsCmd(CSendStream& SendStream, PktBase* lpPktBase) { PktSiegeArmsCmd* lpPktSiegeArmsCmd = static_cast(lpPktBase); unsigned short wError = PktBase::NO_SERVER_ERR; unsigned long dwCID = lpPktSiegeArmsCmd->m_dwCID; unsigned long dwArmsID = lpPktSiegeArmsCmd->m_dwArmsID; unsigned long dwValue = lpPktSiegeArmsCmd->m_dwValue; unsigned char cSubCmd = lpPktSiegeArmsCmd->m_cSubCmd; CSiegeObjectDB* lpSiegeArms = CSiegeObjectDBMgr::GetInstance().GetSiegeObject(dwArmsID); if (NULL == lpSiegeArms) { wError = PktBase::SERVER_ERROR; } else { // °ø¼º º´±â¸¦ ¸¶Áö¸·À¸·Î »ç¿ëÇÑ ½Ã°£À» ÀúÀå if (cSubCmd != PktSiegeArmsCmd::SIEGE_UPDATE_HP) { lpSiegeArms->UpdateLastUseTime(); } switch (cSubCmd) { // °ø¼º º´±â »ý¼º Ãë¼Ò case PktSiegeArmsCmd::SIEGE_CANCEL: { lpSiegeArms->SendSiegeArmsCmd(0, PktSiegeArmsCmd::SIEGE_CANCEL); lpSiegeArms->Destroy(); CSiegeObjectDBMgr::GetInstance().DeleteSiegeObject(lpSiegeArms->GetCID()); return true; } break; // °ø¼º º´±â ž½Â case PktSiegeArmsCmd::SIEGE_RIDE_ARMS: { // °ø¼º º´±â°¡ ÆÄ±«µÇÁö ¾Ê°Ô Çϱâ À§ÇØ lpSiegeArms->UpdateLastUseTime(true); } return true; // °ø¼º º´±â ³»¸² case PktSiegeArmsCmd::SIEGE_GETOFF_ARMS: return true; // °ø¼º º´±â ¼ö¸® case PktSiegeArmsCmd::SIEGE_REPAIR_ARMS: { if (false == lpSiegeArms->Repair(dwValue)) { wError = PktBase::SERVER_ERROR; } } break; // °ø¼º º´±â¸¦ ½ºÅ¸Æ®Å¶À¸·Î case PktSiegeArmsCmd::SIEGE_TO_STARTKIT: { if (false == lpSiegeArms->ToStartKit()) { wError = PktBase::SERVER_ERROR; } } break; // °ø¼º º´±â ÆÄ±« case PktSiegeArmsCmd::SIEGE_DESTROY_ARMS: { lpSiegeArms->SendSiegeArmsCmd(0, PktSiegeArmsCmd::SIEGE_DESTROY_ARMS); lpSiegeArms->Destroy(); CSiegeObjectDBMgr::GetInstance().DeleteSiegeObject(lpSiegeArms->GetCID()); return true; } break; // HP ¾÷µ¥ÀÌÆ® case PktSiegeArmsCmd::SIEGE_UPDATE_HP: { lpSiegeArms->UpdateHP(dwValue); return true; } break; default: ERRLOG1(g_Log, "Cmd:0x%02X / Á¸Àç ÇÏÁö ¾Ê´Â °ø¼º º´±â ¸í·ÉÀ» ¿äûÇÏ¿´½À´Ï´Ù.", cSubCmd); return true; } } PktSiegeArmsCmd* lpPktSiegeArmsCmdAck = reinterpret_cast(SendStream.GetBuffer(sizeof(PktSiegeArmsCmd))); if (NULL != lpPktSiegeArmsCmdAck) { if (PktBase::NO_SERVER_ERR == wError) { lpPktSiegeArmsCmdAck->m_dwCID = lpSiegeArms->GetOwnerID(); lpPktSiegeArmsCmdAck->m_dwArmsID = lpSiegeArms->GetCID(); lpPktSiegeArmsCmdAck->m_cState = lpSiegeArms->GetState(); lpPktSiegeArmsCmdAck->m_dwValue = dwValue; lpPktSiegeArmsCmdAck->m_cSubCmd = cSubCmd; } else { *lpPktSiegeArmsCmd = *lpPktSiegeArmsCmd; } SendStream.WrapHeader(sizeof(PktSiegeArmsCmd), CmdSiegeArmsCmd, 0, wError); } return true; } bool SetCastleRight(CSendStream& SendStream, PktBase* lpPktBase) { PktCastleRight* lpPktCastleRight = static_cast(lpPktBase); unsigned short wError = PktBase::NO_SERVER_ERR; unsigned long dwCastleID = lpPktCastleRight->m_dwCastleID; CastleRight castleRight = lpPktCastleRight->m_CastleRight; CCastleDB* lpCastle = CCastleDBMgr::GetInstance().GetCastle(dwCastleID); if (NULL == lpCastle) { wError = PktBase::SERVER_ERROR; } else { lpCastle->SetRight(castleRight); } PktCastleRight pktCastleRight; memset(&pktCastleRight, 0, sizeof(PktCastleRight)); pktCastleRight.m_dwCastleID = dwCastleID; pktCastleRight.m_CastleRight = castleRight; if (PktBase::NO_SERVER_ERR == wError) { if (PacketWrap::WrapHeader(reinterpret_cast(&pktCastleRight), sizeof(PktCastleRight), CmdCastleRight, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCastleRight), sizeof(PktCastleRight), CmdCastleRight)); } } else { SendStream.WrapCompress(reinterpret_cast(&pktCastleRight), sizeof(PktCastleRight), CmdCastleRight, 0, wError); } return true; } bool SetCampRight(CSendStream& SendStream, PktBase* lpPktBase) { PktCampRight* lpPktCampRight = static_cast(lpPktBase); unsigned short wError = PktBase::NO_SERVER_ERR; unsigned long dwCampID = lpPktCampRight->m_dwCampID; CampRight campRight = lpPktCampRight->m_CampRight; CampRight diffCampRight; std::fill_n(&diffCampRight.m_aryCampRight[0], int(CampRight::MAX_RIGHT_NUM), 0); CCampDB* lpCamp = CSiegeObjectDBMgr::GetInstance().GetCamp(dwCampID); if (NULL == lpCamp) { wError = PktBase::SERVER_ERROR; } else { const CampRight& oldCampRight = lpCamp->GetRight(); for (int i=0; iSetRight(campRight); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ¸Þ¼¼Áö º¸³»±â if (PktBase::NO_SERVER_ERR == wError) { PktCampMessage pktCampMessage; memset(&pktCampMessage, 0, sizeof(PktCampMessage)); if (lpCamp->IsWorldWeapon()) { // ¿ùµå ¿þÆù ±ÇÇÑ º¯°æ // ¸Þ¼¼Áö Á¾·ù, Á¸ ¹øÈ£, ±ÇÇÑ Á¤º¸, °øÁö ¾Æ´Ô pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_WEAPON_SET_RIGHT; pktCampMessage.m_dwCampID = lpCamp->GetCampID(); pktCampMessage.m_dwGID = lpCamp->GetGID(); pktCampMessage.m_cZone = lpCamp->GetZone(); pktCampMessage.m_bNotify = false; pktCampMessage.m_Right.m_cCampControl = diffCampRight.m_aryCampRight[CampRight::CAMP_CONTROL]; if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); } } else { // ±æµå ¿ä»õ ±ÇÇÑ º¯°æ // ¸Þ¼¼Áö Á¾·ù, Á¸ ¹øÈ£, ±ÇÇÑ Á¤º¸, °øÁö ¾Æ´Ô pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_SET_RIGHT; pktCampMessage.m_dwCampID = lpCamp->GetCampID(); pktCampMessage.m_dwGID = lpCamp->GetGID(); pktCampMessage.m_cZone = lpCamp->GetZone(); pktCampMessage.m_bNotify = false; pktCampMessage.m_Right.m_cCampControl = diffCampRight.m_aryCampRight[CampRight::CAMP_CONTROL]; if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); } } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// PktCampRight* lpPktCampRightAck = reinterpret_cast( SendStream.GetBuffer(sizeof(PktCampRight))); if (NULL != lpPktCampRightAck) { lpPktCampRightAck->m_dwCampID = dwCampID; lpPktCampRightAck->m_CampRight = campRight; if (SendStream.WrapHeader(sizeof(PktCampRight), CmdCampRight, 0, wError)) { return true; } } return false; } bool CreateCamp(CSendStream& SendStream, PktBase* lpPktBase) { PktCreateCamp* lpPktCreateCamp = static_cast(lpPktBase); unsigned short wError = PktBase::NO_SERVER_ERR; CSiegeObjectDB* lpCamp = NULL; switch (lpPktCreateCamp->m_wObjectType) { case Siege::CAMP: { lpCamp = CSiegeObjectDBMgr::GetInstance().CreateCamp(lpPktCreateCamp->m_dwGID, lpPktCreateCamp->m_cZone, lpPktCreateCamp->m_cChannel, lpPktCreateCamp->m_Pos); } break; case Siege::KARTERANT_WEAPON: case Siege::MERKADIA_WEAPON: { if (Creature::STATELESS == CSiegeObjectDBMgr::GetInstance().GetWorldWeaponNation(lpPktCreateCamp->m_cZone, lpPktCreateCamp->m_cChannel)) { lpCamp = CSiegeObjectDBMgr::GetInstance().CreateWorldWeapon(lpPktCreateCamp->m_dwGID, lpPktCreateCamp->m_wObjectType, lpPktCreateCamp->m_cZone, lpPktCreateCamp->m_cChannel, lpPktCreateCamp->m_Pos); } else { wError = PktCreateCamp::ERROR_EXIST_ANOTHER_WEAPON; } } break; } PktCreateCamp* lpPktCreateCampAck = reinterpret_cast( SendStream.GetBuffer(sizeof(PktCreateCamp))); if (NULL != lpPktCreateCampAck) { if (lpCamp) { lpPktCreateCampAck->m_dwActorCID = lpPktCreateCamp->m_dwActorCID; lpPktCreateCampAck->m_dwCID = lpCamp->GetCID(); lpPktCreateCampAck->m_dwCampID = lpCamp->GetCampID(); lpPktCreateCampAck->m_dwGID = lpCamp->GetGID(); lpPktCreateCampAck->m_dwHP = 0; lpPktCreateCampAck->m_wObjectType = lpCamp->GetObjectType(); lpPktCreateCampAck->m_cState = lpCamp->GetState(); lpPktCreateCampAck->m_cSubState = lpCamp->GetSubState(); lpPktCreateCampAck->m_cUpgradeStep = 0; lpPktCreateCampAck->m_cNation = 0; lpPktCreateCampAck->m_cZone = lpCamp->GetZone(); lpPktCreateCampAck->m_cChannel = lpCamp->GetChannel(); lpPktCreateCampAck->m_Pos.fPointX = lpCamp->GetPosition().m_fPointX; lpPktCreateCampAck->m_Pos.fPointY = lpCamp->GetPosition().m_fPointY; lpPktCreateCampAck->m_Pos.fPointZ = lpCamp->GetPosition().m_fPointZ; lpPktCreateCampAck->m_cMaterial = 0; SendStream.WrapHeader(sizeof(PktCreateCamp), CmdCreateCamp, 0, wError); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ¸Þ¼¼Áö º¸³»±â PktCampMessage pktCampMessage; memset(&pktCampMessage, 0, sizeof(PktCampMessage)); if (lpCamp->IsWorldWeapon()) { // ¿ùµå ¿þÆù ±¸Ãà ½ÃÀÛ // ¸Þ¼¼Áö Á¾·ù, ±æµå À̸§, ±æµå ¸¶½ºÅÍ À̸§, Á¸ ¹øÈ£, ±¸Ãà ½Ã°£, °øÁö pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_WEAPON_ENCAMP_START; pktCampMessage.m_dwCampID = lpCamp->GetCampID(); pktCampMessage.m_dwGID = lpCamp->GetGID(); pktCampMessage.m_cZone = lpCamp->GetZone(); pktCampMessage.m_cRemainTime = Siege::CAMP_ENCAMPING_TIME; pktCampMessage.m_bNotify = true; Guild::CGuildDB* lpGuild = static_cast(Guild::CGuildDBMgr::GetInstance().GetGuild( lpCamp->GetGID() )); if ( lpGuild ) { strcpy(pktCampMessage.m_szGuildName, lpGuild->GetName()); // ±æµå À̸§ const Guild::MemberInfo& masterInfo = lpGuild->GetMaster(); strcpy(pktCampMessage.m_szMasterName, masterInfo.m_strName); // ±æµå ¸¶½ºÅÍ À̸§ } if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); } } else { // ±æµå ¿ä»õ ±¸Ãà ½ÃÀÛ // ¸Þ¼¼Áö Á¾·ù, Á¸ ¹øÈ£, ±æµå ¸¶½ºÅÍ À̸§, ±¸Ãà ½Ã°£, °øÁö ¾Æ´Ô pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_ENCAMP_START; pktCampMessage.m_dwCampID = lpCamp->GetCampID(); pktCampMessage.m_dwGID = lpCamp->GetGID(); pktCampMessage.m_cZone = lpCamp->GetZone(); pktCampMessage.m_cRemainTime = Siege::CAMP_ENCAMPING_TIME; pktCampMessage.m_bNotify = false; Guild::CGuildDB* lpGuild = static_cast(Guild::CGuildDBMgr::GetInstance().GetGuild( lpCamp->GetGID() )); if ( lpGuild ) { const Guild::MemberInfo& masterInfo = lpGuild->GetMaster(); strcpy(pktCampMessage.m_szMasterName, masterInfo.m_strName); // ±æµå ¸¶½ºÅÍ À̸§ } if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// return true; } else { if (0 == wError) { wError = PktCreateCamp::SERVER_ERROR; } ::memset(lpPktCreateCampAck, 0, sizeof(PktCreateCamp)); return SendStream.WrapHeader(sizeof(PktCreateCamp), CmdCreateCamp, 0, wError); } } return false; } bool CreateSiegeArms(CSendStream& SendStream, PktBase* lpPktBase) { PktCreateSiegeArms* lpPktCreateSiegeArms = static_cast(lpPktBase); unsigned short wError = PktBase::NO_SERVER_ERR; CSiegeObjectDB* lpSiegeArms = CSiegeObjectDBMgr::GetInstance().CreateSiegeArms( lpPktCreateSiegeArms->m_dwOwnerID, lpPktCreateSiegeArms->m_cNation, lpPktCreateSiegeArms->m_cZone, lpPktCreateSiegeArms->m_cChannel, lpPktCreateSiegeArms->m_wObjectType, lpPktCreateSiegeArms->m_cUpgradeStep, lpPktCreateSiegeArms->m_Pos); PktCreateSiegeArms* lpPktCreateSiegeArmsAck = reinterpret_cast(SendStream.GetBuffer(sizeof(PktCreateSiegeArms))); if (NULL != lpPktCreateSiegeArmsAck) { if (lpSiegeArms) { lpPktCreateSiegeArmsAck->m_dwCID = lpSiegeArms->GetCID(); lpPktCreateSiegeArmsAck->m_dwOwnerID = lpSiegeArms->GetOwnerID(); lpPktCreateSiegeArmsAck->m_wObjectType = lpSiegeArms->GetObjectType(); lpPktCreateSiegeArmsAck->m_cNation = (unsigned char)lpSiegeArms->GetNation(); lpPktCreateSiegeArmsAck->m_dwHP = lpSiegeArms->GetNowHP(); lpPktCreateSiegeArmsAck->m_cState = lpSiegeArms->GetState(); lpPktCreateSiegeArmsAck->m_cUpgradeStep = lpSiegeArms->GetUpgradeStep(); lpPktCreateSiegeArmsAck->m_cZone = lpSiegeArms->GetZone(); lpPktCreateSiegeArmsAck->m_cChannel = lpSiegeArms->GetChannel(); lpPktCreateSiegeArmsAck->m_Pos.fPointX = lpSiegeArms->GetPosition().m_fPointX; lpPktCreateSiegeArmsAck->m_Pos.fPointY = lpSiegeArms->GetPosition().m_fPointY; lpPktCreateSiegeArmsAck->m_Pos.fPointZ = lpSiegeArms->GetPosition().m_fPointZ; } else { wError = PktCreateSiegeArms::SERVER_ERROR; ::memset(lpPktCreateSiegeArmsAck, 0, sizeof(PktCreateSiegeArms)); } return SendStream.WrapHeader(sizeof(PktCreateSiegeArms), CmdCreateSiegeArms, 0, wError); } return false; } bool CampCmd(CSendStream& SendStream, PktBase* lpPktBase) { PktCampCmd* lpPktCampCmd = static_cast(lpPktBase); unsigned short wError = PktBase::NO_SERVER_ERR; unsigned long dwCID = lpPktCampCmd->m_dwCID; unsigned long dwCampID = lpPktCampCmd->m_dwCampID; unsigned char cState = lpPktCampCmd->m_cState; unsigned long dwValue1 = lpPktCampCmd->m_dwValue1; unsigned long dwValue2 = lpPktCampCmd->m_dwValue2; unsigned char cSubCmd = lpPktCampCmd->m_cSubCmd; CCampDB* lpCamp = CSiegeObjectDBMgr::GetInstance().GetCamp(dwCampID); if (NULL == lpCamp) { wError = PktBase::SERVER_ERROR; } else { lpCamp->UpdateLastUseTime(); switch (cSubCmd) { // ±æµå ¿ä»õ ±¸Ãà ÇØÁ¦ case PktCampCmd::CAMP_CANCEL: { if (false == lpCamp->CancelBuild()) { wError = PktBase::SERVER_ERROR; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ¸Þ¼¼Áö º¸³»±â if (PktBase::NO_SERVER_ERR == wError) { PktCampMessage pktCampMessage; memset(&pktCampMessage, 0, sizeof(PktCampMessage)); if (lpCamp->IsWorldWeapon()) { // ¿ùµå ¿þÆù ±¸Ãà Ãë¼Ò // ¸Þ¼¼Áö Á¾·ù, Á¸ ¹øÈ£, ±æµå À̸§, ±æµå ¸¶½ºÅÍ À̸§, ±¸Ãà Ãë¼Ò ½Ã°£, °øÁö pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_WEAPON_CANCEL_START; pktCampMessage.m_dwCampID = lpCamp->GetCampID(); pktCampMessage.m_dwGID = lpCamp->GetGID(); pktCampMessage.m_cZone = lpCamp->GetZone(); pktCampMessage.m_cRemainTime = Siege::CAMP_CANCELING_TIME; pktCampMessage.m_bNotify = true; Guild::CGuildDB* lpGuild = static_cast(Guild::CGuildDBMgr::GetInstance().GetGuild( lpCamp->GetGID() )); if (NULL != lpGuild) { strcpy(pktCampMessage.m_szGuildName, lpGuild->GetName()); // ±æµå À̸§ const Guild::MemberInfo& masterInfo = lpGuild->GetMaster(); strcpy(pktCampMessage.m_szMasterName, masterInfo.m_strName); // ±æµå ¸¶½ºÅÍ À̸§ } if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); } } else { // ±æµå ¿ä»õ ±¸Ãà Ãë¼Ò // ¸Þ¼¼Áö Á¾·ù, Á¸ ¹øÈ£, ±æµå ¸¶½ºÅÍ À̸§, ±¸Ãà Ãë¼Ò ½Ã°£, °øÁö ¾Æ´Ô pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_CANCEL_START; pktCampMessage.m_dwCampID = lpCamp->GetCampID(); pktCampMessage.m_dwGID = lpCamp->GetGID(); pktCampMessage.m_cZone = lpCamp->GetZone(); pktCampMessage.m_cRemainTime = Siege::CAMP_CANCELING_TIME; pktCampMessage.m_bNotify = false; Guild::CGuildDB* lpGuild = static_cast(Guild::CGuildDBMgr::GetInstance().GetGuild( lpCamp->GetGID() )); if (NULL != lpGuild) { const Guild::MemberInfo& masterInfo = lpGuild->GetMaster(); strcpy(pktCampMessage.m_szMasterName, masterInfo.m_strName); // ±æµå ¸¶½ºÅÍ À̸§ } if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); } } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } break; // Value1[In] : ¾÷±×·¹ÀÌµå ½Ã°£ // Value2[In] : ³²Àº ÀÚÀç¼ö // Value1[Out] : ¾÷±×·¹ÀÌµå ´Ü°è case PktCampCmd::CAMP_UPGRADE: { if (false == lpCamp->Upgrade(static_cast(dwValue1))) { wError = PktBase::SERVER_ERROR; } dwValue1 = lpCamp->GetUpgradeStep(); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ¸Þ¼¼Áö º¸³»±â if (PktBase::NO_SERVER_ERR == wError) { lpCamp->SetMaterialNum(static_cast(dwValue2)); PktCampMessage pktCampMessage; memset(&pktCampMessage, 0, sizeof(PktCampMessage)); if (lpCamp->IsWorldWeapon()) { // ¿ùµå ¿þÆù ¾÷±×·¹À̵å // ¸Þ¼¼Áö Á¾·ù, Á¸ ¹øÈ£, ¾÷±×·¹À̵åÇÑ PC À̸§, ¾÷±×·¹ÀÌµå ½Ã°£, °øÁö ¾Æ´Ô pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_WEAPON_UPGRADE_START; pktCampMessage.m_dwCampID = lpCamp->GetCampID(); pktCampMessage.m_dwGID = lpCamp->GetGID(); pktCampMessage.m_cZone = lpCamp->GetZone(); pktCampMessage.m_cRemainTime = lpCamp->GetUpgradeTime(); pktCampMessage.m_bNotify = false; strcpy(pktCampMessage.m_szPCName, GetCharacterName(dwCID)); // PC À̸§ if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); } } else { // ±æµå ¿ä»õ ¾÷±×·¹À̵å // ¸Þ¼¼Áö Á¾·ù, Á¸ ¹øÈ£, ¾÷±×·¹À̵åÇÑ PC À̸§, ¾÷±×·¹ÀÌµå ½Ã°£, °øÁö ¾Æ´Ô pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_UPGRADE_START; pktCampMessage.m_dwCampID = lpCamp->GetCampID(); pktCampMessage.m_dwGID = lpCamp->GetGID(); pktCampMessage.m_cZone = lpCamp->GetZone(); pktCampMessage.m_cRemainTime = lpCamp->GetUpgradeTime(); pktCampMessage.m_bNotify = false; strcpy(pktCampMessage.m_szPCName, GetCharacterName(dwCID)); // PC À̸§ if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); } } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } break; // Value1[In] : RepairHP ¾ç // Value2[In] : ³²Àº ÀÚÀç¼ö case PktCampCmd::CAMP_REPAIR: { if (false == lpCamp->Repair(dwValue1)) { wError = PktBase::SERVER_ERROR; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ¸Þ¼¼Áö º¸³»±â if (PktBase::NO_SERVER_ERR == wError) { lpCamp->SetMaterialNum(static_cast(dwValue2)); PktCampMessage pktCampMessage; memset(&pktCampMessage, 0, sizeof(PktCampMessage)); if (lpCamp->IsWorldWeapon()) { // ¿ùµå ¿þÆù ¼ö¸® // ¸Þ¼¼Áö Á¾·ù, Á¸ ¹øÈ£, ¼ö¸®ÇÑ PC À̸§, ¼ö¸® ½Ã°£, °øÁö ¾Æ´Ô pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_WEAPON_REPAIR_START; pktCampMessage.m_dwCampID = lpCamp->GetCampID(); pktCampMessage.m_dwGID = lpCamp->GetGID(); pktCampMessage.m_cZone = lpCamp->GetZone(); pktCampMessage.m_cRemainTime = lpCamp->GetRepairTime(); pktCampMessage.m_bNotify = false; strcpy(pktCampMessage.m_szPCName, GetCharacterName(dwCID)); // PC À̸§ if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); } } else { // ±æµå ¿ä»õ ¼ö¸® // ¸Þ¼¼Áö Á¾·ù, Á¸ ¹øÈ£, ¼ö¸®ÇÑ PC À̸§, ¼ö¸® ½Ã°£, °øÁö ¾Æ´Ô pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_REPAIR_START; pktCampMessage.m_dwCampID = lpCamp->GetCampID(); pktCampMessage.m_dwGID = lpCamp->GetGID(); pktCampMessage.m_cZone = lpCamp->GetZone(); pktCampMessage.m_cRemainTime = lpCamp->GetRepairTime(); pktCampMessage.m_bNotify = false; strcpy(pktCampMessage.m_szPCName, GetCharacterName(dwCID)); // PC À̸§ if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); } } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } break; case PktCampCmd::CAMP_CARE: return true; case PktCampCmd::CAMP_TO_STARTKIT: { if (false == lpCamp->ToStartKit()) { wError = PktCampCmd::SERVER_ERROR; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ¸Þ¼¼Áö º¸³»±â if (PktBase::NO_SERVER_ERR == wError) { PktCampMessage pktCampMessage; memset(&pktCampMessage, 0, sizeof(PktCampMessage)); if (lpCamp->IsWorldWeapon()) { // ¿ùµå ¿þÆù ½º½º·Î ÆÄ±« // ¸Þ¼¼Áö Á¾·ù, Á¸ ¹øÈ£, ½º½º·Î ÆÄ±«ÇÑ PC À̸§, ÆÄ±« ½Ã°£, °øÁö pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_WEAPON_SELF_DESTROY_START; pktCampMessage.m_dwCampID = lpCamp->GetCampID(); pktCampMessage.m_dwGID = lpCamp->GetGID(); pktCampMessage.m_cZone = lpCamp->GetZone(); pktCampMessage.m_cRemainTime = Siege::CAMP_TO_STARTKIT_TIME; pktCampMessage.m_bNotify = true; strcpy(pktCampMessage.m_szPCName, GetCharacterName(dwCID)); // PC À̸§ if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); } } else { // ±æµå ¿ä»õ ½º½º·Î ÆÄ±« // ¸Þ¼¼Áö Á¾·ù, Á¸ ¹øÈ£, ½º½º·Î ÆÄ±«ÇÑ PC À̸§, ÆÄ±« ½Ã°£, °øÁö ¾Æ´Ô pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_SELF_DESTROY_START; pktCampMessage.m_dwCampID = lpCamp->GetCampID(); pktCampMessage.m_dwGID = lpCamp->GetGID(); pktCampMessage.m_cZone = lpCamp->GetZone(); pktCampMessage.m_cRemainTime = Siege::CAMP_TO_STARTKIT_TIME; pktCampMessage.m_bNotify = false; strcpy(pktCampMessage.m_szPCName, GetCharacterName(dwCID)); // PC À̸§ if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); } } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } break; // Value1[In] : º¯ÇüÇÒ Å¸ÀÔ // Value2[In] : ³²Àº ÀÚÀç¼ö // Value1[Out] : º¯ÇüÇÒ Å¸ÀÔ case PktCampCmd::CAMP_CHANGE_TYPE: { if (false == lpCamp->ChangeType( static_cast(dwValue1) )) { wError = PktCampCmd::SERVER_ERROR; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ¸Þ¼¼Áö º¸³»±â if (PktBase::NO_SERVER_ERR == wError) { lpCamp->SetMaterialNum( static_cast(dwValue2) ); PktCampMessage pktCampMessage; memset(&pktCampMessage, 0, sizeof(PktCampMessage)); // ±æµå ¿ä»õ ŸÀÔ º¯Çü // ¸Þ¼¼Áö Á¾·ù, Á¸ ¹øÈ£, º¯ÇüÀ» ½ÃµµÇÑ Ä³¸¯ÅÍ À̸§, ±âÁ¸ ŸÀÔ, º¯ÇüÇÒ Å¸ÀÔ, °øÁö ¾Æ´Ô pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_CHANGE_TYPE_START; pktCampMessage.m_dwCampID = lpCamp->GetCampID(); pktCampMessage.m_dwGID = lpCamp->GetGID(); pktCampMessage.m_cZone = lpCamp->GetZone(); pktCampMessage.m_nValue1 = dwValue1; pktCampMessage.m_nValue2 = lpCamp->GetObjectType(); pktCampMessage.m_bNotify = false; strcpy(pktCampMessage.m_szPCName, GetCharacterName(dwCID)); // º¯ÇüÀ» ½ÃµµÇÑ Ä³¸¯ÅÍ À̸§ if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } break; // Value1[In] : ÆÄ±«ÇÑ ±æµå ¾ÆÀ̵ð // Value1[Out] : ÆÄ±«ÇÑ ±æµå ¾ÆÀ̵ð case PktCampCmd::CAMP_DESTROY: { unsigned char cTime = 0; // -------------------------------------------------------------------------------------------------------------- // ¸í¼º ó¸® int nFamePerMember = 0; // ÆÄ±«´çÇÑ ±æµå Guild::CGuildDB* lpGuild = static_cast( Guild::CGuildDBMgr::GetInstance().GetGuild(lpCamp->GetGID())); // ÆÄ±«ÇÑ ±æµå Guild::CGuildDB* lpOffenceGuild = static_cast( Guild::CGuildDBMgr::GetInstance().GetGuild(dwValue1)); if (lpGuild) { lpGuild->AddAllMemberFame( Guild::TYPE_VALUE, Siege::FAME_FOR_DESTROYED_CAMP, lpOffenceGuild ); } if (lpGuild && lpOffenceGuild) { TIME* pTime = lpOffenceGuild->GetGuildPointTime(); if(pTime) { CTime nowTime = CTime::GetCurrentTime(); CTimeSpan timeSpan(0); CTime GuildPointTime(pTime->Year, pTime->Month, pTime->Day, pTime->Hour, pTime->Minute, pTime->Second); timeSpan = nowTime - GuildPointTime; // Minbobo if(timeSpan.GetTotalMinutes() >= Guild::TIME_GUILD_POINT) { int nTotalFame = lpGuild->GetCurrentMemberNum() * (-Siege::FAME_FOR_DESTROYED_CAMP); int nMemberNum = lpOffenceGuild->GetLoginedCurrentMemberNum(); if (0 < nMemberNum) { nFamePerMember = nTotalFame / nMemberNum; if (0 < nFamePerMember) { lpOffenceGuild->AddLoginedMemberFame( Guild::TYPE_VALUE, nFamePerMember, lpGuild ); } } lpOffenceGuild->SetGuildPointFlag(1); SYSTEMTIME sysTime; GetLocalTime(&sysTime); pTime->Year = sysTime.wYear; pTime->Month = sysTime.wMonth; pTime->Day = sysTime.wDay; pTime->Hour = sysTime.wHour; pTime->Minute = sysTime.wMinute; pTime->Second = sysTime.wSecond; } else { cTime = (unsigned char)timeSpan.GetTotalMinutes(); } } } // -------------------------------------------------------------------------------------------------------------- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ¸Þ¼¼Áö º¸³»±â PktCampMessage pktCampMessage; memset(&pktCampMessage, 0, sizeof(PktCampMessage)); if (lpCamp->IsWorldWeapon()) { // ¿ùµå ¿þÆù ÆÄ±« °øÁö // ¸Þ¼¼Áö Á¾·ù, Á¸ ¹øÈ£, ÆÄ±«ÇÑ PCÀÇ ±¹°¡, ÆÄ±«ÇÑ PCÀÇ À̸§, ÆÄ±«´çÇÑ ±æµå À̸§, ÆÄ±«´çÇÑ ±¹°¡, °øÁö pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_WEAPON_DESTROYED; pktCampMessage.m_dwCampID = lpCamp->GetCampID(); pktCampMessage.m_dwGID = lpCamp->GetGID(); pktCampMessage.m_cZone = lpCamp->GetZone(); pktCampMessage.m_cNation = GetCharacterNation(dwCID); pktCampMessage.m_bNotify = true; strcpy(pktCampMessage.m_szPCName, GetCharacterName(dwCID)); // ÆÄ±«ÇÑ Ä³¸¯ÅÍ À̸§ if ( lpGuild ) { strcpy(pktCampMessage.m_szGuildName, lpGuild->GetName()); // ÆÄ±«´çÇÑ ±æµå À̸§ pktCampMessage.m_nValue1 = lpGuild->GetNation(); // ÆÄ±«´çÇÑ ±¹°¡ } if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); } } else { // ±æµå ¿ä»õ ÆÄ±« °øÁö // ¸Þ¼¼Áö Á¾·ù, Á¸ ¹øÈ£, ÆÄ±«ÇÑ PCÀÇ ±¹°¡, ÆÄ±«ÇÑ PCÀÇ À̸§, ÆÄ±«´çÇÑ ±æµå À̸§, °øÁö pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_DESTROYED; pktCampMessage.m_dwCampID = lpCamp->GetCampID(); pktCampMessage.m_dwGID = lpCamp->GetGID(); pktCampMessage.m_cZone = lpCamp->GetZone(); pktCampMessage.m_cNation = GetCharacterNation(dwCID); pktCampMessage.m_bNotify = true; if(GetCharacterName(dwCID)) { strcpy(pktCampMessage.m_szPCName, GetCharacterName(dwCID)); } if ( lpGuild ) { strcpy(pktCampMessage.m_szGuildName, lpGuild->GetName()); } if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); } memset(&pktCampMessage, 0, sizeof(PktCampMessage)); // ±æµå ¿ä»õ ÆÄ±« ¾Ë¸² (ÆÄ±«´çÇÑ ±æµå ¿ä»õÀÇ ±æµå¿ø¿¡°Ô) // ¸Þ¼¼Áö Á¾·ù, Á¸ ¹øÈ£, ¸í¼º, °øÁö ¾Æ´Ô pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_DESTROYED; pktCampMessage.m_dwCampID = lpCamp->GetCampID(); pktCampMessage.m_dwGID = lpCamp->GetGID(); pktCampMessage.m_cZone = lpCamp->GetZone(); pktCampMessage.m_nValue1 = -(Siege::FAME_FOR_DESTROYED_CAMP); pktCampMessage.m_bNotify = false; if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); } memset(&pktCampMessage, 0, sizeof(PktCampMessage)); // ±æµå ¿ä»õ ÆÄ±« ¾Ë¸² (ÆÄ±«ÇÑ PCÀÇ ±æµå¿ø¿¡°Ô) // ¸Þ¼¼Áö Á¾·ù, Á¸ ¹øÈ£, ÆÄ±«µÈ ±æµå ¿ä»õÀÇ ±¹°¡, ÆÄ±«µÈ ±æµå ¿ä»õÀÇ ±æµå À̸§, ¸í¼º, °øÁö ¾Æ´Ô pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_DESTROY; pktCampMessage.m_dwCampID = lpCamp->GetCampID(); pktCampMessage.m_dwGID = dwValue1; pktCampMessage.m_cZone = lpCamp->GetZone(); pktCampMessage.m_nValue1 = nFamePerMember; pktCampMessage.m_bNotify = false; pktCampMessage.m_cTimeChk = cTime; if ( lpGuild ) { pktCampMessage.m_cNation = lpGuild->GetNation(); strcpy(pktCampMessage.m_szGuildName, lpGuild->GetName()); } if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// lpCamp->SendCampCmd(PktCampCmd::CAMP_DESTROY, dwValue1); lpCamp->Destroy(); CSiegeObjectDBMgr::GetInstance().DeleteCamp( lpCamp->GetCampID() ); return true; } break; // HP ¾÷µ¥ÀÌÆ® // Value1[In] : ÇöÀç HP case PktCampCmd::CAMP_UPDATE_HP: { lpCamp->UpdateHP(dwValue1); return true; } break; // ä±¼±â »óÅ On / Off // Value1[In] : ¹Ù²Ü »óÅ (On / Off) // Value1[Out] : ¹Ù²ï »óÅ (On / Ready / Off) case PktCampCmd::MINING_CAMP_ON_OFF: { if ( Siege::MINING_CAMP == lpCamp->GetObjectType() ) { CMiningCampDB* lpMiningCamp = reinterpret_cast(lpCamp); if ( lpMiningCamp ) { if ( !lpMiningCamp->OnOff( dwValue1 ) ) { ERRLOG3(g_Log, "ä±¼±â Äѱâ/²ô±â ½ÇÆÐ, CampID : 0x%10u, CurrSubState : %d, ChangeState : %d", lpCamp->GetCampID(), lpCamp->GetSubState(), dwValue1); return true; } } } else { ERRLOG1(g_Log, "ä±¼±â ŸÀÔÀ¸·Î ij½ºÆÃ ½ÇÆÐ CampID : 0x%10u", lpCamp->GetCampID()); return true; } } break; // ä±¼±â ´©Àû ±¤¹° ȹµæ // dwValue1[In] : Mineral Item ID // dwValue2[In] : Amount case PktCampCmd::MINING_CAMP_GAIN_MINERAL: { if ( Siege::MINING_CAMP == lpCamp->GetObjectType() ) { CMiningCampDB* lpMiningCamp = reinterpret_cast(lpCamp); if ( lpMiningCamp ) { unsigned short wMineralID = static_cast( dwValue1 ); unsigned short wAmount = static_cast( dwValue2 ); if ( !lpMiningCamp->GainMineral(wMineralID, wAmount) ) { ERRLOG3(g_Log, "ä±¼±â ´©Àû ±¤¹° ȹµæ ½ÇÆÐ, CampID : 0x%10u, MineralID : %d, Amount : %d", lpCamp->GetCampID(), wMineralID, wAmount); return true; } } } else { ERRLOG1(g_Log, "ä±¼±â ŸÀÔÀ¸·Î ij½ºÆÃ ½ÇÆÐ CampID : 0x%10u", lpCamp->GetCampID()); return true; } } break; // ¼¼À² º¯°æ (±æµå ¿ä»õ »óÁ¡) // dwValue1[In] : º¯°æ ÈÄ ¼¼À² case PktCampCmd::CAMP_SHOP_CHANGE_TAX: { if (Siege::CAMP_SHOP == lpCamp->GetObjectType()) { CCampShopDB* lpCampShop = reinterpret_cast(lpCamp); if (NULL != lpCampShop) { unsigned char cTax = static_cast(dwValue1); lpCampShop->SetTax(cTax); } } else { ERRLOG1(g_Log, "»óÁ¡ ŸÀÔÀ¸·Î ij½ºÆÃ ½ÇÆÐ CampID : 0x%10u", lpCamp->GetCampID()); return true; } } break; // ¿ùµå ¿þÆù ¹«±â ÀåÀü // dwValue1[In] : ÀåÀü ½Ã°£ // dwValue2[In] : ³²Àº ÀÚÀç¼ö case PktCampCmd::WORLDWEAPON_CHARGE: { if ( Siege::KARTERANT_WEAPON == lpCamp->GetObjectType() || Siege::MERKADIA_WEAPON == lpCamp->GetObjectType() ) { CWorldWeaponDB* lpWorldWeapon = reinterpret_cast(lpCamp); if (NULL != lpWorldWeapon) { if (false == lpWorldWeapon->UpdateWeaponState(Siege::WEAPON_CHARGE, dwValue1, dwValue2)) { ERRLOG2(g_Log, "¿ùµå ¿þÆù ¹«±â ÀåÀü ½ÇÆÐ, CampID : 0x%10u, SubState : %d", lpWorldWeapon->GetCampID(), lpWorldWeapon->GetSubState()); return true; } else { lpWorldWeapon->SetMaterialNum( static_cast(dwValue2) ); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ¸Þ¼¼Áö º¸³»±â PktCampMessage pktCampMessage; memset(&pktCampMessage, 0, sizeof(PktCampMessage)); // ¿ùµå ¿þÆù ¹«±â ÀåÀü // ¸Þ¼¼Áö Á¾·ù, Á¸ ¹øÈ£, ¿ùµå ¿þÆù ±¹°¡, °øÁö ¾Æ´Ô pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_WEAPON_CHARGE_START; pktCampMessage.m_dwCampID = lpWorldWeapon->GetCampID(); pktCampMessage.m_cNation = GetCharacterNation(dwCID); pktCampMessage.m_dwGID = lpWorldWeapon->GetGID(); pktCampMessage.m_cZone = lpWorldWeapon->GetZone(); pktCampMessage.m_bNotify = false; if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } } } else { ERRLOG1(g_Log, "¿ùµå ¿þÆù ŸÀÔÀ¸·Î ij½ºÆÃ ½ÇÆÐ CampID : 0x%10u", lpCamp->GetCampID()); return true; } } break; // ¿ùµå ¿þÆù ¹«±â ¹ß»ç // dwValue1[In] : X ÁÂÇ¥ // dwValue2[In] : Z ÁÂÇ¥ case PktCampCmd::WORLDWEAPON_FIRE: { if ( Siege::KARTERANT_WEAPON == lpCamp->GetObjectType() || Siege::MERKADIA_WEAPON == lpCamp->GetObjectType() ) { CWorldWeaponDB* lpWorldWeapon = reinterpret_cast(lpCamp); if (NULL != lpWorldWeapon) { if (false == lpWorldWeapon->UpdateWeaponState(Siege::WEAPON_FIRE, dwValue1, dwValue2)) { ERRLOG2(g_Log, "¿ùµå ¿þÆù ¹«±â ¹ß»ç ½ÇÆÐ, CampID : 0x%10u, SubState : %d", lpWorldWeapon->GetCampID(), lpWorldWeapon->GetSubState()); return true; } } } else { ERRLOG1(g_Log, "¿ùµå ¿þÆù ŸÀÔÀ¸·Î ij½ºÆÃ ½ÇÆÐ CampID : 0x%10u", lpCamp->GetCampID()); return true; } } break; // ¿ùµå ¿þÆù ¹«±â ¹ß»ç ¿Ï·á (Ack º¸³»Áö ¾Ê´Â´Ù.) case PktCampCmd::WORLDWEAPON_FIRE_COMPLETE: { if ( Siege::KARTERANT_WEAPON == lpCamp->GetObjectType() || Siege::MERKADIA_WEAPON == lpCamp->GetObjectType() ) { CWorldWeaponDB* lpWorldWeapon = reinterpret_cast(lpCamp); if (NULL != lpWorldWeapon) { lpWorldWeapon->Fire(); CSiegeObjectDBMgr::GetInstance().DeleteCamp(lpWorldWeapon->GetCampID()); return true; } } else { ERRLOG1(g_Log, "¿ùµå ¿þÆù ŸÀÔÀ¸·Î ij½ºÆÃ ½ÇÆÐ CampID : 0x%10u", lpCamp->GetCampID()); return true; } } break; default: ERRLOG1(g_Log, "Cmd:0x%02X / Á¸Àç ÇÏÁö ¾Ê´Â ±æµå ¿ä»õ ¸í·ÉÀ» ¿äûÇÏ¿´½À´Ï´Ù.", cSubCmd); return true; } } PktCampCmd* lpPktCampCmdAck = reinterpret_cast(SendStream.GetBuffer(sizeof(PktCampCmd))); if (NULL != lpPktCampCmdAck) { if (PktBase::NO_SERVER_ERR == wError) { lpPktCampCmdAck->m_dwCID = lpCamp->GetCID(); lpPktCampCmdAck->m_dwCampID = lpCamp->GetCampID(); lpPktCampCmdAck->m_cState = lpCamp->GetState(); lpPktCampCmdAck->m_dwValue1 = dwValue1; lpPktCampCmdAck->m_dwValue2 = dwValue2; lpPktCampCmdAck->m_cSubCmd = cSubCmd; } else { *lpPktCampCmdAck = *lpPktCampCmd; } return SendStream.WrapHeader(sizeof(PktCampCmd), CmdCampCmd, 0, wError); } return false; } bool CampMessage(CSendStream& SendStream, PktBase* lpPktBase) { PktCampMessage* lpPktCampMessage = static_cast(lpPktBase); unsigned long dwCampID = lpPktCampMessage->m_dwCampID; unsigned char cMsgCmd = lpPktCampMessage->m_cMsgCmd; CCampDB* lpCamp = CSiegeObjectDBMgr::GetInstance().GetCamp(dwCampID); if (NULL == lpCamp) { return false; } if (cMsgCmd == PktCampMessage::MSGCMD_TAKE_IN_MATERIAL || cMsgCmd == PktCampMessage::MSGCMD_TAKE_OUT_MATERIAL) { lpCamp->SetMaterialNum( static_cast(lpPktCampMessage->m_nValue2) ); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ¸Þ¼¼Áö º¸³»±â PktCampMessage pktCampMessage; memcpy(&pktCampMessage, lpPktCampMessage, sizeof(PktCampMessage)); // ¸Þ¼¼Áö Á¾·ù, Á¸ ¹øÈ£, °øÁö ¾Æ´Ô pktCampMessage.m_dwGID = lpCamp->GetGID(); pktCampMessage.m_cZone = lpCamp->GetZone(); if (PacketWrap::WrapHeader(reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage)); return true; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// return false; } bool MiningCampMineralInfo(CSendStream& SendStream, PktBase* lpPktBase) { PktMiningCampMineralInfo* lpPktMI = reinterpret_cast(lpPktBase); CampMineralInfo* lpMineralInfo = reinterpret_cast( lpPktMI + 1 ); CMiningCampDB* lpMiningCamp = reinterpret_cast( CSiegeObjectDBMgr::GetInstance().GetCamp(lpPktMI->m_dwCampID) ); if ( lpMiningCamp ) { return lpMiningCamp->UpdateMineralInfo(lpPktMI->m_cMineralType, lpPktMI->m_cNum, lpMineralInfo); } return false; } bool FertilityInfo(CSendStream& SendStream, PktBase* lpPktBase) { PktFertilityInfo* lpPktFI = reinterpret_cast(lpPktBase); ZoneChannelInfo* lpZoneChannelInfo = reinterpret_cast(lpPktFI + 1); unsigned long* lpFertilityData = reinterpret_cast(lpZoneChannelInfo + 1); return CMineralVeinDBMgr::GetInstance().UpdateFertilityInfo(lpZoneChannelInfo->m_cZone, lpZoneChannelInfo->m_cChannel, lpPktFI->m_wNum, lpFertilityData); } bool CampShopInfo(CSendStream& SendStream, PktBase* lpPktBase) { PktCampShopInfo* lpCampShopInfo = reinterpret_cast(lpPktBase); char* lpItemBuffer = reinterpret_cast(lpCampShopInfo + 1); CCampShopDB* lpCampDB = reinterpret_cast( CSiegeObjectDBMgr::GetInstance().GetCamp(lpCampShopInfo->m_dwCampID)); if (NULL == lpCampDB) { ERRLOG1(g_Log, "°ÔÀÓ ¼­¹ö¿¡¼­ ¾÷µ¥ÀÌÆ®ÇÏ·Á´Â ±æµå ¿ä»õ »óÁ¡ÀÌ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. CampID:0x%08x", lpCampShopInfo->m_dwCampID); return false; } lpCampDB->SetItemContainer(lpItemBuffer, lpCampShopInfo->m_CampShopInfo.m_dwBufferSize, lpCampShopInfo->m_CampShopInfo.m_cItemNum); lpCampDB->SetTempSafe(lpCampShopInfo->m_CampShopInfo.m_dwTempSafe); lpCampDB->SetTax(lpCampShopInfo->m_CampShopInfo.m_cTax); return lpCampDB->UpdateCampInfo( lpItemBuffer, lpCampShopInfo->m_CampShopInfo.m_dwBufferSize, lpCampShopInfo->m_CampShopInfo.m_cItemNum, lpCampShopInfo->m_CampShopInfo.m_dwTempSafe, lpCampShopInfo->m_CampShopInfo.m_cTax); } // Àӽà ¼¼±Ý Á¤º¸¸¦ °ÔÀÓ ¼­¹ö°¡ º¸³½ Á¤º¸·Î ¾÷µ¥ÀÌÆ®ÇÑ´Ù. bool CastleTaxMove(CSendStream& SendStream, PktBase* lpPktBase) { PktCastleTaxMove* lpTempTaxInfo = reinterpret_cast(lpPktBase); Castle::CCastleDB* lpCastle = Castle::CCastleDBMgr::GetInstance().GetCastle(lpTempTaxInfo->m_dwCastleID); if (NULL == lpCastle) { ERRLOG1(g_Log, "°ÔÀÓ ¼­¹ö¿¡¼­ ¾÷µ¥ÀÌÆ®ÇÏ·Á´Â ¼ºÀÌ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. CastleID:0x%08x", lpTempTaxInfo->m_dwCastleID); return false; } return lpCastle->SetTempTaxMoney(lpTempTaxInfo->m_dwMoveTempMoney, lpTempTaxInfo->m_dwResultTaxMoney); } // ±¤¹° ¼¼±Ý Á¤º¸¸¦ °ÔÀÓ ¼­¹ö°¡ º¸³½ Á¤º¸·Î ¾÷µ¥ÀÌÆ®ÇÑ´Ù. bool CastleMineralInfo(CSendStream& SendStream, PktBase* lpPktBase) { PktCastleMineralInfo* lpPktMI = reinterpret_cast(lpPktBase); CastleMineral* lpMineralInfo = reinterpret_cast( lpPktMI + 1 ); Castle::CCastleDB* lpCastle = Castle::CCastleDBMgr::GetInstance().GetCastle(lpPktMI->m_dwCastleID); if (NULL == lpCastle) { ERRLOG1(g_Log, "°ÔÀÓ ¼­¹ö¿¡¼­ ¾÷µ¥ÀÌÆ®ÇÏ·Á´Â ¼ºÀÌ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. CastleID:0x%08x", lpPktMI->m_dwCastleID); return false; } return lpCastle->SetMineralInfo(lpPktMI->m_cMineralType, lpPktMI->m_cNum, lpMineralInfo); } bool WarOnOff(CSendStream& SendStream, PktBase* lpPktBase) { PktWarOnOff* lpPktWarOnOff = reinterpret_cast(lpPktBase); unsigned long dwCID = lpPktWarOnOff->m_dwCID; unsigned char cType = lpPktWarOnOff->m_cType; unsigned char cFlag = lpPktWarOnOff->m_cFlag; using namespace DBAgent::DataStorage; CSessionData* lpSessionData = CSessionDataMgr::GetInstance().GetCharLoadedSession(dwCID); CCharacterData* lpCharacterData = 0; if (NULL != lpSessionData) { lpCharacterData = lpSessionData->GetCharacterData(); if (NULL != lpCharacterData && CSessionData::SE_CHAR_ENABLED == lpSessionData->GetSessionState()) { switch (cType) { case GameTime::GUILD: { lpCharacterData->SetGuildWarFlag(cFlag); } break; case GameTime::REALM: { lpCharacterData->SetRealmWarFlag(cFlag); } break; default: { ERRLOG2(g_Log, "¾÷µ¥ÀÌÆ® ÇÏ·Á´Â ÀüÀï Ç÷¡±×ÀÇ ÀüÀï ŸÀÔÀÌ ºÎÀûÀýÇÕ´Ï´Ù. CID : %10u, Type : %d", dwCID, cType); return false; } } } } PktWarOnOff* lpPktWarOnOffAck = reinterpret_cast(SendStream.GetBuffer(sizeof(PktWarOnOff))); if (NULL != lpPktWarOnOffAck) { lpPktWarOnOffAck->m_dwCID = dwCID; lpPktWarOnOffAck->m_cType = cType; lpPktWarOnOffAck->m_cFlag = cFlag; return SendStream.WrapHeader(sizeof(PktWarOnOff), CmdWarOnOff, 0, 0); } return true; } bool StatueCmd(CSendStream& SendSream, PktBase* lpPktBase) { PktStatueCmd* lpPktStatueCmd = reinterpret_cast(lpPktBase); StatueInfo* lpStatueInfo = reinterpret_cast(lpPktStatueCmd + 1); unsigned short wSubCmd = lpPktStatueCmd->m_wSubCmd; unsigned char cChannel = static_cast(lpPktStatueCmd->m_dwValue); switch (wSubCmd) { case PktStatueCmd::CMD_UPDATE_KID: { CStatueDBMgr::GetInstance().UpdateKID(lpStatueInfo->m_dwIndex, cChannel, lpStatueInfo->m_wKID); } break; case PktStatueCmd::CMD_UPDATE_LOST_HP: { CStatueDBMgr::GetInstance().UpdateLostHP(lpStatueInfo->m_dwIndex, cChannel, lpStatueInfo->m_dwLostHP); } break; default: return false; } return true; } bool RealmPoint(CSendStream& SendSream, PktBase* lpPktBase) { using namespace DBAgent::DataStorage; PktRealmPoint* lpPktRealmPoint = reinterpret_cast(lpPktBase); CSessionData* lpSessionData = CSessionDataMgr::GetInstance().GetCharLoadedSession(lpPktRealmPoint->m_dwCID); if(lpSessionData) { DBAgent::DataStorage::CCharacterData* lpCharacterData = lpSessionData->GetCharacterData(); if(lpCharacterData) { lpCharacterData->SetRealmPoint(lpPktRealmPoint->m_cRealmPoint); if(PacketWrap::WrapHeader(reinterpret_cast(lpPktRealmPoint), sizeof(PktRealmPoint), CmdRealmPoint, 0, 0)) { DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer( reinterpret_cast(lpPktRealmPoint), sizeof(PktRealmPoint), CmdRealmPoint)); } } } return true; } } } const char* GetCharacterName(unsigned long dwCID) { using namespace DBAgent::DataStorage; CSessionData* lpSessionData = CSessionDataMgr::GetInstance().GetCharLoadedSession(dwCID); CCharacterData* lpCharacterData = 0; if (0 == lpSessionData || 0 == (lpCharacterData = lpSessionData->GetCharacterData())) { // ij¸¯ÅͰ¡ ¾È¸Å´Þ·ÁÀÖ´Â °æ¿ì, ij¸¯Å͸¦ ºÒ·¯¿Â´Ù. lpCharacterData = static_cast( CCharacterDataMgr::GetInstance().GetLogoutData(dwCID)); if (NULL != lpCharacterData) { return lpCharacterData->GetInfo().Name; } } else if (CSessionData::SE_CHAR_ENABLED == lpSessionData->GetSessionState()) { if (NULL != lpCharacterData) { return lpCharacterData->GetInfo().Name; } } return NULL; } unsigned char GetCharacterNation(unsigned long dwCID) { using namespace DBAgent::DataStorage; CSessionData* lpSessionData = CSessionDataMgr::GetInstance().GetCharLoadedSession(dwCID); CCharacterData* lpCharacterData = 0; if (0 == lpSessionData || 0 == (lpCharacterData = lpSessionData->GetCharacterData())) { // ij¸¯ÅͰ¡ ¾È¸Å´Þ·ÁÀÖ´Â °æ¿ì, ij¸¯Å͸¦ ºÒ·¯¿Â´Ù. lpCharacterData = static_cast( CCharacterDataMgr::GetInstance().GetLogoutData(dwCID)); if (NULL != lpCharacterData) { Guild::CGuildDB* lpGuild = static_cast( Guild::CGuildDBMgr::GetInstance().GetGuild( lpCharacterData->GetInfo().GID )); if ( lpGuild ) { return lpGuild->GetNation(); } else { switch ( lpCharacterData->GetInfo().Race ) { case CClass::HUMAN : return Creature::KARTERANT; break; case CClass::AKHAN : return Creature::MERKADIA; break; } } } } else if (CSessionData::SE_CHAR_ENABLED == lpSessionData->GetSessionState()) { Guild::CGuildDB* lpGuild = static_cast( Guild::CGuildDBMgr::GetInstance().GetGuild( lpCharacterData->GetInfo().GID )); if ( lpGuild ) { return lpGuild->GetNation(); } else { switch ( lpCharacterData->GetInfo().Race ) { case CClass::HUMAN : return Creature::KARTERANT; break; case CClass::AKHAN : return Creature::MERKADIA; break; } } } return Creature::STATELESS; }