PK mes portails marche pas!!!!!!

Répondre
Partager Rechercher
Bonjour
J'ai un problème depuis longtemps avec mes portails certains marchent et d'autres ne marche pas pourtant c la même fonction dessus pour téleporter
voici un de ceux qui ne marche pas
Code PHP:

void main()
{

    
object oPC GetLastUsedBy();
    
object nCibleGetObjectByTag("test");
    
location lCibleGetLocation(nCible);
    
int nOccuper GetLocalInt(OBJECT_SELF,"testoccuper");
    if (
nOccuper != TRUE)
    {
/*c ça qui marche pas le jumplocation*/
   
DelayCommand(1.5,AssignCommand(oPC,JumpToLocation(lCible)));
        if(
GetPCPlayerName(oPC)!="NWNGimly")
        {
            
string nom GetPCPlayerName(oPC);
            
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_DISPEL_DISJUNCTION),oPC);
            
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SCREEN_BUMP),oPC);
            
DelayCommand(3.0,PlaySound("c_elemerth_dead"));
            
DelayCommand(1.0,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_PWKILL),oPC));
        
SetLocalInt(oPC,"testeur",TRUE);
        
SetLocalInt(OBJECT_SELF,"testoccuper",TRUE);
        
SetLocalString(OBJECT_SELF,"pcnom",GetPCPlayerName(oPC));

        }
    }
    else
    {
        
FloatingTextStringOnCreature("Quelqu'un est déjà en test, allez en spectateur !",oPC,FALSE);
    }

même en retirant le delaycommand ça marche pas mais bizarrement c'est déjà arriver au début que il marchais mon portail
AIDEZ moi car la je sèche complètement
NWNGimly
euh pour moi il marche qu'une fois ton portail

La premiere fois que tu l'utilises apres avoir reboote ton serveur. Car ensuite ta variable locale testoccuper est a TRUE et donc il ne peut plus l'utiliser.
Il faut la remettre a FALSE quelquepart.
Genre un :
Code PHP:

DelayCommand(2.0SetLocalInt(OBJECT_SELF,"testoccuper",FALSE); 

Juste apres le jump.
euh non pas tout a fait ca
en fait la variable est mise a zéro quand le gars entre pour faire le test et une fois qu'il a fini le test la variable repasse a un
mais de toute façon le portail marche même pas une fois la je viens de faire ça sur le script je lai mis en double c'est pas joli mais pour l'instant ça marche mais je voudrais quand même résoudre ce problème
Code PHP:

void main()
{
    
object oPC GetLastUsedBy();
    
object nCibleGetObjectByTag("test");
    
location lCibleGetLocation(nCible);
    
int nOccuper GetLocalInt(OBJECT_SELF,"testoccuper");
    if(
GetPCPlayerName(oPC)!="NWNGimly")
        {
        if (
nOccuper != TRUE)
            {

            
object oPC GetLastUsedBy();
            
object nCibleGetObjectByTag("invoc");
            
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_DISPEL_DISJUNCTION),oPC);
            
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SCREEN_BUMP),oPC);
            
PlaySound("c_elemerth_dead");
            
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_PWKILL),oPC);
            
ActionWait(1.0);
            
AssignCommand(oPC,JumpToLocation(lCible));
            
ActionWait(2.0);
            
SetLocalInt(oPC,"testeur",TRUE);
            
string nom GetPCPlayerName(oPC);
            
SetLocalInt(OBJECT_SELF,"testoccuper",TRUE);
            
SetLocalString(OBJECT_SELF,"pcnom",GetPCPlayerName(oPC));
            }
            else
            {
            
FloatingTextStringOnCreature("Quelqu'un est deja en test, allez en spectateur !",oPC,FALSE);
            }
       }
       else
       {
        
object oPC GetLastUsedBy();
        
object nCibleGetObjectByTag("invoc");
        
AssignCommand(oPC,JumpToLocation(lCible));
       }

Ben en fait
je le test en direct cad que quand il y a des joueurs qui rentrent dans mon mod je leurs demande de tester deux trois truc dont le portail
je pensais a un truc c peut être une connerie mais j'ai remarquais que si je fessais un portail avec dedans un script juste pour teleporter ça marchais sans pb mais di que le script s'allonge, devient un peu plus complexe ou plus long la sa marche plus
mais bon c qu'une hypothèse
NWNGimly
Essaie de faire le ménage entre tes variables nCible et lCible, tu n'as pas besoin de lCible entre autres. Au lieu de faire un JumpToLocation, tu peux faire un JumpToObject. Ton script est vraiment bordélique, essaie de l'ordonner un peu et d'y laisser que le nécessaire, nous y verrons un peu plus clair .
hum bon
c le premier script qui faut regarder le deuxième c'est celui que j'ai modifier en mettant en double les variables et c'est le second qui marche mais le premier qui normalement fais la même chose ne marche pas
je ne vois pas ce qui est bordélique dans mon premier script
NWNGimly
Quelques questions :
- Ton portail téléporte-t-il dans tous les cas ?
- Si oui, à quels endroits ?
- Es-tu sur de n'avoir qu'un seul objet de tag "test" dans ton module ?

Pour traquer ce genre de bug, je conseillerais d'afficher le contenu de chaque variable lors de l'utilisation du portail. Tu verras ainsi si l'une d'elles ne prend pas la valeur attendue et donc pourquoi.
ok je detaille
en fait j'ai créer une zone ou l'on peut tester les talents du personnage
donc pour cela j'ai mis sur ce portail un dialogue qui dit voulez tester vos capacité blablabla
oui
non
si il clique sur oui je met une variable sur le portail pour le verrouiller avec une phrase quelqu'un est déjà en test blablabla
ensuite je récupère le nom du joueur en test mais ça c pour autre chose donc pas important pour le pb
puis je le teleporte a la zone créer ou il n'y a qu'un seul tag j'ai bien vérifier cela
et dans le deuxième script mon portail marche a 100% je l'ai tester hier toute la journée
pour ce qui de l'affichage des variables pour trouver le pb je sais pas comment faire
Merci de ton aide
NWNGimly
J'ai commente ton 2nd script car y a des petits trucs pas trop propre (autant en profiter pour apprendre )
Code PHP:

void main() 

    
object oPC GetLastUsedBy(); 
    
    
//Vient du dessous ;)
    
string nom GetPCPlayerName(oPC); 
    
    
//La norme c de prefixer par o un objet, n c pour les entier ;)
    
object oCibleGetObjectByTag("test"); 
    
location lCibleGetLocation(oCible); 
    
int nOccuper GetLocalInt(OBJECT_SELF"testoccuper"); 
    
    
//Modifie pour utiliser la String nom ;)
    
if(nom !="NWNGimly"
    { 
        if (
nOccuper != TRUE
        { 
            
// ne sert a rien deja initialise au dessus!
            //object oPC = GetLastUsedBy(); 
            
            // ne sert a rien jamais utilise!!!
            //object nCible= GetObjectByTag("invoc"); 
            
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_DISPEL_DISJUNCTION),oPC); 
            
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SCREEN_BUMP),oPC); 
            
PlaySound("c_elemerth_dead"); 
            
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_PWKILL),oPC); 
            
ActionWait(1.0); 
            
AssignCommand(oPC,JumpToLocation(lCible)); 
            
ActionWait(2.0); 
            
SetLocalInt(oPC,"testeur",TRUE); 
            
            
//Deplace au dessus pour le test et en plus tu l'utilise pas
            //Chaque appel de la fonction coute ;)
            //string nom = GetPCPlayerName(oPC); 
            
SetLocalInt(OBJECT_SELF,"testoccuper",TRUE);
            
            
// Modifie pour utiliser la String nom
            
SetLocalString(OBJECT_SELF,"pcnom"nom); 
        } 
        else 
        { 
            
FloatingTextStringOnCreature("Quelqu'un est deja en test, allez en spectateur !"oPCFALSE); 
        } 
    } 
    else 
    { 
        
//idem dans le si du dessus!
        //object oPC = GetLastUsedBy(); 
        //object nCible= GetObjectByTag("invoc"); 
        
AssignCommand(oPC,JumpToLocation(lCible)); 
    } 

Bon sinon, t'es en quel version de NWN? Car y avait un bug sur le DelayCommand avant la 1.61...
merci
bon je suis en 1.62.......
en ce qui concerne le second script avec dedans des truc en double c normal car si je les retire cela ne marche plus regarder la différence entre le premier script qui fait la même chose mais ne marche pas et le second qui jusque la na pas failli
Regarde le code dans les commentaire j'ai marquer un truc
Code PHP:

 void main()
{
    
object oPC GetLastUsedBy();
    
    
//Vient du dessous ;)
    
string nom GetPCPlayerName(oPC);
    
    
//La norme c de prefixer par o un objet, n c pour les entier ;)
    
object oCibleGetObjectByTag("test");
    
location lCibleGetLocation(oCible);
    
int nOccuper GetLocalInt(OBJECT_SELF"testoccuper");
    
    
//Modifie pour utiliser la String nom ;)
    
if(nom !="NWNGimly")
    {
        if (
nOccuper != TRUE)
        {
            
// ne sert a rien deja initialise au dessus!
            //object oPC = GetLastUsedBy();
            
            // ne sert a rien jamais utilise!!!
            //object nCible= GetObjectByTag("invoc");
            
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_DISPEL_DISJUNCTION),oPC);
            
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SCREEN_BUMP),oPC);
            
PlaySound("c_elemerth_dead");
            
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_PWKILL),oPC);
            
ActionWait(1.0);
            
AssignCommand(oPC,JumpToLocation(lCible));
            
ActionWait(2.0);
            
SetLocalInt(oPC,"testeur",TRUE);
            
            
//Deplace au dessus pour le test et en plus tu l'utilise pas
            //Chaque appel de la fonction coute ;)
            //string nom = GetPCPlayerName(oPC);
            
SetLocalInt(OBJECT_SELF,"testoccuper",TRUE);
            
            
// Modifie pour utiliser la String nom
            
SetLocalString(OBJECT_SELF,"pcnom"nom);
        }
        else
        {
            
FloatingTextStringOnCreature("Quelqu'un est deja en test, allez en spectateur !"oPCFALSE);
        }
    }
    else
    {
        
//idem dans le si du dessus! ------>oui mais si je retire ca ca ne marche plus-------<
        //object oPC = GetLastUsedBy();
        //object nCible= GetObjectByTag("invoc");
        
AssignCommand(oPC,JumpToLocation(lCible));
    }

???
C bizarrre ton truc!
Si tu retires les 2 lignes que je t'ai mis en commentaire ca marche plus?

Alors si c ca c qu'il y a un pb!
D'abord c'est que a priori le PJ qui est utilise l'est avec comme nom de joueur NWNGimly.
Deja... ensuite y un quand meme un truc qui m'etonne...
En relisant le thread je m'aperçois que en fait le code ici est envoye sur un dialogue avec un objet. Si c'est bien cela a la place de
Code PHP:

object oPC GetLastUsedBy(); 

Essayes plutot
Code PHP:

object oPC GetPCSpeaker(); 

ouais
c clair que c bizarre voila c pk ce post est la
en ce qui concerne le getpcspeaker j'y avais déjà pensé mais la ca marche plus du tout mais a mon avis c normal car c celui qui active le portail donc c pas getpcspeaker car le script est sur le onused getpcspeaker je pense que c pour uniquement quand il y a un dial sur un pnj
pour info hier mon portail a foirer une fois on dirais que la première utilisation foire
et pour le non nwngimly c mon nom a moi et je le modifie en nwngimly2 pour faire les test en solo pour tester le portail
je pense que c le getlastusedby qui foire car quand il teleporte pas il n'y a pas non plus les effet visuelle donc c qu'il na pas reconnu le opc y aurais pas un autre truc que cela pour le faire a part le getnearestobject qui est pas super non plus
NWNGimly
Lorsque le portail est activé, affiche le nom du oPC soit en shout, soit dans les logs. Comme ça, tu verras à chaque fois qui déclenche le script et tu devrais voir d'où vient l'erreur si le oPC ne prend pas une bonne valeur.

D'une manière générale, c'est de cette manière que se traquent les bugs, en affichant la valeur de chacune des variables et en repérant celles qui ne sont pas correctes.
Répondre

Connectés sur ce fil

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