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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

respawn de coffre pour les mondes persistants

Par Cryotech le 21/10/2002 à 21:44:46 (#2378347)

Bonjour à tous

Comme je viens de m'inscrire dans ce forum, j'ai décidé de faire ma première contribution.

Etant en plein dans la construction de mon module qui j'espère sera persistant (au moins semi) J'ai remarqué qu'il n'existait pas (ou alors j'ai mal cherché) de système de respawn pour les coffres.

Je m'explique. Lorsqu'un bourrin frappe dans un coffre pour récupérer son contenu (le bourrin n'a pas crochetage) et bien ce même coffre est détruit. Dans la plupart des modules persistants les coffres et beaucoup d'objets sont incassables pour contourner ce probleme.

Et bien j'ai écrit un script qui permet d'avoir des coffres "respawnables" si un bourrin de passage le détruit. Le coffre respawn exactement au meme endroit et s'il était plein son contenu est transféré dans l'inventaire du bourrin.

Je vous laisse regarder:

script a mettre dans le "OnOpen" du coffre

#include "NW_O2_CONINCLUDE"

void main()

{
location l = GetLocation(OBJECT_SELF);
float fRespawnTime = 300.0; //Temps du respawn pour le tresor
object oLastOpener = GetLastOpener();

if(GetLocalInt(OBJECT_SELF,"VIDE") == 0) //Si le coffre est plein
{
GenerateLowTreasure(oLastOpener,OBJECT_SELF); //Generer tresor
SetLocalInt(OBJECT_SELF,"VIDE",1); //Coffre plein
DelayCommand(fRespawnTime,SetLocalInt(OBJECT_SELF,"VIDE",0)); //Le coffre ne se remplira que dans fRespawnTime
DelayCommand(fRespawnTime,SetLocked(OBJECT_SELF,TRUE)); //Pour le refermer
}
else
{
SendMessageToPC(oLastOpener,"Cet objet est vide!"); //Envoie un message dans la zone de chat
}
}

script a mettre dans le "OnDeath" du coffre

#include "NW_O2_CONINCLUDE"

void main()

{
object mod = GetModule();
if (GetLocalInt(OBJECT_SELF, "VIDE") == 0) //Si le coffre est plein
GenerateLowTreasure(GetLastKiller(), GetLastKiller()); //On genere le tresor dans l'inventaire du personnage
SetLocalLocation(GetModule(), "coffre", GetLocation(OBJECT_SELF)); //On sauvegarde la location du coffre en varible locale sur le module
ExecuteScript("respawn_coffre", mod); //Execution du script de respawn
}

script a mettre nulle part

#include "NW_O2_CONINCLUDE"

void main()

{
object mod = GetModule();
if (GetLocalInt(OBJECT_SELF, "VIDE") == 0) //Si le coffre est plein
GenerateLowTreasure(GetLastKiller(), GetLastKiller()); //On genere le tresor dans l'inventaire du personnage
SetLocalLocation(GetModule(), "coffre", GetLocation(OBJECT_SELF)); //On sauvegarde la location du coffre en varible locale sur le module
ExecuteScript("respawn_coffre", mod); //Execution du script de respawn
}

Voila, bon vu que je viens de le faire j'ai pas encore réfléchi à tout mais je pense qu'il pourrait être adaptable à pas mal de choses (les objets placables notamment).

Merci aux créateurs de ce forum, ils contribuent à la durée de vie de ce magnifique jeu en permettant aux néophytes de s'essayer à la construction de module et aux plus expérimentés de trouver des idées et des scripts.

Longue vie à vous et à tous (bon ca va bien maintenant :)

Merci

@+

Mort des PNJ...

Par Cryotech le 22/10/2002 à 14:28:01 (#2382377)

Encore moi :)
Bon voici un petit script qui vous permettra de gérer la mort de vos PNJ (surtout pour les MMORPG). Il est même possible d'établir un système de tête mise à prix si le même joueur tue trop de monde, les PNJ peuvent devenir hostiles etc...

Voici le code:

Script a mettre dans le "OnDeath" du PNJ

ExecuteScript("respawn_pnj", GetModule()); //Execution du script de respawn

Le script de respawn

void RespawnPNJ()
{
CreateObject(OBJECT_TYPE_CREATURE, "marchand1", GetLocation(GetObjectByTag("magasin1")));
}
void main()
{
DelayCommand(5.0, RespawnPNJ());
}

marchand1 correspond au blueprint du pnj
magasin1 correspond au spawn du pnj. Si vous ne voulez pas utiliser de tag vous pouvez faire comme dans le script précédent pour les coffres.

Vous pouvez bien sur changer le délai du respawn dans la commande DelayCommand.
Libre à vous d'ajouter des variables locales sur le "PK" pour qu'il soit fiché.

Et voilà!

JOL Archives 1.0.1
@ JOL / JeuxOnLine