[-] respawn de coffre

Répondre
Partager Rechercher
tout d'abord bonjour a tous,

voila j ai un petit souci avec un de mes script

Ce dernier consiste a permettre le spawn du contenu d un coffre pour chaque PJ, activant une variable pour chaque coffre ouvert pour chaque PJ. ( en français, c est pour que tout l monde puisse faire spawn tous les coffres tout en limitant chaque coffre a un spawn par PJ )

Je tiens absolument a utiliser la ligne de spawn par défaut de nwn.

mon problème donc est que je n obtiens qu' un et un seul spawn. Suite a des testes, je sais que ma partie variable est bonne.

comment faire pour rééditer ces spawn, la solution est elle dans le #include# ( étant loin d' être un pro, j avoue qu' en l ouvrant ca me fait peur ! lol )?

voici mon script, merci d'avance :
Code PHP:

 #include "x0_i0_treasure"
void main()
{
object oPC GetLastOpenedBy();
string sZone GetTag(GetArea(oPC));
string sCoffre GetTag(OBJECT_SELF);
string sVar sZone+sCoffre;
if(
GetLocalInt(oPCsVar)==0)
CTG_CreateTreasure(TREASURE_TYPE_MEDoPCOBJECT_SELF);
SetLocalInt(oPCsVar1);

__________________
-Forum:http://ambygata.220v.org
-Mod nwn persistant RP (no_HAKs)
--> conection directe: Ambygata.no-ip.org
Je cromprends pas trop ce que tu obtiens en fait

Citation :
mon problème donc est que je n obtiens qu' un et un seul spawn. Suite a des testes, je sais que ma partie variable est bonne.
c-a-d un seul et unique pour tous les PJ, ou un seul spawn par PJ dans un seul coffre?

Bon en tout cas de base il y a un truc qui est genant... c que les placeables n'ont pas obligations d'avoir un tag differents... donc tu peux avoir tout plein de coffre avec le meme tag et du coup tu auras un spawn que dans le premier coffre avec le tag X dans la zonne Y

Alors moi je te conseillerais de le faire plutot sur le coffre la svg et non sur le PJ
Code PHP:

#include "x0_i0_treasure"
void main()
{
object oPC GetLastOpenedBy();
string sVar GetName(oPC);
if(
GetLocalInt(OBJECT_SELFsVar)==0)
     
CTG_CreateTreasure(TREASURE_TYPE_MEDoPCOBJECT_SELF);
SetLocalInt(OBJECT_SELFsVar1);

Bon biensur la comme dans l'autre version d'ailleurs, au reboot suivant cela recommence comme si les PJ n'avaient ouvert aucun coffre...
[Prob] spwan de coffre une seule fois par pj et par reboot
exacte ,...lol

sinon le problème est toujours la , alors si quelqu'un sait comment modifier les scripts x0_i0_treasure ou/et nw_o2_coninclude de manière à permettre le respawn , ça m'aiderait énormément, merci.
__________________
-Forum:http://ambygata.220v.org
-Mod nwn persistant RP (no_HAKs)
--> conection directe: Ambygata.no-ip.org
Tu trouveras sur notre forum tous les scripts de trésor SoU par défaut, modifiés afin d'utiliser un délai de respawn, le tout sous format ERF importable.

Le lien direct vers le topic nécessite une inscription au forum, donc je te mets le lien du forum général: http://www.nwn.fr/Forums/
la section s'appelle "Le Labyrinthe des scripts", le topic se trouve en page 2 et se nomme: "Système de respawn de coffres compatible SoU"
bon j ai essayé cette méthode telle qu elle est donnée, et egalement en bidouillant ( pcq une partie seulement m intéresse), mais en vain !!!,...il semblerait que quelque chose ne fonctionne pas dans cet include...donc a bon entendeur ... si quelqu un sait comment permettre la ré-exécution des script de spawn par défaut de nwn des coffres ...Genre si y a moyen de modifier x0_i0_treasure ou/et nw_o2_coninclude. ( il doit bien y avoir une variable bon sang !, je fouille mais je n suis que novice et c est assez compliqué)
(dans l imédiat, ce que je cherche , c est a obtenir des spawn de coffre en continue, via les scripts par defaut de nwn ( legerement modifiés ),...je m arrangerais ensuite pour y caser MA condition.)
j utilise par exemple cette base de script ( x0_o2_anymed ):
Code:
#include "x0_i0_treasure"
void main()
{
	CTG_CreateTreasure(TREASURE_TYPE_MED, GetLastOpener(), OBJECT_SELF);
}
donc comment obtenir un respawn en boucle vraiment ?

PS: j'ai essayé plusieur scripts de soit disant "respawn de coffre", mais bon.... j vois pas ou ca respawn moi !!! ca n marche pas , en tout cas ca ne fait pas se que je veux
__________________
-Forum:http://ambygata.220v.org
-Mod nwn persistant RP (no_HAKs)
--> conection directe: Ambygata.no-ip.org
Le problème si tu veux mon avis, c'est ta bidouille, ta condition qui foire.

Mes scripts de respawn de coffre sont utilisés par bien des modules qui utilisent le système VP, et ça marche très bien.

Dans le script que tu présentes dans ton premier post ici, le problème est que tu n'as aucun timer, pas de DelayCommand ou autre, rien. Juste une condition booléenne qui ne se réinitialise jamais. Donc forcément ça ne marche qu'une fois.

Dans l'exemple que j'ai fourni sur notre forum, ça donne ceci:

Code PHP:

#include "x0_i0_treasure" 

//Delai de respawn des coffres + 60 secondes (par defaut 2d100 secondes) 
int nRespCoffre d100(2); 


/* 

Respawn Coffre 
-------------- 
-Type: 
int TREASURE_TYPE_LOW    = 1; 
int TREASURE_TYPE_MED    = 2; 
int TREASURE_TYPE_HIGH   = 3; 
int TREASURE_TYPE_UNIQUE = 4; 
int TREASURE_TYPE_MONSTER = 5; 
*/ 
void RespawnCoffre(int nType); 

void RespawnCoffre(int nType

 
float fDelay nRespCoffre +100.0 10*nType
 if(!
GetLocalInt(OBJECT_SELF,"Respawn"))
 { 
  
CTG_CreateTreasure(nTypeGetLastOpener(), OBJECT_SELF); 
  
SetLocalInt(OBJECT_SELF,"Respawn",1); 
  
DelayCommand(fDelayDeleteLocalInt(OBJECT_SELF"Respawn")); 
 } 

Tu peux voir le DelayCommand qui réinitialise la variable locale du coffre, ce que ton script d'exemple ne fait pas, c'est la raison pour laquelle ça ne marche pas.

Bidouiller et combiner des scripts venant de partout c'est bien, mais comprendre ce que le code fait, c'est mieux.
Je crois qu'il a mal explicité son problème

Citation :
c-a-d un seul et unique pour tous les PJ, ou un seul spawn par PJ dans un seul coffre?
Ce qui serait souhaité par se système de variable , c'est qu'un coffre soit ouvrable ( avec contenue ) une fois par joueur , et que si un autre joueur qui passe juste derrière , trouve lui aussi un "lot", mais que les trésors ne reswpan pas pour le pj qui a déjà ouvert le coffre...

c'est pour cela que le script ( le premier ) prends le tag de la zone et le tag du coffre pour crée une variable unique ( en sous entendant que les coffres est un tag unique par zone ) et cette méthode, permet de ne pas avoir a modifier le systeme complexe de personalisation de spwan de SoU / HotU

je ne sais pas trop si je suis clair

pour ce qui connaisse c'est le système qui est en place sur Terre Sainte.
( une demande a était effectué au prés des scripteur de se module , mais pour le moment pas de réponse )

merci.

ok ben c'est bien ce que j'ai compris... ce que j'ai pas compris c'est ce qu'il obtenait avec mon script

Code PHP:

#include "x0_i0_treasure"
void main()
{
object oPC GetLastOpenedBy();
string sVar GetName(oPC);
if(
GetLocalInt(OBJECT_SELFsVar)==0)
     
CTG_CreateTreasure(TREASURE_TYPE_MEDoPCOBJECT_SELF);
SetLocalInt(OBJECT_SELFsVar1);

Et j'ai explique plus haut pourquoi il faut le faire comme cela plutot que dans l'autre sens!

Par contre attention ce qui est deja dans le coffre y reste avec ca, tant qu'il n'a pas ete pris!
faudra que je test c'est pet mon "camarade" qui a fait une chtit bétise

si non , c'est pour cela qu'il faut eviter le respwan

donc en fait , il faut retester ...

on vous tien au courant
bon , j ai deja testé ce script SEUL, et ca ne respawn pas:
Code PHP:

 #include "x0_i0_treasure" 
//Delai de respawn des coffres + 60 secondes (par defaut 2d100 secondes) 
int nRespCoffre d100(2); 
 
/* 
Respawn Coffre 
-------------- 
-Type: 
int TREASURE_TYPE_LOW    = 1; 
int TREASURE_TYPE_MED    = 2; 
int TREASURE_TYPE_HIGH = 3; 
int TREASURE_TYPE_UNIQUE = 4; 
int TREASURE_TYPE_MONSTER = 5; 
*/ 
void RespawnCoffre(int nType); 
void RespawnCoffre(int nType

float fDelay nRespCoffre +100.0 10*nType
if(!
GetLocalInt(OBJECT_SELF,"Respawn")) 

CTG_CreateTreasure(nTypeGetLastOpener(), OBJECT_SELF); 
SetLocalInt(OBJECT_SELF,"Respawn",1); 
DelayCommand(fDelayDeleteLocalInt(OBJECT_SELF"Respawn")); 


y a t il quelque chose a y faire ?! Oo

Je met le nom de l include dans un scrpit comme ca:
Code PHP:

 #include "jfv_inc_treasure" 
void main() 

     
CTG_CreateTreasure(TREASURE_TYPE_MEDoPCOBJECT_SELF); 

en vain, pas de respawn.

ensuite, pour info, le systeme pour l'histoire des joueurs, cette forme :...
Code PHP:

 void main() 

object oPC GetLastOpenedBy(); 
string sVar GetName(oPC); 
if(
GetLocalInt(OBJECT_SELFsVar)==0
     
//BlaBlaBlaBla 
SetLocalInt(OBJECT_SELFsVar1); 

ca fonctionne , oui,..mais pas avec un spawn,...je l ai fait marcher deja avant le premier post avec un GiveGoldToCreature....

Donc voila,avant de bidouiller j ai tout de meme testé en vain,..alors s'il faut y modifier quelque chose , dites le moi merci,...parceque la je n comprend plus rien, ( si ca marche avec un GetGold, et que ca ne marche pas avec un CTG_CreateTreasure, c est que ca bloque a l interieur des includes non ?!?Oo j avoue etre perdu la :/ )
__________________
-Forum:http://ambygata.220v.org
-Mod nwn persistant RP (no_HAKs)
--> conection directe: Ambygata.no-ip.org
Le script que j'ai copier/coller ici c'est juste la fonction énoncée avec son contenu, ce n'est pas un script autonome. Tu dois appeler cette fonction dans chaque script.

Voilà pourquoi sur notre forum nous proposons un fichier ERF comprenant tous les scripts de trésor par défaut de Bioware, modifiés afin qu'ils utilisent cette fonction de respawn plutot que la fonction de base Bioware.
Bon je n ai pas trouvé ce fichier erf...mais j ai trouvé la solution a mon probleme en cherchant ( d ailleur je n comprend pas pourquoi je n avais pas trouvé ! )

voici le moyen de faire respawn les coffre avec le systeme par defaut de hotu, c est la ligne 219 de x0_i0_treasure qui fait que ca ne spawn qu une fois, il suffit donc de reinitialiser la variable comme ceci :
Code PHP:

#include "x0_i0_treasure" 
void RespawnCoffre(object oCoffre

    
DeleteLocalInt(oCoffresTreasureGeneratedVarname); 

void main() 

    
float fRespawn=GetLocalFloat(GetModule(),"TREASURE_TYPE_MED"); 
    
CTG_CreateTreasure(TREASURE_TYPE_MEDGetLastOpener(), OBJECT_SELF); 
    
DelayCommand(fRespawnRespawnCoffre(OBJECT_SELF)); 

et donc voici ce que je demandais, c'est le script sur le coffre...et ca marche tres bien sans tout un fouilli ! lol :
Code PHP:

#include "x0_i0_treasure"
void RespawnCoffre(object oCoffre)
{
    
DeleteLocalInt(oCoffresTreasureGeneratedVarname);
}
void main()
{
object oPC GetLastOpenedBy();
string sVar GetName(oPC);
    if(
GetLocalInt(OBJECT_SELFsVar)==0)
    {
    
float fRespawn=GetLocalFloat(GetModule(),"TREASURE_TYPE_MED");
    
CTG_CreateTreasure(TREASURE_TYPE_MEDoPCOBJECT_SELF);
    
DelayCommand(fRespawnRespawnCoffre(OBJECT_SELF));
    
SetLocalInt(OBJECT_SELFsVar1);
    }

sinon merci quand meme ;p
__________________
-Forum:http://ambygata.220v.org
-Mod nwn persistant RP (no_HAKs)
--> conection directe: Ambygata.no-ip.org
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés