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

428 lines
9.9 KiB
C++

#include "stdafx.h"
#include "logger.h"
#include "IL2Client.h"
#include "L2Client.h"
IL2Client::IL2Client( void *pvL2Client )
{
m_pcl = pvL2Client;
m_lastNPCHTML = NULL;
m_lastNPCHTMLoid = 0;
}
IL2Client::~IL2Client()
{
m_pcl = NULL;
if( m_lastNPCHTML )
{
free( m_lastNPCHTML );
m_lastNPCHTML = NULL;
}
m_lastNPCHTMLoid = 0;
}
BotConfig *IL2Client::get_BotConfig()
{
L2Client *cl = (L2Client *)m_pcl;
return &(cl->botcfg);
}
bool IL2Client::isBotCombatEnabled() const
{
L2Client *cl = (L2Client *)m_pcl;
if( cl->bot_combat_enabled ) return true;
return false;
}
void IL2Client::botCombatEnable( bool bEnable )
{
L2Client *cl = (L2Client *)m_pcl;
cl->bottingCombatEnable( bEnable );
}
int IL2Client::is_IN_GAME()
{
L2Client *cl = (L2Client *)m_pcl;
return (cl->getState() == L2Client::STATE_IN_GAME ? 1 : 0);
}
// user info
UserInfo *IL2Client::get_UserInfo()
{
L2Client *cl = (L2Client *)m_pcl;
return &(cl->usr);
}
UserStorageMaxCount *IL2Client::get_StorageMaxCount()
{
L2Client *cl = (L2Client *)m_pcl;
return &(cl->storageMaxCount);
}
UserInventory *IL2Client::get_Inventory()
{
L2Client *cl = (L2Client *)m_pcl;
return &(cl->inv);
}
UserSkills *IL2Client::get_Skills()
{
L2Client *cl = (L2Client *)m_pcl;
return &(cl->skills);
}
UserEtcStatus *IL2Client::get_EtcStatus()
{
L2Client *cl = (L2Client *)m_pcl;
return &(cl->etcStatus);
}
UserBuffs *IL2Client::get_Buffs()
{
L2Client *cl = (L2Client *)m_pcl;
return &(cl->buffs);
}
UserParty *IL2Client::get_Party()
{
L2Client *cl = (L2Client *)m_pcl;
return &(cl->party);
}
// world state
WorldObjectTree *IL2Client::get_WorldObjectTree()
{
L2Client *cl = (L2Client *)m_pcl;
return &(cl->world_tree);
}
CharArray *IL2Client::get_WorldChars()
{
L2Client *cl = (L2Client *)m_pcl;
return &(cl->world_chars);
}
NpcArray *IL2Client::get_WorldNpcs()
{
L2Client *cl = (L2Client *)m_pcl;
return &(cl->world_npcs);
}
GIArray *IL2Client::get_WorldItems()
{
L2Client *cl = (L2Client *)m_pcl;
return &(cl->world_ground_items);
}
ClanList *IL2Client::get_WorldClans()
{
L2Client *cl = (L2Client *)m_pcl;
return &(cl->world_clans);
}
void IL2Client::game_Party_Accept( bool bAccept )
{
L2Client *cl = (L2Client *)m_pcl;
cl->send_RequestAnswerJoinParty( bAccept ? 1 : 0 );
}
void IL2Client::game_Party_InvitePlayer( const wchar_t *playerName, unsigned int partyLoot )
{
L2Client *cl = (L2Client *)m_pcl;
cl->send_RequestJoinParty( playerName, partyLoot );
}
void IL2Client::game_Party_Leave()
{
L2Client *cl = (L2Client *)m_pcl;
cl->send_RequestWithdrawalParty();
}
void IL2Client::game_Party_KickPlayer( const wchar_t *playerName )
{
L2Client *cl = (L2Client *)m_pcl;
cl->send_RequestOustPartyMember( playerName );
}
void IL2Client::game_Party_ChangeLeader( const wchar_t *playerName )
{
L2Client *cl = (L2Client *)m_pcl;
cl->send_RequestChangePartyLeader( playerName );
}
// chat
void IL2Client::game_Say( unsigned int channel, const wchar_t *text )
{
L2Client *cl = (L2Client *)m_pcl;
cl->send_Say2( channel, text, NULL );
}
void IL2Client::game_SayPm( const wchar_t *text, const wchar_t *to )
{
L2Client *cl = (L2Client *)m_pcl;
cl->send_Say2( L2_CHAT_MESSAGE::TELL, text, to );
}
void IL2Client::game_SendBypass( const wchar_t *bypass )
{
if( !bypass ) return;
L2Client *cl = (L2Client *)m_pcl;
if( wcsstr( bypass, L"bypass -h " ) )
{
cl->send_RequestBypassToServer( bypass + 10 /*wcslen( L"bypass -h " )*/ );
}
else if( wcsstr( bypass, L"link " ) )
{
cl->send_RequestLinkHtml( bypass + 5 /*wcslen( L"link " )*/ );
}
else
{
log_error( LOG_WARNING, "IL2Client::game_SendBypass(): string must start with \"bypass -h \"!\n" );
}
}
// move
void IL2Client::game_MoveBackwardToLocation( int xDst, int yDst, int zDst )
{
L2Client *cl = (L2Client *)m_pcl;
cl->send_MoveBackwardToLocation( xDst, yDst, zDst );
}
void IL2Client::game_MoveToDelta( int dx, int dy, int dz )
{
L2Client *cl = (L2Client *)m_pcl;
cl->game_MoveToDelta( dx, dy, dz );
}
void IL2Client::game_SitStand()
{
L2Client *cl = (L2Client *)m_pcl;
cl->send_RequestActionUse( 0 ); // 0 - sit/stand
}
void IL2Client::game_RunWalk()
{
L2Client *cl = (L2Client *)m_pcl;
cl->send_RequestActionUse( 1 ); // 1 - run/walk
}
// use skill, item
void IL2Client::game_SkillUse( unsigned int skillID, unsigned int ctrlPressed, unsigned char shiftPressed )
{
L2Client *cl = (L2Client *)m_pcl;
UserSkill skill;
cl->skills.getSkillInfoBySkillId( skillID, &skill );
if( skill.level > 0 ) cl->send_RequestMagicSkillUse( skillID, ctrlPressed, shiftPressed );
}
int IL2Client::game_getSkillLevel( unsigned int skillID ) // 0 if no such skill
{
L2Client *cl = (L2Client *)m_pcl;
UserSkill skill;
cl->skills.getSkillInfoBySkillId( skillID, &skill );
return skill.level;
}
void IL2Client::game_UseItemByItemId( unsigned int itemID )
{
L2Client *cl = (L2Client *)m_pcl;
UserInventoryItem it;
cl->inv.getItemInfoByItemId( itemID, &it );
if( it.objectID > 0 && it.count > 0 )
cl->send_UseItem( it.objectID );
}
void IL2Client::game_UseItemByObjectId( unsigned int objectID )
{
L2Client *cl = (L2Client *)m_pcl;
cl->send_UseItem( objectID );
}
unsigned long long int IL2Client::game_getItemCount( unsigned int itemID ) // 0 if no such item in inv
{
L2Client *cl = (L2Client *)m_pcl;
UserInventoryItem it;
cl->inv.getItemInfoByItemId( itemID, &it );
return it.count;
}
void IL2Client::game_DestroyItem( unsigned int objectID, long long int count )
{
L2Client *cl = (L2Client *)m_pcl;
UserInventoryItem it;
cl->inv.getItemInfoByObjectId( objectID, &it );
if( it.count >= (unsigned int)count ) cl->send_RequestDestroyItem( objectID, count );
}
void IL2Client::game_DropItem( unsigned int objectID, long long int count, int x, int y, int z )
{
L2Client *cl = (L2Client *)m_pcl;
UserInventoryItem it;
cl->inv.getItemInfoByObjectId( objectID, &it );
if( it.count >= (unsigned int)count ) cl->send_RequestDropItem( objectID, count, x, y, z );
}
void IL2Client::game_CrystallizeItem( unsigned int objectID, long long int count )
{
L2Client *cl = (L2Client *)m_pcl;
UserInventoryItem it;
cl->inv.getItemInfoByObjectId( objectID, &it );
if( it.count >= (unsigned int)count ) cl->send_RequestCrystallizeItem( objectID, count );
}
void IL2Client::game_GiveItemToPet( unsigned int objectID, long long int count )
{
L2Client *cl = (L2Client *)m_pcl;
UserInventoryItem it;
cl->inv.getItemInfoByObjectId( objectID, &it );
if( it.count >= (unsigned int)count ) cl->send_RequestGiveItemToPet( objectID, count );
}
// attack, target
void IL2Client::game_Action( unsigned int objectID )
{
L2Client *cl = (L2Client *)m_pcl;
cl->send_Action( objectID );
}
void IL2Client::game_TargetByName( const wchar_t *name )
{
//L2Client *cl = (L2Client *)m_pcl;
UserInfo *usr = get_UserInfo();
CharArray *ca = get_WorldChars();
NpcArray *na = get_WorldNpcs();
unsigned int nPassed = 0, i = 0, count = ca->GetCount();
unsigned int objectID = 0;
if( _wcsicmp( name, usr->charName ) == 0 )
{
objectID = usr->objectID;
}
if( objectID == 0 )
{
// try chars
count = ca->GetCount();
nPassed = 0;
if( count > 0 )
{
ca->Lock();
for( i=0; i<CharArray::CHARARRAY_MAX_CHARS; i++ )
{
if( ca->chars_array[i]->isUnused() ) continue;
nPassed++;
if( _wcsicmp( name, ca->chars_array[i]->charName ) == 0 )
{
objectID = ca->chars_array[i]->objectID;
break;
}
if( nPassed >= count ) break;
}
ca->Unlock();
}
}
if( objectID == 0 )
{
// try NPCs
count = na->getCount();
nPassed = 0;
if( count > 0 )
{
na->Lock();
for( i=0; i<NpcArray::NPCA_MAX_NPCS; i++ )
{
if( na->npcs_array[i]->isUnused() ) continue;
nPassed++;
if( _wcsicmp( name, na->npcs_array[i]->charName ) == 0 )
{
objectID = na->npcs_array[i]->objectID;
break;
}
if( nPassed >= count ) break;
}
na->Unlock();
}
}
if( objectID == 0 ) return;
game_Action( objectID );
}
void IL2Client::game_TargetCancel()
{
L2Client *cl = (L2Client *)m_pcl;
cl->send_RequestTargetCanceld();
}
void IL2Client::game_Attack( unsigned int objectID )
{
L2Client *cl = (L2Client *)m_pcl;
cl->send_AttackRequest( objectID );
}
void IL2Client::game_autoSoulshot( unsigned int itemID, bool bEnable )
{
L2Client *cl = (L2Client *)m_pcl;
cl->send_RequestAutoSoulshot( itemID, bEnable );
}
void IL2Client::game_buffCancel( unsigned int skillID )
{
L2Client *cl = (L2Client *)m_pcl;
cl->send_RequestDispel( skillID );
}
void IL2Client::game_sendPacketHex( const char *szHexStr )
{
L2Client *cl = (L2Client *)m_pcl;
cl->send_hackPacketHex( szHexStr );
}
int IL2Client::get_MapScale()
{
L2Client *cl = (L2Client *)m_pcl;
return cl->getScaleSliderPos();
}
void IL2Client::getMapShowParams( st_MapShowParams *st )
{
L2Client *cl = (L2Client *)m_pcl;
cl->getMapShowParams( st );
}
void IL2Client::set_last_NPC_HTML( const wchar_t *html, unsigned int objectID )
{
if( !html ) return;
if( html[0] == 0 ) return;
size_t memsize = wcslen( html ) * 2 + 2;
if( this->m_lastNPCHTML ) free( this->m_lastNPCHTML );
this->m_lastNPCHTML = NULL;
this->m_lastNPCHTML = (wchar_t *)malloc( memsize );
if( !this->m_lastNPCHTML ) return;
memset( this->m_lastNPCHTML, 0, memsize );
wcscpy( this->m_lastNPCHTML, html );
this->m_lastNPCHTMLoid = objectID;
if( objectID == 0 )
{
log_error( LOG_WARNING, "SE: set_last_NPC_HTML(): objectID is 0!\n" );
return;
}
}
wchar_t *IL2Client::get_last_NPC_HTML( unsigned int *pObjectID )
{
if( pObjectID ) (*pObjectID) = this->m_lastNPCHTMLoid;
return this->m_lastNPCHTML;
}
void IL2Client::clear_last_NPC_HTML()
{
m_lastNPCHTMLoid = 0;
if( m_lastNPCHTML )
{
free( m_lastNPCHTML );
m_lastNPCHTML = NULL;
}
}