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

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
syanis94
Messages : 31
Inscription : 11 Nov 2018 16:23

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

Message par syanis94 » 28 Déc 2018 20:36

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);
        
Dernière édition par syanis94 le 29 Déc 2018 13:02, édité 1 fois.

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

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

Message par Moi 1971 » 29 Déc 2018 09:50

Bonjour,
Peux-tu donner le message d'erreur complet et/ou le résultat erroné que tu obtiens avec ton code?

syanis94
Messages : 31
Inscription : 11 Nov 2018 16:23

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

Message par syanis94 » 29 Déc 2018 10:13

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

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

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

Message par Max » 29 Déc 2018 11:20

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()'.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

syanis94
Messages : 31
Inscription : 11 Nov 2018 16:23

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

Message par syanis94 » 29 Déc 2018 11:38

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 ?

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

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

Message par Max » 29 Déc 2018 11:52

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);
    }
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

syanis94
Messages : 31
Inscription : 11 Nov 2018 16:23

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

Message par syanis94 » 29 Déc 2018 12:02

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

syanis94
Messages : 31
Inscription : 11 Nov 2018 16:23

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

Message par syanis94 » 29 Déc 2018 13:02

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 ?

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

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

Message par Max » 29 Déc 2018 13:27

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.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

syanis94
Messages : 31
Inscription : 11 Nov 2018 16:23

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

Message par syanis94 » 29 Déc 2018 13:36

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 :)

Répondre

Revenir vers « Scripting »