bool RuneSpell::executeUse(Player* player, Item* item, const PositionEx& posFrom,
const PositionEx& posTo, bool, uint32_t creatureId)
{
if(!checkRuneSpell(player, posTo))
return false;
bool result = false;
if(isScripted())
{
LuaVariant var;
if(needTarget)
{
if(!creatureId)
{
if(Tile* tileTo = g_game.getTile(posTo))
{
if(const Creature* creature = tileTo->getTopVisibleCreature(player))
creatureId = creature->getID();
}
}
var.type = VARIANT_NUMBER;
var.number = creatureId;
}
else
{
var.type = VARIANT_POSITION;
var.pos = posTo;
}
result = internalCastSpell(player, var);
}
else if(function)
result = function(this, player, item, posFrom, posTo);
if(result)
{
Spell::postSpell(player);
if(hasCharges && item && g_config.getBool(ConfigManager::REMOVE_RUNE_CHARGES))
g_game.transformItem(item, item->getID(), std::max((int32_t)0, ((int32_t)item->getItemCount()) - 1));
}
return result;
}