l2-unlegits/l2ooghelper/packet_send/ps_party.cpp
2012-02-01 05:25:08 +00:00

102 lines
3.3 KiB
C++

#include "stdafx.h"
#include "Logger.h"
#include "L2Client.h"
// 0 - Finders Keepers
// 1 - Random
// 2 - Random including spoil
// 3 - by turn
// 4 - by turn including spoil
void L2Client::handle_AskJoinParty( const wchar_t *requester, unsigned int itemDistribution )
{
// OnAskJoinParty must look into config to possible auto-accept pary invites from some players
const char *party_auto_accept_names = botcfg.getValStr( "party_auto_accept_names" );
if( party_auto_accept_names && (this->bot_enabled > 0) )
{
char arequester[256] = {0};
WideCharToMultiByte( CP_ACP, 0, requester, -1, arequester, 255, NULL, NULL );
if( BotCfg_IsInList( arequester, party_auto_accept_names ) )
{
send_RequestAnswerJoinParty( 1 );
return;
}
}
// not enabled auto accept or wrong char.
// Display UI request
TCHAR question[512] = {0};
TCHAR lootType[64] = {0};
switch( itemDistribution )
{
case 0: lstrcpy( lootType, TEXT("Ïîäíÿâøåìó") ); break;
case 1: lstrcpy( lootType, TEXT("Ñëó÷àéíî") ); break;
case 2: lstrcpy( lootType, TEXT("Ñëó÷àéíî, âêëþ÷àÿ ñïîéë") ); break;
case 3: lstrcpy( lootType, TEXT("Ïî î÷åðåäè") ); break;
case 4: lstrcpy( lootType, TEXT("Ïî î÷åðåäè, âêëþ÷àÿ ñïîéë") ); break;
}
wsprintf( question, TEXT("%s ïðèãëàøàåò âàñ â ïàðòèþ.\nÐàñïðåäåëåíèå äðîïà: %s"),
requester, lootType );
MessageBoxTimeout *mb = new MessageBoxTimeout( hWnd, WMMY_UI_MESSAGEBOXTIMEOUTREPLY,
MessageBoxTimeout::TYPE_PARTY, question, 15 );
mb->run( this->usr.charName );
}
// packet senders
void L2Client::send_RequestAnswerJoinParty( unsigned int accepted )
{
if( this->state != STATE_IN_GAME ) return; // can answer only in game
// answer AskJoinParty request
L2GamePacket *pack = new L2GamePacket();
pack->writeReset();
pack->setPacketType( 0x43 ); // RequestAnswerJoinParty
pack->writeUInt( accepted );
this->sendPacket( pack, true );
delete pack; pack = NULL;
}
void L2Client::send_RequestJoinParty( const wchar_t *target, unsigned int itemDistribution )
{
if( this->state != STATE_IN_GAME ) return; // only in game
// send RequestJoinParty
L2Game_RequestJoinParty *pack = new L2Game_RequestJoinParty();
pack->create( target, itemDistribution );
sendPacket( pack, true );
delete pack; pack = NULL;
}
void L2Client::send_RequestWithdrawalParty()
{
if( this->state != STATE_IN_GAME ) return; // only in game
L2GamePacket *pack = new L2GamePacket();
pack->writeReset();
pack->setPacketType( 0x44 ); // RequestWithDrawalParty
sendPacket( pack, true );
delete pack; pack = NULL;
}
void L2Client::send_RequestOustPartyMember( const wchar_t *playerName )
{
if( this->state != STATE_IN_GAME ) return; // only in game
if( !playerName ) return;
L2GamePacket *pack = new L2GamePacket();
pack->writeReset();
pack->setPacketType( 0x45 ); // RequestOustPartyMember
pack->writeUnicodeString( playerName );
sendPacket( pack, true );
delete pack; pack = NULL;
}
void L2Client::send_RequestChangePartyLeader( const wchar_t *playerName )
{
if( this->state != STATE_IN_GAME ) return; // only in game
if( !playerName ) return;
L2GamePacket *pack = new L2GamePacket();
pack->writeReset();
pack->setPacketType( 0xD0 ); // D0:000C RequestChangePartyLeader
pack->writeUShort( 0x0000C );
pack->writeUnicodeString( playerName );
sendPacket( pack, true );
delete pack; pack = NULL;
}