La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 18:18:22


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
AZAZEL11
Seigneur
Inscrit le: 08 Fév 2006
Messages: 156
Répondre en citant
Posté le : 28/09/2006 01:59:35 Sujet du message : Zone Anti-Magie (tous les effets possibles)

salut ne tappez pas mais j'ai cherché mais en vain, comment fait on une suppression rapide de TOUS les effets (sorts et items) sur l'entrée d'un trigger

autrement dit, je fais une zone d'anti-Magie, et pour l'instant je suis en train de prendre le chemin le plus long a mon avis (ci dessous)

j'aimerais bien que quelqu'un puisse prendre la peine de m'indiquer la bonne ligne de commande svp!!!



NWScript :
#include "nw_i0_spells"
void main()
{

object oPC = GetEnteringObject();

if (!GetIsPC(oPC)) return;

{





effect eEffect = GetFirstEffect(oPC);//on check les effets des PJs

while(GetIsEffectValid(eEffect))

if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS ||
                GetEffectType(eBad) == EFFECT_TYPE_DEAF ||
                GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
                GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL)


    if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_INCREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_AC_INCREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_ATTACK_INCREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_INCREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE||
                GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_REDUCTION||
                GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_INCREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_INCREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_SKILL_INCREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_SANCTUARY ||
                GetEffectType(eBad) == EFFECT_TYPE_DEAF ||
                GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
                GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL)






RemoveEffect (oPC,eEffect);//on applique effet
}
eEffect= GetNextEffect (oPC);


effect eAntimagic; //effet de anti magie en question
SendMessageToPC(oPC, "");
eAntimagic = EffectSpellFailure(100, SPELL_SCHOOL_GENERAL);

eAntimagic = SupernaturalEffect(eAntimagic); //pour etre sur que on ne parle pas de petit effet...


ApplyEffectToObject (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_DISPEL_GREATER), oPC);
DelayCommand(0.1, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAntimagic, oPC));
}
}/* suspect block end found !*/
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

_________________
L'imagination est plus importante que le savoir. (Albert Einstein)
Dernière édition par AZAZEL11 le 29/09/2006 04:00:14; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Macadam
Grand Chevalier
Inscrit le: 07 Avr 2006
Messages: 132
Répondre en citant
Posté le : 28/09/2006 08:43:53 Sujet du message :

[edit après relecture script]

t'es pas obligé de passer les effet en revue si tu le fait déjà dans la boucle avec un GetNextEffect

je vois pas à quoi ça sert

l'errreur est là tu as mis eEffet et tu te sers d' eBad
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 28/09/2006 09:13:22 Sujet du message :

Voici une fonction qui pourra peut-être t'aider !

http://www.system-tek.com/nwinter/phpbb2/viewtopic.php?p=121542#p121542

A bientôt !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Macadam
Grand Chevalier
Inscrit le: 07 Avr 2006
Messages: 132
Répondre en citant
Posté le : 28/09/2006 09:43:49 Sujet du message :

voilà c'est ce que je disais tout ça :

Citation :
if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS ||
GetEffectType(eBad) == EFFECT_TYPE_DEAF ||
GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL)


if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_INCREASE ||
GetEffectType(eBad) == EFFECT_TYPE_AC_INCREASE ||
GetEffectType(eBad) == EFFECT_TYPE_ATTACK_INCREASE ||
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_INCREASE ||
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE||
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_REDUCTION||
GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_INCREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_INCREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SKILL_INCREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SANCTUARY ||
GetEffectType(eBad) == EFFECT_TYPE_DEAF ||
GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL)
ça sert à rien Cool

il manque une "{" après le while d'ailleurs

tu peux prendre la fonction d'Enki pour repérer les erreurs de syntaxe de ton script pour la première partie
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
AZAZEL11
Seigneur
Inscrit le: 08 Fév 2006
Messages: 156
Répondre en citant
Posté le : 28/09/2006 23:19:00 Sujet du message :

oui merci, en fait ce script est un brouillon 100% (meme pas vérifié si ca compilait lol)
je me suis arreté avant de le corriger car je savais que je ne m'y prenais pas de la bonne facon.

D'autres paramètres entrent en ligne de compte, je dois aussi annuler TOUT effets magiques de TOUS les items que le PJ peut se servir ou porter


EN bref une zone d'anti magie, toute magie dissipée (équipements portés ou non) à la sortie de la zone, tout redevient à la normale... Ca il me semble que je commence à entrer sur la cour des grands, vous n,avez pas un conseil ou deux maitres scripteurs???
_________________
L'imagination est plus importante que le savoir. (Albert Einstein)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Macadam
Grand Chevalier
Inscrit le: 07 Avr 2006
Messages: 132
Répondre en citant
Posté le : 29/09/2006 10:06:00 Sujet du message :

bon j'ai toujours pas aurora sous les yeux mais une voie à exploiter serait sans doute de remplacer les items de l'inventaire par des items normaux tout en les tagant de manière à pouvoir rendre les vrais objets plus tard (avec le meme tag donc grace à la fction CreateObject qui permet de le faire je crois)

par contre ça me parait un peu lourd voir beaucoup mais pas impossible à faire.

Une autre piste consisterait à utiliser le script général des sorts en le modifiant de tel façon que dans la zone qui porte tel tag, aucun sort ne puisse marcher

j'aurais nos scripts sous les yeux je pourrais t'ecrire ça mais pour l'instant c'est impossible mais si tu connais c'est pas forcément dur à faire. c'est avec la fonction SPELLOVERIDESCRIPTFINISHED ou un truc comme ça à mettre dans le onmodule load qui remplace le script par défaut lorsqu'un sort est lancé.

La deuxième solution si toutefois elle marche devrait être et de loin la meilleure car elle peut également stopper l'utilisation d'items magiques me semble til
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 29/09/2006 13:11:47 Sujet du message :

La solution c'est le... tin tsiiiin : SPELL-HOOKING. (ici un tutorial : [http]

Dans le cas présent, il faudrait lancer cela par une variable locale au passage de ton déclencheur, du genre (sur le onEnter) :

NWScript :
SetLocalInt(GetObjectByTag("tag_de_ta_zone"), "ANTIMAGIE", 1);
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Puis, dans le script de Spell-Hooking :

NWScript :
if(GetLocalInt(GetArea(OBJECT_SELF), "ANTIMAGIE") == 1)
{
    SetModuleOverrideSpellScriptFinished();
    SendMessageToPC(OBJECT_SELF, "La magie ne semble pas exister dans cet endroit...");
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Ceci empêchera tous les sorts de fonctionner. Par contre, il faudra quand même ajouter une boucle pour supprimer tous les effets qui sont déjà sur le joueur.
_________________
» Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine
» 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 29/09/2006 13:14:34 Sujet du message :

Ah oui, et ne pas oublier d'ajouter la variable suivante sur le module, sans quoi le spell-hooking ne fonctionne pas :

NWScript :
SetLocalInt(GetModule(), "X2_S_UD_SPELLSCRIPT", "spellhooking");
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

_________________
» Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine
» 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 29/09/2006 20:17:43 Sujet du message :

Pour les propriétés sur les objets, et pour le reste aussi, ça peut être pas mal de voir comment Bioware à géré tout ça pour sa zone d'anti-magie. Je sais plus dans quel chapitre c'est, mais c'est assez bien foutu honnetement, toutes les propriétés magiques des items disparaissent...

C'est assez barbare, ils copient les items sur un WP, enfin ça bricole sec, mais ça marche, à mon avis ça peut t'aider.

Les scripts d'entrée et de sortie de la zone en question c'est : q5c_area_oe et q5c_area_ox (HotU chapitre 2)
_________________
L'île perdue - Module RP - Hard Core Ruled - En construction
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
AZAZEL11
Seigneur
Inscrit le: 08 Fév 2006
Messages: 156
Répondre en citant
Posté le : 30/09/2006 00:56:17 Sujet du message :

oui merci Sith, en fait c'était la solution la plus efficace et la plus rapide après tout^^ Je ne vois pas pourquoi j'aurais du faire le scriptage quand il y en a déja un tout chaud tout frais!!!
_________________
L'imagination est plus importante que le savoir. (Albert Einstein)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 1 ¤


Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 65.035ms