l2-unlegits/l2detect/se_funcs/sef_targ.cpp
2012-02-01 05:25:08 +00:00

115 lines
2.8 KiB
C++

#include "stdafx.h"
#include "../Logger.h"
#include "../lua/lua.hpp"
#include "../ScriptEngine.h"
#include "../GameClient.h"
#include "../PacketInjector.h"
extern class GameClient *g_game_client;
int l2c_action( lua_State *L )
{
int nArgs = lua_gettop( L );
if( nArgs < 1 ) return 0;
if( !g_game_client ) return 0;
unsigned int objectID = (unsigned int)lua_tonumber( L, 1 );
PGen_Action( objectID, g_game_client->ai.usr.x, g_game_client->ai.usr.y, g_game_client->ai.usr.z, 0 );
return 0;
}
int l2c_attack( lua_State *L )
{
UNREFERENCED_PARAMETER(L);
if( !g_game_client ) return 0;
if( g_game_client->ai.usr.targetObjectID == 0 ) return 0;
PGen_AttackRequest(
g_game_client->ai.usr.targetObjectID,
g_game_client->ai.usr.x,
g_game_client->ai.usr.y,
g_game_client->ai.usr.z, 0 );
return 0;
}
int l2c_targetByName( lua_State *L )
{
int nArgs = lua_gettop( L );
if( nArgs < 1 ) return 0;
if( !g_game_client ) return 0;
const char *aname = lua_tolstring( L, 1, NULL );
wchar_t name[256];
memset( name, 0, sizeof(name) );
MultiByteToWideChar( CP_ACP, 0, aname, -1, name, 255 );
UserState *usr = &(g_game_client->ai.usr);
unsigned int nPassed = 0, i = 0, count = CharArray_GetCount();
unsigned int objectID = 0;
if( _wcsicmp( name, usr->charName ) == 0 )
{
objectID = usr->objectID;
}
if( objectID == 0 )
{
// try chars
count = CharArray_GetCount();
nPassed = 0;
if( count > 0 )
{
CharArray_Lock();
for( i=0; i<CHARARRAY_MAX_CHARS; i++ )
{
if( chars_array[i]->isUnused() ) continue;
nPassed++;
if( _wcsicmp( name, chars_array[i]->charName ) == 0 )
{
objectID = chars_array[i]->objectID;
break;
}
if( nPassed >= count ) break;
}
CharArray_Unlock();
}
}
if( objectID == 0 )
{
// try NPCs
NpcArray_Lock();
for( i=0; i<NPCA_MAX_NPCS; i++ )
{
if( npc_array[i]->isUnused() ) continue;
if( _wcsicmp( name, npc_array[i]->charName ) == 0 )
{
objectID = npc_array[i]->objectID;
break;
}
NpcArray_Unlock();
}
}
if( objectID == 0 ) return 0; // name not found
// check current target
if( g_game_client->ai.usr.targetObjectID == objectID ) return 0; // already on target
PGen_Action( objectID, g_game_client->ai.usr.x, g_game_client->ai.usr.y, g_game_client->ai.usr.z, 0 );
return 0;
}
int l2c_targetCancel( lua_State *L )
{
UNREFERENCED_PARAMETER(L);
if( !g_game_client ) return 0;
PGen_RequestTargetCanceld( false );
return 0;
}
int l2c_getTarget( lua_State *L )
{
if( !g_game_client )
{
lua_pushnumber( L, 0 );
lua_pushnumber( L, 0 );
lua_pushnumber( L, 0 );
return 3;
}
UserState *pusr = &(g_game_client->ai.usr);
lua_pushnumber( L, pusr->targetObjectID );
lua_pushnumber( L, pusr->targetCurHP );
lua_pushnumber( L, pusr->targetMaxHP );
return 3;
}