Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Comment creer une liste de noms par un moyen détourné ?
Comment creer une liste de noms par un moyen détourné ?
Par Lumina le 2/7/2002 Ã 15:58:38 (#1745192)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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