102 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			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;
 | |
| }
 | |
| 
 | 
