Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Petit problème de script
Petit problème de script
Par Corwin Whitehorn le 22/10/2002 Ã 16:05:16 (#2383086)
Le script suivant
#include "NW_I0_GENERIC"
void VoidCreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE)
{
CreateObject(nObjectType,sTemplate, lLocation, bUseAppearAnimation);
}
void main()
{
object oChef = GetObjectByTag("Lumierepourpre1");
object oGoblin = GetObjectByTag("Goblino2");
if(GetIsObjectValid(oChef))
{
location lSpawnPoint = GetLocation(GetWaypointByTag("Respawn1"));
string sPseudoResRef = GetTag(oGoblin);
AssignCommand(oChef, VoidCreateObject(OBJECT_TYPE_CREATURE, sPseudoResRef, lSpawnPoint, TRUE));
}
SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK);
//Shout Attack my target, only works with the On Spawn In setup
SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK);
if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(1007));
}
}
devrait, à la mort de la créature (OnDeath) faire apparaître la créature dont le tag est "Goblino2" au Waypoint "Respawn1"
Bon, il fait apparaître un badger....
C'est surement très con, comme erreur, mais je suis vraiment pas doué en programmation...
Alors si quelqu'un voit le problème...
Merci d'av...
Par eMRaistlin le 22/10/2002 Ã 16:12:52 (#2383142)
en fait, le createobject fonctione avec le blueprint... donc, dans ton exemple, tu prends le Tag, ettu l'utilise comme resref...
c'est bien, et c'est la bonne facon de faire... MAIS IL MANQUE UN TRUC :
il faut que le Tage de ton gobelin soit exactement pareil a son resref... (cas Sensitive)
donc :
TAG = Goblino2 / ResRef = goblino2 ne marchera pas.
TAG = goblino2 / ResRef = goblino2 fonctionnera...
ok ?
Par Corwin Whitehorn le 22/10/2002 Ã 16:16:39 (#2383163)
Quand je disais que c'était con...
Merci!
Par Corwin Whitehorn le 22/10/2002 Ã 16:30:41 (#2383272)
Faudrait peut-être que je précise...
En fait, le monstre "Goblino1", à sa mort, fait apparaître le monstre "Goblino2" sur "Respawn1"
La mort du monstre "Goblino2" fait apparaître "Goblino1" sur "Respawn2"
L'autre script est evidemment le même, a part les tags..
Par eMRaistlin le 22/10/2002 Ã 16:43:50 (#2383391)
D'ailleur, tu dis : "Goblino2"... attention, c'est "goblino2" qu'il faut utiliser, vu que le resref est toujours en minuscule
bien entendu, ca vaut aussi pour "goblino1" ^^
Par Corwin Whitehorn le 22/10/2002 Ã 16:45:08 (#2383401)
Ben c'est exact, tout est avec majuscule....
Remerci....
Par Corwin Whitehorn le 22/10/2002 Ã 16:54:33 (#2383488)
J'ai tout mis en minuscule (les tags des monstres et les tags dans les scripts)...et ca marche toujours pas... bon je reposte les 2 scripts...
1er Script
#include "NW_I0_GENERIC"
void VoidCreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE)
{
CreateObject(nObjectType,sTemplate, lLocation, bUseAppearAnimation);
}
void main()
{
object oChef = GetObjectByTag("lumierepourpre1");
object oGoblin = GetObjectByTag("goblino2");
if(GetIsObjectValid(oChef))
{
location lSpawnPoint = GetLocation(GetWaypointByTag("respawn1"));
string sPseudoResRef = GetTag(oGoblin);
AssignCommand(oChef, VoidCreateObject(OBJECT_TYPE_CREATURE, sPseudoResRef, lSpawnPoint, TRUE));
}
SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK);
//Shout Attack my target, only works with the On Spawn In setup
SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK);
if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(1007));
}
}
2eme Script
#include "NW_I0_GENERIC"
void VoidCreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE)
{
CreateObject(nObjectType,sTemplate, lLocation, bUseAppearAnimation);
}
void main()
{
object oChef = GetObjectByTag("lumierepourpre2");
object oGoblin = GetObjectByTag("goblino1");
if(GetIsObjectValid(oChef))
{
location lSpawnPoint = GetLocation(GetWaypointByTag("respawn2"));
string sPseudoResRef = GetTag(oGoblin);
AssignCommand(oChef, VoidCreateObject(OBJECT_TYPE_CREATURE, sPseudoResRef, lSpawnPoint, TRUE));
}
SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK);
//Shout Attack my target, only works with the On Spawn In setup
SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK);
if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(1007));
}
}
J'ai revérifié les tags des monstres, des waypoints et du "chef", tout est en rapport avec les scripts...
Par LeProctophantasmiste le 22/10/2002 Ã 16:54:39 (#2383489)
Au contraire, tu va avoir un problème quand "goblino1" mourra si "goblino2" n'existe pas : GetObjectByTag("Goblino2") va retourner OBJECT_INVALID et ça ne va pas marcher.
donc une version simplifiée:
void VoidCreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE)
{
CreateObject(nObjectType,sTemplate, lLocation, bUseAppearAnimation);
}
void main()
{
object oChef = GetObjectByTag("Lumierepourpre1");
if(GetIsObjectValid(oChef))
{
location lSpawnPoint = GetLocation(GetWaypointByTag("Respawn1"));
AssignCommand(oChef, VoidCreateObject(OBJECT_TYPE_CREATURE, "goblino2", lSpawnPoint, TRUE ));
}
SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK);
//Shout Attack my target, only works with the On Spawn In setup
SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK);
if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(1007));
}
}
et comme tu le faisais, tu inverses pour l'OnDeath de "goblino2"
Par Corwin Whitehorn le 22/10/2002 Ã 16:58:27 (#2383524)
Par LeProctophantasmiste le 22/10/2002 Ã 17:10:51 (#2383638)
Par Corwin Whitehorn le 22/10/2002 Ã 17:16:01 (#2383677)
Par eMRaistlin le 22/10/2002 Ã 17:21:25 (#2383720)
Pourquoi tu fais :
AssignCommand(oChef, VoidCreateObject(OBJECT_TYPE_CREATURE, "goblino2", lSpawnPoint, TRUE ));
Deja, pas besoin de creer une fonction VoidCreatebject, vu que createObject est similaire, et fonctionne tres bien ^^
Et le AssignCommand, je comprends pas... Tu essayerai sans ?
Par Corwin Whitehorn le 22/10/2002 Ã 17:33:45 (#2383827)
Par eMRaistlin le 22/10/2002 Ã 17:38:48 (#2383884)
void main()
{
object oChef = GetObjectByTag("Lumierepourpre1");
if(GetIsObjectValid(oChef))
{
location lSpawnPoint = GetLocation(GetWaypointByTag("Respawn1"));
CreateObject(OBJECT_TYPE_CREATURE, "goblino2", lSpawnPoint, TRUE ));
}
SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK);
//Shout Attack my target, only works with the On Spawn In setup
SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK);
if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(1007));
}
}
Par LeProctophantasmiste le 22/10/2002 Ã 17:43:19 (#2383932)
Sinon le AssignCommand n'est très probablement pas nécessaire mais je n'avais pas testé ce script, et je voulais être sûr qu'il marche (:rasta: il semblerait que ce soit raté). Il le serait si tu mettais un DelayCommand en plus, pour donner au joueur le temps de souffler.
En plus je trouvais ça logique que ce soit le chef (maintenant la lumière pourpre) qui crée les sbires ;) .
Corwin, si tu obtient un badger avec le dernier script, c'est que la ResRef n'est pas bonne, pas d'autre explication à mon avis. Va dans les propriété avancée de ta créature, copie sa ResRef et colle la à la place de "goblino2" dans le script.
Par Corwin Whitehorn le 22/10/2002 Ã 17:44:07 (#2383939)
et j'ai fait copier coller...
Il m'indique la ligne "createobject"...Ca j'avais essayé...
Par eMRaistlin le 22/10/2002 Ã 17:54:31 (#2384045)
Je te conseille de le réécrire idem, peut etre un caractère qu'il n'aime pas lors des copier/coller...
Par LeProctophantasmiste le 22/10/2002 Ã 17:55:25 (#2384052)
#include "NW_I0_GENERIC"
void main()
{
object oChef = GetObjectByTag("Lumierepourpre1");
if(GetIsObjectValid(oChef))
{
location lSpawnPoint = GetLocation(GetWaypointByTag("Respawn1"));
CreateObject(OBJECT_TYPE_CREATURE, "goblino2", lSpawnPoint, TRUE );
}
SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK);
//Shout Attack my target, only works with the On Spawn In setup
SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK);
if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(1007));
}
}
une paranthèse de trop
important le include :maboule:
On va y arriver...
Par Corwin Whitehorn le 22/10/2002 Ã 18:01:34 (#2384119)
Bon....je me demande si je vais pas mettre une zone fermée où il y a un goblino2...
Par Corwin Whitehorn le 22/10/2002 Ã 18:04:52 (#2384151)
Par LeProctophantasmiste le 22/10/2002 Ã 18:06:32 (#2384170)
Là ça ne peut être qu'un problème de ResRef, donc je répète mon conseil:
Va dans les propriété avancée de ton blueprint , copie sa ResRef et colle la à la place de "goblino2" dans le script.
Par Corwin Whitehorn le 22/10/2002 Ã 18:17:23 (#2384271)
J'ai confondu le Tag et le ResRef.....
Je me mets à genoux....pitié pardonnez-moi...:sanglote:
Par eMRaistlin le 22/10/2002 Ã 21:33:11 (#2385795)
JOL Archives 1.0.1
@ JOL / JeuxOnLine