2022-03-05 12:44:06 +02:00
// vim:ts=4 sw=4
# include "stdafx.h"
# include "ClientManager.h"
# include "Main.h"
# include "Config.h"
# include "DBManager.h"
# include "QID.h"
# include "GuildManager.h"
void CClientManager : : GuildCreate ( CPeer * peer , DWORD dwGuildID )
{
sys_log ( 0 , " GuildCreate %u " , dwGuildID ) ;
ForwardPacket ( HEADER_DG_GUILD_LOAD , & dwGuildID , sizeof ( DWORD ) ) ;
CGuildManager : : instance ( ) . Load ( dwGuildID ) ;
}
void CClientManager : : GuildChangeGrade ( CPeer * peer , TPacketGuild * p )
{
sys_log ( 0 , " GuildChangeGrade %u %u " , p - > dwGuild , p - > dwInfo ) ;
ForwardPacket ( HEADER_DG_GUILD_CHANGE_GRADE , p , sizeof ( TPacketGuild ) ) ;
}
void CClientManager : : GuildAddMember ( CPeer * peer , TPacketGDGuildAddMember * p )
{
CGuildManager : : instance ( ) . TouchGuild ( p - > dwGuild ) ;
sys_log ( 0 , " GuildAddMember %u %u " , p - > dwGuild , p - > dwPID ) ;
char szQuery [ 512 ] ;
snprintf ( szQuery , sizeof ( szQuery ) ,
" INSERT INTO guild_member%s VALUES(%u, %u, %d, 0, 0) " ,
GetTablePostfix ( ) , p - > dwPID , p - > dwGuild , p - > bGrade ) ;
2022-03-06 00:01:03 +02:00
std : : unique_ptr < SQLMsg > pmsg_insert ( CDBManager : : instance ( ) . DirectQuery ( szQuery ) ) ;
2022-03-05 12:44:06 +02:00
snprintf ( szQuery , sizeof ( szQuery ) ,
" SELECT pid, grade, is_general, offer, level, job, name FROM guild_member%s, player%s WHERE guild_id = %u and pid = id and pid = %u " , GetTablePostfix ( ) , GetTablePostfix ( ) , p - > dwGuild , p - > dwPID ) ;
2022-03-06 00:01:03 +02:00
std : : unique_ptr < SQLMsg > pmsg ( CDBManager : : instance ( ) . DirectQuery ( szQuery ) ) ;
2022-03-05 12:44:06 +02:00
if ( pmsg - > Get ( ) - > uiNumRows = = 0 )
{
sys_err ( " Query failed when getting guild member data %s " , pmsg - > stQuery . c_str ( ) ) ;
return ;
}
MYSQL_ROW row = mysql_fetch_row ( pmsg - > Get ( ) - > pSQLResult ) ;
if ( ! row [ 0 ] | | ! row [ 1 ] )
return ;
TPacketDGGuildMember dg ;
dg . dwGuild = p - > dwGuild ;
str_to_number ( dg . dwPID , row [ 0 ] ) ;
str_to_number ( dg . bGrade , row [ 1 ] ) ;
str_to_number ( dg . isGeneral , row [ 2 ] ) ;
str_to_number ( dg . dwOffer , row [ 3 ] ) ;
str_to_number ( dg . bLevel , row [ 4 ] ) ;
str_to_number ( dg . bJob , row [ 5 ] ) ;
2022-03-05 19:59:39 +02:00
strncpy ( dg . szName , row [ 6 ] , sizeof ( dg . szName ) ) ;
2022-03-05 12:44:06 +02:00
ForwardPacket ( HEADER_DG_GUILD_ADD_MEMBER , & dg , sizeof ( TPacketDGGuildMember ) ) ;
}
void CClientManager : : GuildRemoveMember ( CPeer * peer , TPacketGuild * p )
{
sys_log ( 0 , " GuildRemoveMember %u %u " , p - > dwGuild , p - > dwInfo ) ;
char szQuery [ 512 ] ;
snprintf ( szQuery , sizeof ( szQuery ) , " DELETE FROM guild_member%s WHERE pid=%u and guild_id=%u " , GetTablePostfix ( ) , p - > dwInfo , p - > dwGuild ) ;
CDBManager : : instance ( ) . AsyncQuery ( szQuery ) ;
snprintf ( szQuery , sizeof ( szQuery ) , " REPLACE INTO quest%s (dwPID, szName, szState, lValue) VALUES(%u, 'guild_manage', 'withdraw_time', %u) " , GetTablePostfix ( ) , p - > dwInfo , ( DWORD ) GetCurrentTime ( ) ) ;
CDBManager : : instance ( ) . AsyncQuery ( szQuery ) ;
ForwardPacket ( HEADER_DG_GUILD_REMOVE_MEMBER , p , sizeof ( TPacketGuild ) ) ;
}
void CClientManager : : GuildSkillUpdate ( CPeer * peer , TPacketGuildSkillUpdate * p )
{
sys_log ( 0 , " GuildSkillUpdate %d " , p - > amount ) ;
ForwardPacket ( HEADER_DG_GUILD_SKILL_UPDATE , p , sizeof ( TPacketGuildSkillUpdate ) ) ;
}
void CClientManager : : GuildExpUpdate ( CPeer * peer , TPacketGuildExpUpdate * p )
{
sys_log ( 0 , " GuildExpUpdate %d " , p - > amount ) ;
ForwardPacket ( HEADER_DG_GUILD_EXP_UPDATE , p , sizeof ( TPacketGuildExpUpdate ) , 0 , peer ) ;
}
void CClientManager : : GuildChangeMemberData ( CPeer * peer , TPacketGuildChangeMemberData * p )
{
sys_log ( 0 , " GuildChangeMemberData %u %u %d %d " , p - > pid , p - > offer , p - > level , p - > grade ) ;
ForwardPacket ( HEADER_DG_GUILD_CHANGE_MEMBER_DATA , p , sizeof ( TPacketGuildChangeMemberData ) , 0 , peer ) ;
}
void CClientManager : : GuildDisband ( CPeer * peer , TPacketGuild * p )
{
sys_log ( 0 , " GuildDisband %u " , p - > dwGuild ) ;
char szQuery [ 512 ] ;
snprintf ( szQuery , sizeof ( szQuery ) , " DELETE FROM guild%s WHERE id=%u " , GetTablePostfix ( ) , p - > dwGuild ) ;
CDBManager : : instance ( ) . AsyncQuery ( szQuery ) ;
snprintf ( szQuery , sizeof ( szQuery ) , " DELETE FROM guild_grade%s WHERE guild_id=%u " , GetTablePostfix ( ) , p - > dwGuild ) ;
CDBManager : : instance ( ) . AsyncQuery ( szQuery ) ;
snprintf ( szQuery , sizeof ( szQuery ) , " REPLACE INTO quest%s (dwPID, szName, szState, lValue) SELECT pid, 'guild_manage', 'withdraw_time', %u FROM guild_member%s WHERE guild_id = %u " , GetTablePostfix ( ) , ( DWORD ) GetCurrentTime ( ) , GetTablePostfix ( ) , p - > dwGuild ) ;
CDBManager : : instance ( ) . AsyncQuery ( szQuery ) ;
snprintf ( szQuery , sizeof ( szQuery ) , " DELETE FROM guild_member%s WHERE guild_id=%u " , GetTablePostfix ( ) , p - > dwGuild ) ;
CDBManager : : instance ( ) . AsyncQuery ( szQuery ) ;
snprintf ( szQuery , sizeof ( szQuery ) , " DELETE FROM guild_comment%s WHERE guild_id=%u " , GetTablePostfix ( ) , p - > dwGuild ) ;
CDBManager : : instance ( ) . AsyncQuery ( szQuery ) ;
ForwardPacket ( HEADER_DG_GUILD_DISBAND , p , sizeof ( TPacketGuild ) ) ;
}
const char * __GetWarType ( int n )
{
switch ( n )
{
case 0 :
return " <EFBFBD> п<EFBFBD> " ;
case 1 :
return " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ;
case 2 :
return " <EFBFBD> <EFBFBD> ȣ " ;
default :
return " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ȣ " ;
}
}
void CClientManager : : GuildWar ( CPeer * peer , TPacketGuildWar * p )
{
switch ( p - > bWar )
{
case GUILD_WAR_SEND_DECLARE :
sys_log ( 0 , " GuildWar: GUILD_WAR_SEND_DECLARE type(%s) guild(%d - %d) " , __GetWarType ( p - > bType ) , p - > dwGuildFrom , p - > dwGuildTo ) ;
CGuildManager : : instance ( ) . AddDeclare ( p - > bType , p - > dwGuildFrom , p - > dwGuildTo ) ;
break ;
case GUILD_WAR_REFUSE :
sys_log ( 0 , " GuildWar: GUILD_WAR_REFUSE type(%s) guild(%d - %d) " , __GetWarType ( p - > bType ) , p - > dwGuildFrom , p - > dwGuildTo ) ;
CGuildManager : : instance ( ) . RemoveDeclare ( p - > dwGuildFrom , p - > dwGuildTo ) ;
break ;
/*
case GUILD_WAR_WAIT_START :
CGuildManager : : instance ( ) . RemoveDeclare ( p - > dwGuildFrom , p - > dwGuildTo ) ;
if ( ! CGuildManager : : instance ( ) . WaitStart ( p ) )
p - > bWar = GUILD_WAR_CANCEL ;
break ;
*/
case GUILD_WAR_WAIT_START :
sys_log ( 0 , " GuildWar: GUILD_WAR_WAIT_START type(%s) guild(%d - %d) " , __GetWarType ( p - > bType ) , p - > dwGuildFrom , p - > dwGuildTo ) ;
case GUILD_WAR_RESERVE : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
if ( p - > bWar ! = GUILD_WAR_WAIT_START )
sys_log ( 0 , " GuildWar: GUILD_WAR_RESERVE type(%s) guild(%d - %d) " , __GetWarType ( p - > bType ) , p - > dwGuildFrom , p - > dwGuildTo ) ;
CGuildManager : : instance ( ) . RemoveDeclare ( p - > dwGuildFrom , p - > dwGuildTo ) ;
if ( ! CGuildManager : : instance ( ) . ReserveWar ( p ) )
p - > bWar = GUILD_WAR_CANCEL ;
else
p - > bWar = GUILD_WAR_RESERVE ;
break ;
case GUILD_WAR_ON_WAR : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> Ų<EFBFBD> <C5B2> . (<28> ʵ<EFBFBD> <CAB5> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> )
sys_log ( 0 , " GuildWar: GUILD_WAR_ON_WAR type(%s) guild(%d - %d) " , __GetWarType ( p - > bType ) , p - > dwGuildFrom , p - > dwGuildTo ) ;
CGuildManager : : instance ( ) . RemoveDeclare ( p - > dwGuildFrom , p - > dwGuildTo ) ;
CGuildManager : : instance ( ) . StartWar ( p - > bType , p - > dwGuildFrom , p - > dwGuildTo ) ;
break ;
case GUILD_WAR_OVER : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
sys_log ( 0 , " GuildWar: GUILD_WAR_OVER type(%s) guild(%d - %d) " , __GetWarType ( p - > bType ) , p - > dwGuildFrom , p - > dwGuildTo ) ;
CGuildManager : : instance ( ) . RecvWarOver ( p - > dwGuildFrom , p - > dwGuildTo , p - > bType , p - > lWarPrice ) ;
break ;
case GUILD_WAR_END : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
sys_log ( 0 , " GuildWar: GUILD_WAR_END type(%s) guild(%d - %d) " , __GetWarType ( p - > bType ) , p - > dwGuildFrom , p - > dwGuildTo ) ;
CGuildManager : : instance ( ) . RecvWarEnd ( p - > dwGuildFrom , p - > dwGuildTo ) ;
return ; // NOTE: RecvWarEnd<6E> <64> <EFBFBD> <EFBFBD> <20> <> Ŷ<EFBFBD> <C5B6> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ε<EFBFBD> ij<EFBFBD> <C4B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> .
case GUILD_WAR_CANCEL :
sys_log ( 0 , " GuildWar: GUILD_WAR_CANCEL type(%s) guild(%d - %d) " , __GetWarType ( p - > bType ) , p - > dwGuildFrom , p - > dwGuildTo ) ;
CGuildManager : : instance ( ) . CancelWar ( p - > dwGuildFrom , p - > dwGuildTo ) ;
break ;
}
ForwardPacket ( HEADER_DG_GUILD_WAR , p , sizeof ( TPacketGuildWar ) ) ;
}
void CClientManager : : GuildWarScore ( CPeer * peer , TPacketGuildWarScore * p )
{
CGuildManager : : instance ( ) . UpdateScore ( p - > dwGuildGainPoint , p - > dwGuildOpponent , p - > lScore , p - > lBetScore ) ;
}
void CClientManager : : GuildChangeLadderPoint ( TPacketGuildLadderPoint * p )
{
sys_log ( 0 , " GuildChangeLadderPoint Recv %u %d " , p - > dwGuild , p - > lChange ) ;
CGuildManager : : instance ( ) . ChangeLadderPoint ( p - > dwGuild , p - > lChange ) ;
}
void CClientManager : : GuildUseSkill ( TPacketGuildUseSkill * p )
{
sys_log ( 0 , " GuildUseSkill Recv %u %d " , p - > dwGuild , p - > dwSkillVnum ) ;
CGuildManager : : instance ( ) . UseSkill ( p - > dwGuild , p - > dwSkillVnum , p - > dwCooltime ) ;
SendGuildSkillUsable ( p - > dwGuild , p - > dwSkillVnum , false ) ;
}
void CClientManager : : SendGuildSkillUsable ( DWORD guild_id , DWORD dwSkillVnum , bool bUsable )
{
sys_log ( 0 , " SendGuildSkillUsable Send %u %d %s " , guild_id , dwSkillVnum , bUsable ? " true " : " false " ) ;
TPacketGuildSkillUsableChange p ;
p . dwGuild = guild_id ;
p . dwSkillVnum = dwSkillVnum ;
p . bUsable = bUsable ;
ForwardPacket ( HEADER_DG_GUILD_SKILL_USABLE_CHANGE , & p , sizeof ( TPacketGuildSkillUsableChange ) ) ;
}
void CClientManager : : GuildChangeMaster ( TPacketChangeGuildMaster * p )
{
if ( CGuildManager : : instance ( ) . ChangeMaster ( p - > dwGuildID , p - > idFrom , p - > idTo ) = = true )
{
TPacketChangeGuildMaster packet ;
packet . dwGuildID = p - > dwGuildID ;
packet . idFrom = 0 ;
packet . idTo = 0 ;
ForwardPacket ( HEADER_DG_ACK_CHANGE_GUILD_MASTER , & packet , sizeof ( packet ) ) ;
}
}