Saÿron
Inscrit le: 01 Sep 2006
Messages: 55
Posté le: 19/11/2006 23:51 Sujet du message: Mon premier essai :x
Je viens d'essayer de scripter, et c'est pas gagné . J'ai lu le tuto de Baldurien sur le scripting et, en regardant comment étaient composés d'autres scripts, j'ai tenté de faire ceci:
un script que je suis censé mettre dans le OnDeath d'une créature ayant le tag "creaturedombre", ce script lance le sort ténèbre sur le joueur. Mais voilà, j'ai bien l'impression que mon script est pas très très bon :p. Pouvez-vous me dire si je suis sur la bonne voie ou si je suis totalement à côté de la plaque?:
Code: |
void main()
{
object oCaster = GetObjectByTag("creaturedombre");
object oTarget = oPC;
//sort à lancer
AssignCommand(oCaster, ActionCastSpellAtObject(SPELL_SHADOW_CONJURATION_DARKNESS, oTarget, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, FALSE));
} |
Mars
Inscrit le: 22 Mai 2005
Messages: 218
Localisation: Sur une galaxie lointaine, très lointaine
Posté le: 20/11/2006 0:07 Sujet du message:
Je suis pas un spécialiste (loin de là) mais il me semble que ça c'est pas bon
Code: |
object oTarget = oPC; |
Essaye de le remplacer par ceci
Code: |
object oTarget = object GetLastKiller(); |
Saÿron
Inscrit le: 01 Sep 2006
Messages: 55
Posté le: 20/11/2006 0:16 Sujet du message:
Tu étais le plus proche la ligne de code éxacte est:
Code: |
object oTarget = GetLastKiller(); |
Je vais de suite tester le script
Mars
Inscrit le: 22 Mai 2005
Messages: 218
Localisation: Sur une galaxie lointaine, très lointaine
Posté le: 20/11/2006 0:18 Sujet du message:
Ouep j'ai fais un copier collé de la fonction vite fais sans trop faire attention
Saÿron
Inscrit le: 01 Sep 2006
Messages: 55
Posté le: 20/11/2006 0:45 Sujet du message:
Marf le script ne fonctionne pas, je vais devoir repiocher dans les autres pour voir où ça colle pas
Mars
Inscrit le: 22 Mai 2005
Messages: 218
Localisation: Sur une galaxie lointaine, très lointaine
Posté le: 20/11/2006 13:12 Sujet du message:
Je ne vois rien de faux dans ton code (mais j'peux me tromper), tu peux essayer avec ActionCastSpellAtLocation j'avais moins de problème avec sur nwn1.
Ca devrait donner quelque chose comme ça :
Code: |
void main()
{
object oCaster = GetObjectByTag("creaturedombre");
object oTarget = GetLastKiller();
location iTarget = GetLocation (oTarget)
//sort à lancer
AssignCommand(oCaster, ActionCastSpellAtLocation(SPELL_SHADOW_CONJURATION_DARKNESS, iTarget, METAMAGIC_ANY, FALSE, PROJECTILE_PATH_TYPE_DEFAULT, FALSE));
} |
Par contre j'ai pas le toolset pour vérifer si ça compile...
Saÿron
Inscrit le: 01 Sep 2006
Messages: 55
Posté le: 20/11/2006 14:42 Sujet du message:
Il fait une erreur de compil à la ligne 7 "Parsing variable list"
AssignCommand(oCaster, ActionCastSpellAtLocation(SPELL_SHADOW_CONJURATION_DARKNESS, iTarget, METAMAGIC_ANY, FALSE, PROJECTILE_PATH_TYPE_DEFAULT, FALSE));
Si je traduit bien le message, mon anglais est un peu rouillé, c'est une erreur grammaticale (?), or je ne vois pas de faute dans le code ^_-
Par contre, dans location il me semble que le préfixe c'est plutôt "l" non? J'ai la table des préfixes NWScript sous les yeux et il me semble bien que i c'est pour "int".
jahjah
Inscrit le: 13 Nov 2006
Messages: 26
Localisation: Orléans
Posté le: 20/11/2006 18:27 Sujet du message:
Tu peux mettre ce que tu veux en variable, l'erreur ne vient pas de la (encore que c'est bien mieux de respecter les préfixes)
Remarque bête :
Citation
location iTarget = GetLocation (oTarget) ;
Le point virgule manque ici...
Mars
Inscrit le: 22 Mai 2005
Messages: 218
Localisation: Sur une galaxie lointaine, très lointaine
Posté le: 20/11/2006 18:38 Sujet du message:
Voila ce qui arrive quand on est trop pressé, sinon pour les locations c'est l normalement et pas i qui est utilisé pour les int j'ai tapé trop vite désolé
Saÿron
Inscrit le: 01 Sep 2006
Messages: 55
Posté le: 20/11/2006 19:03 Sujet du message:
Je dois être stupide comme jamais avec ce maudit script, il marche pas :s, pourtant je l'ai même essayé sur des monstres déjà créés dans l'editeur, j'ai biensûr penser à leur donner le bon Tag.
Mars
Inscrit le: 22 Mai 2005
Messages: 218
Localisation: Sur une galaxie lointaine, très lointaine
Posté le: 21/11/2006 14:52 Sujet du message:
Il marche pas ? Ne compile pas ?
Pourrais tu re-déposer ton script pour que l'on puisse voir d'où vient l'erreur ?
[edit] Puisque le script est dans le OnDeath de la créature est-ce que OBJECT_SELF ne serait pas plus approprié pour nommer la créature ?
Tatav
Inscrit le: 04 Oct 2006
Messages: 79
Posté le: 21/11/2006 16:28 Sujet du message:
Oui en utilisant "GetObjectByTag("creaturedombre");" il va aller chercher la première créature ayant ce tag sur le module entier, alors il y a très peu de chance pour qu'il trouve la bonne. Il faut bien utilise OBJECT_SELF pour définir cette créature la.
Ensuite la créature étant morte, je doute fort que le AssignCommand soit utile, il va seulement rajouter dans sa liste d'action de jeter le sort. Mais comme elle est morte, je doute fort qu'elle y parvienne .
Même en activant les booléens tricher pour permettre à la créature ne possédant pas le sort de le lancer, ni le instantané pour qu'elle puisse le lancer directement.
Donc cette ligne deviendrait:
Citation
AssignCommand(oCaster, ActionCastSpellAtObject(SPELL_SHADOW_CONJURATION_DARKNESS, oTarget, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, FALSE));
AssignCommand(OBJECT_SELF, ActionCastSpellAtObject(SPELL_SHADOW_CONJURATION_DARKNESS, oTarget, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE));
et un AssignCommand sur OBJECT_SELF étant inutile , cela revient à écrire plus simplement:
ActionCastSpellAtObject(SPELL_SHADOW_CONJURATION_DARKNESS, oTarget, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE));
Enfin je doute que ca fonctionne tout de même vu que la créature est morte elle ne peut pas lancer le sort, il faut trouver quelquechose pour lancer le sort à sa place.
Amo
Inscrit le: 06 Juil 2006
Messages: 37
Localisation: Paris (pas loin)
Posté le: 22/11/2006 1:30 Sujet du message:
Oui, trouver quelque chose pour lancer a sa place ou bien faire les effets du sort "artificiellement", mettre les effets sur la cible (visuel et physique/mental (PdV en moin ou sort mental en fonction de l'effet du sort*)) sur la cible (oTarget).
*Je ne sais pas a quoi correspond "SPELL_SHADOW_CONJURATION_DARKNESS" (les effets) donc désolé d'être un peu flou dans mon idée ^^
Saÿron
Inscrit le: 01 Sep 2006
Messages: 55
Posté le: 22/11/2006 7:40 Sujet du message:
En fait SPELL_SHADOW_CONJURATION_DARNESS c'est le sort ténèbres. Avec ce script je cherchais à faire en sorte qu'en tuant une créature dite "d'ombre" le joueur soit plongé dans les ténèbres, pour faire un petit effet sympa dans mon projet.
En ce moment même un ami à moi parcours un forum dédié aux scripts nwn pour savoir d'où vient mon problème et on lui à affirmé que ça venait du fait que la créature était "morte". Donc un script dans Ondeath est toalement inutile?
Sinon je pensais à la parade suivante: Je peux pas lancer le sort depuis un Waypoint? ou quelque chose du genre? (mais cette fois-ci je devrai enlever le OBJECT_SELF au profit du tag du type de monstre tué, vrai?
jahjah
Inscrit le: 13 Nov 2006
Messages: 26
Localisation: Orléans
Posté le: 22/11/2006 10:31 Sujet du message:
Je n'ai pas l'éditeur sous les yeux mais s'il y a un event onDamaged tu pourrais par exemple vérifier si la cible a - d'un quart de ses points de vie par exemple, dans ce cas la elle lancerait le sort...