Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Un script pour le respawn des NPc sans aide de WP
Un script pour le respawn des NPc sans aide de WP
Par Hiztaar le 14/12/2002 à 15:16:18 (#2786024)
Respawn là où le NPc est mort:
void RespawnObject(string sResRef, int iType, location lLoc) {
CreateObject(iType, sResRef, lLoc);
}
void main()
{
string sResRef = GetResRef(OBJECT_SELF);
int iType = GetObjectType(OBJECT_SELF);
location lLoc =GetLocation(OBJECT_SELF);
float fDelay = 60.0; // Respawn au bout de 5 minutes; à ajuster suivant vos choix
AssignCommand(GetModule(), DelayCommand(fDelay, RespawnObject(sResRef, iType, lLoc)));
}
A mettre dans le Ondeath du NPc. Attention il ne faut pas que le blueprint et le TAG du NPc ou de la créature soient identiques.
Oups
Par Hiztaar le 14/12/2002 à 15:17:51 (#2786039)
Par Iridian le 14/12/2002 à 15:40:57 (#2786208)
Sinon en effet c'est intéressant :merci:
Par coolstar le 14/12/2002 à 17:08:25 (#2786728)
Par Anianka le 14/12/2002 à 17:31:43 (#2786873)
SetLocalLocation("position", GetLocation(OBJECT_SELF));
Par Hiztaar le 14/12/2002 à 17:31:55 (#2786876)
Respawn a partir d'un WP:
void RespawnObject(string sResRef, int iType, location lLoc) {
CreateObject(iType, sResRef, lLoc);
}
void main()
{
string sResRef = GetResRef(OBJECT_SELF);
int iType = GetObjectType(OBJECT_SELF);
location lLoc =GetLocation(GetWaypointByTag("TAG_WAYPOINT"));
float fDelay = 300.0; // 5 minute par défaut
AssignCommand(GetModule(), DelayCommand(fDelay, RespawnObject(sResRef, iType, lLoc)));
}
[/HRP]
Voilà ça c'est pour un Respawn par WP
Par Hiztaar le 14/12/2002 à 17:33:25 (#2786883)
Respawn a partir d'un WP:
void RespawnObject(string sResRef, int iType, location lLoc) {
CreateObject(iType, sResRef, lLoc);
}
void main()
{
string sResRef = GetResRef(OBJECT_SELF);
int iType = GetObjectType(OBJECT_SELF);
location lLoc =GetLocation(GetWaypointByTag("TAG_WAYPOINT"));
float fDelay = 300.0; // 5 minute par défaut
AssignCommand(GetModule(), DelayCommand(fDelay, RespawnObject(sResRef, iType, lLoc)));
}
voila désolé pour l'erreur
Par Iridian le 14/12/2002 à 21:36:19 (#2788719)
Dans le on spawn on assigne une variable location, et dans le onDeath (enfin je crois que c'est ca), on la récupérer et on l'utilise dans ton script de respawn différé.
A condition qu'on puisse récupèrer une variable d'un NPC mort dans son onDeath ...
Sinon la solution c'est de stoker la variable sur un objet fixe de la zone, comme ca on est sur de pouvoir la recuperer !
Par Hiztaar le 14/12/2002 à 21:46:16 (#2788783)
Sinon pour la variable, c'est une bonne idée faudrait juste arriver à la faire marcher :D
Par Iridian le 14/12/2002 à 22:37:59 (#2789042)
Par coolstar le 15/12/2002 à 1:48:55 (#2790222)
/* Script pour définir la Localisation de l'Objet au moment du Spawn
: A mettre dans le OnSpanw. */
void main()
{
// Déclaration des Variables.
object oObject = OBJECT_SELF;
string sVarName = "spawn_position"; // Variable "générique" de Respawn "localisé" pour tous les Objets.
location lValue = GetLocation(oObject); // Valeur de la Variable "égale à" la Localisation de l'Objet (au Spawn).
// Définition de la Localisation de l'Objet lors du déclenchement du Script (au Spawn).
SetLocalLocation(oObject, sVarName, lValue);
}
&/* Script pour "recréer" l'Objet à la Localisation initiale de son Spawn
: A mettre dans le OnDeath. */
// Création d'un void "simulé" afin de pouvoir appliquer un DelayCommand (par exemple) sur le CreateObject.
void RespawnObject(int nObjectType, string sTemplate, location lLocation)
{
CreateObject(nObjectType, sTemplate, lLocation);
}
// Application du DelayCommand sur le "void RespawnObject".
void main()
{
// Déclaration des Variables.
object oObject = OBJECT_SELF;
float fSeconds = 300.0; // Délais par défaut avant Respawn : 5 minutes.
int nObjectType = GetObjectType(oObject);
string sTemplate = GetResRef(oObject);
string sVarName = "spawn_position";
location lLocation = GetLocalLocation(oObject, sVarName); // Acquisition de la Location "antérieure" de l'Objet.
// Respawn de l'Objet après 5 minuntes à la Localisation de son premier Spawn.
AssignCommand(GetModule(), DelayCommand(fSeconds, RespawnObject(nObjectType, sTemplate, lLocation)));
}
:D
Par Iridian le 15/12/2002 à 10:53:16 (#2791510)
Bon ba j'aurai plus de temps pour autre chose ;)
Mais tu as testé, ca marche ? Je veux dire, on peu vraiment récupérer une valeur sur un NPC mort ? (il me semble me souvenir qu'on ne peu pas sur un objet détruit)
Par Jedaï le 15/12/2002 à 12:46:04 (#2792267)
Comme Coolstar n'as pas utilisé cette astuce, son script aurait été faux s'il avait écrit :
AssignCommand(GetModule(), DelayCommand(fSeconds, RespawnObject(nObjectType, sTemplate, GetLocalLocation(oObject, sVarName))));
Mais ce n'est pas ce qu'il a fait :D .
Par Jedaï le 15/12/2002 à 12:46:04 (#2792268)
Par coolstar le 15/12/2002 à 13:27:44 (#2792652)
Provient du message de Iridian
*A même pas eu le temps de commencer*
Bon ba j'aurai plus de temps pour autre chose ;)
Mais tu as testé, ca marche ? Je veux dire, on peu vraiment récupérer une valeur sur un NPC mort ? (il me semble me souvenir qu'on ne peu pas sur un objet détruit)
1) Voir "Commentaires des Scripts" (ci-avant!) & "Réponse 2)" (ci-après!)... :DProvient du message de Jedaï
Le script de Coolstar marche bien, car il ne récupère pas la variable sur un NPC mort mais sur un NPC encore vivant : il sera vraiment mort quand son corps aura disparu (c'est pourquoi certain script de respawn utilise SetDestroyable(FALSE) ).
Comme Coolstar n'as pas utilisé cette astuce, son script aurait été faux s'il avait écrit :
AssignCommand(GetModule(), DelayCommand
(fSeconds, RespawnObject(nObjectType, sTemplate,
GetLocalLocation(oObject, sVarName))));
Mais ce n'est pas ce qu'il a fait :D .
2) Tout à fait Mister!! D'ailleurs, juste au passage, je tiens à saluer ce môssieux ci-présent si présent a qui je dois l'acquisition du principe du SetLocalLocation & Autres (ça aurait pu être un autre mais c'était celui-là!)... ;)
Règle Coolstar! Toujours vérifier la Compilation, toujours tester l'Application... :merci:
JOL Archives 1.0.1
@ JOL / JeuxOnLine