// 1_cy_ia_mago
#include "nw_i0_generic"
// void que usamos para lanzar hechizo.
void MyCastSpell(int nSpell, object oTarget, int nMetaMagic=METAMAGIC_ANY, int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE);
/*void DoVoiceChat()
{
int nRand = Random(20);
int nVoice = -1;
if(nRand == 0) nVoice = VOICE_CHAT_BATTLECRY1;
else if(nRand == 1) nVoice = VOICE_CHAT_BATTLECRY2;
else if(nRand == 2) nVoice = VOICE_CHAT_BATTLECRY3;
else if(nRand == 3) nVoice = VOICE_CHAT_TAUNT;
else if(nRand == 4) nVoice = VOICE_CHAT_LAUGH;
if(nVoice != -1)
PlayVoiceChat(nVoice, OBJECT_SELF);
} */
// funcion, definimos oIntruder y las variables para que comienze el ataque.
void main()
{
string sTagMago = GetTag(OBJECT_SELF);
string sNivelMago = GetStringRight(sTagMago,1); // calculamos el nivel dellanzador de conjuros npc Esto no funciona , a falta de mejora he puest un nmero en la etiqueta del mago
int iNivelMago =StringToInt(sNivelMago);
object oIntruder = GetLocalObject(OBJECT_SELF, "X2_NW_I0_GENERIC_INTRUDER");// identificamos el enemigo ( eso espero)
float fVida = IntToFloat(GetCurrentHitPoints()) / IntToFloat(GetMaxHitPoints());// calculo de la vida para tomar acciones en funcion de ello.
int iPremonicion = GetHasSpellEffect(SPELL_PREMONITION,OBJECT_SELF) || GetHasSpellEffect(SPELL_STONESKIN,OBJECT_SELF) || GetHasSpellEffect(SPELL_GREATER_STONESKIN, OBJECT_SELF);
// Restricción basada en la clase de personaje obtenermos la clase(con la basica llega) y segun el tipo usamos una estrategia u otra
location lNPC = GetLocation(OBJECT_SELF);
location lPC = GetLocation(oIntruder);
// clase de enemigo
int iExplorador = GetLevelByClass(CLASS_TYPE_RANGER, oIntruder);
int iGuerrero = GetLevelByClass(CLASS_TYPE_FIGHTER, oIntruder);
int iBarbaro = GetLevelByClass(CLASS_TYPE_BARBARIAN,oIntruder);
int iPaladin = GetLevelByClass(CLASS_TYPE_PALADIN, oIntruder) ;
int iMonje = GetLevelByClass(CLASS_TYPE_ROGUE, oIntruder);
int iPicaro = GetLevelByClass(CLASS_TYPE_MONK, oIntruder);
int iClerigo = GetLevelByClass(CLASS_TYPE_CLERIC, oIntruder);
int iDruida = GetLevelByClass(CLASS_TYPE_DRUID,oIntruder);
int iMago = GetLevelByClass(CLASS_TYPE_WIZARD, oIntruder);
int iHechicero = GetLevelByClass(CLASS_TYPE_SORCERER, oIntruder);
int iBardo = GetLevelByClass(CLASS_TYPE_BARD, oIntruder);
// variables para no encadenarnos
int iDisipar = GetLocalInt(OBJECT_SELF, "disipar");
int iInvisible = GetLocalInt(OBJECT_SELF, "invisible");
int iDFisica = GetLocalInt(OBJECT_SELF, "defensa fisica");
int iDHechizos = GetLocalInt(OBJECT_SELF, "defensa conjuros");
int iCurarse = GetLocalInt(OBJECT_SELF, "curarse");
int iBigby = GetLocalInt(OBJECT_SELF,"Bigby");
int iMatar = GetLocalInt(OBJECT_SELF,"Matar");
//establecemos todo para preparar los turnos de combate.
SetLocalInt(OBJECT_SELF,"X2_SPECIAL_COMBAT_AI_SCRIPT_OK", 1);
if (GetIsObjectValid(oIntruder) == FALSE)
oIntruder = bkAcquireTarget();
if (GetIsDead(oIntruder) == TRUE)
return;
if (__InCombatRound() == TRUE)
{
return;
}
__TurnCombatRoundOn(TRUE);
// buufeo previo al combate( se supon e que lo llevaba puesto antes)Se hechiza en cuanto empieza el combate.
// usamos una variable para que solo lo haga una vez Lo hice por niveles aunque algn hechizo no cuadre , lo suyo nueve por cada nivel de lanzador, ahora tengo 4
if(GetLocalInt(OBJECT_SELF, "DO_INSTANT_ONCE") == 0)
{
SetLocalInt(OBJECT_SELF, "DO_INSTANT_ONCE", 1);
if(iNivelMago == 1 )
{
ActionCastSpellAtObject(SPELL_GREATER_SPELL_MANTLE, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
ActionCastSpellAtObject(SPELL_PREMONITION, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
ActionCastSpellAtObject(SPELL_SHADOW_SHIELD, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
ActionCastSpellAtObject(SPELL_TRUE_SEEING, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
ActionCastSpellAtObject(SPELL_MIND_BLANK, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
ActionCastSpellAtObject(SPELL_ENERGY_BUFFER, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
ActionCastSpellAtObject(SPELL_MESTILS_ACID_SHEATH, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
}
else if(iNivelMago == 2)
{
ActionCastSpellAtObject(SPELL_SPELL_MANTLE, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
ActionCastSpellAtObject(SPELL_GREATER_STONESKIN, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
ActionCastSpellAtObject(SPELL_ETHEREAL_VISAGE, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
ActionCastSpellAtObject(SPELL_TRUE_SEEING, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
ActionCastSpellAtObject(SPELL_LESSER_MIND_BLANK, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
ActionCastSpellAtObject(SPELL_PROTECTION_FROM_ELEMENTS, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
ActionCastSpellAtObject(SPELL_ELEMENTAL_SHIELD, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
}
else if(iNivelMago ==3)
{
ActionCastSpellAtObject(SPELL_LESSER_SPELL_MANTLE, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
ActionCastSpellAtObject(SPELL_STONESKIN, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
ActionCastSpellAtObject(SPELL_GHOSTLY_VISAGE, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
ActionCastSpellAtObject(SPELL_SEE_INVISIBILITY, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
ActionCastSpellAtObject(SPELL_CLARITY, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
ActionCastSpellAtObject(SPELL_RESIST_ELEMENTS, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
ActionCastSpellAtObject(SPELL_DEATH_ARMOR, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
}
else
{
ActionCastSpellAtObject(SPELL_MAGE_ARMOR, OBJECT_SELF, METAMAGIC_NONE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
}
}
/*empieza el combate, que tiene que pensar el npc
1 La vida que tiene el
2 La clase del enemigo
3 Si hay un enemigo o varios (esto esta hecho para uno y luego ya se hara el de varios.
4 Si esta bufeado
5 SI el enemigo esta bufeado
6 Lo que se nos vaya ocurriendo
En principio no uso metamagia, ni parar el tiempo. (parar el tiempo mas dos trombas isaac maximizadas y se acabo)
*/
if(fVida < 0.25) // Si esta herido de muerte, que se cure ( uso hechizo aptitudes especiales para no tener que rebuscar en el inventario
{
if(iCurarse == 0)
{
if(GetHasSpell(SPELL_HEAL))
{
MyCastSpell(SPELL_HEAL, OBJECT_SELF);
__TurnCombatRoundOn(FALSE);
return;
}
else if(GetHasSpell(SPELL_CURE_CRITICAL_WOUNDS))
{
MyCastSpell(SPELL_CURE_CRITICAL_WOUNDS, OBJECT_SELF);
__TurnCombatRoundOn(FALSE);
return;
}
else if(GetHasSpell(SPELL_CURE_SERIOUS_WOUNDS))
{
MyCastSpell(SPELL_CURE_SERIOUS_WOUNDS, OBJECT_SELF);
__TurnCombatRoundOn(FALSE);
return;
}
else
{
FloatingTextStringOnCreature("Me estoy muriendo",OBJECT_SELF);// no sabia muy bien como tenrminar
SetLocalInt(OBJECT_SELF,"curarse",1);
__TurnCombatRoundOn(FALSE);
return;
}
}
}
if(iExplorador>=1||iGuerrero>=1 || iBarbaro>=1||iPaladin>=1|| iMonje>=1 || iPicaro>=1) // SI es luchador
{
// si se desgasta la proteccion y tenemos hechizos en reserva
if(!GetHasSpellEffect(SPELL_PREMONITION,OBJECT_SELF) && !GetHasSpellEffect(SPELL_STONESKIN,OBJECT_SELF) && !GetHasSpellEffect(SPELL_GREATER_STONESKIN,OBJECT_SELF))
{
if(iDFisica == 0)
{
if(GetHasSpell(SPELL_PREMONITION))
{
MyCastSpell(SPELL_PREMONITION, OBJECT_SELF);
__TurnCombatRoundOn(FALSE);
return;
}
else if(GetHasSpell(SPELL_GREATER_STONESKIN))
{
MyCastSpell(SPELL_GREATER_STONESKIN, OBJECT_SELF);
__TurnCombatRoundOn(FALSE);
return;
}
else if(GetHasSpell(SPELL_STONESKIN))
{
MyCastSpell(SPELL_GREATER_STONESKIN, OBJECT_SELF);
__TurnCombatRoundOn(FALSE);
return;
}
else
{
FloatingTextStringOnCreature("Soy Vulnerable",OBJECT_SELF);// no sabia muy bien como terminar
SetLocalInt(OBJECT_SELF,"defensa fisica",1);
__TurnCombatRoundOn(FALSE);
return;
}
}
}
if(GetDistanceBetweenLocations(lNPC,lPC)> 1.0f) // si el pj luchador se acerca demasiado
{
// si el pj luchador se acerca demasiado
if(!GetHasSpellEffect(SPELL_SANCTUARY,OBJECT_SELF) && !GetHasSpellEffect(SPELL_IMPROVED_INVISIBILITY,OBJECT_SELF) && !GetHasSpellEffect(SPELL_INVISIBILITY,OBJECT_SELF))
{
if(iInvisible == 0)
{
if(GetHasSpell(SPELL_SANCTUARY))
{
MyCastSpell(SPELL_SANCTUARY, OBJECT_SELF); // y moverse pero falta esa parte todavia
__TurnCombatRoundOn(FALSE);
return;
}
else if(GetHasSpell(SPELL_IMPROVED_INVISIBILITY))
{
MyCastSpell(SPELL_IMPROVED_INVISIBILITY, OBJECT_SELF);
__TurnCombatRoundOn(FALSE);
return;
}
else if(GetHasSpell(SPELL_INVISIBILITY))
{
MyCastSpell(SPELL_INVISIBILITY, OBJECT_SELF);
__TurnCombatRoundOn(FALSE);
return;
}
else
{
FloatingTextStringOnCreature("Me estoy muriendo",OBJECT_SELF);// no sabia muy bien como terminar
SetLocalInt(OBJECT_SELF,"invisible",1);
__TurnCombatRoundOn(FALSE);
return;
}
}
}
ActionMoveAwayFromObject(oIntruder,FALSE,4.0f); // esto no funciona
}
}
else // si no es luchador
{
// se desgasta la toga
if(!GetHasSpellEffect(SPELL_GREATER_SPELL_MANTLE,OBJECT_SELF) && !GetHasSpellEffect(SPELL_SPELL_MANTLE,OBJECT_SELF) && !GetHasSpellEffect(SPELL_LESSER_SPELL_MANTLE,OBJECT_SELF))
{
if(iDHechizos == 0)
{
if(GetHasSpell(SPELL_GREATER_SPELL_MANTLE))
{
MyCastSpell(SPELL_GREATER_SPELL_MANTLE, OBJECT_SELF);
__TurnCombatRoundOn(FALSE);
return;
}
else if(GetHasSpell(SPELL_SPELL_MANTLE))
{
MyCastSpell(SPELL_SPELL_MANTLE, OBJECT_SELF);
__TurnCombatRoundOn(FALSE);
return;
}
else if(GetHasSpell(SPELL_LESSER_SPELL_MANTLE))
{
MyCastSpell(SPELL_LESSER_SPELL_MANTLE, OBJECT_SELF);
__TurnCombatRoundOn(FALSE);
return;
}
else
{
FloatingTextStringOnCreature("Soy Vulnerable",OBJECT_SELF);// no sabia muy bien como terminar
SetLocalInt(OBJECT_SELF,"defensa conjuros",1);
__TurnCombatRoundOn(FALSE);
return;
}
}
}
}
if(GetHasSpellEffect(SPELL_GREATER_SPELL_MANTLE,oIntruder) || GetHasSpellEffect(SPELL_SPELL_MANTLE,oIntruder) || GetHasSpellEffect(SPELL_LESSER_SPELL_MANTLE,oIntruder) || GetHasSpellEffect(SPELL_GLOBE_OF_INVULNERABILITY,oIntruder))// se protege contra hechizos
{
if(iDisipar == 0)
{
if(GetHasSpell(SPELL_MORDENKAINENS_DISJUNCTION))
{
MyCastSpell(SPELL_MORDENKAINENS_DISJUNCTION, oIntruder);
__TurnCombatRoundOn(FALSE);
return;
}
else if(GetHasSpell(SPELL_GREATER_SPELL_BREACH))
{
MyCastSpell(SPELL_GREATER_SPELL_BREACH, oIntruder);
__TurnCombatRoundOn(FALSE);
return;
}
else if(GetHasSpell(SPELL_LESSER_SPELL_BREACH))
{
MyCastSpell(SPELL_LESSER_SPELL_BREACH, oIntruder);
__TurnCombatRoundOn(FALSE);
return;
}
else
{
FloatingTextStringOnCreature("Mis ataques son inutiles",OBJECT_SELF);// no sabia muy bien como terminar
SetLocalInt(OBJECT_SELF,"disipar",1);
__TurnCombatRoundOn(FALSE);
return;
}
}
}
// Usar manos de bigby
if(iBigby=0)
{
if(GetHasSpell(SPELL_BIGBYS_CRUSHING_HAND))
{
MyCastSpell(SPELL_BIGBYS_CRUSHING_HAND, oIntruder);
SetLocalInt(OBJECT_SELF,"Bigby",1);
__TurnCombatRoundOn(FALSE);
return;
}
else if (GetHasSpell(SPELL_BIGBYS_CLENCHED_FIST))
{
MyCastSpell(SPELL_BIGBYS_CLENCHED_FIST, oIntruder);
SetLocalInt(OBJECT_SELF,"Bigby",1);
__TurnCombatRoundOn(FALSE);
return;
}
else if (GetHasSpell(SPELL_BIGBYS_GRASPING_HAND))
{
MyCastSpell(SPELL_BIGBYS_GRASPING_HAND, oIntruder);
SetLocalInt(OBJECT_SELF,"Bigby",1);
__TurnCombatRoundOn(FALSE);
return;
}
else if (GetHasSpell(SPELL_BIGBYS_INTERPOSING_HAND))
{
MyCastSpell(SPELL_BIGBYS_INTERPOSING_HAND, oIntruder);
SetLocalInt(OBJECT_SELF,"Bigby",1);
__TurnCombatRoundOn(FALSE);
return;
}
else if (GetHasSpell(SPELL_BIGBYS_FORCEFUL_HAND))
{
MyCastSpell(SPELL_BIGBYS_FORCEFUL_HAND, oIntruder);
SetLocalInt(OBJECT_SELF,"Bigby",1);
__TurnCombatRoundOn(FALSE);
return;
}
else if(GetHasSpell(SPELL_SLOW))
{
MyCastSpell(SPELL_SLOW, oIntruder);
SetLocalInt(OBJECT_SELF,"Bigby",1);
__TurnCombatRoundOn(FALSE);
return;
}
else
{
FloatingTextStringOnCreature("Bigby me has fallado",OBJECT_SELF);// no sabia muy bien como terminar
SetLocalInt(OBJECT_SELF,"Bigby",1);
__TurnCombatRoundOn(FALSE);
return;
}
}
// Intentamos matar de un solo golpe (un solo intento)
if(iMatar=0)
{
if(GetHasSpell(SPELL_ENERGY_DRAIN))
{
MyCastSpell(SPELL_ENERGY_DRAIN, oIntruder);
SetLocalInt(OBJECT_SELF,"Matar",1);
__TurnCombatRoundOn(FALSE);
return;
}
else if (GetHasSpell(SPELL_FINGER_OF_DEATH))
{
MyCastSpell(SPELL_FINGER_OF_DEATH, oIntruder);
SetLocalInt(OBJECT_SELF,"Matar",1);
__TurnCombatRoundOn(FALSE);
return;
}
else if (GetHasSpell(SPELL_WEIRD))
{
MyCastSpell(SPELL_WEIRD, oIntruder);
SetLocalInt(OBJECT_SELF,"Matar",1);
__TurnCombatRoundOn(FALSE);
return;
}
else if (GetHasSpell(SPELL_PHANTASMAL_KILLER))
{
MyCastSpell(SPELL_PHANTASMAL_KILLER, oIntruder);
SetLocalInt(OBJECT_SELF,"Matar",1);
__TurnCombatRoundOn(FALSE);
return;
}
else if (GetHasSpell(SPELL_BLINDNESS_AND_DEAFNESS))
{
MyCastSpell(SPELL_BLINDNESS_AND_DEAFNESS, oIntruder);
SetLocalInt(OBJECT_SELF,"Matar",1);
__TurnCombatRoundOn(FALSE);
return;
}
else if(GetHasSpell(SPELL_FEAR))
{
MyCastSpell(SPELL_FEAR, oIntruder);
SetLocalInt(OBJECT_SELF,"Matar",1);
__TurnCombatRoundOn(FALSE);
return;
}
else
{
FloatingTextStringOnCreature("No he podido matarlo, ar",OBJECT_SELF);// no sabia muy bien como terminar
SetLocalInt(OBJECT_SELF,"Matar",1);
__TurnCombatRoundOn(FALSE);
return;
}
}
// Empezamos con los ataque, esto para probar luego hay que poner mas y ordenarlos por niveles.
if(GetHasSpell(SPELL_ISAACS_GREATER_MISSILE_STORM))
{
MyCastSpell(SPELL_ISAACS_GREATER_MISSILE_STORM, oIntruder);
__TurnCombatRoundOn(FALSE);
return;
}
if(GetHasSpell(SPELL_HORRID_WILTING))
{
MyCastSpell(SPELL_HORRID_WILTING, oIntruder);
__TurnCombatRoundOn(FALSE);
return;
}
if(GetHasSpell(SPELL_CHAIN_LIGHTNING))
{
MyCastSpell(SPELL_CHAIN_LIGHTNING, oIntruder);
__TurnCombatRoundOn(FALSE);
return;
}
if(GetHasSpell(SPELL_PRISMATIC_SPRAY))
{
MyCastSpell(SPELL_PRISMATIC_SPRAY, oIntruder);
__TurnCombatRoundOn(FALSE);
return;
}
if(GetHasSpell(SPELL_BALL_LIGHTNING))
{
MyCastSpell(SPELL_BALL_LIGHTNING, oIntruder);
__TurnCombatRoundOn(FALSE);
return;
}
if(GetHasSpell(SPELL_CONE_OF_COLD))
{
MyCastSpell(SPELL_CONE_OF_COLD, oIntruder);
__TurnCombatRoundOn(FALSE);
return;
}
if(GetHasSpell(SPELL_ISAACS_LESSER_MISSILE_STORM))
{
MyCastSpell(SPELL_ISAACS_LESSER_MISSILE_STORM, oIntruder);
__TurnCombatRoundOn(FALSE);
return;
}
if(GetHasSpell(SPELL_ENERVATION))
{
MyCastSpell(SPELL_ENERVATION, oIntruder);
__TurnCombatRoundOn(FALSE);
return;
}
if(GetHasSpell(SPELL_FLAME_ARROW))
{
MyCastSpell(SPELL_FLAME_ARROW, oIntruder);
__TurnCombatRoundOn(FALSE);
return;
}
if(GetHasSpell(SPELL_LIGHTNING_BOLT))
{
MyCastSpell(SPELL_LIGHTNING_BOLT, oIntruder);
__TurnCombatRoundOn(FALSE);
return;
}
if(GetHasSpell(SPELL_MELFS_ACID_ARROW))
{
MyCastSpell(SPELL_MELFS_ACID_ARROW, oIntruder);
__TurnCombatRoundOn(FALSE);
return;
}
if(GetHasSpell(SPELL_NEGATIVE_ENERGY_RAY))
{
MyCastSpell(SPELL_NEGATIVE_ENERGY_RAY, oIntruder);
__TurnCombatRoundOn(FALSE);
return;
}
if(GetHasSpell(SPELL_MAGIC_MISSILE))
{
MyCastSpell(SPELL_MAGIC_MISSILE, oIntruder);
__TurnCombatRoundOn(FALSE);
return;
}
if(GetIsObjectValid(oIntruder)) // codigo del neverwinter
{
if(TalentPersistentAbilities())
{
__TurnCombatRoundOn(FALSE);
return;
}
if (chooseTactics(oIntruder) == 99)
{
__TurnCombatRoundOn(FALSE);
return;
}
object oNearEnemy = GetNearestSeenEnemy();
DetermineCombatRound(oNearEnemy);
__TurnCombatRoundOn(FALSE);
return;
}
__TurnCombatRoundOn(FALSE);
}
void MyCastSpell(int nSpell, object oTarget, int nMetaMagic=METAMAGIC_ANY, int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE)
{
//SendMessageToPC(GetFirstPC(), "BOOM: Casting: " + GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))));
ActionCastSpellAtObject(nSpell, oTarget, nMetaMagic, bCheat, nDomainLevel, nProjectilePathType, bInstantSpell);
}