yes, doCombat
[cpp] //doCombat(cid, combat, param)
lua_register(m_luaState, "doCombat", LuaInterface::luaDoCombat);
[/cpp]
[cpp]
int32_t LuaInterface::luaDoCombat(lua_State* L)
{
//doCombat(cid, combat, param)
ScriptEnviroment* env = getEnv();
LuaVariant var = popVariant(L);
uint32_t combatId = popNumber(L), cid = popNumber(L);
Creature* creature = NULL;
if(cid != 0)
{
creature = env->getCreatureByUID(cid);
if(!creature)
{
errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
lua_pushboolean(L, false);
return 1;
}
}
const Combat* combat = env->getCombatObject(combatId);
if(!combat)
{
errorEx(getError(LUA_ERROR_COMBAT_NOT_FOUND));
lua_pushboolean(L, false);
return 1;
}
if(var.type == VARIANT_NONE)
{
errorEx(getError(LUA_ERROR_VARIANT_NOT_FOUND));
lua_pushboolean(L, false);
return 1;
}
switch(var.type)
{
case VARIANT_NUMBER:
{
Creature* target = g_game.getCreatureByID(var.number);
if(!target || !creature || !creature->canSeeCreature(target))
{
lua_pushboolean(L, false);
return 1;
}
if(combat->hasArea())
combat->doCombat(creature, target->getPosition());
else
combat->doCombat(creature, target);
break;
}
case VARIANT_POSITION:
{
combat->doCombat(creature, var.pos);
break;
}
case VARIANT_TARGETPOSITION:
{
if(!combat->hasArea())
{
combat->postCombatEffects(creature, var.pos);
g_game.addMagicEffect(var.pos, MAGIC_EFFECT_POFF);
}
else
combat->doCombat(creature, var.pos);
break;
}
case VARIANT_STRING:
{
Player* target = g_game.getPlayerByName(var.text);
if(!target || !creature || !creature->canSeeCreature(target))
{
lua_pushboolean(L, false);
return 1;
}
combat->doCombat(creature, target);
break;
}
default:
{
errorEx(getError(LUA_ERROR_VARIANT_UNKNOWN));
lua_pushboolean(L, false);
return 1;
}
}
lua_pushboolean(L, true);
return 1;
}
[/cpp]