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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Comment creer une liste de noms par un moyen détourné ?

Par Lumina le 2/7/2002 à 15:58:38 (#1745192)

J'ai absolument besoin de creer une liste de noms, mais l'éditeur ne permet pas de faire des listes.
J'ai donc l'idée de creer une string sList à laquelle je concatene chaque nom de ma liste séparé par un caractere de séparation de mon choix, par exemple #.
Ceci donne a peu pres :

string sList = ";
while (cest_pas_fini())
{
sList = sList + "#" + le_nom_suivant();
}

Simplement, j'aimerais désormais creer une boucle pour récuperer chaque nom de cette liste improvisée et les utiliser dans une fonction, par exemple SpeakString().

Comment faire avec nwscript ?
Merci mille fois !

Par Xune Vrinn le 2/7/2002 à 16:33:58 (#1745330)

Tu ne peux pas utiliser un tableau pour stocker tes noms?


Va regarder ici : http://nx.squid.org/script.html?id=30

Ca peut peut-être te donner des idées. ;)

Par Lumina le 2/7/2002 à 16:49:41 (#1745411)

Les tableaux n'existent pas dans nwscript Xune.

Ici il crée un faux vecteur d'entiers : c'est en fait autant de chaines de caracteres differentes qu'il y a d'entiers à sauver, toutes avec un nom different, bonjour le nombre de variables locales.

Bon, je vais essayer de faire pareil : creer autant de variables locales qu'il y a de noms à ma liste. Mais je trouve ça malaisé quand même.

Par tonton le grognon le 2/7/2002 à 17:29:58 (#1745621)

hum... moi j'essayerais avec des custom token...

tu fais une boucle qui incremente une variable numerique

et tu affectes un nom à chaque nouveau token
(j'ai pas les fonction sous la main mais tu vas trouver ;) )

exemple : le token 1001 sera egale à BOB
1002 = jean
1003 = .....

apres, tu peux gere tes tokens simplement....

Par Lumina le 2/7/2002 à 17:47:52 (#1745705)

En tout cas, ça marche avec la création d'une variable par nom, je viens d'essayer !
Je vais de suite poster ma nouvelle version du script de sécurité dans l'autre sujet :
http://forums.jeuxonline.info/showthread.php?s=&threadid=100383

J'essayerai les token plus tard, quand je saurai ce que c'est si on me donne des explications. :)

Par ZeDuckMaster le 2/7/2002 à 22:12:39 (#1747208)

lumina> les fonctions que je t'ai donné ne marchent pas. Pour la simple raison que la seule variable modifiée est celle qui est renvoyée (ils font des copies des variables d'entrée donc pas de modification visibles en dehors de la fonction possibles)

alors apres j'avais pensé passer par une structure qui contiendrait les données de la liste, a savoir la chaine de caracteres qui contient toutes les donnees et une autre chaine de caracteres qui contient le dernier element de la liste enlevé.
apres il aurait suffit de renvoyer la structure afin de la voir modifiée (son contenu et le dernier element enlevé)

MAIS le probleme c'est que le scripting de nwn gere hyper mal les structure avec des string dedans !

bref quand on depasse 2 string dans une structure, comme ca :

struct MaStructure
{
string s1;
string s2;
};

et bien la 1ere string est écrasée ...... pourquoi ? aucune idée :( (ca doit venir de la façon dont ils gerent la memoire derriere ...)

donc si quelqu'un pouvait me confirmer que ca vient pas de moi, mais que c'est bien generalisé ca serait bien, merci d'avance ;)

donc pour l'instant, la seul façon de gerer un tableau de string ou un ensemble de string c'est la methode Xune (qui est apparemment la seule donnée par bioware pour simuler les tableaux ....)

en esperant qu'ils fassent evoluer leur langage de script .....

Par Lumina le 2/7/2002 à 23:21:24 (#1747573)

ZeDuckMaster, pour que l'utilisation de variables fonctionne en dehors de la fonction il faut le faire avec des variables crees avec la fonction SetLocalString(oPC, "nom_de_variable", "valeur_initiale") et utilisées avec GetLocalString(oPC, "nom_de_variable"). Ensuite, il faudra penser à faire DeleteLocalString(oPC, "nom_de_variable"). :)

Mais bon, ton idée de structure, comment veux-tu faire ? Il n'y a pas de structures, ni de listes, ni de tableaux dans nwscript ! Les seuls types existants sont : int, float, string, location et object (c'est un item ou une creature).

Par tonton le grognon le 3/7/2002 à 7:20:53 (#1748844)

pour les tokens voir la : http://nwn.bioware.com/forums/viewtopic.html?topic=76571&forum=47&highlight=

You want to use SetCustomToken. For instance, if I use the command in script:

SetCustomToken(100, GetName(oPC));

In actual dialogue I could write

"Let's talk about , shall we?"

As for integers and other data, you just need to convert it into a string, first, for use in the SetCustomToken command. Try IntToString.

Par ZeDuckMaster le 3/7/2002 à 9:14:10 (#1749058)

lumina> voui mais utiliser les SetLocal et les GetLocal ca fait pas tres propre d'un point de vue prog.
pour les structures si ca existe ya qu'à ouvrir le nw_i0_generic pour s'en convaincre ;)
le probleme c'est que les structures de plusieurs string, ca passe pas a l'execution .....
et personnellement je comptais faire comme ca :

string LIST_SEPARATOR = "#"

struct sPile
{
string sData;
string sDernierEnleve;
};

void AjouteElement(struct sPile P,string Element)
{
P.sData = P.sData + LIST_SEPARATOR + Element;
}

struct sPile RetireElement(struct sPile P)
{
string temp = ";
int nb = GetStringLength(P.sData);
P.sDernierEnleve = ";

while(temp!=LIST_SEPARATOR)
{
P.sDernierEnleve = temp + P.sDernierEnleve;
temp = GetSubString(P.sData,nb,1);
if(temp == ")
return P;
nb--;
}
P.sData = GetStringLeft(P.sData,nb);
return P;
}

void main()
{
struct sPile MyPile;

AjouteElement(MyPile,"1");
AjouteElement(MyPile,"22");
AjouteElement(MyPile,"333");
AjouteElement(MyPile,"4444");
//-> affichage eventuel pour controler
do
{
MyPile = RetireElement(MyPile);
//-> traitement, affichage pour controler ....
}while(MyPile.sDernierEnleve!=");
}


voila, sachant que l'element retiré se trouve dans sDernierEnleve ....
d'un point de vue prog c'etait un peu plus propre, et ca evitait la construction intanpestive de variables, et d'appel de fonctions ....au niveau traitement je sais pas, vu qu'on ne sait pas comment ils gerent ca derriere :( ... mais ca a des chances d'etre plus rapide car l'appel de variable (getlocal) se fait par chaine de caracteres ....

MAIS voila ca ne marche pas, a cause de ce %*!?"# de structure qui marche pas comme il faut et qui me crache la 1ere chaine de caractere definie !

ps : j'ai ecrit le code de memoire (chuis au boulot ;) ) alors ya ptete des fôtes ;)

Par Gargantuel le 3/7/2002 à 17:18:03 (#1751705)

http://nwvault.ign.com/Files/scripts/data/Riverdark%20String%20LibraryRachel%20BlackmanScripting%20routines.shtml

Voici une string library qui contient notament une gestion de string tokenizer.
J'ai trouvé l'idée interressante et le package sympa mais faudrait faire évoluer les fonctions disponibles (dépiler uniquement c'est pas super)
De ce que je vois ca pourrait répondre aux besoins de Lumina et ca ne crée que 2 variables locales par string list)
Qu'en pensez vous ?

Par Lumina le 3/7/2002 à 18:26:30 (#1752045)

Oh !
merci à tous, je crois que désormais plusieurs méthodes sont possibles !
Maintenant, évaluer laquelle sera la meilleure sera par contre un peu moins facile.
Je vais modifier mon script tout-de-suite .. when it's done ! ;)

JOL Archives 1.0.1
@ JOL / JeuxOnLine