SnowStyle

[Aide] Scripting

Noter ce sujet

7 messages dans ce sujet

Libre à vous de poster si vous avez des questions au sujet du scripting

------------------------------------

Salut, y a t-il des grands maîtres du scripting FOnline cachés dans l'ombre ?
Je galère pas mal, je connais pas le C vu qu'apparemment AngelScript est très proche du C, j'ai fait un premier essai qui a fini par fonctionner mais je n'ai pas compris pour autant.

J'aurai une première question
Est-ce que quelqu'un sait ce que signifie Critter@ et Critter& ? et même Critter@& ?
c'est quoi exactement Critter ? une class ? et c'est quoi les différences entre ceux que j'ai citer plus haut ?
A ce que j'ai lu sur des tuto C, @ serait un pointeur, les pointeur pointerait vers des adresses dans la mémoire, mais franchement, ça m'aide pas trop à comprendre hehe, et & une reférence, j'ai pas plus compris non plus.
Pour déclarer une variable il faut donc obligatoirement le faire avec son type de pointeur ?
C'est peut être pour les stocker dans des tableaux ?

Je suppose que c'est une question très basique mais bon la base c'est le plus important :grin: , si quelqu'un a une idée ou peux m'aiguiller, ce serait sympa.
Sinon c'est pas grave, je finirai pas comprendre un jour, peut être :shock:

Partager ce message


Lien à poster
Partager sur d’autres sites

plop a toi je suis en école de programmation et on fait du C

Par rapport a Critter
je pense que c'est un type de variable propre (voir une classe) car sa ressemble beaucoup au C++ qui lui fonctionne en programation Objet, et je mettrai ma main a coupe que l'AS soit un langage Objet

donc pour resumer avec un exemple tirer de replication.fos

Map@ GetNearReplicatorMap(Critter& cr)

c'est une fonction nomme GetNearReplicatorMap retournant un objet de type Map@ (le @ je sait pas du tout ce que ca signifie)
prenant en parametre un Objet/variable nomme cr de type Critter&


tient je pense que ca pourrai etre utile :
http://www.angelcode.com/angelscript/sdk/docs/manual/index.html
http://www.gameengineer.net/tutorials-angelscript.html


PS:
en C un pointeur c'est représenter par * et c'est bien une variable qui poitent vers une adresse en memoire

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah cool merci pour les liens, je vais potasser tout ça.

Sympa l'exemple, j'avais pas remarquer qu'il y avait des fonctions retournant ces types d'objets.
De tant à autre il y a des fonctions ou au lieu d'avoir comme tu le cites (Critter& cr) tu va voir (Critter@ cr), et c'est assez perturbant lol

exemple

bool CheckItemIsIllegal(Item @ item)
{
   if(!valid(item)) return false;
   return Present(item.GetProtoId(), Pids_IllegalItems);
}

une petite fonction qui vérifie si un item est contenu dans une liste d'item prohibé, apparemment pour une ville ou les gardes scan ton inventaire, si j'ai bien compris.
bon toute façon on s'en fout de la fonction, le truc que je comprend pas c'est pourquoi là il utilise Item@ comme type de variable et pas Item&

La fonction qui scan tout l'inventaire et qui utilise la fonction precedente :

bool HasIllegalItems(Critter & cr)
{
   Item@[] items;
   if(cr.GetItems(-1, items)==0) return false;
   for(uint i=0,l=items.length();i<l;i++)
   {
      if(CheckItemIsIllegal(items)) return true;
   }
   return false;
}


Enfin ce sera peut être expliquer quelque part sur un de tes liens donc je vais lire :)

ps: Apparemment comme tu dis c'est plus proche du C++ d'après l'intro du doc AS, je sais pas pourquoi Cvet a dit C, bon toute façon je connais ni l'un ni l'autre, je saurai pas dire les différences, a part la POO.

Partager ce message


Lien à poster
Partager sur d’autres sites

Tiens, j'ai un problème avec ces fameux @

J'ai essayer d'utiliser une variable array dans un Say d'npc (fonction pour les faire parler), le lancement du serveur se passe bien, mais au moment de tester le npc pour lui faire dire la fameuse phrase, rien.
Sur le serveur il me sort une erreur qui a stopper le dialog, après ça empeche pas le serveur de continuer de fonctionner correctement, on peux répéter l'erreur à volonté.

J'ai alors essayer avec une chaîne de caractère, même chose.. c'est là que je me suis dit, "tiens, j'ai zapper l'utilisation des @" j'ai rajouter ça a la déclaration de ma chaîne de caractère, et là plus d'erreur le npc dit bien la variable.

Je me suis dit bon c'est cool, on va rajouter les pointeurs sur ma déclaration d'array, mais là rien n'y fait :frown: j'arrive pas à faire fonctionner l'array.
Je ne sais pas si je l'ecris mal ou si je me plante avec les @, en tout cas le serveur compile sans broncher mais il sort la petite erreur comme si j'avais pas mis de pointeur.

Au cas où quelqu'un maîtrise la chose, si il voit l'erreur je suis preneur, ça me prend la tête à chaque fois y'a toujours un truc qui me bloque

string@[]@ Array;
@Array[100] = "Test";
npc.Say(2,Array[100]);


En tout cas, sans toujours savoir à quoi correspond les @ et &, au moins maintenant je sais que dans certains cas il y a des choses qui ne fonctionnent pas si on les utilises pas.

ah et la fameuse erreur, très explicite

Script exception : Null pointer access


edit: Réctification, ça n'a peut être rien à voir avec les @, je ne sais pas exactement dans quel cas ce message d'erreur apparrait, si quelqu'un l'a déjà eu ça m’intéresse (avec la résolution si possible hehe).
En tout cas j'ai pas tester d'avantage les Array ça m'a fatigué, j'ai bidouiller une autre fonction qui marche bien mais affiche aussi cette erreur bizarrement.. c'est toujours difficile de se jeter à l'eau quand on ne sait pas nager ^^

Partager ce message


Lien à poster
Partager sur d’autres sites

Apparemment le @ serait un handle d'objet :

Object handles - Pointers are not safe in a scripted environment, so AngelScript uses object handles instead. Object handles are almost like smart pointers, that control the life time of the object they hold.

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut, merci ouai j'avais fini par voir que c'était en rapport avec les objets, un handle comme tu dis, même si ça me parle pas des masses hehe. Et donc le & serait une référence de l'objet, j'ai vaguement lu sur des tuto C++ comme quoi une référence d'un objet quand tu le modifies ça modifie l'objet en question aussi mais j'ai pas trop compris le concept non plus. Il doit y avoir un intérêt dans certains cas, ces cas ne se sont pas encore présenté à moi, donc pour l'instant je pense que c'est normal que je pige pas l'idée. Pour l'erreur que j'ai eu, c'était vraiment en rapport avec le system du SDK et pas vraiment avec la syntaxe elle même. C'était dans une fonction appelé par un dialog npc, en faite j'avais pas compris que cette fonction peut être appeler dans plusieurs cas de figures et qu'il faut tous les prendre en compte, bon c'est un peu obscure dit comme ça, mais disons que j'utilisais surement quelque chose qui n'est pas présent dans un autre cas figure, donc au début de la fonction faut précisé que si c'est tel ou tel cas de figure, on return. Après cela j'ai plus eu cette erreur. Au passage pour les arrays, j'avais pas compris qu'il fallait absolument précisé leur dimension, je suis trop assisté où tu déclares un array vide et tu peux le remplir à ta convenance, t'es même pas obliger de le déclarer dans la plupart des languages de script et en plus tu met ce que tu veux dedans, tout est géré automatiquement, ça change :grin: Donc je me suis plutôt tourner vers les dictionary, que j'utilise comme un array d'assisté.

Partager ce message


Lien à poster
Partager sur d’autres sites

En effet, le jeu entre pointeurs et références en C++ est assez subtile. On ne manipule pas un pointeur ou une référence de la même façon. La question, lequel passer en paramètre depend directement du codage de la fonction. La seule solution, s'en tenir à la doc ou aux exemples que tu as sous la main. Sachant qu'en C++ les fonctions sont surchargeables, tu peux tomber parfois sur des appels avec l'un ou l'autre... là, seul les exemples/testes pourront t'aider. Ne être trop aventurier avec le C++, dans le doute aller au plus simple/classic, même une voix plus exotique est proposée.

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

  • En ligne récemment   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.