Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Comment paraliser puis déparaliser quelqu'un?

Par Adalorn le 9/7/2002 à 12:07:38 (#1780493)

voila, sachant que RemoveEffect(oPlayer, EffectParalyze()); ne marche pas :aide:
(ou l'mpecher de bouger pendant une conversation)

Par Adalorn le 9/7/2002 à 14:46:04 (#1781291)

solution trouvée :
EffectMovementSpeedDecrease(10)
puis
EffectMovementSpeedIncrease(10)

Par Adalorn le 9/7/2002 à 18:59:39 (#1782461)

marche pas +, j'ai trouvé aucun moyen, si quelqu'un avait une idée...:aide:

Par Lumina le 9/7/2002 à 19:33:24 (#1782655)

D'apres les posts que j'ai lu, rien de ceci ne fonctionne donc ?
- AssignCommand() + ActionWait()
- EffectKnockdown()
- EffectMovementSpeedDecrease()
- EffectParalyze()
- EffectStunned()
- ApplyEffectToObject() + EFFECT_TYPE_PARALYZE
- ApplyEffectToObject() + EFFECT_TYPE_MOVEMENT_SPEED_DECREASE

C'est vrai que pour les effets de ralentissement, c'est généralement incompatible avec une cape de liberté de mouvement qui t'en immunise.

Et pour un wait, il est annulé automatiquement au premier déplacement entrepris.

Bon, il reste d'autres méthodes probablement, comme par exemple changer le type des effets pour les rendre actifs meme si on y est immunisé :
- ExtraordinaryEffect()
- SupernaturalEffect()
avec :
- EFFECT_TYPE_PARALYZE
- EFFECT_TYPE_MOVEMENT_SPEED_DECREASE

Dans le pire des cas :
- utilise une zone dans laquelle le PJ doit rester, et si il en sort tu le téléportes de nouveau au milieu de la zone.
- utilise EffectTimeStop() à répétition
- utilise Death & Respawn ;)

Par Adalorn le 10/7/2002 à 9:34:18 (#1784969)

les efects pour paralyser fonctionnent, mais c'est RemoveEffect(), qui ne fonctionne pas...
oui, time_stop, mais on peut parler pendant ce temps là?
sinon, c'est une idée, la zone (je pense plutôt à ForrceMoveToLocation())

sinon, etant md du module, c'est pas vraiement indispensable...

Edit://on ne peut diminuer la vitesse que de 99%

Re: Comment paraliser puis déparaliser quelqu'un?

Par Lumina le 10/7/2002 à 12:37:48 (#1785847)

Provient du message de Adalorn
voila, sachant que RemoveEffect(oPlayer, EffectParalyze()); ne marche pas :aide:
Et tu as essayé ?
RemoveEffect(oCharacter, EFFECT_TYPE_PARALYZE);

[edit] ah non marche pas ..

Bon et ça ?
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectImmunity(IMMUNITY_TYPE_PARALYSIS), oCharacter, 1.0f);

[edit] ah non marche pas non plus .. :(

Par Machin le 10/7/2002 à 14:08:03 (#1786341)

Pour supprimmer un effet d'une creature, il faut d'abord le rechercher parmis les effets qui lui sont appliqués puis supprimer cet effet.


En script rapidos, ca donne ca :




effect e = GetFirstEffect(oCreature);
int bFind = FALSE;

while (GetIsEffectValid(e) && (!bFind))
{
if (GetEffectType(e) == EFFECT_TYPE_PARALYZE)
{
RemoveEffect(oCreature, e);
bFind = TRUE;
}

e = GetNextEffect(oCreature);
}


J'ai pas testé ce script, mais j'avais déjà écrit quelquechose de similaire pour reveiller un monstre, et ca fonctionnait.

Par Lumina le 10/7/2002 à 15:01:45 (#1786632)

Ah ! merci Machin ! enfin quelqu'un qui trouve la solution :)

Par Adalorn le 11/7/2002 à 20:41:13 (#1793176)

oui, j'avait vu ça dans le script OnRespawm (il suprime les effects quand on régénére), mais je comprends pas pourquoi ça marche pas en supprimant l'effect plus simplement (j'avait essayé avec juste RemoveEffect(oCreature, GetFirstEffect(oCreature));
ça marchait pas, alors, j'ai laissé tombé...

Allez, tous un grand MERCI (si ça marche, j'ai pas testé ;) ) à Feed ;)



:merci:

Par Kray le 15/7/2002 à 12:58:58 (#1807696)

La fonction existe nativement dans l'include nw_i0_spells.nss et se présente sous cette forme :

void RemoveSpecificEffect(int nEffectTypeID, object oTarget)
{
//Declare major variables
//Get the object that is exiting the AOE
int bValid = FALSE;
effect eAOE;
//Search through the valid effects on the target.
eAOE = GetFirstEffect(oTarget);
while (GetIsEffectValid(eAOE))
{
if (GetEffectType(eAOE) == nEffectTypeID)
{
//If the effect was created by the spell then remove it
bValid = TRUE;
RemoveEffect(oTarget, eAOE);
}
//Get next effect on the target
eAOE = GetNextEffect(oTarget);
}
}
:)

Edité:
J'en profite pour enlever bValid qui ne sert à rien dans le script (probablement une variable de debug oubliée... Mais ça fait la 2eme en 2 scripts que je regarde, sont pas serieux chez BioWare :D) :
//:://////////////////////////////////////////////
//:: Updated By: Kray
//:: Updated On: 15/07/2002
//:://////////////////////////////////////////////
void RemoveSpecificEffect(int nEffectTypeID, object oTarget)
{
//Declare major variables
//Get the object that is exiting the AOE
effect eAOE;
//Search through the valid effects on the target.
eAOE = GetFirstEffect(oTarget);
while (GetIsEffectValid(eAOE))
{
if (GetEffectType(eAOE) == nEffectTypeID)
{
//If the effect was created by the spell then remove it
RemoveEffect(oTarget, eAOE);
}
//Get next effect on the target
eAOE = GetNextEffect(oTarget);
}
}
Re-édité:
Bon, en fait je me demandais pourquoi les commentaires étaient si bizzare, et pourquoi y'avait cette variable, ben c'est simple, c'est un copier-coller légèrement modifié de la fonction d'en dessus :
void RemoveSpellEffects(int nSpell_ID, object oCaster, object oTarget)
{
//Declare major variables
int bValid = FALSE;
effect eAOE;
if(GetHasSpellEffect(nSpell_ID, oTarget))
{
//Search through the valid effects on the target.
eAOE = GetFirstEffect(oTarget);
while (GetIsEffectValid(eAOE) && bValid == FALSE)
{
if (GetEffectCreator(eAOE) == oCaster)
{
//If the effect was created by the spell then remove it
if(GetEffectSpellId(eAOE) == nSpell_ID)
{
RemoveEffect(oTarget, eAOE);
bValid = TRUE;
}
}
//Get next effect on the target
eAOE = GetNextEffect(oTarget);
}
}
}
Rhooo les flemmards :ange:

JOL Archives 1.0.1
@ JOL / JeuxOnLine