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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

fonction dans 1 dialogue

Par daemogorgon le 12/1/2003 à 23:17:39 (#3006658)

J'ai dans 1 dialogue 5 possibilités de réponse :
20 po
50 po
100 po
200 po
250 po
c'est un choix a faire par le joueur pour le paiement de qqchose.

Y'a moyen de faire une unique fonction (sur chaque noeud dans le action conséquente) qui reçoit la quantité de po (là, je bloque) et test si le PC a les moyens ?
Ca permettrait de faire aussi des tests en série avec 1 seule fonction.

Re: fonction dans 1 dialogue

Par Darkmore le 12/1/2003 à 23:48:14 (#3006900)

ça me parait difficile.
Si la somme "prise" dépend de la réponse choisi il faudrait que le numéro de la réponse (ou le numéro du noeud choisi si tu veux) soit une variable récupérable ... et ce n'est pas le cas.

La seule solution pour moi c'est une fonction/action pour chaque réponse ...
:merci:

Par Twist le 13/1/2003 à 0:44:04 (#3007197)

Tiens, c'est fête ce soir, je poste un peu.

Ce doit être possible. Tu peux faire une boucle dans ton dialogue avec une incrémentation d'une variable locale.

Tu pars avec l'enregistrement d'une variable int qui est de 50 (PO) au départ, sur le lancement du dialogue. Une première phrase du PNJ pour filtrer les possessions du joueur, et une deuxième pour poser la question et incrémenter. Deux réponses possibles pour le joueur : oui, tu fais payer, non, tu incrémentes la variable de +50, et tu reprends à la première ligne de ton PNJ.

Je n'ai pas vraiment compris à quoi sert ton dialogue, mais dans le principe, ça donne :

Sur l'ouverture de la conversation : déclaration variable locale nPo=50

- PNJ (Condition : si le PJ n'a pas nPo)
Vous n'avez pas assez d'argent.-->Fin dialogue
- PNJ (Condition : aucune)
Voulez-vous payer nPo ? (utiliser un TOKEN pour afficher nPo)
- PJ Oui (conséquence)--->récupère la variable locale nPo--->paye nPo--->Fin dialogue
- PJ Non(conséquence)--->récupère la variable locale et augmente par un quelque chose dans ce genre :nPo+=50;
Tu colles ici en lien la première phrase du PNJ (vous n'avez pas assez d'argent...)

C'est sommaire, mais ça doit fonctionner. Dans cet exemple, tu incrémentes la valeur de +50 à chaque fois. Tu peux réaliser une petite fonction qui augmente la valeur nPo de façon moins linéaire.

Par Darkmore le 13/1/2003 à 11:51:23 (#3008944)

Provient du message de Twist
Je n'ai pas vraiment compris à quoi sert ton dialogue
L'idée d'avoir plusieurs réponse possible semble plus logique mais ça dépend surtout du contexte ...
S'il s'agit de miser sur une course ou un combat c'est peu probable que le bookmaker te disent combien tu peux misernon ? (ou à la limite en décrémentant)

En tout cas le problème dans ton idée c'est que le dialogue utilise une variable "dans" le dialogue .. et ça c'est pas possible.
Ou alors il faut faire un dialogue à base de SpeakString.

Mais demogorgon aura peut être plus de précisions ... :merci:

Par Cassin le 13/1/2003 à 12:08:07 (#3009067)

Pourquoi ne pas faire s'afficher les phrases en fonction de l'or que possède le PJ ?

Genre si le PJ a 100 PO tu n'affiches que 20, 50 et 100. Après tu n'as plus qu'à faire un script tout bête pour enlever la somme en question (TakeGold), ça se fait avec le Wizard en plus.

Par Twist le 13/1/2003 à 14:51:47 (#3010279)

En tout cas le problème dans ton idée c'est que le dialogue utilise une variable "dans" le dialogue .. et ça c'est pas possible.


Ben, je ne vois pas trop pourquoi ce n'est pas possible. Les scripts de condition et de conséquence peuvent très bien gérer une boucle locale dans un dialogue. J'ai du me faire mal comprendre.

Je détaille un peu si vous voulez (je n'ai pas vraiment le temps de tester, c'est un peu brut de décoffrage).


Conversation

PNJ Souhaitez-vous miser PO ?
PJ Oui (fin dialogue)
PJ Non, je souhaite miser plus.
PNJ Souhaitez-vous miser PO ?(collé en lien)
PJ Je ne souhaite pas miser finalement



Sur le script de condition de la phrase du PNJ
int StartingConditional()
{
int nPo=GetLocalInt(GetPCSpeaker(),"nPo");
SetCustomToken(100, IntToString(nPo));
return TRUE;

}


Sur le script de conséquence du "Oui" du PJ
void main()
{
object oPc=GetPCSpeaker();
int nPo=GetLocalInt(oPc,"nPo");
TakeGoldFromCreature(nPo, oPc,TRUE);
}


Sur le script de condition du de la phrase du PJ "miser plus"
int StartingConditional()
{
object oPc=GetPCSpeaker();
int nPo=GetLocalInt(oPc,"nPo");
int nGold=GetGold(oPc);

if (nGold<nPo+50)
return FALSE;

return TRUE;
}


Sur le script de conséquence de la phrase du PJ "miser plus"
void main()
{
object oPc=GetPCSpeaker();
int nPo=GetLocalInt(oPc,"nPo");
nPo+=50;//a affiner
SetLocalInt(oPc,"nPo",nPo);
}


Il ne reste plus qu'à déclarer la variable locale "nPo" à 50 sur le OnConversation du PNJ ou mieux sur le 1004 dans le UDE, sinon elle va commencer à 0 lors du premier dialogue et ne va pas se réinitialiser lors des suivants, proposant la dernière valeur.

C'est pas l'idéal, mais une imbrication de scripts dans un dialogue permet d'économiser des lignes. Et on doit pouvoir faire plus simple. L'avantage, c'est que la mise est stockée, et qu'elle peut servir dans un autre script, après une course par exemple.

Le mieux serait cependant d'utiliser les patterns afin que le joueur puisse miser ce qu'il veut.

Par Jedaï le 13/1/2003 à 19:30:52 (#3012387)

Une très bonne application des scripts (j'ai pas vérifié tout mais le principe est bon) et des liens dans les dialogues !:)


Le mieux serait cependant d'utiliser les patterns afin que le joueur puisse miser ce qu'il veut.


Mais je pense qu'effectivement c'est la chose à faire, la meilleure solution. :D

Par coolstar le 14/1/2003 à 5:13:12 (#3015988)

:merci:

JOL Archives 1.0.1
@ JOL / JeuxOnLine