Page 1 sur 2

Distribuer des rôles au hasard C# mon code a seulement 6 lignes

Publié : 28 Déc 2018 20:36
par syanis94
Bonsoir à tous,

Je suis en train de programmer un petit jeu de rôle, donc voila il est en ligne, ou moment où une personne se connecte je souhaite lui attribuer un rôle au hasard permis les 4 rôles possibles.
Sachant qu'une partie se jeu seulement à 4 maximums, donc y a 4 rôles possibles, au moment ou on se connecte et se fait attribuer un rôle, donc la deuxième personne qui va se connecter aura aussi un rôle mais différent de celui de premier, pareil pour le troisième connecter, un rôle différent des deux premiers, il le dernier connecter aura seulement le rôle qui reste.

pour cela j'ai codé ce petit code que j'ai attribué à un cube pour des essais, donc j'ai crée un variable liste public static pour cube, je lance le jeu, et je duplique le cube 3 fois, histoire de simuler une connexion de 4 personnes, mais le code fonctionne pas je ne comprends pas pourquoi ? aidez moi svp :'(

Code : Tout sélectionner

    public static List<string> Roles = new List<string>(4);
    private int Tirage;
    private string Role;

    void Start () {

        Roles.Add( "String1");
        Roles.Add("String2");
        Roles.Add("String3");
        Roles.Add("String4");

        Roles.Sort();
        Tirage = Random.RandomRange(0, (Roles.Count - 1));

        Role = Roles[Tirage];
        Roles.Remove(Roles[Tirage]);
        
        Debug.Log("Le role tiré au hasard pour le : " + gameObject.name + " est : " + Role);
        

Re: Distribuer des rôles au hasard C# mon code a seulement 6 lignes

Publié : 29 Déc 2018 09:50
par Moi 1971
Bonjour,
Peux-tu donner le message d'erreur complet et/ou le résultat erroné que tu obtiens avec ton code?

Re: Distribuer des rôles au hasard C# mon code a seulement 6 lignes

Publié : 29 Déc 2018 10:13
par syanis94
oui bien sure, j'ai pas de message de d'erreur mais j'ai ce résultat dans la console :
Comme vous voyez le string 1 et 3 sont répétés deux fois, alors que normalement non, à la place il y aura string 2 et 4

Image

Re: Distribuer des rôles au hasard C# mon code a seulement 6 lignes

Publié : 29 Déc 2018 11:20
par Max
Bonjour,
syanis94 a écrit :
28 Déc 2018 20:36
et je duplique le cube 3 fois, histoire de simuler une connexion de 4 personnes, mais le code fonctionne pas je ne comprends pas pourquoi ?
Tu as donc 4 cubes, avec chacun son script, donc chacun sa liste, donc dans leur Start ils récupèrent dans leur propre liste un élément, d’où un résultat redondant apparent, ce qui est normal dans ce cas.
Il te faut centraliser ce genre de fonction, ou chaque cube (ou client) va appeler une fonction genre "public String AffecterRole()'.

Re: Distribuer des rôles au hasard C# mon code a seulement 6 lignes

Publié : 29 Déc 2018 11:38
par syanis94
merci pour votre réponse

mais comme c'était une variable public static normalement tout les cubes qui auront le même script, auront aussi la même variable ? non ?

Re: Distribuer des rôles au hasard C# mon code a seulement 6 lignes

Publié : 29 Déc 2018 11:52
par Max
Ok, je n'avais pas fait gaffe au static, sorry.
Ceci dit, dans chaque Start tu ajoutes à chaque fois 4 valeurs string à ta liste. Au bout du compte pour 4 cubes, ta liste comprendra alors 16 valeurs avec 4 fois "String1", 4 fois "String2", etc....
Ta liste a beau être static, les fonctions du script n'en sont pas moins exécutées autant de fois qu'il y a de cubes.

Si tu veux que cela fonctionnes, en reprenant ce que tu as écris plus haut, écris donc plutôt un truc du genre:

Code : Tout sélectionner

    public static List<string> Roles = new List<string>(4) { "String1", "String2", "String3", "String4" };

    private int Tirage;
    private string Role;


    // Use this for initialization
    void Start () {
        Tirage = Random.RandomRange(0, (Roles.Count - 1));
        Role = Roles[Tirage];
        Roles.Remove(Roles[Tirage]);
        Debug.Log(Role);
    }

Re: Distribuer des rôles au hasard C# mon code a seulement 6 lignes

Publié : 29 Déc 2018 12:02
par syanis94
Ah oui ! c'est vrai, c'est tellement évident que je me sens con de ne pas l'avoir remarqué au début, mais c clair qu'à chaque fois que j'ajoute un cube un nouveau start se lance, ah mec merci bcp <3

Sujet résolu

Distribuer des rôles au hasard C# mon code a seulement 6 lignes

Publié : 29 Déc 2018 13:02
par syanis94
Re, désolé j'ai un autre petit problème, donc voila, à la base sa fonctionne parfaitement avec la duplication, sauf que la je viens de lui attribué un network manager, un HUD des points de spawn, network identity ect...

Après j'ai build le game sur pc pour essayé, je crée un serveur, je lance le jeu 4 fois histoire de simulé 4 pc différent, boom l'attribution fonctionne plus correctement ?

Re: Distribuer des rôles au hasard C# mon code a seulement 6 lignes

Publié : 29 Déc 2018 13:27
par Max
C'est normal. Je n'y connais rien en ce qui concerne la gestion réseau, mais m'est avis que chaque client est indépendant, et donc exécutera dans son coin son script et aura sa propre liste static en local.
Cela rejoint ma première réponse, ce genre de chose doit être centralisé au niveau du serveur. En gros, chaque client, lors de la connexion, effectue une requête auprès du serveur pour qu'il lui attribue un rôle. Et c'est lui qui va effectuer le tirage au sort et répondre au client renvoyant alors le rôle choisi.

Re: Distribuer des rôles au hasard C# mon code a seulement 6 lignes

Publié : 29 Déc 2018 13:36
par syanis94
Oui j'adhère à ta réponse, c'est logique ce que tu dis (désolé pour le tutoiement), en tout cas je vais essayé un autre script, comme tu viens de me l'expliquer je te tiendrais au courant :)