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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Petit problème de script

Par Corwin Whitehorn le 22/10/2002 à 16:05:16 (#2383086)

Bon, je suis une quiche, si, si...

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)

non...


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)

Ah OK...

Quand je disais que c'était con...

Merci!

Par Corwin Whitehorn le 22/10/2002 à 16:30:41 (#2383272)

Ben non, c'est pas ca...

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)

Euh... desolé d'insister, mais si tu as des badger, c'est que le script est bon, mais pas les resref/tag..


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)

Ahhhhh! oki!!!!!!


Ben c'est exact, tout est avec majuscule....


Remerci....

Par Corwin Whitehorn le 22/10/2002 à 16:54:33 (#2383488)

Ben là ca devient mystérieux...

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)

le GetTag(OBJECT_SELF) dans mon script c'était juste pour qu'il soit général, mais la comme tu connais les ResRef, tu n'en as pas besoin.
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)

Est-ce que par hasard le fait que goblino2 ne soit pas présent au départ influerait la-dessus?

Par LeProctophantasmiste le 22/10/2002 à 17:10:51 (#2383638)

Oui c'est ça, le script que j'ai posté au-dessus devrait résoudre le problème ( je ne sais pas si tu as vu mon message).

Par Corwin Whitehorn le 22/10/2002 à 17:16:01 (#2383677)

Bon ben le Badger s'incruste...j'ai fait les changements comme indiqué, mais ca crée toujours des badgers...fo croire qu'ils aiment le coin...

Par eMRaistlin le 22/10/2002 à 17:21:25 (#2383720)

par contre, j'ai 1 questions :

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)

Ben, heu, ca veut pas compiler (vous ai dit que j'etais nul)

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)

Pour le VoidCreateObject c'est justement pour pouvoir le mettre dans le AssignCommand (CreateObject renvoie un objet donc ça ne marche pas, il faut une "action", ie une fonction qui retourne void).
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)

Ben là comme ca il me dit "no semicolon after expression..."

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)

Euh... avec le script que je t'ai fais, il te dis NO SEMICOLON ?? oO


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)

Ben là ca compile bien et ca crée des beaux...badgers...


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)

marche pas non plus...

Par LeProctophantasmiste le 22/10/2002 à 18:06:32 (#2384170)

Franchement Corwin tu exagère :)
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)

Bon, ben là j'ai honte, maintenant...


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)

http://www.tusors.fr.st/

JOL Archives 1.0.1
@ JOL / JeuxOnLine