📄 clan.cpp.svn-base
字号:
send( thischannel->sock, (char*)&pak, pak.Size, 0 );
delete []nick;
}
break;
case 0x05://down rank
{
int clan_rank=0;
int level=0;
int job=0;
int channel=0xff;
char* nick = new (nothrow) char[P->Size-7];
if(nick==NULL)
{
Log(MSG_ERROR, "Error allocing memory" );
return false;
}
memcpy( nick, &P->Buffer[1], P->Size-7 );
if(strcmp(nick,thisclient->charname)==0)
{
delete []nick;
return true;
}
CCharClient* otherclient = GetClientByName( nick );
if(otherclient!=NULL)
{
clan_rank = otherclient->clan_rank;
if(otherclient->clan_rank>0)
{
otherclient->clan_rank--;
}
else
{
delete []nick;
return true;
}
job = otherclient->job;
level = otherclient->level;
channel = otherclient->channel;
BEGINPACKET( pak, 0x7e0 );
ADDBYTE ( pak, 0x83 );
ADDSTRING ( pak, nick );
ADDBYTE ( pak, 0x00 );
ADDBYTE ( pak, otherclient->clan_rank );
otherclient->SendPacket(&pak);
}
else
{ // 0 1 2
result = DB->QStore("SELECT clan_rank,classid,level FROM characters WHERE char_name='%s'",nick);
if(result==NULL);
{
delete []nick;
return false;
}
if(mysql_num_rows(result)!=1)
{
DB->QFree( );
Log(MSG_WARNING, "Invalid charname: %s" , nick );
delete []nick;
return false;
}
row = mysql_fetch_row( result );
clan_rank=atoi(row[0]);
job = atoi(row[1]);
level = atoi(row[2]);
DB->QFree( );
}
if(clan_rank>0)
{
clan_rank--;
}
if(!DB->QExecute("UPDATE characters SET clan_rank=%i WHERE char_name='%s'",clan_rank,nick))
{
delete []nick;
return false;
}
BEGINPACKET( pak, 0x7e0 );
ADDBYTE ( pak, 0x75 );
ADDBYTE ( pak, clan_rank );
ADDBYTE ( pak, channel );// channel
ADDWORD ( pak, 0x0000 );
ADDWORD ( pak, 0x0000 );
ADDWORD ( pak, level ); // level
ADDWORD ( pak, job ); // job
ADDSTRING ( pak, nick );
ADDBYTE ( pak, 0x00 );
SendToClanMembers(thisclient->clanid,&pak);
RESETPACKET( pak, 0x7e1 );//update world information
ADDBYTE ( pak, 0xfc );
ADDBYTE ( pak, clan_rank );
ADDSTRING ( pak, nick );
ADDBYTE ( pak, 0x00 );
cryptPacket( (char*)&pak, NULL );
CChanels* thischannel = GetChannelByID( channel );
if(thischannel!=NULL)
send( thischannel->sock, (char*)&pak, pak.Size, 0 );
delete []nick;
}
break;
case 0x06://Change news
{
if(thisclient->clan_rank<5)
return true;
char* news = new (nothrow) char[P->Size-7];
if(news==NULL)
{
Log(MSG_ERROR, "Error allocing memory" );
return false;
}
memcpy( news, &P->Buffer[1], P->Size-7 );
CClans* thisclan = GetClanByID(thisclient->clanid);
if(thisclan!=NULL)
{
strcpy(thisclan->news,news);
BEGINPACKET( pak, 0x7e0 );
ADDBYTE ( pak, 0x34 );
ADDSTRING ( pak, thisclan->news );
ADDBYTE ( pak, 0x00 );
SendToClanMembers(thisclan->id,&pak);
if(!DB->QExecute("UPDATE list_clan SET news='%s' WHERE id=%i", thisclan->news, thisclan->id))
return false;
}
delete []news;
}
break;
case 0x07://Leave Clan
{
if( thisclient->clan_rank == 6 )
return true;
CClans* thisclan = GetClanByID( thisclient->clanid );
if(thisclan==NULL)
return true;
BEGINPACKET( pak, 0x7e0 );
ADDBYTE( pak, 0x82 );
ADDSTRING( pak, thisclient->charname );
ADDBYTE( pak, 0x00);
SendToClanMembers(thisclient->clanid,&pak);
for(UINT i=0;i<thisclan->ClanMembers.size();i++)
{
CClanMembers* ClanMember = thisclan->ClanMembers.at( i );
if(strcmp(ClanMember->name,thisclient->charname)==0)
{
thisclan->ClanMembers.erase( thisclan->ClanMembers.begin()+i );
delete ClanMember;
break;
}
}
thisclient->clanid = 0;
thisclient->clan_rank=1;
if(!DB->QExecute("UPDATE characters SET clanid=0 AND clan_rank=1 WHERE char_name='%s'",thisclient->charname))
return false;
RESETPACKET( pak, 0x7e1 );//Update world clan information
ADDBYTE ( pak, 0xfb );//action (leave)
ADDSTRING ( pak, thisclient->charname );
ADDBYTE ( pak, 0x00 );
cryptPacket( (char*)&pak, NULL );
CChanels* thischannel = GetChannelByID( thisclient->channel );
if(thischannel!=NULL)
send( thischannel->sock, (char*)&pak, pak.Size, 0 );
}
break;
case 0x08:
{
pakClanMembers ( thisclient );
}
break;
case 0x09://Give Master
{
int clan_rank=0;
int level=0;
int job=0;
int channel=0xff;
char* nick = new (nothrow) char[P->Size-7];
if(nick==NULL)
{
Log(MSG_ERROR, "Error allocing memory" );
return false;
}
memcpy( nick, &P->Buffer[1], P->Size-7 );
if(strcmp(nick,thisclient->charname)==0)
{
delete []nick;
return true;
}
//Convert to master
CCharClient* otherclient = GetClientByName ( nick );
if(otherclient!=NULL)
{
clan_rank = 6;
otherclient->clan_rank = clan_rank;
job = otherclient->job;
level = otherclient->level;
channel = otherclient->channel;
BEGINPACKET( pak, 0x7e0 );
ADDBYTE ( pak, 0x83 );
ADDSTRING ( pak, nick );
ADDBYTE ( pak, 0x00 );
ADDBYTE ( pak, otherclient->clan_rank );
otherclient->SendPacket(&pak);
}
else
{ // 0 1
result = DB->QStore("SELECT classid,level FROM characters where char_name='%s'",nick);
if(result==NULL)
{
delete []nick;
return false;
}
if(mysql_num_rows(result)!=1)
{
DB->QFree( );
Log(MSG_WARNING, "Invalid charname: %s" , nick );
delete []nick;
return false;
}
row = mysql_fetch_row( result );
job = atoi(row[0]);
level = atoi(row[1]);
DB->QFree( );
}
if(!DB->QExecute("UPDATE characters SET clan_rank=%i WHERE char_name='%s'",clan_rank,nick))
{
delete []nick;
return false;
}
BEGINPACKET( pak, 0x7e0 );
ADDBYTE ( pak, 0x75 );
ADDBYTE ( pak, clan_rank );
ADDBYTE ( pak, channel );//canal
ADDWORD ( pak, 0x0000 );
ADDWORD ( pak, 0x0000 );
ADDWORD ( pak, level ); //level?
ADDWORD ( pak, job ); // job?
ADDSTRING ( pak, nick );
ADDBYTE ( pak, 0x00 );
SendToClanMembers(thisclient->clanid,&pak);
RESETPACKET( pak, 0x7e1 );//update world information
ADDBYTE ( pak, 0xfc );
ADDBYTE ( pak, clan_rank );
ADDSTRING ( pak, nick );
ADDBYTE ( pak, 0x00 );
cryptPacket( (char*)&pak, NULL );
CChanels* thischannel = GetChannelByID( channel );
if(thischannel!=NULL)
send( thischannel->sock, (char*)&pak, pak.Size, 0 );
//Convert to commander
clan_rank = 4;
thisclient->clan_rank=clan_rank;
job = thisclient->job;
level = thisclient->level;
channel = thisclient->channel;
RESETPACKET( pak, 0x7e0 );
ADDBYTE ( pak, 0x83 );
ADDSTRING ( pak, thisclient->charname );
ADDBYTE ( pak, 0x00 );
ADDBYTE ( pak, thisclient->clan_rank );
thisclient->SendPacket(&pak);
if(!DB->QExecute("UPDATE characters SET clan_rank=%i WHERE char_name='%s'",clan_rank,thisclient->charname))
{
delete []nick;
return false;
}
RESETPACKET( pak, 0x7e0 );
ADDBYTE ( pak, 0x75 );
ADDBYTE ( pak, clan_rank );
ADDBYTE ( pak, channel );//canal
ADDWORD ( pak, 0x0000 );
ADDWORD ( pak, 0x0000 );
ADDWORD ( pak, level ); //level?
ADDWORD ( pak, job ); // job?
ADDSTRING ( pak, thisclient->charname );
ADDBYTE ( pak, 0x00 );
SendToClanMembers(thisclient->clanid,&pak);
RESETPACKET( pak, 0x7e1 );//update world information
ADDBYTE ( pak, 0xfc );
ADDBYTE ( pak, clan_rank );
ADDSTRING ( pak, thisclient->charname );
ADDBYTE ( pak, 0x00 );
cryptPacket( (char*)&pak, NULL );
thischannel = GetChannelByID( channel );
if(thischannel!=NULL)
send( thischannel->sock, (char*)&pak, pak.Size, 0 );
delete []nick;
}
break;
case 0x0a://disorganize clan
{
if(thisclient->clan_rank<6)
return true;
unsigned int clanid = thisclient->clanid;
CClans* thisclan = GetClanByID(thisclient->clanid);
if(thisclan==NULL)
return true;
if(thisclan->ClanMembers.size()>1)//Can't be deleted if there are members
return true;
if(!DB->QExecute("UPDATE characters SET clanid=0 AND clan_rank=1 WHERE clanid=%i",thisclient->clanid))
return false;
if(!DB->QExecute("DELETE FROM list_clan WHERE id=%i",thisclient->clanid))
return false;
BEGINPACKET( pak, 0x7e0 );
ADDBYTE ( pak, 0x51 );
ADDBYTE ( pak, 0x00 );
SendToClanMembers(thisclient->clanid, &pak);
thisclan->ClanMembers.clear( );
//delete from clan list
for(UINT i=0;i<ClanList.size( );i++)
{
CClans* clan = ClanList.at( i );
if(thisclan == clan)
{
ClanList.erase( ClanList.begin() + i );
delete clan;
break;
}
}
RESETPACKET( pak, 0x7e1 );//Update world clan information
ADDBYTE ( pak, 0xfd );//action (disorg)
ADDWORD ( pak, clanid );
ADDWORD ( pak, thisclient->charid );
CChanels* thischannel = GetChannelByID( thisclient->channel );
if(thischannel!=NULL)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -