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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Un script pour le respawn des NPc sans aide de WP

Par Hiztaar le 14/12/2002 à 15:16:18 (#2786024)

J'ai trouvé un script assez intéressant pour respawn les NPc à l'endroit où ils sont morts, je pense que ce script sera utile dans le cas où un garde ou un marchand serait tué.


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)

désolé c'est un respawn au bout d'1 minute j'ai changé la valeur sans faire attention...

Par Iridian le 14/12/2002 à 15:40:57 (#2786208)

A mon avis, si le PNJ s'est déplacé avant de mourir (par exemple pour défendre un autre PNJ agressé), il respawnera a l'endroit ou il est mort non ?

Sinon en effet c'est intéressant :merci:

Par coolstar le 14/12/2002 à 17:08:25 (#2786728)

Faut chopper alors sa position à la création, non? :D

Par Anianka le 14/12/2002 à 17:31:43 (#2786873)

dans le onSpawn, tu lui crée une variable locale :

SetLocalLocation("position", GetLocation(OBJECT_SELF));

Par Hiztaar le 14/12/2002 à 17:31:55 (#2786876)

Et bien si le PNJ a courru un 100 m avant de mourir il respawnera a l'endroit meme où il est mort, sinon il faut attribuer un respawn par WP et il reviendra là où vous avez mis le WP qui lui est attribué.


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)

arfeu c'est quoi ce HRP? bon je reprend le script


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)

Je pense qu'on doit pouvoir faire sans WP avec l'idée d' Anianka.
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)

je cherche une idée pour respawn les placeables détruits je vais tester le script pour voir si l'effet est le même, sa serait bien pratique :)

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)

L'idee m'intéresse, j'essaierai de faire ca demain !

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)

*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)

Par Jedaï le 15/12/2002 à 12:46:04 (#2792267)

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 .

Par Jedaï le 15/12/2002 à 12:46:04 (#2792268)

[EDIT]:Désolé pour ce post en double, je n'ai pourtant rien fait d'inhabituel ?:confus:

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!)... :D


Provient 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