Partage
  • Partager sur Facebook
  • Partager sur Twitter

[LUA][C#] Conversion d'un bout de code: Challenge!

Sujet résolu
9 septembre 2017 à 6:33:01

Salut tout le monde,

Je suis un débutant dans C# et j'aimerai convertir un bout de code Lua, il s'agit de modding (GTA 5) :D, voici le code:

local handle, ped = FindFirstPed()
local success

repeat
	success, ped = FindNextPed(handle)
until not success

EndFindPed(handle)


En gros il y a 2 fonctions qui retourne 2 valeurs a chaque fois.

FindFirstPed()
FindNextPed(handle)

 Dans Lua c'est assez simple de récupérer ces valeurs, comme vous pouvez le voir, par ex avec la première fonction:

La variable "success" récupère la première valeur, tandis que "ped" récupère la seconde valeur renvoyés par la fonction "FindFirstPed".

Ma question est simple: comment pourrais-je faire exactement le même code en C#, plus particulièrement la partie récupération des valeurs.

Pour plus d'information sur ces fonctions Native:

https://runtime.fivem.net/doc/reference.html#_0xfb012961

et aussi:

https://github.com/citizenfx/fivem/commit/ba150e1d77907201b7d4a467c46f92393d33d211

Merci de votre aide!

-
Edité par NomansSkywalker 9 septembre 2017 à 20:13:56

  • Partager sur Facebook
  • Partager sur Twitter
9 septembre 2017 à 19:26:44

Salut,

Je ne connais pas le LUA, mais en C#, et comme dans la majorité des langages, pour récupérer des valeurs dans des fonctions, on utilise

return [valeur]

Si ce n'est pas ça, tu serais être plus précis :) ?

  • Partager sur Facebook
  • Partager sur Twitter

Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...

9 septembre 2017 à 20:13:12

Salut vanaur,

"return [valeur]" permet de renvoyer une valeur à partir d'une fonction, c'est bien ça?

A partir de là, on récupère la valeur assez facilement dans une variable, par ex: 

var variable = fonction();

Moi ce qui m’intéresse c'est le cas ou une fonction renvoi plusieurs valeurs. C'est assez bizarre en fait avec cette fonction. Le code Lua que j'ai mis plus haut fonctionne très bien, mais je n'arrive pas a le convertir en C#.

  • Partager sur Facebook
  • Partager sur Twitter
9 septembre 2017 à 20:38:00

Ca vas être difficile, parce que j'ai du mal à comprendre le lua ^^

Alors.

Pour renvoyer plusieurs valeurs dans une fonction, il y a plusieurs façons :

1. Utiliser le mot clef out dans les paramètres de ta fonction suivant cet exemple : 

static void Exemple(out int param1, out string param2){
    param1 = 21; //Ma valeur Integer
    param2 = "coucou"; //Ma valeur string
}
// utilisation :
static void Main(){
    int Int_value;
    string String_value;
    Exemple(out Int_value, out String_value);
}

2. Utiliser les subtilisées du Framework .NET, avec par exemple les tuples, ou autre types d'objets.

Personnellement, j'utiliserais plus la 1er méthode, mais elle comportes certaines inconvénients durant la compilation qui peuvent gêner certains types problèmes, mais vu ce que tu voudrais faire (si j'ai bien compris xD), cela devrais fonctionner. Elle me semble aussi relativement simple.

PS: Je n'ais pas essayer chez moi, donc c'est possible qu'il y ait quelques erreurs dans le code, je l'ais fais sans copier/coller ^^

PPS: Bon, ce n'est pas réellement un renvois de valeur pour la méthode 1, mais cela devrait fonctionner, je préfère préciser :)

-
Edité par vanaur 9 septembre 2017 à 20:43:08

  • Partager sur Facebook
  • Partager sur Twitter

Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...

10 septembre 2017 à 1:51:11

Merci beaucoup Vanaur! :D

Grace à toi, j'ai parfaitement compris.

  • Partager sur Facebook
  • Partager sur Twitter
10 septembre 2017 à 11:29:11

Sujet résolut donc :) ?
  • Partager sur Facebook
  • Partager sur Twitter

Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...

10 septembre 2017 à 19:00:00

Exactement. J'ai oublié de le marquer. :)
  • Partager sur Facebook
  • Partager sur Twitter
11 septembre 2017 à 12:19:16

Ce que vous montrez dans le lien est une API C, pas LUA.

Il est préférable de faire des wrappers autour de ces fonctions C plutôt que d'utiliser les mêmes paradigmes que LUA.

C# est bien plus proche du C que LUA ne l'est du C.

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
11 septembre 2017 à 20:55:22

@bacelar Oui l'API est en C. Car ce sont les fonctions natives de GTA V. Cependant on utilise les même fonctions a travers le framework de FiveM, il faut juste supprimer les tirets underscores "_", pour les utiliser avec un script en Lua. FiveM accepte aussi les scripts en C# (là on garde la fonction avec les underscores), d’où ma question. ;)

Par contre je ne sais pas ce qu'est un wrapper? Si tu pouvais en dire plus...

-
Edité par NomansSkywalker 11 septembre 2017 à 20:57:46

  • Partager sur Facebook
  • Partager sur Twitter
11 septembre 2017 à 21:15:53

Les wrappers sont, grossièrement, des façons de transporter du code d'un langage source pour pouvoir l'utiliser dans le langage cible (version simplifier). Par exemple tu souhaite utiliser une bibliothèque écrite en C++, ou en C dans ton cas, tu pourras utiliser une fonction écrite en C dans en LUA. Tu peux regarder ici pour télécharger et avoir plus d'informations sur un Wrapper LUA - CLR (Comme dis dans le lien.)
  • Partager sur Facebook
  • Partager sur Twitter

Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...

11 septembre 2017 à 23:53:48

Je vois. C'est super intéressant. J'ai installer Nlua dans mon projet avec Visual Studio en utilisant NuGet. Je vais tester ça pour voir ce que ça donne. Je comprend mieux le fonctionnement de FiveM du coup.

Merci encore de vos explications. :D

  • Partager sur Facebook
  • Partager sur Twitter