Arme automatique



  • Hello,

    J'essaye de faire une arme automatique, elle tire en cliquant droit ou en le maintenant, pas de problèmes avec ça.
    J'aimerais faire en sorte qu'elle puisse tirer plus vite que quand on maintient le clique droit. J'ai essayé avec tout ce qui est onItemUse(), onUsingTicks(), etc ça ne marche pas. C'est que quand je clique droit sur un block donc ça n'est pas bon.

    J'ai éventuellement un moyen en utilisant onUpdate(), avec un int delay et un boolean mais je ne suis pas sur que ça soit la façon la plus optimisée et la plus correcte pour le faire (et pas sur que ça marche)
    Je ne vois pas comment faire sans passer par la.


  • Correcteurs

    Il y a un paramètre type count dans la méthode OnRightClick il me semble.

    A partir de ça, sachant que cette méthode est appelée à chaque tick et que count est remis à zéro quand tu relâches, tu as de quoi faire



  • Une arme ne peux normalement pas tirer plus de 20 fois par seconde, car le jeu tourne sous 20 ticks. Si tu augmente, tu aura des balles qui seront tirés en même temps



  • Pour le int count c'est dans la méthode onUsingTicks.
    C'est possible de faire l'arme qui mitraille avec cette méthode et une autre mais ça fait en sorte que le joueur "utilise" l'items et donc quand je tire, je suis ralenti (comme quand on mange ou on tir à l'arc).

    Et sinon, je ne veux pas que mon arme tire plus de 20 fois par seconde, je veux juste qu'elle tire plus vite quand je maintiens le clic droit (tirer plus rapidement que les boules de neiges par exemple)



  • Pour le ralentissement : il faut mettre ton item en utilisation, regarde la fonction appelée dans l'arc

    Pour le reste je vois pas où est problème


  • Rédacteurs

    Justement actuellement il est ralenti mais ce qu'il veux c'est ne pas être ralenti



  • Bah il faut juste enlever la fonction alors


  • Administrateurs

    @'Thoquent':

    je veux juste qu'elle tire plus vite quand je maintiens le clic droit (tirer plus rapidement que les boules de neiges par exemple)

    Dans ce cas il faut utiliser l'event de soucis (MouseEvent il me semble) et check l'item que le joueur a en main ainsi que si la clic droit est pressé (il y a une fonction lwjgl pour ça normalement).
    Par contre tu es côté client, donc il faut envoyer un paquet au serveur pour faire l'action.


  • Rédacteurs

    Chut !!!!!! Ne parle pas de paquets … Il va s'enfuir comme tout les autres


  • Administrateurs

    Ce n'est pas compliqué les paquets x)
    En plus sur la chaine il y a un tutoriel qui explique clairement comment ça fonctionne.


  • Correcteurs

    Perso les paquets je suis revenu dessus plusieurs fois c'est juste horrible, j'y arrive toujours pas.

    Thoquent, je crois que tu ne sais pas comment tu vas définir la cadence de tir c'est ça?
    Il faut simplement que tu définisses tous les combien de ticks ton arme doit tirer un projectile.
    Moi dans ma condition je vérifie si ma division cartésienne à un risque égal à 0. Le dividende (enfin le nombre qui divise on dira, au cas où je me trompe) doit être le nombre de ticks entre chaque tir.
    Je ne dis pas que c'est la meilleure méthode par contre.

    Si je répond à côté, je ne vois vraiment pas sur quoi portait ta question.


  • Administrateurs

    Mais il y a quoi de compliqué ????
    Client -> conversion des données en byte -> envoie -> serveur -> restitution des données depuis les bytes -> action (fait par l'handler).
    Il y a vraiment rien de compliqué x)


  • Rédacteurs

    Les paquets je pensais que c'était compliqué jusqu'au jour où j'en ai eu besoin, et non c'est pas si compliqué (en même temps mon premier paquet ne contenait rien, c'était pour que le serveur sache qu'un certain event client avait été déclenché donc aucune donnée)



  • Merci pour toutes vos réponses !

    Alors, pour la cadence de tire ce n'est pas le problème, ne t'inquiète pas Toutoune.

    Pour le MouseEvent, j'avais fais un truc similaire, je faisais if(Mouse.isButtondown(1)) et je ne sais plus pourquoi j'ai enlevé ça.
    Pour les packets j'avais vu justement dans le code de flan qu'il en envoyait au serveur vu qu'il utilisais le Mouse.isButtondown il me semble, mais je n'ai pas regardé plus.
    Pour le moment je met en "stand-by" mon arme. Il faudra aussi faire en sorte de gérer les munitions etc mais je pense qu'il suffit de le faire via les NBT (oui je sais les utiliser maintenant (enfin je crois))

    Merci encore 🙂

    PS: Je met en résolu, j'ai besoin d'aide pour quelque chose que j'essayais de faire depuis longtemps sur le RenderPlayerEvent