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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Tableau ?

Par Frolo Xeres le 5/11/2002 à 13:49:02 (#2485682)

Bon d'après ce que j'ai vu sur un ancien post, y a pas de tableau (Ben là chui vraiment déçu).
Si un bon programmeur peut me dire s'il a trouvé quelque chose pour remplacer à part les variables de variables (voir PHP) m'enfin s'ils ont pas mis de tableau, les variables de variables faut pas chercher !

Bon faut-il que j'implémente moi même mes tableaux de chaines ou quoi !

En fait j'aimerais pouvoir faire un truc du genre :

//Tps d'attente
float fAttend;

// Numero du discours
int iNumParole = 0;

while( GetIsDay() ) {
fAttend = IntToFloat( Random( 4 ) + 1 );
iNumParole = Random( iMaxParole );
DelayCommand( fAttend, FloatingTextOnObject( sPAROLE[iNumParole], OBJECT_SELF, FALSE ) );
}

Ce qui signifie de faire dire une phrase aléatoire à mon PNJ à des intervalles de temps aléatoires...
Bon si vous voyez un autre moyen de stocker les phrases que dans un tableaux ?
J'ai essayer de creer autant de variables déclarées dans un fichier d'inclusion mais je vois pas comment les récupérer avec mon chiffre aléatoire !

... A réserver pour les moins quiches d'entre vous ! ...
Je sens que je vais me faire des copains là !

Par eMRaistlin le 5/11/2002 à 14:28:19 (#2486009)

euh... je suis une demi-quiche, donc je suis pas sur... masi ca :


GetLocalArrayInt(object, string, int)
Simulates retrieving an Integer from an array on an object.

int GetLocalArrayInt(
object oidObject,
string sVarName,
int nVarNum
);


Ca peut te servir ?

Par Tynril le 5/11/2002 à 16:52:19 (#2487201)

:doute:

Mais d'où tu sors toutes ces fonctions ? De la 1.26 ?

Pour répondre à Frolo Xeres :

Déjà, la boucle sur le GetIsDay, c'est un truc à faire cramer ton CPU en 20 secondes.

Pour le tableau, c'est pas réellement nécessaire dans ce cas étant donné que l'assignation de donnée n'est pas dynamique. Tu peux utiliser une simple fonction à chaines statiques :

string ReturnDialogString(int nMaxParoles)
{
int nRandom = Random(nMaxParoles);
string sReturn;
switch(nRandom)
{
case 0: sReturn = "Ma phrase 1"; break;
case 1: sReturn = "Ma phrase 2"; break;
//etc
}
return sReturn;
}

Par eMRaistlin le 5/11/2002 à 17:08:01 (#2487375)

Euh... non, pas de la 1.26 :


GetLocalArrayInt(object, string, int)
Simulates retrieving an Integer from an array on an object.

int GetLocalArrayInt(
object oidObject,
string sVarName,
int nVarNum
);
Parameters
oidObject

The object the array of integers is stored on.

sVarName

The name of the array.

nVarNum

The position in the array the value should be retrieved from.



Description
Returns the value found in position nVarNum in array sVarName stored on object oidObject.




Remarks
Function found in nw_o0_itemmaker.nss on line 600.

Although this is hardly an array, it can be accessed like one, and can even be looped through. It works by creating a new local integer object on whatever object you passed in through the parameters. This LocalInt is called sVarName + nVarNum, so in otherwords if I called the following:

GetLocalArrayInt(OBJECT_SELF, "MyArray", 1);

meaning I want the value in position one of MyArray on OBJECT_SELF. It would call GetLocalInt(OBJECT_SELF, "MyArray1") to retrieve the value. So if you create one array and have 300 values stored in it, you've actually created 300 variables with values on the object. This just hides the mess for you.



Requirements
#include "nw_o0_itemmaker" //"C'est ici l'important^^"


Une quiche sachant chercher sait scripter sans son chien ^^


Encore une fois, je maitrise mal la notion de tablaux, mais je pense que c'est ca qu'il cherche...

[Edit : Merci encore nylou ^^]

Par Frolo Xeres le 5/11/2002 à 17:41:39 (#2487743)

Et paf prend çà le programmeur !
J'avoue mon incompétance... Je ne mérties pas mon diplôme d'analyste programmeur...
Bon ben je vais fouiller toutes les bibliothèques de fonctions de Aurora et je reviens.

Ah oui : Merci messieurs !

Par Tynril le 5/11/2002 à 18:16:58 (#2488152)

/me retourne fouiller les includes, à pas tout vu :doute:

Merci :)

Par Jedaï le 5/11/2002 à 20:15:23 (#2489463)

Ah bah... je savais pas qu'elle existait celle-là, :eek: j'ai dû la simuler dans ma bibliothèque de tokens mais franchement, c'est juste une astuce que n'importe qui peut reproduire dans son script, avec des SetLocalString() et GetLocalString(object, "nom"+IntToString(n));

Cependant, plus j'en apprend plus je me dis que les bibliothèques standards réserve bien des surprises.
Au fait eMRaistlin, est-ce qu'il y a une fonction pour créer des arrays de cette façon.

Par Frolo Xeres le 5/11/2002 à 20:38:13 (#2489710)

J'ai fait un petit tour du côté des script et oui, la fonction existe :
il suffit de faire l'include
#include "nw_o0_itemmaker"
Tu as les fonctions SetLocalArrayInt et SetLocalArrayString...

Cet include est mis quand on fait un test de compétence par l'assistant ! ( AutoDC ).

Les fonctions ont pas mal expliquées dans l'aide, de quoi faire de jolis tableaux !

Par Jedaï le 5/11/2002 à 21:02:03 (#2489952)

C'est intéressant mais il manque, je trouve, une fonction pour créer un tableau entier en une seule fois.:doute:

Alors que ça serait simple :


void CreateLocalArrayString(object oID, string sName, string nContenu)
{
string sVar;
int nTemp;
int n = 0;

while ((nTemp = FindSubString(nContenu, ",")) >= 0)
{
sVar = GetStringLeft(nContenu, nTemp);
nContenu = GetStringRight(nContenu, GetStringLength(nContenu) - nTemp - 1);
SetLocalString(oID, sName + IntToString(n), sVar);
n++;
}
}

void CreateLocalArrayInt(object oID, string sName, string nContenu)
{
string sVar;
int nTemp;
int n = 0;

while ((nTemp = FindSubString(nContenu, ",")) >= 0)
{
sVar = GetStringLeft(nContenu, nTemp);
nContenu = GetStringRight(nContenu, GetStringLength(nContenu) - nTemp - 1);
SetLocalInt(oID, sName + IntToString(n), StringToInt(sVar));
n++;
}
}

//void main(){}


Sachant qu'on doit entrer son tableau sous la forme : "Valeur0,Valeur1,...,Valeurn," (sans espace à côté des virgules)

Par Jedaï le 6/11/2002 à 15:02:05 (#2495858)

Bon un peu sécurisée (et maintenant on met plus de "}" à la fin du tableau) :


void CreateLocalArrayString(object oID, string sName, string nContenu)
{
if (GetIsObjectValid(oID))
{
string sVar;
int nTemp;
int n = 0;

while ((nTemp = FindSubString(nContenu, "}")) >= 0)
{
sVar = GetStringLeft(nContenu, nTemp);
nContenu = GetStringRight(nContenu, GetStringLength(nContenu) - nTemp - 1);
SetLocalString(oID, sName + IntToString(n), sVar);
n++;
}
if (nContenu != ")
SetLocalString(oID, sName + IntToString(n), nContenu);
}
}

void CreateLocalArrayInt(object oID, string sName, string nContenu)
{
if (GetIsObjectValid(oID))
{
string sVar;
int nTemp;
int n = 0;

while ((nTemp = FindSubString(nContenu, "}")) >= 0)
{
sVar = GetStringLeft(nContenu, nTemp);
nContenu = GetStringRight(nContenu, GetStringLength(nContenu) - nTemp - 1);
SetLocalInt(oID, sName + IntToString(n), StringToInt(sVar));
n++;
}
if (nContenu != ")
SetLocalInt(oID, sName + IntToString(n), StringToInt(nContenu));
}
}

//void main(){}


Ex. d'utilisation :



CreateLocalArrayString(oBarman, "MyString", "Salut voyageur, de la bière ?}Marie, va me chercher un autre tonneau !}Pas de bagarre dans ma taverne !}Dépèche-toi Sophie, les clients attendent !}Qu'est ce que je vous sert ?");
int nRand = Random(6);
SpeakString(GetLocalArrayString(oBarman, "MyString", nRand));

C'est pas mal

Par Etienne le 6/11/2002 à 17:10:41 (#2497184)

eMRaistlin Ta dernière intervention est pas mal du tout !

Mais en hors sujet, comment trouves-tu le temps de faire tout ce boulot.

Salutation

Re: C'est pas mal

Par Etienne le 6/11/2002 à 17:12:39 (#2497210)

Provient du message de Etienne
Mais en hors sujet, comment trouves-tu le temps de faire tout ce boulot.

Salutation


Je voulais dire que c'est moi qui suis hors sujet et pas toi :monstre:
enfin tu voit quoi ?

Par eMRaistlin le 6/11/2002 à 17:23:26 (#2497351)

Mais en hors sujet, comment trouves-tu le temps de faire tout ce boulot.


Intelligence = 9
Bonus d'alteration magique = +10

INT = 19...

je peut donc lancer 4 TimeStop par jour... CQFD ^^

:maboule: :maboule: :maboule: :maboule: :maboule:

JOL Archives 1.0.1
@ JOL / JeuxOnLine