Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Comment paraliser puis déparaliser quelqu'un?
Comment paraliser puis déparaliser quelqu'un?
Par Adalorn le 9/7/2002 Ã 12:07:38 (#1780493)
(ou l'mpecher de bouger pendant une conversation)
Par Adalorn le 9/7/2002 Ã 14:46:04 (#1781291)
EffectMovementSpeedDecrease(10)
puis
EffectMovementSpeedIncrease(10)
Par Adalorn le 9/7/2002 Ã 18:59:39 (#1782461)
Par Lumina le 9/7/2002 Ã 19:33:24 (#1782655)
- 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)
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
Et tu as essayé ?
voila, sachant que RemoveEffect(oPlayer, EffectParalyze()); ne marche pas :aide:
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)
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)
Par Adalorn le 11/7/2002 Ã 20:41:13 (#1793176)
ç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)
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) ://:://////////////////////////////////////////////
Re-édité:
//:: 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);
}
}
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)
Rhooo les flemmards :ange:
{
//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);
}
}
}
JOL Archives 1.0.1
@ JOL / JeuxOnLine