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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Script "PJ stopper pour dialogue Trigger" Gros Bug

Par Zariel le 27/11/2002 à 18:05:34 (#2658053)

Je veux faire arreter mon PNJ pour dialoguer et ne faire qu'une phrase pour déclencher l'attaque par l'intermédiaire du fichier Convers dans "Executer une action". Cette action est l'attaque du PNJ a la réponse du PJ.


Voilà, je met dans le OnEnter de mon trigger ce script:


//::///////////////////////////////////////////////
//:: Start a conversation by trigger
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: William Weideman wylll@msn.com
//:: Created On: Aug. 1, 2002
//:://////////////////////////////////////////////
// This script will start a one time conversation by a trigger.
// Place the script on the OnEntered spot of the trigger
// It is important that when you save this script that you save it
// useing a simular name as the one I have used.
// ww_trigtalk_000 is broken down as follows: ww = my initials
// _trigtalk_ tells what the function of the script is (trigger talks)
// 000 is the master script and each time the script is used in a moduel
// the number goes up by one (000 = master, 001 = first use in mod, 002 = second use in mod)
// this will make useing the in-script instructions easy to follow.
//:://////////////////////////////////////////////

void main()

{
//Section 1: checks PC to see if they have triggered this trigger already.
//Change O_000 to the whatever the last 3 numbers of your script are.
//For example: O_000 becomes O_001 or even O_002 based on what you save the script as
object oPC = GetEnteringObject();
if(GetIsPC(oPC) && GetLocalInt(oPC, "bandit_001") == 0)

{
//Section 2: starts conversation file
//Change 000 to whatever name you gave to the conversation you wish to open
//I would name the conversation file the three last numbers of this script
object oPC = GetEnteringObject();
ActionStartConversation(oPC, "ct_bandit_001", FALSE);

{
//Section 3: sets a local int on PC so that the conversation fires only once per PC in party
//Change O_000 to the whatever the last 3 numbers of your script are.
//For example: O_000 becomes O_001 or even O_002 based on what you save the script
object oPC = GetEnteringObject();
SetLocalInt(oPC, "bandit002", 1);

}
}
}


Donc, tout est bien renseigné, le tag de mon PNJ, le nom du fichier Conversation et le Blueprint.

Quand je test in game le script, le trigger me stoppe bien et engage la convers, mais quand je selectionne la phrase pour faire attaquer mon PNJ, un message s'inscrit dans la barre de dialoque et m'indique que 'il y a une erreur DIVIDE BY ZERO avec le tag de mon trigger et de mon script "action conséquentes".

Et le PNJ reste inactif.

Quelqu'un pourrait-il m'aider dans cette démarche ?

Par Jedaï le 27/11/2002 à 21:26:18 (#2659788)

C'est bien de nous donner ton script, mais tant que tu y est, tu pourrais nous donner celui qui plante, mmmm..:rolleyes:

Sinon un Divide by zero, c'est que visiblement tu as fais une division qui passe pas, peut-être avec tes variables locales ?:doute: Vérifie les opérations dans ton script d'action conséquentes (et donne le nous ! :mdr: ).

Par eMRaistlin le 27/11/2002 à 21:43:03 (#2659911)

Faut que tu evite de reinitialiser la variable :


void main()
{
object oPC = GetEnteringObject();
if(GetIsPC(oPC) && GetLocalInt(oPC, "bandit_001") == 0)

{
oPC = GetEnteringObject();
ActionStartConversation(oPC, "ct_bandit_001", FALSE);
}
else
{
oPC = GetEnteringObject();
SetLocalInt(oPC, "bandit002", 1);
}
}


Et pis, ca fait mieux avec le else ^^

Par Jedaï le 27/11/2002 à 21:48:18 (#2659955)

Je rajouterais qu'il est fort étrange que la variable oPC soit réaffecté trois fois au même objet:confus:
Il est vraiment bizarre ce script, qu'est-il censé faire ?

Par Zariel le 27/11/2002 à 21:51:24 (#2659983)

Il est censé arreter le PJ pour engager une conversation par Trigger.

Merci infiniment pour votre aide.

Par Zariel le 27/11/2002 à 22:00:03 (#2660046)

Ca ne marche pas avec le script de Emraistlin.

Voilà le script dans l'action conséquentes:


//::///////////////////////////////////////////////
//:: FileName at_033
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: Script Wizard
//:: Created On: 27/11/2002 17:43:41
//:://////////////////////////////////////////////
#include "nw_i0_generic"

void main()
{

// Paramétrer la faction de manière à ce qu'elle déteste le joueur et l'attaque
AdjustReputation(GetPCSpeaker(), OBJECT_SELF, -100);
DetermineCombatRound(GetPCSpeaker());
}


Et le script d'origine dans le OnEnter du Trigger:

//::///////////////////////////////////////////////
//:: Start a conversation by trigger
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: William Weideman wylll@msn.com
//:: Created On: Aug. 1, 2002
//:://////////////////////////////////////////////
// This script will start a one time conversation by a trigger.
// Place the script on the OnEntered spot of the trigger
// It is important that when you save this script that you save it
// useing a simular name as the one I have used.
// ww_trigtalk_000 is broken down as follows: ww = my initials
// _trigtalk_ tells what the function of the script is (trigger talks)
// 000 is the master script and each time the script is used in a moduel
// the number goes up by one (000 = master, 001 = first use in mod, 002 = second use in mod)
// this will make useing the in-script instructions easy to follow.
//:://////////////////////////////////////////////

void main()

{
//Section 1: checks PC to see if they have triggered this trigger already.
//Change O_000 to the whatever the last 3 numbers of your script are.
//For example: O_000 becomes O_001 or even O_002 based on what you save the script as
object oPC = GetEnteringObject();
if(GetIsPC(oPC) && GetLocalInt(oPC, "O_000") == 0)

{
//Section 2: starts conversation file
//Change 000 to whatever name you gave to the conversation you wish to open
//I would name the conversation file the three last numbers of this script
object oPC = GetEnteringObject();
ActionStartConversation(oPC, "000", FALSE);

{
//Section 3: sets a local int on PC so that the conversation fires only once per PC in party
//Change O_000 to the whatever the last 3 numbers of your script are.
//For example: O_000 becomes O_001 or even O_002 based on what you save the script
object oPC = GetEnteringObject();
SetLocalInt(oPC, "O_000", 1);

}
}
}


Merci.

Par coolstar le 27/11/2002 à 23:23:13 (#2660689)

Savoir écouter son prochain... surtout quand il ne semble pas dire de connerie...

Remarque judicieuse de Jedaï... une fois que la Variable temporaire est identifiée il apparaît inutile de la répéter... je ne pense pas que cette redondance gène vraiment le Script, mais c'est lourd à rédiger et à lire... pas propre ça, non ?? :D

;)

Par Kemay le 29/11/2002 à 1:25:03 (#2669065)

Essaie de remplacer le script dans le onEnter du trigger par celui-ci:

void main()
{
object oPC = GetEnteringObject();
if( GetIsPC(oPC) && GetLocalInt(oPC,"O_000") == 0 )
{
ActionStartConversation(oPC, "000", FALSE);
SetLocalInt(oPC, "O_000", 1);
}
}
Cela dit c'est étonnant que ton ancien script ait compilé sans erreurs, normalement tu ne peux pas déclarer plusieurs variables avec le même nom.

JOL Archives 1.0.1
@ JOL / JeuxOnLine