BIND, le PJ réapparaît près du relais qu'il a choisis.

Répondre
Partager Rechercher
Désolé... :bouffon:
Le_Proctophantasmiste@noos.fr
Je vais manger un morceau et je regarde ça...


Si quelqu'un jette un oeuil à tout ça j'explique:

Dans le script de respawn j'avais mis "Respawn_Loc" au lieu de "RESP_LOC", il ne trouvait donc pas la variable locale, mais comme je l'avais mis en commentaire, GetLocalLocation n'a pas de valeur de retour par défaut... Il fallait comprendre par là que dans ce cas, le script plante, tout simplement. Ca tombe bien justement je me posais la question ^^. Du coup le "else" non plus n'était pas exécuté et le PJ n'allait
pas au waypoint, par contre il était quand même ressuscité puisque l'effet est appliqué avant dans le script... Voilà comment on se retrouve avec un comportement incompréhensible.
Citation :
Quand je ferai une autre pierre dans un autre lieu ? je dois mettre quoi d'autre dans le script pour que le PJ soit dirigé là ??
Rien du tout , on est bien d'accord?

Citation :
Comment faire pour que s'affiche un message (en blanc, au dessus du PJ) qui dit : Vous êtes liés à cette Pierre.
la commande est:
Code PHP:

   FloatingTextStringOnCreature("Vous êtes lié(e) à cette Pierre"oPCFALSE); 

Donc tu rajoute ça dans link.
Le False est là pour que seul le PJ concerné voit cette phrase, si tu veux que toute sa faction la voit tu l'enlèves ou tu mets TRUE (valeur par défaut).
Cela me fait penser que si tu veux que personne ne puisse entendre la "conversation" du PJ avec la pierre, il faut que tu remplaces la ligne de l'OnUsed par:
Code PHP:

ActionStartConversation(GetLastUsedBy(),""TRUE); 

Pardon effectivement...
Le sujet est assez compliqué contrairement à ce qu'il pourrait sembler car cela nous amènes sur le terrain de la gestion de la grammaire française aussi.
Chacun a sa solution. Une possibilité est d'utiliser SpeakOneLinerConversation, tu fais un fichier avec tous tes petites phrases et tu utilise des/un LocalInt pour spécifier quelle réplique doit être dite dans le TextAppear When (cela peut même être automatisé via un conteur, i.e. les scripts de tous tes text appear when peuvent être identique, je t'en dirais plus si ça t'intéresse).
Mon conseil? Fait un nouveau sujet spécifique et demande son avis à tout le monde, Jedaï a écris une bibliothèque gérant des tokens avancés il pourra t'en dire plus.
Citation :
Provient du message de The Grouch
Juste une question en plus, si l'on doit faire perdre 25% d'xp au joueur à chaque respawn, qu'est qu'on met en plus ?
Ben une boite de kleenex car il va pleurer le mec

Jaha Effect
Citation :
Provient du message de Sire Pom-pom
Pardon effectivement...
Le sujet est assez compliqué contrairement à ce qu'il pourrait sembler car cela nous amènes sur le terrain de la gestion de la grammaire française aussi.
Chacun a sa solution. Une possibilité est d'utiliser SpeakOneLinerConversation, tu fais un fichier avec tous tes petites phrases et tu utilise des/un LocalInt pour spécifier quelle réplique doit être dite dans le TextAppear When (cela peut même être automatisé via un conteur, i.e. les scripts de tous tes text appear when peuvent être identique, je t'en dirais plus si ça t'intéresse).
Mon conseil? Fait un nouveau sujet spécifique et demande son avis à tout le monde, Jedaï a écris une bibliothèque gérant des tokens avancés il pourra t'en dire plus.
hum, en tapant les accent dans l'espace de la zone filtre des fonctions, ils passent, si on les copie colle dans le script, ils passent aussi ... ils passent plus qd on est ds le jeu ?
en tt cas dans les dialogue ca passe qd même (dialogues construits à coup de LocalString et des <CUSTOMXXX> )
donc pourquoi ca marcherais pas dans les Floatblablabla

g pas encore testé, mais me semble que ca marche (oui j'ai fais tt mes dialogue comme ca, et ca m'ennuirai gravement de tt avoir à refaire :-/ )
Oui Reyan j'avais pas très bien lu la question je pense, un peu parti en vrille la dessus... Ceci dit on y a déjà répondu à cette question non je crois? On va pas repartir pour un tour quand même?
Pour les 25% des xps, hum... 25% du total de ses d'xps? Je crois que la suggestion de Jaha Effect n'est pas mauvaise...

SetXP(oRespawner, GetXP(oRespawner) * 3 / 4); Ouch!
En fait, il y a un problème encore avec ce script, les pénalités ne fonctionnent plus si l'on intégre la pierre de rappel et vu les règles que j'appliquent (les fameux 25%) vous comprendrez aisément que je ne puis m'en passé

Je met le script entier du nwn_respawn ici :

Code PHP:

//::///////////////////////////////////////////////
//:: Generic On Pressed Respawn Button
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
// * June 1: moved RestoreEffects into plot include
*/
//:://////////////////////////////////////////////
//:: Created By:   Brent
//:: Created On:   November
//:://////////////////////////////////////////////
#include "nw_i0_plot"

// * Applies an XP and GP penalty
// * to the player respawning
void ApplyPenalty(object oDead)
{
    
int nXP GetXP(oDead);
    
int nPenalty 50 GetHitDice(oDead);
    
int nHD GetHitDice(oDead);
    
// * You can not lose a level with this respawning
    
int nMin = ((nHD * (nHD 1)) / 2) * 1000;

    
int nNewXP nXP nPenalty;
    if (
nNewXP nMin)
       
nNewXP nMin;
    
SetXP(oDeadnNewXP);
    
int nGoldToTake =    FloatToInt(0.10 GetGold(oDead));
    
// * a cap of 10 000gp taken from you
    
if (nGoldToTake 10000)
    {
        
nGoldToTake 10000;
    }
    
AssignCommand(oDeadTakeGoldFromCreature(nGoldToTakeoDeadTRUE));
    
DelayCommand(4.0FloatingTextStrRefOnCreature(58299oDeadFALSE));
    
DelayCommand(4.8FloatingTextStrRefOnCreature(58300oDeadFALSE));

}

///////////////////////////////////////////////////////////////////////
// this function resets variabls and clears the arenas in the fighter
// 'gauntlet' subplot in chapter one
///////////////////////////////////////////////////////////////////////

void ClearArena(object oPC,string sArena)
{
    if(
sArena == "Map_M1S4C")
    {
        
DestroyObject(GetObjectByTag("M1S04CHRUSK02"));
        
DestroyObject(GetObjectByTag("M1S4CBeast"));
        
SetLocalInt(GetObjectByTag(sArena),"NW_A_M1S4HruskDef",0);
    }
    else if(
sArena == "Map_M1S4D")
    {
        
DestroyObject(GetObjectByTag("M1S04CFASHI02"));
        
DestroyObject(GetObjectByTag("M1S4DBeast"));
        
SetLocalInt(GetObjectByTag(sArena),"NW_A_M1S4FashiDef",0);
        
CreateItemOnObject("M1S04IBADGELVL01",oPC);
    }
    else if(
sArena == "Map_M1S4E")
    {
        
DestroyObject(GetObjectByTag("M1S04CAGAR02"));
        
DestroyObject(GetObjectByTag("M1S4EBeast"));
        
SetLocalInt(GetObjectByTag(sArena),"NW_A_M1S4AgarDef",0);
        
CreateItemOnObject("M1S04IBADGELVL02",oPC);
    }
    else if(
sArena == "Map_M1S4F")
    {
        
DestroyObject(GetObjectByTag("M1S04CCLAUDUS02"));
        
DestroyObject(GetObjectByTag("M1S4FBeast",0));
        
DestroyObject(GetObjectByTag("M1S4FBeast",1));
        
SetLocalInt(GetObjectByTag(sArena),"NW_A_M1S4ClaudusDef",0);
        
CreateItemOnObject("M1S04IBADGELVL03",oPC);
    }
    
SetLocalInt(oPC,"NW_L_M1S4Won",FALSE);
    
SetLocalInt(GetModule(),"NW_G_" sArena "_Occupied",FALSE);
}

//////////////////////////////////////////////////////////////////////////////


void main()
{
    
object oRespawner GetLastRespawnButtonPresser();
    
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oRespawner);
    
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oRespawner)), oRespawner);
    
RemoveEffects(oRespawner);
    
// GetLocalLocation "n'a pas de valeur de retour par defaut" (lexicon)
    // (je me demande ce que cela veut dire), donc on utilise une autre variable si le PJ
    // est lie a une pierre.
    
if(GetLocalInt(oRespawner"LINKED"))
        
AssignCommand(oRespawnerJumpToLocation(GetLocalLocation(OBJECT_SELF"RESP_LOC")));
    else
        
AssignCommand(oRespawnerJumpToObject(GetWaypointByTag("WP_neant")));

C'est normal tu ne fait plus ApplyPenality() sur le PC, remets cette fonction avant :
Code PHP:

    // GetLocalLocation "n'a pas de valeur de retour par defaut" (lexicon)
    // (je me demande ce que cela veut dire), donc on utilise une autre variable si le PJ
    // est lie a une pierre.
    
if(GetLocalInt(oRespawner"LINKED"))
        
AssignCommand(oRespawnerJumpToLocation(GetLocalLocation(OBJECT_SELF"RESP_LOC")));
    else
        
AssignCommand(oRespawnerJumpToObject(GetWaypointByTag("WP_neant")));

Tu rajoute juste cette fonction juste avant :
Code PHP:

ApplyPenalty(oRespawner); 

Par ailleurs je pense que tu devrais faire quelques tuts de façon à pouvoir corriger toi même les tout petits truc comme ça.
Bonjour,

J'ai mis les 2 scripts, lors de la mort sans avoir cliqué sur une pierre, je me retrouve au waypoint par defaut par contre aprés avoir cliqué sur l'une des pierres je respawn sur place ... qq1 saurait il pourquoi please ?

Je ne vois pas du tout où j'ai fais une erreur ... il faut placer des waypoint partout ou pas ?
Répondre

Connectés sur ce fil

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