Files
2022-10-26 12:25:11 +08:00

2390 lines
93 KiB
C++

#include "stdafx.h"
#include "./Handler_Guild.GameToGuild.h"
#include <PacketStruct_DZ.h>
#include <PacketStruct_GZ.h>
#include <PacketStruct_WZ.h>
#include <GuildRankInfoParser.h>
#include "Services/DominationManager.h"
// GUILD
#include "Services/Guild/GuildManager.h"
#include "Services/Guild/Guild.h"
#include "Services/Guild/GuildMember.h"
#include "Services/Guild/GuildRelation.h"
#include "Services/Guild/GuildSmallContentEntry.h"
//
#include "QueryObjects/DBHandler.h"
#include "PacketHandler/Handler_Guild.GuildToDbp.h"
//
#include <PacketStruct_PointSystem.h>
#include <Services/GuildPointSystem/GuildPointSystem.h>
#ifdef _NA_003923_20120130_GUILD_RENEWAL
#include "GuildInGameLog.h"
#endif
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
#include "GuildFacilities.h"
#include "GuildFacilityInfoParser.h"
#endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
//==================================================================================================
// CHANGES: f110518.2L
const nsPacket::PacketHandlerInfo Handler_Guild_GameToGuild::GetPacketHandlerNodes()
{
#define HANDLER_NODE_INFO(c, p, phase) { MAKEWORD(c, p), false, phase, Handler_Guild_GameToGuild::On##p }
#define HANDLER_NODE_INFO_DBR(c, p, phase) { MAKEWORD(c, p), true, phase, Handler_Guild_GameToGuild::On##p }
#define HANDLER_NODE_INFO_EOR() { 0, false, static_cast<ePHASE_SHIFT>(0), NULL }
static const nsPacket::PacketHandlerNode handlers_static_[] =
{
//
//HANDLER_NODE_INFO(AM_OPERATION, AM_OPERATION_USERCOUNT_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_CREATE_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_DESTROY_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_JOIN_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_WITHDRAW_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_KICKPLAYER_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_DONATE_UP_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_CONVERT_UP2GP_SYN, PHASE_UNLIMITED),
#ifdef __NA_000000_20070528_TAIWAN_GUILD_PVP
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_CHUNTING_PVP_RESULT_CMD, PHASE_UNLIMITED),
#endif
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_CHANGE_DUTY_SYN, PHASE_UNLIMITED), //길드 직책 설정
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_RIGHT_DELEGATION_LIST_SYN, PHASE_UNLIMITED), //길드 위임 권한 목록 요청
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_RIGHT_DELEGATION_SYN, PHASE_UNLIMITED), //길드 권한 위임
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_CHANGE_MASTER_SYN, PHASE_UNLIMITED), //길드장변경
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_CREATE_CORPS_SYN, PHASE_UNLIMITED), //길드 군단 생성
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_DESTROY_CORPS_SYN, PHASE_UNLIMITED), //길드 군단 해산
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_EMPTY_COMMANDER_INFO_SYN, PHASE_UNLIMITED), //길드 빈 군단장 정보 요청.
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_CHANGE_COMMANDER_SYN, PHASE_UNLIMITED), //길드 군단장 변경.
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_CHANGE_CORPS_SYN, PHASE_UNLIMITED), //길드 군단 변경.
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_CREATE_REAR_CAMP_SYN, PHASE_UNLIMITED), //길드 육성캠프 생성.
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_DESTROY_REAR_CAMP_SYN, PHASE_UNLIMITED), //길드 육성캠프 해산.
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_INVITE_SYN, PHASE_UNLIMITED), //길드 초대.
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_LOGIN_CHAR_SYN, PHASE_UNLIMITED), //길드 멤버 로그인.
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_LOGOUT_CHAR_SYN, PHASE_UNLIMITED), //길드 멤버 로그아웃.
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_CHAR_LEVELUP_SYN, PHASE_UNLIMITED), //길드원 레벨업.
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_TOTALINFO_REQ_SYN, PHASE_UNLIMITED), //길드원 정보요청.
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_GM_GUILD_POINT_SYN, PHASE_UNLIMITED), //길드원 포인트 변경 요청.
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_CHANGE_CHAOSTATE_SYN, PHASE_UNLIMITED), //길드원 카오상태 변경.
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_ENTER_SERVER_SYN, PHASE_UNLIMITED), //길드원이 게임서버간을 이동할 때.
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_PRE_LOGIN_CMD, PHASE_UNLIMITED), //길드원이 로그인 사전 준비.
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_RELATION_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_RELATION_DELETE_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_RELATION_BOTH_AGAINST_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_BOTH_RELATION_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_RECOVERY_GUILD_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_GUILDMARK_REGISTER_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_GUILDMARK_DELETE_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_WAREHOUSE_OPEN_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_WAREHOUSE_CLOSE_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_RELATION_INFO_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_NAME_CHANGE_SYN, PHASE_UNLIMITED),
//{ __KR_001385_20090907_DOMINATION_PACKET
HANDLER_NODE_INFO(GZ_GUILD, GZ_DOMINATION_INFO_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_DOMINATION_AUCTION_INFO_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_DOMINATION_UPDATE_INFO_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_DOMINATION_ACCEP_HEIM_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_DOMINATION_INIT_ACTIONINFO_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_DOMINATION_RETURNHIME_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_DOMINATION_BATTING_HEIM_SYN, PHASE_UNLIMITED),
//}
//_NA_20100604_BETTER_DOMINATION_MANAGER
HANDLER_NODE_INFO(GZ_GUILD, GZ_DOMINATION_UPDATE_GUILDINFO_SYN, PHASE_UNLIMITED),
//_NA_20100913_GUILD_WAREHOUSE_GM_COMMAND
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_GM_WAREHOUSE_FORCE_CLOSE_CMD, PHASE_UNLIMITED), // GM 명령에 의한 길드 창고 강제 닫기
//_NA_20110216_INCREASE_DOMINATION_DEFFENSEWALL_POINT
HANDLER_NODE_INFO(GZ_GUILD, GZ_DOMINATION_ADD_DEFFENSEWALL_POINT_SYN, PHASE_UNLIMITED),
//_NA_20110406_CHANGE_RULE_FOR_DOMINATION_JOIN
HANDLER_NODE_INFO(GZ_GUILD, GZ_DOMINATION_MEMBER_JOIN_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_DOMINATION_MEMBER_LEAVE_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_DOMINATION_MEMBERLIST_REQ, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_DOMINATION_MEMBERLIST_INIT_CMD, PHASE_UNLIMITED),
#ifdef _NA004034_20120102_GUILD_POINT_SYSTEM
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILDPOINTSYSTEM, PHASE_UNLIMITED),
#endif //_NA004034_20120102_GUILD_POINT_SYSTEM
#ifdef _NA_003923_20120130_GUILD_RENEWAL
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_IN_GAME_GUILD_LOG_LIST_REQ, PHASE_UNLIMITED),
#endif
#ifdef _NA_004034_20120102_GUILD_INTRODUCTION
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_INTRODUCTION_SAVE_SYN, PHASE_UNLIMITED),
#endif //_NA_004034_20120102_GUILD_INTRODUCTION
#ifdef _NA_000000_20130429_DOMINATION_PENALTY
HANDLER_NODE_INFO(GZ_GUILD, GZ_DOMINATION_PENALTY_CMD, PHASE_UNLIMITED),
#endif //_NA_000000_20130429_DOMINATION_PENALTY
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_JOIN_REQUEST_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_JOIN_REQUEST_REJECT_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_RELOAD_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_FACILITY_UPGRADE_SYN, PHASE_UNLIMITED),
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_FACILITY_SELECT_SYN, PHASE_UNLIMITED),
#endif //_NA_007330_20140620_GUILD_SYSTEM_EXTENSION
#ifdef _NA_008334_20150608_SONNENSCHEIN
HANDLER_NODE_INFO(GZ_GUILD, GZ_GUILD_SONNENSCHEIN_UPDATE_SYN, PHASE_UNLIMITED),
#endif //_NA_008334_20150608_SONNENSCHEIN
HANDLER_NODE_INFO_EOR() // end of records
};
BOOST_STATIC_ASSERT(_countof(handlers_static_) >= 1);
nsPacket::PacketHandlerInfo return_value = { handlers_static_, _countof(handlers_static_) - 1 };
//
return return_value;
};
//==================================================================================================
BOOST_STATIC_ASSERT(RC::RC_GUILD_RESULT_COUNTS <= UCHAR_MAX);
//==================================================================================================
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_CREATE_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_CREATE_SYN * pRecvMsg = (MSG_GZ_GUILD_CREATE_SYN *)pMsg;
RC::eGUILD_RESULT rt = g_GuildManager.CanCreateGuild(pRecvMsg->m_MasterLV);
if( rt == RC::RC_GUILD_SUCCESS )
{
MSG_DZ_GUILD_CREATE_SYN msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_dwSessionIndex = pServerSession->GetSessionIndex();
msg.m_MasterCharGuid = pRecvMsg->m_MasterCharGuid;
_tcsncpy(msg.m_tszGuildName, pRecvMsg->m_tszGuildName, _countof(msg.m_tszGuildName));
msg.m_tszGuildName[_countof(msg.m_tszGuildName) - 1] = _T('\0');
_tcsncpy(msg.m_szMasterCharName, pRecvMsg->m_tszMasterCharName,
_countof(msg.m_szMasterCharName));
msg.m_szMasterCharName[_countof(msg.m_szMasterCharName) - 1] = _T('\0');
msg.m_byClass = pRecvMsg->m_byMasterClass;
msg.m_Level = pRecvMsg->m_MasterLV;
Handler_Guild_GuildToDbp::OnDZ_GUILD_CREATE_SYN(
g_DBHandler.GetSharedSession(), &msg, sizeof(msg));
}
else
{
MSG_GZ_GUILD_CREATE_NAK msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_byErrorCode = rt;
pServerSession->SendPacket( &msg, sizeof(msg) );
}
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_DESTROY_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
const MSG_GZ_GUILD_DESTROY_SYN* receive_msg = static_cast<MSG_GZ_GUILD_DESTROY_SYN*>(pMsg);
#ifdef _USING_GUILD_DESTROY_LOGGING
SUNLOG(eCRITICAL_LOG,
_T("|길드해산신청|Handler_Guild_GameToGuild_IMPL(GZ_GUILD_DESTROY_SYN)|MSG_GZ_GUILD_DESTROY_SYN 받음|GuildGuid:%d, MasterCharGuid:%d|"),
receive_msg->m_GuildGuid,
receive_msg->m_MasterCharGuid);
#endif // _USING_GUILD_DESTROY_LOGGING
const RC::eGUILD_RESULT result = g_GuildManager.CanDestroyGuild(receive_msg->m_GuildGuid,
receive_msg->m_MasterCharGuid);
if (result == RC::RC_GUILD_SUCCESS)
{
MSG_DZ_GUILD_DESTROY_SYN msg;
msg.m_dwKey = receive_msg->m_dwKey;
msg.m_dwSessionIndex = pServerSession->GetSessionIndex();
msg.m_MasterCharGuid = receive_msg->m_MasterCharGuid;
msg.m_GuildGuid = receive_msg->m_GuildGuid;
msg.m_DestroyWaitTime = receive_msg->m_DestroyWaitTime;
#ifdef _USING_GUILD_DESTROY_LOGGING
SUNLOG(eCRITICAL_LOG,
_T("|길드해산신청|Handler_Guild_GameToGuild_IMPL(GZ_GUILD_DESTROY_SYN)|MSG_DZ_GUILD_DESTROY_SYN 보냄|Key:%u, SessionIndex:%u, MasterCharGuid:%u, GuildGuid:%d, DestroyWaitTime:%u|"),
msg.m_dwKey,
msg.m_dwSessionIndex,
msg.m_MasterCharGuid,
msg.m_GuildGuid,
msg.m_DestroyWaitTime);
#endif // _USING_GUILD_DESTROY_LOGGING
Handler_Guild_GuildToDbp::OnDZ_GUILD_DESTROY_SYN(
g_DBHandler.GetSharedSession(), &msg, sizeof(msg));
}
else
{
MSG_GZ_GUILD_DESTROY_NAK nak_msg;
nak_msg.m_dwKey = receive_msg->m_dwKey;
nak_msg.m_byErrorCode = result;
#ifdef _USING_GUILD_DESTROY_LOGGING
SUNLOG(eCRITICAL_LOG,
_T("|길드해산신청|Handler_Guild_GameToGuild_IMPL(GZ_GUILD_DESTROY_SYN)|MSG_GZ_GUILD_DESTROY_NAK 보냄|Key:%u, ErrorCode:%d|"),
nak_msg.m_dwKey,
nak_msg.m_byErrorCode);
#endif // _USING_GUILD_DESTROY_LOGGING
pServerSession->SendPacket(&nak_msg, sizeof(nak_msg));
}
}
//탈퇴.
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_WITHDRAW_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_WITHDRAW_SYN * pRecvMsg = (MSG_GZ_GUILD_WITHDRAW_SYN *)pMsg;
RC::eGUILD_RESULT rt = g_GuildManager.CanLeaveGuild( pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid );
if( rt != RC::RC_GUILD_SUCCESS )
{
MSG_GZ_GUILD_WITHDRAW_NAK msgNAK;
msgNAK.m_dwKey = pRecvMsg->m_dwKey;
msgNAK.m_byErrorCode = rt;
pServerSession->SendPacket( &msgNAK, sizeof(msgNAK) );
return;
}
MSG_DZ_GUILD_WITHDRAW_SYN msgSYN;
msgSYN.m_dwKey = pRecvMsg->m_dwKey;
msgSYN.m_dwSessionIndex = pServerSession->GetSessionIndex();
msgSYN.m_GuildGuid = pRecvMsg->m_GuildGuid;
msgSYN.m_CharGuid = pRecvMsg->m_CharGuid;
msgSYN.m_byPenaltyType = 1; // 자기자신 탈퇴
Handler_Guild_GuildToDbp::OnDZ_GUILD_WITHDRAW_SYN(
g_DBHandler.GetSharedSession(), &msgSYN, sizeof(msgSYN));
//{
// MSG_GZ_GUILD_WITHDRAW_NAK msgNAK;
// msgNAK.m_dwKey = pRecvMsg->m_dwKey;
// msgNAK.m_byErrorCode = RC::RC_GUILD_FAILED_BY_NOT_CONNECT_SERVER;
// pServerSession->SendPacket( &msgNAK, sizeof(msgNAK) );
// return;
//}
}
// 길드원 강퇴
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_KICKPLAYER_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_KICKPLAYER_SYN* pRecvMsg = (MSG_GZ_GUILD_KICKPLAYER_SYN*)pMsg;
if( _tcslen( pRecvMsg->m_ptszCharName ) > MAX_CHARNAME_LENGTH )
{
MSG_GZ_GUILD_KICKPLAYER_NAK nakMsg;
nakMsg.m_dwKey = pRecvMsg->m_dwKey;
nakMsg.m_dwErrorCode = RC::RC_GUILD_FAILED;
pServerSession->SendPacket( &nakMsg, sizeof(nakMsg) );
DISPMSG( "KICKPLAYER Error - KickCharName Overflow[GuildGuid:%u]\n", pRecvMsg->m_GuildGuid );
return;
}
RC::eGUILD_RESULT rt = g_GuildManager.CanKickMember( pRecvMsg->m_GuildGuid, pRecvMsg->m_OperCharGuid, pRecvMsg->m_ptszCharName );
if( rt != RC::RC_GUILD_SUCCESS )
{
MSG_GZ_GUILD_KICKPLAYER_NAK nakMsg;
nakMsg.m_dwKey = pRecvMsg->m_dwKey;
_tcsncpy( nakMsg.m_ptszCharName, pRecvMsg->m_ptszCharName, MAX_CHARNAME_LENGTH );
nakMsg.m_ptszCharName[MAX_CHARNAME_LENGTH] = '\0';
nakMsg.m_dwErrorCode = rt;
pServerSession->SendPacket( &nakMsg, sizeof(nakMsg) );
return;
}
GuildMember* pOperMember = g_GuildManager.FindGuildMember(pRecvMsg->m_GuildGuid,pRecvMsg->m_OperCharGuid);
if( !pOperMember ) return;
GuildMember* pTargetMember = g_GuildManager.FindGuildMemberByName( pRecvMsg->m_GuildGuid, pRecvMsg->m_ptszCharName );
if( !pTargetMember ) return; //왜 그냥 리턴하냐면... 위에서 검증되었기 때문이다. 반드시 존재한다.
MSG_DZ_GUILD_KICKPLAYER_SYN msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_GuildGuid = pRecvMsg->m_GuildGuid;
msg.m_OperCharGuid = pOperMember->GetCharGuid();
msg.m_TargetCharGuid = pTargetMember->GetCharGuid();
msg.m_byCorpsNum = pOperMember->GetCorpsNumber();
msg.m_dwSessionIndex = pServerSession->GetSessionIndex();
Handler_Guild_GuildToDbp::OnDZ_GUILD_KICKPLAYER_SYN(
g_DBHandler.GetSharedSession(), &msg, sizeof(msg));
//{
// MSG_GZ_GUILD_KICKPLAYER_NAK nakMsg;
// nakMsg.m_dwKey = pRecvMsg->m_dwKey;
// _tcsncpy( nakMsg.m_ptszCharName, pRecvMsg->m_ptszCharName, MAX_CHARNAME_LENGTH );
// nakMsg.m_ptszCharName[MAX_CHARNAME_LENGTH] = '\0';
// nakMsg.m_dwErrorCode = RC::RC_GUILD_FAILED_BY_NOT_CONNECT_SERVER;
// pServerSession->SendPacket( &nakMsg, sizeof(nakMsg) );
// return;
//}
}
////////////////////
// 길드 포인트 관련
// UP 적립
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_DONATE_UP_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_DONATE_UP_SYN* pRecvMsg = (MSG_GZ_GUILD_DONATE_UP_SYN*)pMsg;
RC::eGUILD_RESULT rt = g_GuildManager.CanDonateUP( pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid );
if( rt != RC::RC_GUILD_SUCCESS )
{
MSG_GZ_GUILD_DONATE_UP_NAK nakMsg;
nakMsg.m_dwKey = pRecvMsg->m_dwKey;
nakMsg.m_GuildGuid = pRecvMsg->m_GuildGuid;
nakMsg.m_byErrorCode = rt;
pServerSession->SendPacket( &nakMsg, sizeof(nakMsg) );
return;
}
MSG_DZ_GUILD_DONATE_UP_SYN sendMsg;
sendMsg.m_dwKey = pRecvMsg->m_dwKey;
sendMsg.m_dwSessionIndex = pServerSession->GetSessionIndex(); // 게임서버의 세션을 저장한다.
sendMsg.m_GuildGuid = pRecvMsg->m_GuildGuid;
sendMsg.m_CharGuid = pRecvMsg->m_CharGuid;
sendMsg.m_GuildUP = pRecvMsg->m_DonateUP;
Handler_Guild_GuildToDbp::OnDZ_GUILD_DONATE_UP_SYN(
g_DBHandler.GetSharedSession(), &sendMsg, sizeof(sendMsg));
//{
// SUNLOG( eCRITICAL_LOG, "DZ_GUILD_DONATE_UP Error - Can't send Packet![GuildGuid:%u]\n", pRecvMsg->m_GuildGuid );
// MSG_DZ_GUILD_DONATE_UP_NAK nakMsg;
// nakMsg.m_GuildGuid = pRecvMsg->m_GuildGuid;
// nakMsg.m_byErrorCode = RC::RC_GUILD_FAILED;
// pServerSession->SendPacket( &nakMsg, sizeof(nakMsg) );
// return;
//}
}
// UP->GP 변환
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_CONVERT_UP2GP_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_CONVERT_UP2GP_SYN* pRecvMsg = (MSG_GZ_GUILD_CONVERT_UP2GP_SYN*)pMsg;
RC::eGUILD_RESULT rt = g_GuildManager.CanConvertUP2GP( pRecvMsg->m_GuildGuid, pRecvMsg->m_OperCharGuid, pRecvMsg->m_ConvertGP );
if( rt != RC::RC_GUILD_SUCCESS )
{
// 기본적인 권한 검사는 GameServer에서 했다고 판단하므로 따로 검사하지 않고 바로 DBProxy로 보낸다
MSG_GZ_GUILD_CONVERT_UP2GP_NAK nakMsg;
nakMsg.m_dwKey = pRecvMsg->m_dwKey;
nakMsg.m_GuildGuid = pRecvMsg->m_GuildGuid;
nakMsg.m_byErrorCode = rt;
pServerSession->SendPacket( &nakMsg, sizeof(nakMsg) );
return;
}
MSG_DZ_GUILD_CONVERT_UP2GP_SYN sendMsg;
sendMsg.m_dwKey = pRecvMsg->m_dwKey;
sendMsg.m_dwSessionIndex = pServerSession->GetSessionIndex();
sendMsg.m_GuildGuid = pRecvMsg->m_GuildGuid;
sendMsg.m_ConverGP = pRecvMsg->m_ConvertGP;
Handler_Guild_GuildToDbp::OnDZ_GUILD_CONVERT_UP2GP_SYN(
g_DBHandler.GetSharedSession(), &sendMsg, sizeof(sendMsg));
//{
// MSG_GZ_GUILD_CONVERT_UP2GP_NAK nakMsg;
// nakMsg.m_dwKey = pRecvMsg->m_dwKey;
// nakMsg.m_GuildGuid = pRecvMsg->m_GuildGuid;
// nakMsg.m_byErrorCode = RC::RC_GUILD_FAILED_BY_NOT_CONNECT_SERVER;
// pServerSession->SendPacket( &nakMsg, sizeof(nakMsg) );
// return;
//}
}
// 길드원 카오상태 변경
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_CHANGE_CHAOSTATE_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_CHANGE_CHAOSTATE_SYN* pRecvMsg = (MSG_GZ_GUILD_CHANGE_CHAOSTATE_SYN*)pMsg;
RC::eGUILD_RESULT rc = g_GuildManager.ChangeChaoState( pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid, pRecvMsg->m_byChaoState );
if( rc != RC::RC_GUILD_SUCCESS )
{
SUNLOG( eCRITICAL_LOG, "[Handler_Guild_GameToGuild_IMPL(GZ_GUILD_CHANGE_CHAOSTATE_SYN)] Fail, GuildGuid = %u, CharGuid = %d, ChaoState = %d",
pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid, pRecvMsg->m_byChaoState );
return;
}
MSG_GZ_GUILD_CHANGE_CHAOSTATE_BRD brdMsg;
brdMsg.m_GuildGuid = pRecvMsg->m_GuildGuid;
g_GuildManager.GetCharName( pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid, brdMsg.m_szCharName, MAX_CHARNAME_LENGTH );
brdMsg.m_byChaoState = pRecvMsg->m_byChaoState;
g_DBProxyServer.SendToSessionType(GAME_SERVER, &brdMsg, sizeof(brdMsg));
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_ENTER_SERVER_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_ENTER_SERVER_SYN* pRecvMsg = (MSG_GZ_GUILD_ENTER_SERVER_SYN*)pMsg;
//Invite나 Join이나 조건은 똑같다.
RC::eGUILD_RESULT rt = g_GuildManager.CanMoveServer( pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid );
if( rt != RC::RC_GUILD_SUCCESS )
{
MSG_GZ_GUILD_ENTER_SERVER_NAK nakMsg;
nakMsg.m_byErrorCode = rt;
pServerSession->SendPacket( &nakMsg, sizeof(nakMsg) );
return;
}
// 해당 게임서버에 길드 정보를 보낸다.
MSG_GZ_GUILD_ENTER_SERVER_ACK ackMsg;
ackMsg.m_dwKey = pRecvMsg->m_dwKey;
g_GuildManager.SerializeGameGuildInfo( pRecvMsg->m_GuildGuid, ackMsg.m_GameGuildInfo, SERIALIZE_LOAD );
g_GuildManager.GetGuildBaseMemberInfo( pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid, ackMsg.m_BaseMemberInfo );
pServerSession->SendPacket( &ackMsg, sizeof(ackMsg) );
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_PRE_LOGIN_CMD)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_PRE_LOGIN_CMD* pRecvMsg = (MSG_GZ_GUILD_PRE_LOGIN_CMD*)pMsg;
Guild* pGuild = g_GuildManager.FindGuild( pRecvMsg->m_GuildGuid );
if( !pGuild ) return;
GuildMember* pMember = pGuild->FindMember( pRecvMsg->m_CharGuid );
if( !pMember ) return;
if( pMember->IsLogIn() == TRUE )
{
SUNLOG( eCRITICAL_LOG, "[Handler_Guild_GameToGuild_IMPL(GZ_GUILD_PRE_LOGIN_CMD)] Already Loin Char And Init GuildGuid = %u, CharGuid = %u",
pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid );
pMember->SetLogin( FALSE );
}
}
#ifdef __NA_000000_20070528_TAIWAN_GUILD_PVP
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_CHUNTING_PVP_RESULT_CMD)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_CHUNTING_PVP_RESULT_CMD * pRecvMsg = (MSG_GZ_GUILD_CHUNTING_PVP_RESULT_CMD *)pMsg;
MSG_DZ_GUILD_CHUNTING_PVP_RESULT_SYN msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_dwSessionIndex = pServerSession->GetSessionIndex();
RC::eGUILD_RESULT rt = g_GuildManager.ChuntingPVPResult( pRecvMsg->m_WinGuildGuid, pRecvMsg->m_LoseGuildGuid, pRecvMsg->m_DisGuildGuid );
if( rt == RC::RC_GUILD_SUCCESS )
{
Guild *pWinGuild = g_GuildManager.FindGuild(pRecvMsg->m_WinGuildGuid);
if( pWinGuild )
{
msg.m_GuildGuid = pRecvMsg->m_WinGuildGuid;
msg.m_PVPInfo = *pWinGuild->GetChuntingPVPInfo();
Handler_Guild_GuildToDbp::OnDZ_GUILD_CHUNTING_PVP_RESULT_SYN(
g_DBHandler.GetSharedSession(), &msg, sizeof(msg));
}
if( pRecvMsg->m_DisGuildGuid ) msg.m_GuildGuid = pRecvMsg->m_DisGuildGuid;
else msg.m_GuildGuid = pRecvMsg->m_LoseGuildGuid;
Guild *pLoseGuild = g_GuildManager.FindGuild(msg.m_GuildGuid);
if( pLoseGuild )
{
msg.m_PVPInfo = *pLoseGuild->GetChuntingPVPInfo();
Handler_Guild_GuildToDbp::OnDZ_GUILD_CHUNTING_PVP_RESULT_SYN(
g_DBHandler.GetSharedSession(), &msg, sizeof(msg));
}
}
}
#endif
// 길드 직책 변경
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_CHANGE_DUTY_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_CHANGE_DUTY_SYN *pRecvMsg = (MSG_GZ_GUILD_CHANGE_DUTY_SYN *)pMsg;
GuildMember* pTargerMember = g_GuildManager.FindGuildMemberByName( pRecvMsg->m_GuildGuid, pRecvMsg->m_szTargetCharName );
if( !pTargerMember )
{
//클라이언트한테 그런 타겟멤버 없다고 NAK보낸다.
MSG_GZ_GUILD_CHANGE_DUTY_NAK nakMSG;
nakMSG.m_dwKey = pRecvMsg->m_dwKey;
nakMSG.m_byErrorCode = RC::RC_GUILD_NOT_GUILD_MEMBER;
pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
return;
}
// 1. 여기서 길드의 권한을 체크한다.
RC::eGUILD_RESULT rt = g_GuildManager.CanChangeDuty( pRecvMsg->m_GuildGuid, pRecvMsg->m_OperCharGuid,
pTargerMember->GetCharGuid(), (eGUILD_DUTY)pRecvMsg->m_byDuty );
//모든 것은 DB에서 성공 ACK를 받고 진행한다.
if(rt != RC::RC_GUILD_SUCCESS)
{
MSG_GZ_GUILD_CHANGE_DUTY_NAK nakMSG;
nakMSG.m_dwKey = pRecvMsg->m_dwKey;
nakMSG.m_byErrorCode = rt;
pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
SUNLOG( eFULL_LOG, "[Handler_Guild_GameToGuild_IMPL(GZ_GUILD_CHANGE_DUTY_SYN)] Fail, [GUILDGUID:%d][OPERGUID:%d][Target:%s][ChangeDuty:%d] rt = %d",
pRecvMsg->m_GuildGuid, pRecvMsg->m_OperCharGuid, pRecvMsg->m_szTargetCharName, pRecvMsg->m_byDuty, rt );
return;
}
//DB로 전송
MSG_DZ_GUILD_CHANGE_DUTY_SYN sndMSG;
sndMSG.m_dwKey = pRecvMsg->m_dwKey;
sndMSG.m_dwSessionIndex = pServerSession->GetSessionIndex();
sndMSG.m_GuildGuid = pRecvMsg->m_GuildGuid;
sndMSG.m_OperGuid = pRecvMsg->m_OperCharGuid;
sndMSG.m_TargetGuid = pTargerMember->GetCharGuid();
sndMSG.m_eNewDuty = (eGUILD_DUTY)pRecvMsg->m_byDuty;
sndMSG.m_eOldDuty = pTargerMember->GetDuty();
Handler_Guild_GuildToDbp::OnDZ_GUILD_CHANGE_DUTY_SYN(
g_DBHandler.GetSharedSession(), &sndMSG, sizeof(sndMSG));
//{
// MSG_GZ_GUILD_CHANGE_DUTY_NAK nakMSG;
// nakMSG.m_dwKey = pRecvMsg->m_dwKey;
// nakMSG.m_byErrorCode = RC::RC_GUILD_FAILED_BY_NOT_CONNECT_SERVER;
// pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
// SUNLOG( eCRITICAL_LOG, "[Handler_Guild_GameToGuild_IMPL(GZ_GUILD_CHANGE_DUTY_SYN)] Can't send Packet![GuildGuid:%u]\n", pRecvMsg->m_GuildGuid );
// return;
//}
}
//길드 위임 권한 목록 요청
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_RIGHT_DELEGATION_LIST_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_RIGHT_DELEGATION_LIST_SYN* pRecvMsg = (MSG_GZ_GUILD_RIGHT_DELEGATION_LIST_SYN*)pMsg;
MSG_GZ_GUILD_RIGHT_DELEGATION_LIST_NAK nakMSG;
nakMSG.m_dwKey = pRecvMsg->m_dwKey;
//1. 길드가 있는지 체크
Guild* pGuild = g_GuildManager.FindGuild( pRecvMsg->m_GuildGuid );
if( !pGuild )
{
nakMSG.m_byErrorCode = RC::RC_GUILD_NOT_EXIST_GUILD;
pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
return;
}
//2. 리스트 요청자가 리스트를 요청해도 되는 사람인지 체크한다.
if( !g_GuildManager.CheckRight( pRecvMsg->m_GuildGuid, pRecvMsg->m_OperCharGuid, eGUILD_RIGHTS_VIEW_RIGHT ) )
{
nakMSG.m_byErrorCode = RC::RC_GUILD_HAVE_NOT_RIGHT;
pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
return;
}
//3. 권한위임대상이 위임대상이 되는지 체크.
RC::eGUILD_RESULT rc = g_GuildManager.IsDelegateChar( pRecvMsg->m_GuildGuid, pRecvMsg->m_szTargetCharName );
if( rc != RC::RC_GUILD_SUCCESS )
{
nakMSG.m_byErrorCode = rc;
pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
return;
}
//4. 위임할수 있는 권한 리스트를 불러온다. 불러올때는 현재 해당 유저의 위임된 권한까지 같이 가져온다.
MSG_GZ_GUILD_RIGHT_DELEGATION_LIST_ACK Ack;
Ack.m_dwKey = pRecvMsg->m_dwKey;
Ack.m_GuildGuid = pRecvMsg->m_GuildGuid;
g_GuildManager.GetDelegateRight( pRecvMsg->m_GuildGuid, pRecvMsg->m_szTargetCharName, Ack.m_DelegateRight );
strncpy( Ack.m_szTargetCharName, pRecvMsg->m_szTargetCharName, MAX_CHARNAME_LENGTH );
pServerSession->SendPacket( &Ack, sizeof(Ack) );
}
//길드 권한 위임
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_RIGHT_DELEGATION_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_RIGHT_DELEGATION_SYN* pRecvMsg = (MSG_GZ_GUILD_RIGHT_DELEGATION_SYN*)pMsg;
RC::eGUILD_RESULT rc = g_GuildManager.CanRightDelegate( pRecvMsg->m_GuildGuid, pRecvMsg->m_OperCharGuid, pRecvMsg->m_szTargetCharName, pRecvMsg->m_DelegateRight );
if( rc != RC::RC_GUILD_SUCCESS )
{
MSG_GZ_GUILD_RIGHT_DELEGATION_NAK nakMSG;
nakMSG.m_byErrorCode = RC::RC_GUILD_INVALID_DELEGATE_RIGHT;
pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
return;
}
GuildMember* pTargetMember = g_GuildManager.FindGuildMemberByName( pRecvMsg->m_GuildGuid, pRecvMsg->m_szTargetCharName );
if( !pTargetMember )
return; //있을수 없다....
//5. DB에 보낸다.
MSG_DZ_GUILD_RIGHT_DELEGATION_SYN synMsg;
synMsg.m_dwKey = pRecvMsg->m_dwKey;
synMsg.m_dwSessionIndex = pServerSession->GetSessionIndex();
synMsg.m_GuildGuid = pRecvMsg->m_GuildGuid;
synMsg.m_TargetGuid = pTargetMember->GetCharGuid();
CopyMemory( synMsg.m_DelegateRight, pRecvMsg->m_DelegateRight, sizeof(synMsg.m_DelegateRight) );
Handler_Guild_GuildToDbp::OnDZ_GUILD_RIGHT_DELEGATION_SYN(
g_DBHandler.GetSharedSession(), &synMsg, sizeof(synMsg));
//{
// MSG_GZ_GUILD_RIGHT_DELEGATION_NAK nakMSG;
// nakMSG.m_byErrorCode = RC::RC_GUILD_FAILED_BY_NOT_CONNECT_SERVER;
// pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
// return;
//}
}
//길드장 변경
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_CHANGE_MASTER_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_CHANGE_MASTER_SYN* pRecvMsg = (MSG_GZ_GUILD_CHANGE_MASTER_SYN*)pMsg;
RC::eGUILD_RESULT rc = g_GuildManager.CanChangeMaster( pRecvMsg->m_GuildGuid, pRecvMsg->m_OperCharGuid, pRecvMsg->m_szTargetCharName );
if( rc != RC::RC_GUILD_SUCCESS )
{
MSG_GZ_GUILD_CHANGE_MASTER_NAK nakMSG;
nakMSG.m_dwKey = pRecvMsg->m_dwKey;
nakMSG.m_byErrorCode = rc;
pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
return;
}
GuildMember* pTargetMember = g_GuildManager.FindGuildMemberByName( pRecvMsg->m_GuildGuid, pRecvMsg->m_szTargetCharName );
if( !pTargetMember ) return;
//5. DB에 보낸다.
MSG_DZ_GUILD_CHANGE_MASTER_SYN synMsg;
synMsg.m_dwKey = pRecvMsg->m_dwKey;
synMsg.m_dwSessionIndex = pServerSession->GetSessionIndex();
synMsg.m_GuildGuid = pRecvMsg->m_GuildGuid;
synMsg.m_OperCharGuid = pRecvMsg->m_OperCharGuid;
synMsg.m_TargetCharGuid = pTargetMember->GetCharGuid();
Handler_Guild_GuildToDbp::OnDZ_GUILD_CHANGE_MASTER_SYN(
g_DBHandler.GetSharedSession(), &synMsg, sizeof(synMsg));
//{
// MSG_GZ_GUILD_CHANGE_MASTER_NAK nakMSG;
// nakMSG.m_byErrorCode = RC::RC_GUILD_FAILED;
// pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
// return;
//}
}
//길드 군단 생성
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_CREATE_CORPS_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_CREATE_CORPS_SYN *pRecvMsg = (MSG_GZ_GUILD_CREATE_CORPS_SYN *)pMsg;
BYTE byCorpsNum = 0;
RC::eGUILD_RESULT rt = g_GuildManager.CanCreateCorps( pRecvMsg->m_GuildGuid, pRecvMsg->m_OperCharGuid, pRecvMsg->m_szTargetCharName, byCorpsNum );
if( rt != RC::RC_GUILD_SUCCESS )
{
MSG_GZ_GUILD_CREATE_CORPS_NAK nakMSG;
nakMSG.m_dwKey = pRecvMsg->m_dwKey;
nakMSG.m_byErrorCode = rt;
pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
return;
}
//위에서 멤버에 대한 검증을 끝내고 온다.
GuildMember* pMember = g_GuildManager.FindGuildMemberByName( pRecvMsg->m_GuildGuid, pRecvMsg->m_szTargetCharName );
if( !pMember ) return;
MSG_DZ_GUILD_CREATE_CORPS_SYN synMSG;
synMSG.m_dwKey = pRecvMsg->m_dwKey;
synMSG.m_dwSessionIndex = pServerSession->GetSessionIndex();
synMSG.m_GuildGuid = pRecvMsg->m_GuildGuid;
synMSG.m_TargetCharGuid = pMember->GetCharGuid();
synMSG.m_byCorpsNum = byCorpsNum;
Handler_Guild_GuildToDbp::OnDZ_GUILD_CREATE_CORPS_SYN(
g_DBHandler.GetSharedSession(), &synMSG, sizeof(synMSG));
//{
// MSG_GZ_GUILD_CREATE_CORPS_NAK nakMSG;
// nakMSG.m_dwKey = pRecvMsg->m_dwKey;
// nakMSG.m_byErrorCode = RC::RC_GUILD_CREATE_CORPS_FAILED;
// pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
// SUNLOG( eCRITICAL_LOG, "DZ_GUILD_CREATE_CORPS_SYN ERROR - Can't send Packet![GuildGuid:%u]\n", pRecvMsg->m_GuildGuid );
// return;
//}
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_DESTROY_CORPS_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_DESTROY_CORPS_SYN* pRecvMsg = (MSG_GZ_GUILD_DESTROY_CORPS_SYN *)pMsg;
RC::eGUILD_RESULT rt = g_GuildManager.CanDestoryCorps( pRecvMsg->m_GuildGuid, pRecvMsg->m_OperCharGuid, pRecvMsg->m_byCorpsNum );
if( rt != RC::RC_GUILD_SUCCESS )
{
MSG_GZ_GUILD_DESTROY_CORPS_NAK nakMSG;
nakMSG.m_dwKey = pRecvMsg->m_dwKey;
nakMSG.m_byErrorCode = rt;
pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
SUNLOG( eFULL_LOG, "[GZ_GUILD_DESTROY_CORPS_SYN] ERROR, GuildGuid = %d, OperGuid = %u, CorpsNum = %d", pRecvMsg->m_GuildGuid, pRecvMsg->m_OperCharGuid, pRecvMsg->m_byCorpsNum );
return;
}
MSG_DZ_GUILD_DESTROY_CORPS_SYN synMsg;
synMsg.m_dwKey = pRecvMsg->m_dwKey;
synMsg.m_dwSessionIndex = pServerSession->GetSessionIndex();
synMsg.m_GuildGuid = pRecvMsg->m_GuildGuid;
synMsg.m_byCorpsNum = pRecvMsg->m_byCorpsNum;
synMsg.m_OperCharGuid = pRecvMsg->m_OperCharGuid;
Handler_Guild_GuildToDbp::OnDZ_GUILD_DESTROY_CORPS_SYN(
g_DBHandler.GetSharedSession(), &synMsg, sizeof(synMsg));
//{
// MSG_GZ_GUILD_DESTROY_CORPS_NAK nakMSG;
// nakMSG.m_dwKey = pRecvMsg->m_dwKey;
// nakMSG.m_byErrorCode = RC::RC_GUILD_FAILED_BY_NOT_CONNECT_SERVER;
// pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
// SUNLOG( eCRITICAL_LOG, "[MSG_GZ_GUILD_DESTROY_CORPS_SYN] ERROR - Can't send Packet![GuildGuid:%u]\n", pRecvMsg->m_GuildGuid );
// return;
//}
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_EMPTY_COMMANDER_INFO_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_EMPTY_COMMANDER_INFO_SYN* pRecvMsg = (MSG_GZ_GUILD_EMPTY_COMMANDER_INFO_SYN*)pMsg;
//비어있는 군단정보를 보겠다는것은 결국 직책변경을 하겠다는 얘기다. 따라서 직책변경 권한을 본다.
BOOL bRight = g_GuildManager.CheckRight( pRecvMsg->m_GuildGuid, pRecvMsg->m_OperCharGuid, eGUILD_RIGHTS_CHANGE_DUTY );
if( !bRight )
{
MSG_GZ_GUILD_EMPTY_COMMANDER_INFO_NAK nakMSG;
nakMSG.m_dwKey = pRecvMsg->m_dwKey;
nakMSG.m_byErrorCode = RC::RC_GUILD_HAVE_NOT_RIGHT;
pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
return;
}
//권한이 있으면 현재 비어 있는 군단 정보를 가지고 온다.
MSG_GZ_GUILD_EMPTY_COMMANDER_INFO_ACK AckMsg;
AckMsg.m_dwKey = pRecvMsg->m_dwKey;
AckMsg.m_GuildGuid = pRecvMsg->m_GuildGuid;
AckMsg.m_byEmptyCommanderCount = g_GuildManager.GetEmptyCommanderInfo( pRecvMsg->m_GuildGuid, AckMsg.m_byCorpsNum );
pServerSession->SendPacket( &AckMsg, AckMsg.GetSize() );
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_CHANGE_COMMANDER_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_CHANGE_COMMANDER_SYN* pRecvMsg = (MSG_GZ_GUILD_CHANGE_COMMANDER_SYN*)pMsg;
RC::eGUILD_RESULT rt =
g_GuildManager.CanChangeCommander(
pRecvMsg->m_GuildGuid,
pRecvMsg->m_OperCharGuid,
pRecvMsg->m_szTargetCharName,
pRecvMsg->m_byCorpsNum
);
if( rt != RC::RC_GUILD_SUCCESS )
{
MSG_GZ_GUILD_CHANGE_COMMANDER_NAK nakMSG;
nakMSG.m_dwKey = pRecvMsg->m_dwKey;
nakMSG.m_byErrorCode = rt;
pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
return;
}
GuildMember* pMember =
g_GuildManager.FindGuildMemberByName(
pRecvMsg->m_GuildGuid,
pRecvMsg->m_szTargetCharName
);
if( !pMember ) //위에서 검사했으므로 없을수 없다.
return;
MSG_DZ_GUILD_CHANGE_COMMANDER_SYN synMSG;
synMSG.m_dwKey = pRecvMsg->m_dwKey;
synMSG.m_dwSessionIndex = pServerSession->GetSessionIndex();
synMSG.m_GuildGuid = pRecvMsg->m_GuildGuid;
synMSG.m_TargetCharGuid = pMember->GetCharGuid();
synMSG.m_byCorpsNum = pRecvMsg->m_byCorpsNum;
Handler_Guild_GuildToDbp::OnDZ_GUILD_CHANGE_COMMANDER_SYN(
g_DBHandler.GetSharedSession(), &synMSG, sizeof(synMSG));
//{
// MSG_GZ_GUILD_CHANGE_COMMANDER_NAK nakMSG;
// nakMSG.m_dwKey = pRecvMsg->m_dwKey;
// nakMSG.m_byErrorCode = RC::RC_GUILD_FAILED_BY_NOT_CONNECT_SERVER;
// pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
// SUNLOG( eCRITICAL_LOG, "[Handler_Guild_GameToGuild_IMPL(GZ_GUILD_CHANGE_COMMANDER_SYN)] - Can't send Packet![GuildGuid:%u]\n", pRecvMsg->m_GuildGuid );
// return;
//}
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_CHANGE_CORPS_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_CHANGE_CORPS_SYN* pRecvMsg = (MSG_GZ_GUILD_CHANGE_CORPS_SYN*)pMsg;
RC::eGUILD_RESULT rt = g_GuildManager.CanChangeCorps( pRecvMsg->m_GuildGuid, pRecvMsg->m_OperCharGuid, pRecvMsg->m_szTargetCharName, pRecvMsg->m_byCorpsNum );
if( rt != RC::RC_GUILD_SUCCESS )
{
MSG_GZ_GUILD_CHANGE_CORPS_NAK nakMSG;
nakMSG.m_dwKey = pRecvMsg->m_dwKey;
nakMSG.m_byErrorCode = rt;
pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
return;
}
GuildMember* pTargetMember = g_GuildManager.FindGuildMemberByName( pRecvMsg->m_GuildGuid, pRecvMsg->m_szTargetCharName );
if( !pTargetMember ) return;
MSG_DZ_GUILD_CHANGE_CORPS_SYN synMSG;
synMSG.m_dwKey = pRecvMsg->m_dwKey;
synMSG.m_dwSessionIndex = pServerSession->GetSessionIndex();
synMSG.m_GuildGuid = pRecvMsg->m_GuildGuid;
synMSG.m_bySourceCorpsNum = pTargetMember->GetCorpsNumber();
synMSG.m_byTargetCorpsNum = pRecvMsg->m_byCorpsNum;
synMSG.m_CharGuid = pTargetMember->GetCharGuid();
Handler_Guild_GuildToDbp::OnDZ_GUILD_CHANGE_CORPS_SYN(
g_DBHandler.GetSharedSession(), &synMSG, sizeof(synMSG));
//{
// MSG_GZ_GUILD_CHANGE_COMMANDER_NAK nakMSG;
// nakMSG.m_dwKey = pRecvMsg->m_dwKey;
// nakMSG.m_byErrorCode = RC::RC_GUILD_FAILED_BY_NOT_CONNECT_SERVER;
// pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
// SUNLOG( eCRITICAL_LOG, "[Handler_Guild_GameToGuild_IMPL(GZ_GUILD_CHANGE_COMMANDER_SYN)] - Can't send Packet![GuildGuid:%u]\n", pRecvMsg->m_GuildGuid );
// return;
//}
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_CREATE_REAR_CAMP_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_CREATE_REAR_CAMP_SYN* pRecvMsg = (MSG_GZ_GUILD_CREATE_REAR_CAMP_SYN*)pMsg;
BYTE byCorpsNum = 0;
RC::eGUILD_RESULT rt = g_GuildManager.CanCreateRearCamp( pRecvMsg->m_GuildGuid, pRecvMsg->m_OperCharGuid, pRecvMsg->m_szTargetCharName, byCorpsNum );
if( rt != RC::RC_GUILD_SUCCESS )
{
MSG_GZ_GUILD_CREATE_REAR_CAMP_NAK nakMSG;
nakMSG.m_dwKey = pRecvMsg->m_dwKey;
nakMSG.m_byErrorCode = rt;
pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
return;
}
GuildMember* pTargetMember = g_GuildManager.FindGuildMemberByName( pRecvMsg->m_GuildGuid, pRecvMsg->m_szTargetCharName );
if( !pTargetMember ) return;
MSG_DZ_GUILD_CREATE_REAR_CAMP_SYN synMSG;
synMSG.m_dwKey = pRecvMsg->m_dwKey;
synMSG.m_dwSessionIndex = pServerSession->GetSessionIndex();
synMSG.m_GuildGuid = pRecvMsg->m_GuildGuid;
synMSG.m_TargetCharGuid = pTargetMember->GetCharGuid();
synMSG.m_byCorpsNum = byCorpsNum;
Handler_Guild_GuildToDbp::OnDZ_GUILD_CREATE_REAR_CAMP_SYN(
g_DBHandler.GetSharedSession(), &synMSG, sizeof(synMSG));
//{
// MSG_GZ_GUILD_CREATE_REAR_CAMP_NAK nakMSG;
// nakMSG.m_dwKey = pRecvMsg->m_dwKey;
// nakMSG.m_byErrorCode = RC::RC_GUILD_FAILED_BY_NOT_CONNECT_SERVER;
// pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
// SUNLOG( eCRITICAL_LOG, "[Handler_Guild_GameToGuild_IMPL(GZ_GUILD_CREATE_REAR_CAMP_SYN)] - Can't send Packet![GuildGuid:%u]\n", pRecvMsg->m_GuildGuid );
// return;
//}
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_DESTROY_REAR_CAMP_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_DESTROY_REAR_CAMP_SYN* pRecvMsg = (MSG_GZ_GUILD_DESTROY_REAR_CAMP_SYN *)pMsg;
RC::eGUILD_RESULT rt = g_GuildManager.CanDestroyRearCamp( pRecvMsg->m_GuildGuid, pRecvMsg->m_OperCharGuid, pRecvMsg->m_byCorpsNum );
if( rt != RC::RC_GUILD_SUCCESS )
{
MSG_GZ_GUILD_DESTROY_REAR_CAMP_NAK nakMSG;
nakMSG.m_dwKey = pRecvMsg->m_dwKey;
nakMSG.m_byErrorCode = rt;
pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
SUNLOG( eFULL_LOG, "[Handler_Guild_GameToGuild_IMPL(GZ_GUILD_DESTROY_REAR_CAMP_SYN)] ERROR, GuildGuid = %d, OperGuid = %u, CorpsNum = %d", pRecvMsg->m_GuildGuid, pRecvMsg->m_OperCharGuid, pRecvMsg->m_byCorpsNum );
return;
}
MSG_DZ_GUILD_DESTROY_REAR_CAMP_SYN synMsg;
synMsg.m_dwKey = pRecvMsg->m_dwKey;
synMsg.m_dwSessionIndex = pServerSession->GetSessionIndex();
synMsg.m_GuildGuid = pRecvMsg->m_GuildGuid;
synMsg.m_byCorpsNum = pRecvMsg->m_byCorpsNum;
synMsg.m_OperCharGuid = pRecvMsg->m_OperCharGuid;
Handler_Guild_GuildToDbp::OnDZ_GUILD_DESTROY_REAR_CAMP_SYN(
g_DBHandler.GetSharedSession(), &synMsg, sizeof(synMsg));
//{
// MSG_GZ_GUILD_DESTROY_REAR_CAMP_NAK nakMSG;
// nakMSG.m_dwKey = pRecvMsg->m_dwKey;
// nakMSG.m_byErrorCode = RC::RC_GUILD_FAILED_BY_NOT_CONNECT_SERVER;
// pServerSession->SendPacket(&nakMSG, sizeof(nakMSG));
// SUNLOG( eCRITICAL_LOG, "[Handler_Guild_GameToGuild_IMPL(GZ_GUILD_DESTROY_REAR_CAMP_SYN)] ERROR - Can't send Packet![GuildGuid:%u]\n", pRecvMsg->m_GuildGuid );
// return;
//}
}
//길드 초대.
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_INVITE_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_INVITE_SYN* recv_msg = (MSG_GZ_GUILD_INVITE_SYN*)pMsg;
RC::eGUILD_RESULT result_code = g_GuildManager.CanInviteGuild(recv_msg->m_GuildGuid,
recv_msg->m_OperCharGuid,
recv_msg->m_TargetCharGuid,
recv_msg->m_Level);
if (result_code != RC::RC_GUILD_SUCCESS)
{
MSG_GZ_GUILD_INVITE_NAK nak_msg;
nak_msg.m_dwKey = recv_msg->m_dwKey;
nak_msg.m_byErrorCode = result_code;
pServerSession->SendPacket(&nak_msg, sizeof(nak_msg));
SUNLOG(
eFULL_LOG,
__FUNCTION__" : Error : guild guid : %d, request : %u, target : %u, result : %d",
recv_msg->m_GuildGuid,
recv_msg->m_OperCharGuid,
recv_msg->m_TargetCharGuid,
result_code
);
return;
}
MSG_GZ_GUILD_INVITE_ACK ack_msg;
ack_msg.m_dwKey = recv_msg->m_dwKey;
ack_msg.m_TargetUserKey = recv_msg->m_TargetUserKey;
pServerSession->SendPacket(&ack_msg, sizeof(ack_msg));
}
//길드 멤버 로그인
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_LOGIN_CHAR_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_LOGIN_CHAR_SYN* pRecvMsg = (MSG_GZ_GUILD_LOGIN_CHAR_SYN*)pMsg;
//Invite나 Join이나 조건은 똑같다.
RC::eGUILD_RESULT rt = g_GuildManager.CanLogin( pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid );
if( rt == RC::RC_GUILD_NOT_EXIST_GUILD )
{
// 현재 길드서버에 길드가 존재 하지 않으면.. DB에 길드 정보를 요청한다.
MSG_DZ_GUILD_SELECT_SYN synMsg;
synMsg.m_dwKey = pRecvMsg->m_dwKey;
synMsg.m_dwSessionIndex = 0; // (WAVERIX) (090903) (CHANGES) ...-.-;...
synMsg.m_GuildGuid = pRecvMsg->m_GuildGuid;
synMsg.m_bySelectType = 1; //1은 로그인시 SELECT를 뜻한다.
synMsg.m_LoginCharGuid = pRecvMsg->m_CharGuid;
Handler_Guild_GuildToDbp::OnDZ_GUILD_SELECT_SYN(
g_DBHandler.GetSharedSession(), &synMsg, sizeof(synMsg));
//{
// MSG_GZ_GUILD_LOGIN_CHAR_NAK nakMsg;
// nakMsg.m_byErrorCode = RC::RC_GUILD_FAILED_BY_NOT_CONNECT_SERVER;
// pServerSession->SendPacket( &nakMsg, sizeof(nakMsg) );
// return;
//}
// CHANGES: f110627.2L, fixed the invalid acknowledgement answer
// that this status is pended.
return;
}
else if( rt == RC::RC_GUILD_SUCCESS )
{
// 길드 정보가 존재하고, 멤버가 길드 멤버이다. 리턴값 체크 하지 않고 바로 로그인 시킨다.
g_GuildManager.Login( pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid );
MSG_GZ_GUILD_LOGIN_CHAR_BRD brdMsg;
brdMsg.m_dwKey = pRecvMsg->m_dwKey;
g_GuildManager.SerializeGuildInfo( pRecvMsg->m_GuildGuid, brdMsg.m_GuildInfo, SERIALIZE_LOAD );
g_GuildManager.SerializeCorpsInfo( pRecvMsg->m_GuildGuid, brdMsg.m_CorpsTotalInfo, SERIALIZE_LOAD );
g_GuildManager.GetGuildMemberInfo( pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid, brdMsg.m_MemberInfo );
g_DBProxyServer.SendToSessionType(GAME_SERVER, &brdMsg, sizeof(brdMsg));
MSG_WZ_GUILD_LOGIN_CHAR_CMD cmdMsg;
g_GuildManager.GetWorldGuildInfo( pRecvMsg->m_GuildGuid, cmdMsg.m_WorldGuildInfo );
g_GuildManager.GetGuildBaseMemberInfo( pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid, cmdMsg.m_BaseMemberInfo );
g_DBProxyServer.SendToWorldServer(&cmdMsg, sizeof(cmdMsg));
return;
}
else if( rt == RC::RC_GUILD_ALREADY_LOGIN_MEMBER )
return;
//나머지 케이스는 실패 케이스다.
MSG_GZ_GUILD_LOGIN_CHAR_NAK nakMsg;
nakMsg.m_dwKey = pRecvMsg->m_dwKey; // (WAVERIX) (090903) (BUG-FIX) ...-.-+...
nakMsg.m_byErrorCode = rt;
pServerSession->SendPacket( &nakMsg, sizeof(nakMsg) );
}
//길드 멤버 로그아웃
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_LOGOUT_CHAR_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_LOGOUT_CHAR_SYN* pRecvMsg = (MSG_GZ_GUILD_LOGOUT_CHAR_SYN*)pMsg;
//1. 길드서버의 해당 유저의 정보를 로그아웃으로 변경한다.
RC::eGUILD_RESULT rc = g_GuildManager.Logout( pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid );
// 길드서버가 캐릭터 접속이후 뜨게 되면, 길드서버에는 현재 캐릭터에 대한 길드 정보가 없다.( 같은 길드원이 접속하지 않는 이상... )
// 따라서 게임서버에서는 길드GUID가 있어서 로그아웃 패킷을 보내고, 길드 서버에서는 해당 길드가 없다고 할 것이다.
if( rc == RC::RC_GUILD_NOT_EXIST_GUILD )
return;
if( rc != RC::RC_GUILD_SUCCESS )
{
SUNLOG( eCRITICAL_LOG, "Handler_Guild_GameToGuild_IMPL(GZ_GUILD_LOGOUT_CHAR_SYN) Fail, GuildGuid = %u, CharGuid = %u, rc = %d",
pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid, rc );
return;
}
//2. 게임서버로 보낸다.
MSG_GZ_GUILD_LOGOUT_CHAR_BRD brdMsg;
brdMsg.m_GuildGuid = pRecvMsg->m_GuildGuid;
brdMsg.m_CharGuid = pRecvMsg->m_CharGuid;
g_GuildManager.GetCharName( pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid, brdMsg.m_szCharName, MAX_CHARNAME_LENGTH );
g_DBProxyServer.SendToSessionType(GAME_SERVER, &brdMsg, sizeof(brdMsg));
//3. 월드서버로 보낸다.
MSG_WZ_GUILD_LOGOUT_CHAR_CMD cmdMsg;
cmdMsg.m_GuildGuid = pRecvMsg->m_GuildGuid;
cmdMsg.m_CharGuid = pRecvMsg->m_CharGuid;
g_DBProxyServer.SendToWorldServer(&cmdMsg, sizeof(cmdMsg));
}
//길드 멤버 레벨업
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_CHAR_LEVELUP_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_CHAR_LEVELUP_SYN* pRecvMsg = (MSG_GZ_GUILD_CHAR_LEVELUP_SYN*)pMsg;
RC::eGUILD_RESULT rt = g_GuildManager.LevelUpMember( pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid, pRecvMsg->m_Level );
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
#ifdef _NA_008807_20160512_GUILD_SYSTEM_EXTENNSION_BUG_FIX
// 아래의 함수를 콜하는 의미가 없어 뺀다...
#else
g_GuildManager.UpdateGuildJoinRequestCharacter( pRecvMsg->m_CharGuid, pRecvMsg->m_Level );
#endif //(_NA_008807_20160512_GUILD_SYSTEM_EXTENNSION_BUG_FIX)
#endif //_NA_007330_20140620_GUILD_SYSTEM_EXTENSION
// 결과가 레벨업에 의한 길드 탈퇴이면..
if( rt == RC::RC_GUILD_KICK_GUILD_BY_LEVELUP )
{
RC::eGUILD_RESULT rt = g_GuildManager.CanLeaveGuild( pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid );
if( rt != RC::RC_GUILD_SUCCESS )
{
MSG_GZ_GUILD_WITHDRAW_NAK msgNAK;
msgNAK.m_dwKey = pRecvMsg->m_dwKey;
msgNAK.m_byErrorCode = rt;
pServerSession->SendPacket( &msgNAK, sizeof(msgNAK) );
return;
}
MSG_DZ_GUILD_WITHDRAW_SYN msgSYN;
msgSYN.m_dwKey = pRecvMsg->m_dwKey;
msgSYN.m_dwSessionIndex = pServerSession->GetSessionIndex();
msgSYN.m_GuildGuid = pRecvMsg->m_GuildGuid;
msgSYN.m_CharGuid = pRecvMsg->m_CharGuid;
msgSYN.m_byPenaltyType = 3; // 레벨업에 의한 탈퇴.
Handler_Guild_GuildToDbp::OnDZ_GUILD_WITHDRAW_SYN(
g_DBHandler.GetSharedSession(), &msgSYN, sizeof(msgSYN));
//{
// MSG_GZ_GUILD_WITHDRAW_NAK msgNAK;
// msgNAK.m_dwKey = pRecvMsg->m_dwKey;
// msgNAK.m_byErrorCode = RC::RC_GUILD_FAILED_BY_NOT_CONNECT_SERVER;
// pServerSession->SendPacket( &msgNAK, sizeof(msgNAK) );
//}
return;
}
if( rt != RC::RC_GUILD_SUCCESS )
{
SUNLOG( eCRITICAL_LOG, "[Handler_Guild_GameToGuild_IMPL(GZ_GUILD_CHAR_LEVELUP_SYN)] Fail, GuildGuid = %u, CharGuid = %u, Level = %u, rt = %d",
pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid, pRecvMsg->m_Level, rt );
return;
}
MSG_GZ_GUILD_CHAR_LEVELUP_BRD brdMsg;
brdMsg.m_GuildGuid = pRecvMsg->m_GuildGuid;
g_GuildManager.GetCharName( pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid, brdMsg.m_szCharName, MAX_CHARNAME_LENGTH );
brdMsg.m_Level = pRecvMsg->m_Level;
pServerSession->SendPacket( &brdMsg, sizeof(brdMsg) );
}
Handler_Guild_GameToGuild_IMPL( GZ_GUILD_TOTALINFO_REQ_SYN )
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_TOTALINFO_REQ_SYN* pRecvMsg = (MSG_GZ_GUILD_TOTALINFO_REQ_SYN*)pMsg;
RC::eGUILD_RESULT rt = g_GuildManager.CanRequestTotalInfo( pRecvMsg->m_GuildGuid, pRecvMsg->m_CharGuid );
if( rt != RC::RC_GUILD_SUCCESS )
{
MSG_GZ_GUILD_TOTALINFO_REQ_NAK msgNAK;
msgNAK.m_dwKey = pRecvMsg->m_dwKey;
msgNAK.m_byErrorCode = rt;
pServerSession->SendPacket( &msgNAK, sizeof(msgNAK) );
return;
}
MSG_GZ_GUILD_TOTALINFO_REQ_ACK ackMsg;
ackMsg.m_dwKey = pRecvMsg->m_dwKey;
g_GuildManager.SerializeGuildInfo( pRecvMsg->m_GuildGuid, ackMsg.m_GuildInfo, SERIALIZE_LOAD );
g_GuildManager.SerializeCorpsInfo( pRecvMsg->m_GuildGuid, ackMsg.m_CropsTotalInfo, SERIALIZE_LOAD );
g_GuildManager.SerializeMemberTotalInfo( pRecvMsg->m_GuildGuid, ackMsg.m_MemberTotalInfo, SERIALIZE_LOAD );
#ifdef _NA004034_20120102_GUILD_POINT_SYSTEM
g_GuildManager.GetGuildInfoExtra(pRecvMsg->m_GuildGuid, ackMsg.guild_info_extra_);
#endif //_NA004034_20120102_GUILD_POINT_SYSTEM
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
g_GuildManager.GetGuildJoinRequestTotalInfo(pRecvMsg->m_GuildGuid, ackMsg.m_GuildJoinRequestTotalInfo);
#endif //_NA_007330_20140620_GUILD_SYSTEM_EXTENSION
pServerSession->SendPacket( &ackMsg, ackMsg.GetSize() );
}
//GM명령어 길드포인트 세팅
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_GM_GUILD_POINT_SYN )
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_GM_GUILD_POINT_SYN* pRecvMsg = (MSG_GZ_GUILD_GM_GUILD_POINT_SYN*)pMsg;
Guild* pGuild = g_GuildManager.FindGuild( pRecvMsg->m_GuildGuid );
if( !pGuild )
{
//만일 길드 서버에 정보가 없으면, 이상한 유저이거나 Agent서버로 로그인 하지 않은 유저이다.
MSG_GZ_GUILD_GM_GUILD_POINT_NAK nakMsg;
nakMsg.m_dwKey = pRecvMsg->m_dwKey;
nakMsg.m_byErrorCode = RC::RC_GUILD_NOT_EXIST_GUILD;
pServerSession->SendPacket( &nakMsg, sizeof(nakMsg) );
return;
}
GuildMember* pMember = pGuild->FindMember( pRecvMsg->m_CharGuid );
if( !pMember )
{
MSG_GZ_GUILD_GM_GUILD_POINT_NAK nakMsg;
nakMsg.m_dwKey = pRecvMsg->m_dwKey;
nakMsg.m_byErrorCode = RC::RC_GUILD_NOT_GUILD_MEMBER;
pServerSession->SendPacket( &nakMsg, sizeof(nakMsg) );
return;
}
MSG_DZ_GUILD_GM_GUILD_POINT_SYN synMsg;
synMsg.m_dwKey = pRecvMsg->m_dwKey;
synMsg.m_dwSessionIndex = pServerSession->GetSessionIndex();
synMsg.m_GuildGuid = pRecvMsg->m_GuildGuid;
synMsg.m_UP = pRecvMsg->m_UP;
synMsg.m_GP = pRecvMsg->m_GP;
Handler_Guild_GuildToDbp::OnDZ_GUILD_GM_GUILD_POINT_SYN(
g_DBHandler.GetSharedSession(), &synMsg, sizeof(synMsg));
//{
// MSG_GZ_GUILD_GM_GUILD_POINT_NAK nakMsg;
// nakMsg.m_dwKey = pRecvMsg->m_dwKey;
// nakMsg.m_byErrorCode = RC::RC_GUILD_FAILED_BY_NOT_CONNECT_SERVER;
// pServerSession->SendPacket( &nakMsg, sizeof(nakMsg) );
// return;
//}
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_RELATION_INFO_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_RELATION_INFO_SYN* pRecvMsg = (MSG_GZ_GUILD_RELATION_INFO_SYN*)pMsg;
MSG_DZ_GUILD_RELATION_INFO_SYN msg;
msg.m_dwKey = pMsg->m_dwKey;
msg.m_dwSessionIndex = pServerSession->GetSessionIndex();
msg.m_GuildGuid = pRecvMsg->m_GuildGuid;
Handler_Guild_GuildToDbp::OnDZ_GUILD_RELATION_INFO_SYN(
g_DBHandler.GetSharedSession(), &msg, sizeof(msg));
//{
// //MSG_GZ_GUILD_ADD_INFO_NAK nakMsg;
// //nakMsg.m_dwKey = pRecvMsg->m_dwKey;
// //strncpy( nakMsg.m_szTargetCharName, pRecvMsg->m_tszCharName, MAX_CHARNAME_LENGTH );
// //nakMsg.m_byErrorCode = RC::RC_GUILD_FAILED_BY_NOT_CONNECT_SERVER;
// //pServerSession->SendPacket( &nakMsg, sizeof(nakMsg) );
// return;
//}
//MSG_GZ_GUILD_RELATION_INFO_BRD SendToGameServer;
//SendToGameServer.m_dwKey = pRecvMsg->m_dwKey;
//SendToGameServer.m_AddInfo.m_GuildGuid = pRecvMsg->m_GuildGuid;
//LoadRelationInfo(&SendToGameServer.m_AddInfo);
//SendToGameServer.m_byRelCnt = SendToGameServer.m_AddInfo.m_byRelationGuildCnt;
//pServerSession->SendPacket( &SendToGameServer, SendToGameServer.GetSize());
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_JOIN_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_JOIN_SYN * recv_msg = (MSG_GZ_GUILD_JOIN_SYN *)pMsg;
eGUILD_DUTY Duty = eGUILD_DUTY_NONE;
BYTE corps_number = 0;
RC::eGUILD_RESULT result_code = g_GuildManager.CanJoinGuild(recv_msg->m_GuildGuid,
recv_msg->m_OperCharGuid,
recv_msg->m_TargetCharGuid,
recv_msg->m_Level,
Duty,
corps_number);
if (result_code != RC::RC_GUILD_SUCCESS)
{
MSG_GZ_GUILD_JOIN_NAK nak_msg;
nak_msg.m_dwKey = recv_msg->m_dwKey;
strncpy(nak_msg.m_szTargetCharName, recv_msg->m_tszCharName,
_countof(nak_msg.m_szTargetCharName));
nak_msg.m_szTargetCharName[_countof(nak_msg.m_szTargetCharName) - 1] = '\0';
strncpy( nak_msg.m_szTargetCharName, recv_msg->m_tszCharName, MAX_CHARNAME_LENGTH );
nak_msg.m_byErrorCode = result_code;
pServerSession->SendPacket( &nak_msg, sizeof(nak_msg) );
return;
}
MSG_DZ_GUILD_JOIN_SYN syn_msg;
syn_msg.m_dwKey = recv_msg->m_dwKey;
syn_msg.m_dwSessionIndex = pServerSession->GetSessionIndex();
syn_msg.m_GuildGuid = recv_msg->m_GuildGuid;
syn_msg.m_OperCharGuid = recv_msg->m_OperCharGuid;
syn_msg.m_TargetCharGuid = recv_msg->m_TargetCharGuid;
strncpy(syn_msg.m_tszCharName, recv_msg->m_tszCharName, _countof(syn_msg.m_tszCharName));
syn_msg.m_tszCharName[_countof(syn_msg.m_tszCharName) - 1] = '\0';
syn_msg.m_byClass = recv_msg->m_byClass;
syn_msg.m_Level = recv_msg->m_Level;
syn_msg.m_Duty = Duty;
syn_msg.m_byCorpsNum = corps_number;
Handler_Guild_GuildToDbp::OnDZ_GUILD_JOIN_SYN(g_DBHandler.GetSharedSession(),
&syn_msg,
sizeof(syn_msg));
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_BOTH_RELATION_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
PACKET_PTR_CONVERT(MSG_GZ_GUILD_BOTH_RELATION_SYN, pRecvMsg, pMsg);
CHARGUID RightMemberIndex = 0;
GUILDGUID response_guild_index = 0;
RC::eGUILD_RESULT result = GuildSmallContentEntry::RelationSystem::CanDoRelationChange(
pRecvMsg->m_GuildGuid, pRecvMsg->m_RequestPlayerIndex);
if(result == RC::RC_GUILD_SUCCESS)
{
response_guild_index = g_GuildManager.GetGuildGuidByGuildName(pRecvMsg->m_tszRelationGuildName);
if(0 != response_guild_index)
{
// (lst1024)(090402) 길드 삭제 대기 상태면 동맹 신청 할 수 없다.
Guild* pGuild = g_GuildManager.FindGuild(response_guild_index);
if( !pGuild )
result = RC::RC_GUILD_NOT_EXIST_GUILD;
else
{
if (pRecvMsg->m_eRelationType == eGUILD_RELATION_ALLIENCE &&
pGuild->CheckGuildDeleteState() == eGUILD_DELCHK_DESTROY_WAIT)
{
result = RC::RC_GUILD_DELCHK_DESTROY_WAIT;
}
else
{
// 요청 받은 길드에서 권한을 가진 길드 멤버 찾기
RightMemberIndex = g_GuildManager.GetGuildMasterByGuildName(pRecvMsg->m_tszRelationGuildName);
if(0 == RightMemberIndex) //길드 마스터가 없을 경우
{
result = RC::RC_GUILD_CURRENT_NONE_MASTER;
// 서브 마스터 권한 조사
RightMemberIndex = g_GuildManager.FindRightMember(response_guild_index, eGUILD_DUTY_SUBMASTER);
if(0 != RightMemberIndex)
{
result = GuildSmallContentEntry::RelationSystem::CanDoRelationChange(
response_guild_index, RightMemberIndex);
if(result !=RC::RC_GUILD_SUCCESS)
{
// 군사 권한 조사
RightMemberIndex = g_GuildManager.FindRightMember(response_guild_index, eGUILD_DUTY_STRATEGIST);
if(0 != RightMemberIndex)
{
result = GuildSmallContentEntry::RelationSystem::CanDoRelationChange(
response_guild_index, RightMemberIndex);
}
}
}
}
}
}
}
else
{
result = RC::RC_GUILD_CURRENT_NONE_MASTER;
}
}
//. 권한을 가진 멤버가 있으면~
if(RC::RC_GUILD_SUCCESS == result)
{
result =
GuildSmallContentEntry::RelationSystem::CanDoRelationShip(
pRecvMsg->m_GuildGuid,
response_guild_index,
pRecvMsg->m_eRelationType
);
if(RC::RC_GUILD_SUCCESS == result)
{
MSG_GZ_GUILD_BOTH_RELATION_ACK msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_eRelationType = pRecvMsg->m_eRelationType;
msg.m_RequestGuildGuid = pRecvMsg->m_GuildGuid;
msg.m_ResponseGuildGuid = response_guild_index;
msg.m_ResponsePlayerIndex = RightMemberIndex;
msg.m_RequestPlayerIndex = pRecvMsg->m_RequestPlayerIndex;
pServerSession->SendPacket(&msg, sizeof(msg));
return;
}
}
MSG_GZ_GUILD_RELATION_NAK msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_byErrorCode = result;
pServerSession->SendPacket(&msg, sizeof(msg));
return;
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_RELATION_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
PACKET_PTR_CONVERT(MSG_GZ_GUILD_RELATION_SYN, pRecvMsg, pMsg);
//요청자의 권한 조사.
// (lst1024)(090408) 길드 권한 체크시 케릭터GUID 사용
if( !g_GuildManager.CheckRight( pRecvMsg->m_RequestGuildGuid, pRecvMsg->m_RequestCharGuid, eGUILD_RIGHTS_RELATION ) )
{
MSG_GZ_GUILD_RELATION_NAK msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_byErrorCode = RC::RC_GUILD_HAVE_NOT_RIGHT;;
pServerSession->SendPacket(&msg, sizeof(msg));
return;
}
Guild* pResponseGuild = NULL;
if(pRecvMsg->m_ResponseGuildGuid)
{
pResponseGuild = g_GuildManager.FindGuild(pRecvMsg->m_ResponseGuildGuid);
}
else
{
pResponseGuild = g_GuildManager.FindGuildName(pRecvMsg->m_tszRelationGuildName);
}
RC::eGUILD_RESULT result = RC::RC_GUILD_SUCCESS;
if(pResponseGuild)
{
GUILDGUID request_guild_index = pRecvMsg->m_RequestGuildGuid;
GUILDGUID response_guild_index = pResponseGuild->GetGuildGuid();
result = GuildSmallContentEntry::RelationSystem::CanDoRelationShip(
request_guild_index, response_guild_index, pRecvMsg->m_eRelationType);
if(RC::RC_GUILD_SUCCESS == result)
{
MSG_DZ_GUILD_RELATION_SYN msg;
msg.m_dwKey = pRecvMsg->m_dwKey; /* AnswerPlayer 유저 키 */
msg.m_eRelationType = pRecvMsg->m_eRelationType;
msg.m_RequestGuildGuid = pRecvMsg->m_RequestGuildGuid;
msg.m_RequestUserKey = pRecvMsg->m_RequestUserKey; /* RequestPlayer 유저 키 */
msg.m_ResponseGuildGuid = pRecvMsg->m_ResponseGuildGuid;
msg.m_dwSessionIndex = pServerSession->GetSessionIndex();
util::GUILDNAMECOPY(msg.m_ResponseGuildName, pRecvMsg->m_tszRelationGuildName);
Handler_Guild_GuildToDbp::OnDZ_GUILD_RELATION_SYN(
g_DBHandler.GetSharedSession(), &msg, sizeof(msg));
return;
//result = RC::RC_GUILD_DISCONNECTED_GUILD_SERVER;
}
}
if (!pResponseGuild &&
pRecvMsg->m_eRelationType != eGUILD_RELATION_ALLIENCE &&
pRecvMsg->m_eRelationType != eGUILD_RELATION_CANCEL_BOTH_HOSTILITY)
{
MSG_DZ_GUILD_RELATION_SYN msg;
msg.m_dwKey = pRecvMsg->m_dwKey; /* AnswerPlayer 유저 키 */
msg.m_eRelationType = pRecvMsg->m_eRelationType;
msg.m_RequestGuildGuid = pRecvMsg->m_RequestGuildGuid;
msg.m_RequestUserKey = pRecvMsg->m_RequestUserKey; /* RequestPlayer 유저 키 */
msg.m_ResponseGuildGuid = pRecvMsg->m_ResponseGuildGuid;
msg.m_dwSessionIndex = pServerSession->GetSessionIndex();
util::GUILDNAMECOPY(msg.m_ResponseGuildName, pRecvMsg->m_tszRelationGuildName);
Handler_Guild_GuildToDbp::OnDZ_GUILD_RELATION_SYN(
g_DBHandler.GetSharedSession(), &msg, sizeof(msg));
return;
//result = RC::RC_GUILD_DISCONNECTED_GUILD_SERVER;
}
MSG_GZ_GUILD_RELATION_NAK msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_byErrorCode = result;
pServerSession->SendPacket(&msg, sizeof(msg));
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_RELATION_BOTH_AGAINST_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
PACKET_PTR_CONVERT(MSG_GZ_GUILD_RELATION_BOTH_AGAINST_SYN, pRecvMsg, pMsg);
GUILDGUID requestGuildGuid = pRecvMsg->m_GuildGuid;
GUILDGUID responseGuildGuid = pRecvMsg->m_RelGuildGuid;
CHARGUID requestPlayerGuid = pRecvMsg->m_MasterCharGuid;
RC::eGUILD_RESULT result = GuildSmallContentEntry::RelationSystem::CanDoRelationChange(
requestGuildGuid, requestPlayerGuid);
if(result != RC::RC_GUILD_SUCCESS)
{
MSG_GZ_GUILD_RELATION_BOTH_AGAINST_NAK msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_byErrorCode = result;
pServerSession->SendPacket(&msg, sizeof(msg));
return;
}
result = GuildSmallContentEntry::RelationSystem::CanDoRelationBothHostility(
requestGuildGuid, requestPlayerGuid);
MSG_DZ_GUILD_RELATION_BOTH_AGAINST_SYN msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_GuildGuid = requestGuildGuid;
msg.m_RelGuildGuid = responseGuildGuid;
msg.m_MasterCharGuid = requestPlayerGuid;
msg.m_dwSessionIndex = pServerSession->GetSessionIndex();
ZeroMemory(msg.m_tszRelGuildName, sizeof(msg.m_tszRelGuildName));
Handler_Guild_GuildToDbp::OnDZ_GUILD_RELATION_BOTH_AGAINST_SYN(
g_DBHandler.GetSharedSession(), &msg, sizeof(msg));
//{
// MSG_GZ_GUILD_RELATION_BOTH_AGAINST_NAK msg;
// msg.m_dwKey = pRecvMsg->m_dwKey;
// msg.m_byErrorCode = RC::RC_GUILD_DISCONNECTED_GUILD_SERVER;
// pServerSession->SendPacket(&msg, sizeof(msg));
// return;
//}
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_RELATION_DELETE_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
PACKET_PTR_CONVERT(MSG_GZ_GUILD_RELATION_DELETE_SYN, pRecvMsg, pMsg);
eGUILD_RELATION eType = pRecvMsg->m_eType;
GUILDGUID requestGuildGuid = pRecvMsg->m_GuildGuid;
GUILDGUID responseGuildGuid = pRecvMsg->m_RelGuildGuid;
CHARGUID requestPlayerGuid = pRecvMsg->m_RequestPlayerIndex;
RC::eGUILD_RESULT result = GuildSmallContentEntry::RelationSystem::CanDoRelationChange(
requestGuildGuid, requestPlayerGuid);
if(result != RC::RC_GUILD_SUCCESS)
{
MSG_GZ_GUILD_RELATION_DELETE_NAK msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_byErrorCode = result;
pServerSession->SendPacket(&msg, sizeof(msg));
return;
}
result = GuildSmallContentEntry::RelationSystem::CanDoRelationDelete(
requestGuildGuid, responseGuildGuid, pRecvMsg->m_eType);
if(RC::RC_GUILD_SUCCESS == result)
{
MSG_DZ_GUILD_RELATION_DELETE_SYN msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_eType = eType;
msg.m_GuildGuid = requestGuildGuid;
msg.m_RelGuildGuid = responseGuildGuid;
msg.m_dwSessionIndex = pServerSession->GetSessionIndex();
Handler_Guild_GuildToDbp::OnDZ_GUILD_RELATION_DELETE_SYN(
g_DBHandler.GetSharedSession(), &msg, sizeof(msg));
return;
//result = RC::RC_GUILD_FAILED_BY_NOT_CONNECT_SERVER;
}
MSG_GZ_GUILD_RELATION_DELETE_NAK msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_byErrorCode = result;
pServerSession->SendPacket(&msg, sizeof(msg));
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_RECOVERY_GUILD_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_RECOVERY_GUILD_SYN* pRecvMsg =
static_cast<MSG_GZ_GUILD_RECOVERY_GUILD_SYN*>(pMsg);
RC::eGUILD_RESULT result =
GuildSmallContentEntry::GuildPenalty::CanRecoveryGuild(pRecvMsg->m_GuildGuid);
if(RC::RC_GUILD_SUCCESS == result)
{
MSG_DZ_GUILD_RECOVERY_GUILD_SYN msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_dwSessionIndex = pServerSession->GetSessionIndex(); // (WAVERIX) (090903) (CHANGES) ...-.-;...
msg.m_CharGuid = pRecvMsg->m_CharGuid;
msg.m_GuildGuid = pRecvMsg->m_GuildGuid;
Handler_Guild_GuildToDbp::OnDZ_GUILD_RECOVERY_GUILD_SYN(
g_DBHandler.GetSharedSession(), &msg, sizeof(msg));
return;
//result = RC::RC_GUILD_RECOVERY_FAILED;
}
MSG_GZ_GUILD_RECOVERY_GUILD_NAK msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_CharGuid = pRecvMsg->m_CharGuid;
msg.m_byErrorCode = result;
pServerSession->SendPacket(&msg, sizeof(msg));
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_GUILDMARK_REGISTER_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_GUILDMARK_REGISTER_SYN* pRecvMsg =
static_cast<MSG_GZ_GUILD_GUILDMARK_REGISTER_SYN*>(pMsg);
GuildSmallContentEntry::GuildMark::GuildMarkInfo tempInfo;
tempInfo.guild_Index = pRecvMsg->m_GuildIndex;
tempInfo.pattern_index = pRecvMsg->m_PatternIndex;
tempInfo.background_index = pRecvMsg->m_BackGroundIndex;
tempInfo.request_player_index = pRecvMsg->m_RequestPlayerIndex;
RC::eGUILD_RESULT result = GuildSmallContentEntry::GuildMark::CanModify(tempInfo);
if(RC::RC_GUILD_SUCCESS != result)
{
DWORD userKey = pRecvMsg->m_dwKey;
GuildSmallContentEntry::GuildMark::ResultCastToGameServer(
static_cast<GameServerSession*>(pServerSession), result, userKey);
return;
}
MSG_DZ_GUILD_GUILDMARK_REGISTER_SYN msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_dwSessionIndex = pServerSession->GetSessionIndex(); // (WAVERIX) (090903) (BUG-FIX) ...-.-;...
msg.m_GuildIndex = tempInfo.guild_Index;
msg.m_PatternIndex = tempInfo.pattern_index;
msg.m_BackGroundIndex = tempInfo.background_index;
msg.m_RequestPlayerIndex = tempInfo.request_player_index;
msg.m_SlotIdx = pRecvMsg->m_SlotIdx;
msg.m_SlotPos = pRecvMsg->m_SlotPos;
Handler_Guild_GuildToDbp::OnDZ_GUILD_GUILDMARK_REGISTER_SYN(
g_DBHandler.GetSharedSession(), &msg, sizeof(msg));
//MessageOut(eDEV_LOG, "RegisterCastToDBProxy Error");
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_GUILDMARK_DELETE_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_GUILDMARK_DELETE_SYN* pRecvMsg =
static_cast<MSG_GZ_GUILD_GUILDMARK_DELETE_SYN*>(pMsg);
GuildSmallContentEntry::GuildMark::GuildMarkInfo tempInfo;
tempInfo.guild_Index = pRecvMsg->m_GuildIndex;
tempInfo.pattern_index = pRecvMsg->m_PatternIndex;
tempInfo.background_index = pRecvMsg->m_BackGroundIndex;
tempInfo.request_player_index = pRecvMsg->m_RequestPlayerIndex;
RC::eGUILD_RESULT result = GuildSmallContentEntry::GuildMark::CanModify(tempInfo);
if(RC::RC_GUILD_SUCCESS != result)
{
GuildSmallContentEntry::GuildMark::ResultCastToGameServer(
static_cast<GameServerSession*>(pServerSession), result, pRecvMsg->m_dwKey);
return;
}
MSG_DZ_GUILD_GUILDMARK_DELETE_SYN msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_dwSessionIndex = pServerSession->GetSessionIndex(); // (WAVERIX) (090903) (BUG-FIX) ...-.-;...
msg.m_GuildIndex = tempInfo.guild_Index;
msg.m_PatternIndex = tempInfo.pattern_index;
msg.m_BackGroundIndex = tempInfo.background_index;
msg.m_RequestPlayerIndex = tempInfo.request_player_index;
Handler_Guild_GuildToDbp::OnDZ_GUILD_GUILDMARK_DELETE_SYN(
g_DBHandler.GetSharedSession(), &msg, sizeof(msg));
//MessageOut(eDEV_LOG, "RegisterCastToDBProxy Error");
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_WAREHOUSE_OPEN_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
PACKET_PTR_CONVERT(MSG_GZ_GUILD_WAREHOUSE_OPEN_SYN,pRecvMsg, pMsg);
if (!g_GuildManager.CheckRight(pRecvMsg->m_GuildGuid,
pRecvMsg->m_OperCharGuid,
eGUILD_RIGHTS_WAREHOUSE_SAVE))
{
MSG_GZ_GUILD_WAREHOUSE_OPEN_NAK msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_bErrorCode = RC::RC_GUILD_WAREHOUSE_UNABLE_CURR_GRADE;
pServerSession->SendPacket(&msg, sizeof(msg));
return;
}
MSG_DZ_GUILD_WAREHOUSE_OPEN_SYN msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_dwSessionIndex = pServerSession->GetSessionIndex(); // (WAVERIX) (090903) (CHANGES) ...-.-;...
msg.m_GuildGuid = pRecvMsg->m_GuildGuid;
msg.m_OperCharGuid = pRecvMsg->m_OperCharGuid;
Handler_Guild_GuildToDbp::OnDZ_GUILD_WAREHOUSE_OPEN_SYN(
g_DBHandler.GetSharedSession(), &msg, sizeof(msg));
//SUNLOG(eDEV_LOG, "RegisterCastToDBProxy Error(%d)", pRecvMsg->m_GuildGuid);
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_WAREHOUSE_CLOSE_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_WAREHOUSE_CLOSE_SYN* pRecvMsg =
static_cast<MSG_GZ_GUILD_WAREHOUSE_CLOSE_SYN*>(pMsg);
// (WAVERIX) (090903) (NOTE) 아무래도 길드는 그냥 보기에도 문제가 많을 것 같다.
// 도저히 정상적인 코드라 생각되지 않는다.
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_NAME_CHANGE_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
MSG_GZ_GUILD_NAME_CHANGE_SYN* pRecvMsg = (MSG_GZ_GUILD_NAME_CHANGE_SYN*)pMsg;
RC::eGUILD_RESULT result = g_GuildManager.CanChangeGuildName( pRecvMsg->m_GuildGuid, pRecvMsg->m_OperCharGuid );
if(RC::RC_GUILD_SUCCESS != result)
{
MSG_GZ_GUILD_NAME_CHANGE_NAK msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_TargetPos = pRecvMsg->m_TargetPos;
msg.m_byErrorCode = result;
pServerSession->SendPacket(&msg, sizeof(msg));
return;
}
//.//
MSG_DZ_GUILD_NAME_CHANGE_SYN msg;
msg.m_dwKey = pRecvMsg->m_dwKey;
msg.m_TargetPos = pRecvMsg->m_TargetPos;
msg.m_GuildGuid = pRecvMsg->m_GuildGuid;
msg.m_OperCharGuid = pRecvMsg->m_OperCharGuid;
msg.m_dwSessionIndex = pServerSession->GetSessionIndex();
memcpy( msg.m_tszGuildName, pRecvMsg->m_tszGuildName, MAX_GUILDNAME_LENGTH*sizeof(TCHAR) );
msg.m_tszGuildName[MAX_GUILDNAME_LENGTH] = '\0';
Handler_Guild_GuildToDbp::OnDZ_GUILD_NAME_CHANGE_SYN(
g_DBHandler.GetSharedSession(), &msg, sizeof(msg));
//{
// MSG_GZ_GUILD_NAME_CHANGE_NAK msg;
// msg.m_dwKey = pRecvMsg->m_dwKey;
// msg.m_TargetPos = pRecvMsg->m_TargetPos;
// msg.m_byErrorCode = RC::RC_GUILD_DISCONNECTED_DBP_SERVER;
// pServerSession->SendPacket(&msg, sizeof(msg));
// SUNLOG(eDEV_LOG, "RegisterCastToDBProxy Error(%d)", pRecvMsg->m_GuildGuid);
//}
}
#ifdef _NA_003923_20120130_GUILD_RENEWAL
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_IN_GAME_GUILD_LOG_LIST_REQ)
{
const MSG_GZ_GUILD_IN_GAME_GUILD_LOG_LIST_REQ* recv_msg =
static_cast<MSG_GZ_GUILD_IN_GAME_GUILD_LOG_LIST_REQ*>(pMsg);
Guild* guild = g_GuildManager.FindGuild(recv_msg->request_guild_guid_);
if (guild == NULL)
{
SUNLOG(
eCRITICAL_LOG,
__FUNCTION__" : Not found guild : guild guid = %d",
recv_msg->request_guild_guid_
);
return;
}
guild->GetGuildInGameLog()->SendInGameLogToPlayer(recv_msg->request_char_guid_);
}
#endif//_NA_003923_20120130_GUILD_RENEWAL
#ifdef _NA_004034_20120102_GUILD_INTRODUCTION
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_INTRODUCTION_SAVE_SYN)
{
const MSG_GZ_GUILD_INTRODUCTION_SAVE_SYN* packet = \
static_cast<MSG_GZ_GUILD_INTRODUCTION_SAVE_SYN*>(pMsg);
Guild* guild = g_GuildManager.FindGuild(packet->guild_guid);
if(!guild)
return;
GuildMember* master = guild->FindMaster();
if(!master || (master->GetCharGuid() != packet->char_guid))
{
MSG_GZ_GUILD_INTRODUCTION_SAVE_ACK msg;
msg.m_dwKey = packet->m_dwKey;
msg.result_ = RC::RC_GUILD_FAILED;
memset(msg.introduction_strings_, 0, sizeof(msg.introduction_strings_));
pServerSession->SendPacket(&msg, sizeof(msg));
return;
}
if (guild) {
guild->SetGuildIntroduction(packet->guild_introductions_.introduction_strings_);
}
;{
const CHAR* introduction = guild->GetGuildIntroduction();
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
MSG_GZ_GUILD_INTRODUCTION_SAVE_ACK msg;
msg.guild_guid = packet->guild_guid;
msg.m_dwKey = packet->m_dwKey;
msg.result_ = RC::RC_GUILD_SUCCESS;
memset(msg.introduction_strings_, 0, sizeof(msg.introduction_strings_));
strncpy(msg.introduction_strings_, introduction, MAX_GUILD_INTRODUCTION_LENGTH);
g_DBProxyServer.SendToSessionType(GAME_SERVER, &msg, sizeof(msg));
#else //_NA_007330_20140620_GUILD_SYSTEM_EXTENSION
MSG_GZ_GUILD_INTRODUCTION_SAVE_ACK msg;
msg.m_dwKey = packet->m_dwKey;
msg.result_ = RC::RC_GUILD_SUCCESS;
memset(msg.introduction_strings_, 0, sizeof(msg.introduction_strings_));
strncpy(msg.introduction_strings_, introduction, MAX_GUILD_INTRODUCTION_LENGTH);
pServerSession->SendPacket(&msg, sizeof(msg));
#endif //_NA_007330_20140620_GUILD_SYSTEM_EXTENSION
};
MSG_DZ_GUILD_INTRODUCTION_SAVE_SYN dz_msg;
dz_msg.init();
dz_msg.char_guid = packet->char_guid;
dz_msg.guild_guid = packet->guild_guid;
memcpy(&dz_msg.guild_introductions_, &packet->guild_introductions_, \
sizeof(packet->guild_introductions_));
g_DBProxyServer.SendToDBPServer(&dz_msg, sizeof(dz_msg));
}
#endif //_NA_004034_20120102_GUILD_INTRODUCTION
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_JOIN_REQUEST_SYN)
{
const MSG_GZ_GUILD_JOIN_REQUEST_SYN* packet = \
static_cast<MSG_GZ_GUILD_JOIN_REQUEST_SYN*>(pMsg);
GUILDGUID guild_guid = packet->request_info.m_guild_guid;
CHARGUID char_guid = packet->request_info.m_char_guid;
Guild* guild = g_GuildManager.FindGuild(guild_guid);
if(guild == NULL)
{
MSG_GZ_GUILD_JOIN_REQUEST_ACK msg;
msg.request_info.m_char_guid = char_guid;
msg.request_info.m_guild_guid = guild_guid;
msg.result_ = RC::RC_GUILD_JOIN_REQUEST_INVALID_GUILD;
pServerSession->SendPacket(&msg, sizeof(msg));
return;
}
//캐릭터의 해당길드 가입요청 상태를 가져온다
RC::eGUILD_RESULT result = g_GuildManager.CanGuildJoinRequest(char_guid, guild_guid);
if (result != RC::RC_GUILD_SUCCESS)
{
MSG_GZ_GUILD_JOIN_REQUEST_ACK msg;
msg.request_info.m_char_guid = char_guid;
msg.request_info.m_guild_guid = guild_guid;
msg.result_ = result;
pServerSession->SendPacket(&msg, sizeof(msg));
return;
}
//길드 가입 요청 로그를 남긴다
GUILDLOG->LogGuildJoinRequest(guild, char_guid, packet->request_info.m_char_name);
MSG_DZ_GUILD_JOIN_REQUEST_INSERT_SYN msg;
msg.request_info = packet->request_info;
Handler_Guild_GuildToDbp::OnDZ_GUILD_JOIN_REQUEST_INSERT_SYN(
g_DBHandler.GetSharedSession(), &msg, sizeof(msg));
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_JOIN_REQUEST_REJECT_SYN)
{
const MSG_GZ_GUILD_JOIN_REQUEST_REJECT_SYN* packet = \
static_cast<MSG_GZ_GUILD_JOIN_REQUEST_REJECT_SYN*>(pMsg);
GUILDGUID guild_guid = packet->guild_guid;
CHARGUID target_guid = packet->target_guid;
Guild* guild = g_GuildManager.FindGuild(guild_guid);
if(guild == NULL)
{
MSG_GZ_GUILD_JOIN_REQUEST_REJECT_ACK msg;
msg.Init();
msg.m_dwKey = packet->char_guid;
msg.result = RC::RC_GUILD_JOIN_REQUEST_INVALID_GUILD;
pServerSession->SendPacket(&msg, sizeof(msg));
return;
}
if (packet->reject_type == eGUILD_JOIN_REJECT_TYPE_NORMAL)
{
if (g_GuildManager.CheckRight(packet->guild_guid, packet->char_guid, eGUILD_RIGHTS_JOIN ) == false)
{
MSG_GZ_GUILD_JOIN_REQUEST_REJECT_ACK msg;
msg.Init();
msg.m_dwKey = packet->char_guid;
util::GUILDNAMECOPY(msg.guild_name, guild->GetGuildName());
msg.result = RC::RC_GUILD_DONT_HAVE_RIGHTS_STATE;
pServerSession->SendPacket(&msg, sizeof(msg));
return;
}
}
//캐릭터의 해당길드 가입요청 상태를 가져온다
RC::eGUILD_RESULT result = g_GuildManager.CanGuildJoinRequest(target_guid, guild_guid);
if (result != RC::RC_GUILD_JOIN_REQUEST_ALREADY_EXIST)
{
MSG_GZ_GUILD_JOIN_REQUEST_REJECT_ACK msg;
msg.Init();
msg.m_dwKey = packet->char_guid;
util::GUILDNAMECOPY(msg.guild_name, guild->GetGuildName());
msg.result = RC::RC_GUILD_DONT_HAVE_RIGHTS_STATE;
pServerSession->SendPacket(&msg, sizeof(msg));
return;
}
MSG_DZ_GUILD_JOIN_REQUEST_DELETE_SYN msg;
msg.guild_guid = packet->guild_guid;
msg.char_guid = packet->char_guid;
msg.target_guid = packet->target_guid;
msg.reject_type = packet->reject_type;
Handler_Guild_GuildToDbp::OnDZ_GUILD_JOIN_REQUEST_DELETE_SYN(
g_DBHandler.GetSharedSession(), &msg, sizeof(msg));
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_RELOAD_SYN)
{
const MSG_GZ_GUILD_RELOAD_SYN* packet = \
static_cast<MSG_GZ_GUILD_RELOAD_SYN*>(pMsg);
//길드에 가입된 캐릭터인지 확인
GUILDGUID guild_guid = g_GuildManager.FindCharGuildGuid(packet->char_guid);
if (guild_guid != 0)
{
MSG_GZ_GUILD_RELOAD_ACK msg;
msg.guild_guid = guild_guid;
msg.m_dwKey = packet->m_dwKey;
g_DBProxyServer.SendToSessionType(GAME_SERVER, &msg, sizeof(msg));
}
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_FACILITY_UPGRADE_SYN)
{
const MSG_GZ_GUILD_FACILITY_UPGRADE_SYN* packet = \
static_cast<MSG_GZ_GUILD_FACILITY_UPGRADE_SYN*>(pMsg);
FLEVEL add_level = 1;
const RC::eGUILD_RESULT result = g_GuildManager.CanUpdateGuildFacility(packet->facility_code, add_level, packet->guild_guid);
if (result != RC::RC_GUILD_SUCCESS)
{
MSG_GZ_GUILD_FACILITY_UPGRADE_ACK msg;
msg.char_guid = packet->char_guid;
msg.facility_code = packet->facility_code;
msg.m_dwKey = packet->m_dwKey;
msg.result = result;
g_DBProxyServer.SendToSessionType(GAME_SERVER, &msg, sizeof(msg));
return;
}
// 권한체크 .
if (!g_GuildManager.CheckRight(packet->guild_guid, packet->char_guid, eGUILD_RIGHTS_GUILD_EQUIPMENT ))
{
MSG_GZ_GUILD_FACILITY_UPGRADE_ACK msg;
msg.facility_code = packet->facility_code;
msg.char_guid = packet->char_guid;
msg.m_dwKey = packet->m_dwKey;
msg.result = RC::RC_GUILD_HAVE_NOT_RIGHT;
g_DBProxyServer.SendToSessionType(GAME_SERVER, &msg, sizeof(msg));
return;
}
MSG_DZ_GUILD_FACILITY_UPDATE_SYN syn_msg;
syn_msg.char_guid = packet->char_guid;
syn_msg.guild_guid = packet->guild_guid;
syn_msg.facility_code = packet->facility_code;
syn_msg.add_level = add_level;
const GUILD_FACILITY_INFO* info = g_GuildManager.GetGuildFacility(packet->facility_code, packet->guild_guid);
if (info == NULL)
{
syn_msg.current_level = 0;
}
else
{
syn_msg.current_level = info->level;
}
Handler_Guild_GuildToDbp::OnDZ_GUILD_FACILITY_UPDATE_SYN(
g_DBHandler.GetSharedSession(), &syn_msg, sizeof(syn_msg));
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_FACILITY_SELECT_SYN)
{
const MSG_GZ_GUILD_FACILITY_SELECT_SYN* packet = \
static_cast<MSG_GZ_GUILD_FACILITY_SELECT_SYN*>(pMsg);
MSG_DZ_GUILD_FACILITY_SELECT_SYN msg;
msg.guild_guid = packet->guild_guid;
Handler_Guild_GuildToDbp::OnDZ_GUILD_FACILITY_SELECT_SYN(
g_DBHandler.GetSharedSession(), &msg, sizeof(msg));
}
#endif //_NA_007330_20140620_GUILD_SYSTEM_EXTENSION
//지역 점령전 기본 정보 셋팅 관련 작업
Handler_Guild_GameToGuild_IMPL(GZ_DOMINATION_INFO_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
const MSG_GZ_DOMINATION_INFO_SYN* recv_msg =
static_cast<MSG_GZ_DOMINATION_INFO_SYN*>(pMsg);
//기본 정보 로드가 성공한 상태이면 게임 서버에 응답해 준다
if (DominationManager* domination_manager = DominationManager::Instance())
{
if (domination_manager->IsCompleteLoading() == false) {
return;
};
domination_manager->SendAreaInfo(
static_cast<GameServerSession*>(pServerSession), recv_msg->m_MapCode);
WAVERIX_WRAPPER((WAVERIX_LC_CALL2("waverix_log_trace_domination",
_T("|["__FUNCTION__"]|{mapcode}="), recv_msg->m_MapCode)));
#ifdef _NA_007128_20140326_MONDSCHIEN_DOMINATION
domination_manager->SendDominationContinentLordInfo(recv_msg->m_MapCode);
#endif //_NA_007128_20140326_MONDSCHIEN_DOMINATION
};
}
Handler_Guild_GameToGuild_IMPL(GZ_DOMINATION_AUCTION_INFO_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
const MSG_GZ_DOMINATION_AUCTION_INFO_SYN* pRecvMsg =
static_cast<MSG_GZ_DOMINATION_AUCTION_INFO_SYN*>(pMsg);
//경매 정보 로드가 성공한 상태이면 게임 서버에 응답해 준다
if (DominationManager* domination_manager = DominationManager::Instance())
{
if (domination_manager->IsCompleteLoading() == false) {
return;
};
domination_manager->SendAuctions(
static_cast<GameServerSession*>(pServerSession), pRecvMsg->m_MapCode);
WAVERIX_WRAPPER((WAVERIX_LC_CALL2("waverix_log_trace_domination",
_T("|["__FUNCTION__"]|{mapcode}="), pRecvMsg->m_MapCode)));
};
}
//DB로 기본 정보 Update요청을 한다.
Handler_Guild_GameToGuild_IMPL(GZ_DOMINATION_UPDATE_INFO_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
const MSG_GZ_DOMINATION_UPDATE_INFO_SYN* pRecvMsg =
static_cast<MSG_GZ_DOMINATION_UPDATE_INFO_SYN*>(pMsg);
MSG_DZ_DOMINATION_UPDATE_INFO_SYN sendMsg;
sendMsg.m_eSetType = pRecvMsg->m_eSetType;
sendMsg.m_DominationInfo = pRecvMsg->m_DominationInfo;
switch(pRecvMsg->m_eSetType)
{
case DOMINATION_GM_OFFENCE_GUILD_SET:
case DOMINATION_GM_DEFENCE_GUILD_SET:
{
DOMINATION_BASIC_GUILD_INFO* guild_info = NULL;
if (pRecvMsg->m_eSetType == DOMINATION_GM_OFFENCE_GUILD_SET)
guild_info = &sendMsg.m_DominationInfo.m_disGuildInfo;
else
guild_info = &sendMsg.m_DominationInfo.m_inGuildInfo;
Guild* pGuild = g_GuildManager.FindGuildName(guild_info->m_tszGuildName);
if (!pGuild)
return;
guild_info->m_GuildGuid = pGuild->GetGuildGuid();
pGuild->AcquireGuildMark(guild_info->m_BackGroundIndex, guild_info->m_PatternIndex);
GuildMember* master = pGuild->FindMaster();
guild_info->m_GuildMasterGuid = master->GetCharGuid();
_tcsncpy(guild_info->m_tszGuildMaster, master->GetCharName(), MAX_CHARNAME_LENGTH);
guild_info->m_tszGuildMaster[MAX_CHARNAME_LENGTH] = '\0';
sendMsg.m_eSetType = DOMINATION_INIT;
}
break;
}
Handler_Guild_GuildToDbp::OnDZ_DOMINATION_UPDATE_INFO_SYN(g_DBHandler.GetSharedSession(),
&sendMsg, sizeof(sendMsg));
}
Handler_Guild_GameToGuild_IMPL(GZ_DOMINATION_ACCEP_HEIM_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
const MSG_GZ_DOMINATION_ACCEP_HEIM_SYN* recv_msg =
static_cast<MSG_GZ_DOMINATION_ACCEP_HEIM_SYN*>(pMsg);
MSG_DZ_DOMINATION_ACCEP_HEIM_SYN send_msg;
#ifdef _CH_20100420_CHANGE_DOMINATION_APPLY_WAY
send_msg.m_TokenPos = recv_msg->m_TokenPos;
send_msg.number_of_betting_item = recv_msg->number_of_betting_item;
#endif//_CH_20100420_CHANGE_DOMINATION_APPLY_WAY
send_msg.m_dwKey = recv_msg->m_dwKey;
send_msg.m_DominationActionInfo = recv_msg->m_DominationActionInfo;
Handler_Guild_GuildToDbp::OnDZ_DOMINATION_ACCEP_HEIM_SYN(
g_DBHandler.GetSharedSession(), &send_msg, sizeof(send_msg));
}
Handler_Guild_GameToGuild_IMPL(GZ_DOMINATION_INIT_ACTIONINFO_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
const MSG_GZ_DOMINATION_INIT_ACTIONINFO_SYN* pRecvMsg =
static_cast<MSG_GZ_DOMINATION_INIT_ACTIONINFO_SYN*>(pMsg);
MSG_DZ_DOMINATION_INIT_AUCTIONINFO_SYN sendMsg;
sendMsg.m_MapCode = pRecvMsg->m_MapCode;
Handler_Guild_GuildToDbp::OnDZ_DOMINATION_INIT_AUCTIONINFO_SYN(
g_DBHandler.GetSharedSession(), &sendMsg, sizeof(sendMsg));
}
//하임을 돌려줄 길드 마스터의 Guid리스트를 작성하여 WorldServer로 보낸다.
Handler_Guild_GameToGuild_IMPL(GZ_DOMINATION_RETURNHIME_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
const MSG_GZ_DOMINATION_RETURNHIME_SYN* pRecvMsg =
static_cast<MSG_GZ_DOMINATION_RETURNHIME_SYN*>(pMsg);
DOMINATION_RETURNMONEY_INFO ReturnInfo[MAX_DOMINATION_AUCTION];
ZeroMemory( ReturnInfo, sizeof(ReturnInfo) );
const DOMINATION_INFO& dominationInfo = pRecvMsg->m_DominationInfo;
INT countData = 0;
//경매에 당첨 되지 않은 길드 리스트 작성
DominationManager::Instance()->SetListForReturnHeim( dominationInfo.m_FieldCode,
ReturnInfo, _countof(ReturnInfo), countData );
#ifndef _CH_20100420_CHANGE_DOMINATION_APPLY_WAY
//마지막에 지역 점령 길드 마스터이름과 금액을 넣는다.(지역 점령전 경매 보상 하임)
{
ReturnInfo[countData].m_TenderCost = dominationInfo.m_BestCost;
ReturnInfo[countData].m_CostType = SYSMEMO_DOMINATION_REWARD_MONEY;
memcpy( ReturnInfo[countData].m_tszMaster,
dominationInfo.m_inGuildInfo.m_tszGuildMaster, sizeof(TCHAR)*MAX_CHARNAME_LENGTH );
ReturnInfo[countData].m_tszMaster[MAX_CHARNAME_LENGTH] = '\0';
++countData;
}
#endif//_CH_20100420_CHANGE_DOMINATION_APPLY_WAY
//WorldServer에 하임 쪽지를 돌리도록 요청
MSG_WZ_GUILD_DOMINATION_RETURNHIME_CMD sendMsg;
sendMsg.m_MapCode = dominationInfo.m_FieldCode;
memcpy( sendMsg.m_tszGuild, dominationInfo.m_disGuildInfo.m_tszGuildName, sizeof(TCHAR)*MAX_GUILDNAME_LENGTH );
sendMsg.m_tszGuild[MAX_GUILDNAME_LENGTH] = '\0';
memcpy( sendMsg.m_ReturnInfo, ReturnInfo, sizeof(sendMsg.m_ReturnInfo) );
sendMsg.m_DataCount = countData;
g_DBProxyServer.SendToWorldServer(&sendMsg, sendMsg.GetSize());
//GameServer에 완료 응답을 한다.
MSG_GZ_DOMINATION_RETURNHIME_ACK ackMsg;
ackMsg.m_MapCode = dominationInfo.m_FieldCode;
pServerSession->SendPacket(&ackMsg, sizeof(ackMsg));
}
Handler_Guild_GameToGuild_IMPL(GZ_DOMINATION_BATTING_HEIM_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
const MSG_GZ_DOMINATION_BATTING_HEIM_SYN* pRecvMsg =
static_cast<MSG_GZ_DOMINATION_BATTING_HEIM_SYN*>(pMsg);
MSG_GZ_DOMINATION_BATTING_HEIM_ACK sendMsg;
Guild* pGuild = g_GuildManager.FindGuild( pRecvMsg->m_guildGuid );
if( pGuild == NULL )
{
sendMsg.m_ResultCode = RC::DOMINATION_RESULT_NOT_GUILDMEMBER;
}
else if( pGuild->CheckGuildDeleteState() == eGUILD_DELCHK_DESTROY_WAIT )
{
sendMsg.m_ResultCode = RC::DOMINATION_RESULT_GUILDSTAT_DESTROYWAIT;
}
else
{
//현재 길드는 경매 신청을 해도 되는 길드이다.(해산 신청건에 있어서)
sendMsg.m_ResultCode = RC::DOMINATION_RESULT_SUCCESS;
}
sendMsg.m_dwKey = pRecvMsg->m_dwKey;
#ifdef _CH_20100420_CHANGE_DOMINATION_APPLY_WAY
sendMsg.m_mapCode = pRecvMsg->m_mapCode;
#endif
#ifdef _NA_000000_20130429_DOMINATION_PENALTY
GuildSmallContentEntry::GuildPenalty::PenaltyTime current_Time = 0;
util::GetDateTime_YYYYMMDDHHMMSS(current_Time);
if (pGuild->GetPenaltyTime() >= current_Time) {
sendMsg.m_ResultCode = RC::DOMINATION_RESULT_PENALTY_TIME;
sendMsg.penalty_time = pGuild->GetPenaltyTime();
}
#endif //_NA_000000_20130429_DOMINATION_PENALTY
pServerSession->SendPacket( &sendMsg, sizeof(sendMsg) );
}
//_NA_20100604_BETTER_DOMINATION_MANAGER
Handler_Guild_GameToGuild_IMPL(GZ_DOMINATION_UPDATE_GUILDINFO_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
const MSG_GZ_DOMINATION_UPDATE_GUILDINFO_SYN* recv_msg =
static_cast<MSG_GZ_DOMINATION_UPDATE_GUILDINFO_SYN*>(pMsg);
MSG_DZ_DOMINATION_UPDATE_GUILDINFO_SYN send_msg;
{
send_msg.guild_guid_ = recv_msg->guild_guid_;
send_msg.domination_join_count_ = recv_msg->domination_join_count_;
send_msg.domination_defense_count_ = recv_msg->domination_defense_count_;
send_msg.domination_hunting_count_ = recv_msg->domination_hunting_count_;
}
Handler_Guild_GuildToDbp::OnDZ_DOMINATION_UPDATE_GUILDINFO_SYN(
g_DBHandler.GetSharedSession(), &send_msg, sizeof(send_msg));
}
//_NA_20100913_GUILD_WAREHOUSE_GM_COMMAND
// GM 명령에 의한 길드 창고 강제 닫기
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_GM_WAREHOUSE_FORCE_CLOSE_CMD)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
const MSG_GZ_GUILD_GM_WAREHOUSE_FORCE_CLOSE_CMD* msg =
static_cast<MSG_GZ_GUILD_GM_WAREHOUSE_FORCE_CLOSE_CMD*>(pMsg);
Guild* guild = g_GuildManager.FindGuildName(msg->guild_name);
if (guild == NULL)
{
SUNLOG(eFULL_LOG, "[GZ_GUILD_GM_WAREHOUSE_FORCE_CLOSE_CMD] Guild name '%s' not found!", msg->guild_name);
return;
}
// DBProxy와 게임 서버들로 전달한다.
// 둘 중 가능한 곳에서 성공하기를 기대하므로 타이밍 고려나 응답 대기 없이 바로 양방향으로 뿌린다.
// DBProxy로 강제 닫기 명령을 전달하고
MSG_DZ_GUILD_GM_WAREHOUSE_FORCE_CLOSE_CMD cmd;
cmd.gm_player_key = msg->gm_player_key;
cmd.guild_guid = guild->GetGuildGuid();
Handler_Guild_GuildToDbp::OnDZ_GUILD_GM_WAREHOUSE_FORCE_CLOSE_CMD(
g_DBHandler.GetSharedSession(), &cmd, sizeof(cmd));
// 게임 서버들에 공지한다.
MSG_GZ_GUILD_GM_WAREHOUSE_FORCE_CLOSE_BRD brd;
brd.gm_player_key = msg->gm_player_key;
brd.guild_guid = guild->GetGuildGuid();
g_DBProxyServer.SendToSessionType(GAME_SERVER, &brd, sizeof(brd));
}
//gamelulu_dev_not : 점령전 정보 저장 기본 구조가 Game <-> Guild <-> DBP 이다.
//하지만 대부분은 Game->DBP->Guild->Game 의 구조로써 해결이 가능하다.
//_NA_20110216_INCREASE_DOMINATION_DEFFENSEWALL_POINT
Handler_Guild_GameToGuild_IMPL(GZ_DOMINATION_ADD_DEFFENSEWALL_POINT_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
const MSG_GZ_DOMINATION_ADD_DEFFENSEWALL_POINT_SYN* recv_msg =
static_cast<MSG_GZ_DOMINATION_ADD_DEFFENSEWALL_POINT_SYN*>(pMsg);
MSG_DZ_DOMINATION_ADD_DEFFENSEWALL_POINT_SYN send_msg;
send_msg.item_code_ = recv_msg->item_code_;
send_msg.m_dwKey = recv_msg->m_dwKey;
send_msg.domination_info_ = recv_msg->domination_info_;
Handler_Guild_GuildToDbp::OnDZ_DOMINATION_ADD_DEFFENSEWALL_POINT_SYN(
g_DBHandler.GetSharedSession(), &send_msg, sizeof(send_msg));
}
//_NA_20110406_CHANGE_RULE_FOR_DOMINATION_JOIN
Handler_Guild_GameToGuild_IMPL(GZ_DOMINATION_MEMBER_JOIN_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
const MSG_GZ_DOMINATION_MEMBER_JOIN_SYN* recv_msg =
static_cast<MSG_GZ_DOMINATION_MEMBER_JOIN_SYN*>(pMsg);
MSG_DZ_DOMINATION_MEMBER_JOIN_SYN send_msg;
send_msg.map_code_ = recv_msg->map_code_;
send_msg.member_info_ = recv_msg->member_info_;
Handler_Guild_GuildToDbp::OnDZ_DOMINATION_MEMBER_JOIN_SYN(
g_DBHandler.GetSharedSession(), &send_msg, sizeof(send_msg));
}
Handler_Guild_GameToGuild_IMPL(GZ_DOMINATION_MEMBER_LEAVE_SYN)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
const MSG_GZ_DOMINATION_MEMBER_LEAVE_SYN* recv_msg =
static_cast<MSG_GZ_DOMINATION_MEMBER_LEAVE_SYN*>(pMsg);
MSG_DZ_DOMINATION_MEMBER_LEAVE_SYN send_msg;
send_msg.map_code_ = recv_msg->map_code_;
send_msg.member_guid_ = recv_msg->member_guid_;
send_msg.requester_guid = recv_msg->requester_guid;
Handler_Guild_GuildToDbp::OnDZ_DOMINATION_MEMBER_LEAVE_SYN(
g_DBHandler.GetSharedSession(), &send_msg, sizeof(send_msg));
}
Handler_Guild_GameToGuild_IMPL(GZ_DOMINATION_MEMBERLIST_REQ)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
const MSG_GZ_DOMINATION_MEMBERLIST_REQ* recv_msg =
static_cast<MSG_GZ_DOMINATION_MEMBERLIST_REQ*>(pMsg);
if (DominationManager* domination_manager = DominationManager::Instance())
{
if (domination_manager->IsCompleteLoading() == false) {
return;
};
domination_manager->SendMembers(
static_cast<GameServerSession*>(pServerSession), recv_msg->map_code_);
WAVERIX_WRAPPER((WAVERIX_LC_CALL2("waverix_log_trace_domination",
_T("|["__FUNCTION__"]|{mapcode}="), recv_msg->map_code_)));
};
}
Handler_Guild_GameToGuild_IMPL(GZ_DOMINATION_MEMBERLIST_INIT_CMD)
{
__TOUCHED((pServerSession, pMsg, wSize));WAVERIX_GUILD_DEBUGGING();
const MSG_GZ_DOMINATION_MEMBERLIST_INIT_CMD* recv_msg =
static_cast<MSG_GZ_DOMINATION_MEMBERLIST_INIT_CMD*>(pMsg);
MSG_DZ_DOMINATION_MEMBERLIST_INIT_SYN send_msg;
Handler_Guild_GuildToDbp::OnDZ_DOMINATION_MEMBERLIST_INIT_SYN(
g_DBHandler.GetSharedSession(), &send_msg, sizeof(send_msg));
}
#ifdef _NA004034_20120102_GUILD_POINT_SYSTEM
Handler_Guild_GameToGuild_IMPL(GZ_GUILDPOINTSYSTEM)
{
__TOUCHED((pServerSession, pMsg, wSize));
const MSG_GZ_GUILDPOINTSYSTEM* packet = \
static_cast<MSG_GZ_GUILDPOINTSYSTEM*>(pMsg);
switch(packet->packet_type)
{
case GZ_GUILDPOINT_CHANGE_CMD: {
OnGZ_GUILDPOINT_CHANGE_CMD(pServerSession, pMsg, wSize);
} break;
default:
break;
}
}
Handler_Guild_GameToGuild_IMPL(GZ_GUILDPOINT_CHANGE_CMD)
{
const MSG_GZ_GUILDPOINT_CHANGE_CMD* packet = \
static_cast<MSG_GZ_GUILDPOINT_CHANGE_CMD*>(pMsg);
DWORD guid = packet->guildpoint.guid_;
DWORD uuid = packet->guildpoint.uuid_;
DWORD code = packet->guildpoint.code_;
DWORD point = packet->guildpoint.point_;
if(code == CURRENCY_INFO_DONATION_GUILDCOIN)
{
g_GuildManager.ProcessGuildCoinChange(guid, uuid, code, point);
//Write guild game log
Guild* guild = g_GuildManager.FindGuild(guid);
if (guild == NULL)
{
SUNLOG(eCRITICAL_LOG, __FUNCTION__" : Not found guild : guid = %d", guid);
return;
}
GuildMember* guild_member = guild->FindMember(uuid);
if (guild_member == NULL)
{
SUNLOG(eCRITICAL_LOG, __FUNCTION__ \
" : Not found guild member : guid = %d, member_guid = %d", guid, uuid);
return;
}
guild->GetGuildInGameLog()->WriteGuildLog(
GuildGivePoint,
guid,
guild_member->GetCharName(),
point
);
}
}
#endif //_NA004034_20120102_GUILD_POINT_SYSTEM
#ifdef _NA_000000_20130429_DOMINATION_PENALTY
Handler_Guild_GameToGuild_IMPL(GZ_DOMINATION_PENALTY_CMD)
{
const MSG_GZ_DOMINATION_PENALTY_CMD* packet = \
static_cast<MSG_GZ_DOMINATION_PENALTY_CMD*>(pMsg);
DWORD guild_guid = packet->guild_guid;
Guild* guild = g_GuildManager.FindGuild(guild_guid);
if (guild)
{
CTime penalty_time = packet->penalty_time;
MAPCODE map_code = packet->map_code;
WORD member_count = packet->member_count;
guild->SetPenaltyTime(util::GetDateTime_YYYYMMDDHHMMSS(penalty_time.GetTime()));
MSG_DZ_DOMINATION_PENALTY_CMD msg;
msg.guild_guid = guild_guid;
msg.penalty_time = penalty_time;
g_DBProxyServer.SendToDBPServer(&msg, sizeof(msg));
guild->GetGuildInGameLog()->WriteGuildLog( \
GuildPenaltyTime, guild_guid, NULL, map_code, penalty_time.GetTime(), member_count);
}
}
#endif //_NA_000000_20130429_DOMINATION_PENALTY
#ifdef _NA_008334_20150608_SONNENSCHEIN
Handler_Guild_GameToGuild_IMPL(GZ_GUILD_SONNENSCHEIN_UPDATE_SYN)
{
MSG_GZ_GUILD_SONNENSCHEIN_UPDATE_SYN* syn_msg = \
static_cast<MSG_GZ_GUILD_SONNENSCHEIN_UPDATE_SYN*>(pMsg);
MSG_DZ_GUILD_SONNENSCHEIN_UPDATE_SYN dz_syn_msg;
dz_syn_msg.m_dwKey = syn_msg->m_dwKey;
dz_syn_msg.m_dwSessionIndex = pServerSession->GetSessionIndex();
dz_syn_msg.guild_guid = syn_msg->guild_guid;
dz_syn_msg.sonnenschein_phase = syn_msg->sonnenschein_phase;
Handler_Guild_GuildToDbp::OnDZ_GUILD_SONNENSCHEIN_UPDATE_SYN(g_DBHandler.GetSharedSession(),
&dz_syn_msg, sizeof(dz_syn_msg));
}
#endif //_NA_008334_20150608_SONNENSCHEIN