c tjrs cool d'avoir des retours sur un script qui marche pas, merci nezar pour ton mp
bon, ba maintenant je saurais que mettre un
ApplyEffectToObject sur un triggers c mal
aors, correctif, sachant que la l'explosion ne fait aucun dégats
:
void main()
{
int nTemp = GetLocalInt(OBJECT_SELF, "TEMP"); //on recupere le nb de de onheatbeat declenchs
if(nTemp >= 3) //si il y en a tropis ou plus (36 = 18)
{
effect eVis = EffectVisualEffect(VFX_FNF_FIREBALL);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(OBJECT_SELF)); //faire un effet boule de feu sur le trigger
SetLocalInt(OBJECT_SELF, "TEMP", 0); //remettre le compteur a zero
return; //arreter le script
}
nTemp++; //si le script est pas arrete, alors ca fait pas 3 ohb, donc on rajoute +1
SetLocalInt(OBJECT_SELF, "TEMP", nTemp); //et on enregistre dans la varieble
}
sachant que y a moyen de faire ailleurs que ds un ohb, mais bon, je vois pas trop d'interet, à part peut être si c un persistant, auquel cas essai ca dans un onenter :
//::///////////////////////////////////////////////
// onEnter
//une boule de feu sur oCible toute les nTemp
//sans degats
//ne pas oublier le script de onExit
//:://////////////////////////////////////////////
//fonction qui vas faire exploser
//une boule de feu sur oCible toute les nTemp
//sans degats
void Boom(object oCible,float nTemp);
void main()
{
object oPC = GetEnteringObject();
object oCible = GetObjectByTag("TAGDETACIBLE");
float nTemp = 20.0; //temps entre chaque boom
if(GetIsPC(oPC)) //seulement si c un PC qui entre
{
int nNbPJ = GetLocalInt(GetArea(oPC), "NB_PJ");
if(nNbPJ == 0) //si c le premier a entrer, on lance le truc
{
Boom(oCible, nTemp);
}
nNbPJ ++;
SetLocalInt(GetArea(oPC), "NB_PJ", nNbPJ);
}
}
void Boom(object oCible,float nTemp)
{
{
int nNbPJ = GetLocalInt(GetArea(oCible), "NB_PJ");
if(nNbPJ == 0) return; //si il y a plus de PJ, on arrete
effect eVis = EffectVisualEffect(VFX_FNF_FIREBALL);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oCible)); //faire un effet boule de feu sur le trigger
}//le bloc c'est a cause du delay, parce qu'il parait que c mieux ^_^
DelayCommand(nTemp, Boom(oCible, nTemp)); //relancer la fonction dans ntemp
}
et dans un onexit
//::///////////////////////////////////////////////
// onExit
//:://////////////////////////////////////////////
void main()
{
object oPC = GetExitingObject();
if(GetIsPC(oPC)) //seulement si c un PC qui sors
{
int nNbPJ = GetLocalInt(GetArea(oPC), "NB_PJ");
nNbPJ --;
SetLocalInt(GetArea(oPC), "NB_PJ", nNbPJ);
//security truc
if(nNbPJ <= 0)
SetLocalInt(GetArea(oPC), "NB_PJ", 0);
}
}
bon, alors pour l'instant ca fait pas degats, avec degats :
dans le onenter, a la place tumet :
//::///////////////////////////////////////////////
// onEnter
//une boule de feu sur oCible toute les fTemp secondes
//avec nDamage degats
//ne pas oublier le script de onExit
//fonction d'explosion d'apres id de Jaha Effect,
// un peu modifiee par Reyan pour les besoin de la cause
//:://////////////////////////////////////////////
//fonction qui vas faire exploser
//une boule de feu sur oCible toute les nTemp
//avec nDamage degats
void Boom(object oCible, float fTemp, int nDamage, int nSaveDC = 22, float fRadius = 5.);
void main()
{
object oPC = GetEnteringObject();
object oCible = GetObjectByTag("TAGDETACIBLE");
float fTemp = 20.0; //temps entre chaque boom
int nDamage = 10; //nombres de domages
if(GetIsPC(oPC)) //seulement si c un PC qui entre
{
int nNbPJ = GetLocalInt(GetArea(oPC), "NB_PJ");
//security truc
if(nNbPJ <= 0)
SetLocalInt(GetArea(oPC), "NB_PJ", 0);
if(nNbPJ == 0) //si c le premier a entrer, on lance le truc
{
Boom(oCible, fTemp, nDamage);
}
nNbPJ ++;
SetLocalInt(GetArea(oPC), "NB_PJ", nNbPJ);
}
}
void Boom(object oCible, float fTemp, int nDamage, int nSaveDC = 22, float fRadius = 5.)
{
{
int nNbPJ = GetLocalInt(GetArea(oCible), "NB_PJ");
if(nNbPJ == 0) return; //si il y a plus de PJ, on arrete (location lTarget, int nDamage, int nSaveDC = 22, float fRadius = 5.) {
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIREBALL), GetLocation(oCible));
object oObject = GetFirstObjectInShape(SHAPE_SPHERE, fRadius, GetLocation(oCible));
do {
int nDamageAfterSave = GetReflexAdjustedDamage(nDamage, oObject, nSaveDC);
ApplyEffectToObject( DURATION_TYPE_INSTANT, EffectDamage(nDamageAfterSave, DAMAGE_TYPE_FIRE), oObject);
} while ((oObject = GetNextObjectInShape(SHAPE_SPHERE, fRadius, GetLocation(oCible))) != OBJECT_INVALID);
}//le bloc c'est a cause du delay, parce qu'il parait que c mieux ^_^
DelayCommand(fTemp, Boom( oCible, fTemp, nDamage, nSaveDC, fRadius)); //relancer la fonction dans ntemp
}
compiler mais pas tester, sans doute que pas de tests sauf en cas de pb