Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Script pour Respawn MMORPG ( petit problème )
Script pour Respawn MMORPG ( petit problème )
Par Tzarman le 31/1/2003 Ã 13:23:48 (#3141067)
Voila ce petit script qui suis est très sympa pour les respawn mais il y a un petit problème : les corps des créatures tuées ne disparaissent ( pour laisser place à leurs droops ) qu'une fois leur respawn effectué .
Ce qui est assez gênant pour le joueur qui doit attendre le respawn pour pouvoir espérer drooper un object ( en plus si le respawn est long ).
Voila le script en question :
#include "NW_I0_GENERIC"
void VoidCreateObject(string sTemplate, location lLoc, int bUseAppearAnimation=TRUE);
void main()
{
location lLoca = GetLocation(GetObjectByTag ("Tag_du_waypoint"));
float fSeconds = 10.0; //temps en secondes pour le respawn
string sTemplate = "BLUEPRINT_de_votre_monstre";
if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(1007));
}
{
SetIsDestroyable(FALSE);
AssignCommand(OBJECT_SELF, DelayCommand(fSeconds, VoidCreateObject(sTemplate,lLoca, TRUE)));
}
}
void VoidCreateObject(string sTemplate, location lLoca, int bUseAppearAnimation=TRUE)
{
CreateObject(OBJECT_TYPE_CREATURE, sTemplate,lLoca,TRUE);
SetIsDestroyable(TRUE);
}
J'aimerais bien-sure que les créatures disparaissent instantanément après leur mort, mais je ne sais pas comment le modifier :confus:
:aide: :aide: :aide: :aide: Merci d'avance :ange:
Par Jedaï le 1/2/2003 à 0:28:18 (#3145840)
C'est très simple, ce script repose sur un principe idiot : si on détruit un objet, celui-ci ne peut plus rien faire (logique !), donc pour un respawn différé, ce script fait en sorte que le cadavre ne disparaisse pas, pour qu'il puisse se réinvoquer. (Passons sur le AssignCommand(OBJECT_SELF,...); totalement inutile, mais bon...)
Pour éviter ce problème, il suffit juste de faire en sorte que ce soit un autre objet qui respawn le monstre, ainsi on peut détruire le cadavre qui n'as plus rien à faire dans l'affaire (parce que ça allège le moteur et aussi parce qu'un cadavre ça pue, surtout quand ça a eu le temps de sécher ;) )
Ce script devrait faire ce qu'il faut :
#include "NW_I0_GENERIC"
void VoidCreateObject(string sTemplate, location lLoc, int bUseAppearAnimation=TRUE);
void main()
{
location lLoca = GetLocation(GetObjectByTag ("Tag_du_waypoint"));
float fSeconds = 10.0; //temps en secondes pour le respawn
string sTemplate = "BLUEPRINT_de_votre_monstre";
if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(1007));
}
AssignCommand(GetModule(), DelayCommand(fSeconds, VoidCreateObject(sTemplate,lLoca, TRUE)));
}
void VoidCreateObject(string sTemplate, location lLoca, int bUseAppearAnimation=TRUE)
{
CreateObject(OBJECT_TYPE_CREATURE, sTemplate,lLoca,TRUE);
}
:cool:
Par Tzarman le 1/2/2003 Ã 1:19:42 (#3146126)
C'est parfait :D :D :D
NON
Par Blam le 1/2/2003 Ã 13:26:53 (#3147940)
Jedaï.
Pom pom pom pom et j'ai cherché dans tous les msg des 100 derniers jours.................
Par Hreidmarr le 1/2/2003 Ã 16:48:35 (#3149012)
Par Jedaï le 1/2/2003 à 20:25:37 (#3150261)
Par Hreidmarr le 1/2/2003 Ã 22:27:56 (#3151105)
Par Hreidmarr le 2/2/2003 Ã 4:10:25 (#3152516)
Merci.
Par Jedaï le 2/2/2003 à 11:57:32 (#3153479)
celui-ci ne réapparait qu'une seule fois
Ca c'est symptomatique :D
En fait il faut créer une nouvelle créature dans la palette et lui mettre le script dans le OnDeath dans les propriétés du prototype (dans la palette custom), parce que sinon, si tu modifie juste les propriétés d'une créature sur la map, la créature qui est respawné a le script par défaut dans son OnDeath, pas le script de respawn. :p
(Je sais pas si j'ai été clair :confus: )
Par Tzarman le 2/2/2003 Ã 14:38:39 (#3154455)
Mais bon je pense que tu l'as deja fait :doute:
JOL Archives 1.0.1
@ JOL / JeuxOnLine