1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

Résolu Evènements HL1

Discussion dans 'Discussion & Aide au développement' démarrée par Sherazaa, 17 Mars 2013.

Statut:
Fermé aux futures réponses.
  1. Sherazaa

    Sherazaa Membre

    Salut tout le monde :) 

    J'aurais quelques questions à vou poser par rapport aux événements Half life 1. Bon les événements tel que HLTV (event qui s'execute lors d'un nouveau round) sa je comprends et je sais m'en servir mais lorsque je me suis rendu sur cette page : Half-Life 1 Game Events - AlliedModders Wiki c'est la qu j'ai commencé à vraiment galéré, je me suis renseigner en lisant les quelques tutos et messages des utilisateurs de Alliedmodders mais en vain... Par exemple prenons carrément l'event HLTV que je disais "comprendre" et bien je rencontre des soucis de compréhension :

    Half-Life 1 Game Events - AlliedModders Wiki

    Ici nous voyons quoi : une brève description de l'événement et sa juste en dessous :

    // reset all players health for HLTV
    MESSAGE_BEGIN( MSG_SPEC, gmsgHLTV );
    WRITE_BYTE( 0 ); // 0 = all players
    WRITE_BYTE( 100 | 128 ); // Il faut toujours laisser sa ici ? Sa veut dire quoi ?
    MESSAGE_END();

    // reset all players FOV for HLTV
    MESSAGE_BEGIN( MSG_SPEC, gmsgHLTV ); //gmsgHLTV sa veut dire quoi
    WRITE_BYTE( 0 ); // all players
    WRITE_BYTE( 0 ); // Pk mettre 0 ici aussi ?
    MESSAGE_END();

    Je ne comprends pas en quoi ces messages servent ? Ou les places dans le codes ? Etc ...

    Sinon plus globalement pour tout les événement on peu voir une structure bien particulière pour chaque événements (string, short, byte, long, coord, char, ...). Comment savoir quelle valeur assigner à chaque partie de la structure ?

    Si vous pouviez m'éclairer sur certains points ? Ou encore me faire un mini exemple avec un événement (ScreenFade, ScreenShake) sa m'aiderais fortement :D 

    Voilà j'ai essayé d'être le plus simple et claire possible ! J'attends vos réponses avec grandes impatiences :) 

    Sherazaa
     
  2. Arkshine

    Arkshine Le Docteur

    Un début de réponse, en version simplifiée.

    Les évènements de jeux (messages/events) sont un moyen de communication entre le serveur et le client, parce qu'il y a des choses qui ne peuvent être gérées que par le client (example : brouillard), et il faut bien que le serveur puisse avoir le moyen de dire au client d'activer telles fonctionnalités.

    Tout comme tu aurais une fonction avec des arguments maFonction( arg1, arg2, ... ), les évènements utilisent juste une forme différente :

    débutEvènement message_begin
    arg1 write_*
    arg2 write_*
    ...​
    finEvènement message_end

    Tu as différent type d'arguments, et je ne vais pas te faire un cours là-dessus sur le pourquoi, tu peux trouver des informations sur le wikipedia.
    Mais comme on est en Pawn, c'est simplifié :
    • _string : chaîne de caractères
    • _byte : nombre entier ( 0 à 255 )
    • _char : nombre entiter (0 à 255 )
    • _short : nombre entier ( 0 à 65 535 )
    • _long : nombre entier (0 à 4 294 967 295 )
    • _entity : nombre entier, qui est juste l'index d'une entité.
    • _angle : nombre entier, qui est juste un angle
    • _coord : nombre entier, qui est juste un vecteur
    Tu n'as pas à t'inquiéter de vérifier si la valeur est entre un minimum et maximum, ça fera la conversion tout seul.
    Comprendre, en codant un plugin en Pawn, tu n'auras pas à te prendre la tête avec le type de données à mettre vu qu'il n'y en a pas.

    Une fois que tu as compris ça, il te suffit de comprendre à quoi servent chaque évènements, et tu les disposes où tu veux dans ton code.
    La liste du lien est, je pense, exhaustive, mais il y a peut-être certaines évènements qui ne sont pas complets. En cas de doute, ne pas hésiter à demander.

    L'example avec HTLV, n'est pas p-e pas le plus facile. Je ne suis pas certain de connaître sa syntaxe non plus. :p 
    Un truc qu'il faut je vérifie à l'occasion, mais ce message là, à part le hooker, je doute que tu trouves une utilité à l'utiliser dans une plugin.

    Dans tous les cas, commence par digérer ça, et pose tes questions si tu en as. :) 
     
  3. ConnorMcLeod

    ConnorMcLeod Modérateur

    Pour la question plus particulière du message "HLTV", tu n'as normalement pas à l'utiliser, le serveur s'en sert pour donner des informations aux HLTV sur l'action qu'il se passe, pour que l'hltv se focalise sur telle ou telle chose.
    Pourquoi comptais-tu l'utiliser ?
     
  4. Sherazaa

    Sherazaa Membre

    Merci beaucoup Arkshine, je vais retourner lires des codes sous un autre point de vue. J'ai beaucoup mieux compris :) 

    Sinon ConnorMcLeod, l'event HLTV étant un des event les plus utilisés j'ai pensés intéressant de le développer un peu plus. C'est tout, je ne cherche actuellement pas à faire un plugin en particulier, mais simplement de l'aprentissage avant toute chose :) 

    Je ne vais pas résoudre le sujet tout de suite, je vais attendre encore quelques jours si jamais quelqu'un avait autre chose à ajouter ou encore des questions à ce sujet. :D 

    Merci !
     
  5. ConnorMcLeod

    ConnorMcLeod Modérateur

    On s'en sert principalement pour détecter le nouveau round de cette façon :

    register_event("HLTV", "Event_HLTV_New_Round", "a", "1=0", "2=0")

    C'est en gros la seule façon.

    J'en n'ai jamais vu d'autre utilité.
    La seule chose serait dans un mod, de vouloir dire à un hltv qu'un évènement important se produit, mais je n'ai aucune idée de la façon dont il faudrait s'y prendre, il doit néanmoins y avoir des informations disponibles quelque part.
     
  6. Sherazaa

    Sherazaa Membre

    Mais du coup sa serait quoi la différence entre ces types d'arguments :
    _byte : nombre entier ( 0 à 255 )
    _char : nombre entiter (0 à 255 )
    _short : nombre entier ( 0 à 65 535 )
    _long : nombre entier (0 à 4 294 967 295 )

    Genre byte et char ? Vu que les deux sont compris entre 0 et 255 et puis pour short et long ? Personnellement on a vraiment besoins parfois de mettre un nombre tel que 3 678 543 201 ?
     
  7. Arkshine

    Arkshine Le Docteur

    Oublie ce que j'ai dis, ça n'a pas d'importance dans le Pawn. Y'a pas de type. Je n'aurais pas dû en parler.
    Si tu veux en savoir plus, tu trouveras plus de réponses en apprenant le C, par example.
    En Pawn, par example, tu vas créer une variable du genre new maVariable ; et cette variable tu pourras la mettre dans n'importe quel wirte_*. Ne te focalise pas sur ça, je t'assure.
     
  8. ConnorMcLeod

    ConnorMcLeod Modérateur

    Les arguments des messages sont hardcodés pour la plupart, tu n'as donc pas le choix.
    Pour byte short ou autre, si tu n'es pas dans le range c'est pas grave, mais bon si tu fous 256 ça va pas prendre 255 mais 0, donc fais quand même attention.
    en général pour write_char on met plutôt direct le char : write_char('c') par exemple, question de lisibilité.

    Tout ça n'est pas très important, ce qui est important est de savoir quel message tu veux hooker avec register_event ou register_message,
    et de regarder ses arguments de façon à bien définir les filtres dans register_event, ou de bien utiliser read_data() dans le callback de l'event,
    et dans le callback de register_message de bien utiliser Xet_msg_arg_XXX, et enfin d'envoyer les messages via message_begin message_end avec les bons arguments.
     
  9. Sherazaa

    Sherazaa Membre

    Un grand merci à vous deux :) 
    Résolu !
     
Statut:
Fermé aux futures réponses.

Partager cette page

Chargement...
Chargement...