• 28 Mars 2024, 13:49:49


Auteur Sujet: [FS/INC] KeyStatus 1.0 release  (Lu 5936 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
[FS/INC] KeyStatus 1.0 release
« le: 04 Février 2013, 00:48:03 »
Bonjour, pour me simplifier la vie et la votre, j'ai coder ce petit script qui permet de checké le statut des touches du joueurs.


Utilisation :

Mettre le script en FS ou Include (ou intégrer directement dans votre GM). Ce script peut être utilisez en même temps que la callback de base OnPlayerKeyStateChange.
Si vous rencontrez le moindre problème quant à l'utilisation de ce script, je suis disponible.

Ne pas oubliez de rajouter les 3 callback dans votre GM ( ou dans le FS si vous l'utilisez de cet façon)

public OnKeyPressed(playerid, key)
{

return 1;
}

public OnKeyReleased(playerid, key)
{

return 1;
}

public OnPlayerUpdateKeyStatus(playerid)
{

return 1;
}


Fonction et callback


OnPlayerUpdateKeyStatus(playerid) - Cette callback est appelé à chaque fois que le joueur appuie ou relâche sur une touche détectable.
OnKeyPressed(playerid, key) - Cette callback est appelé à chaque fois que le joueur appuie sur une touche détectable.
OnKeyReleased(playerid, key) - Cette callback est appelé à chaque fois que le joueur relâche une touche détectable

GetHoldingTime(playerid, key); - Cette fonction renvoie le nombre de seconde depuis que le joueur à appuyer dessus.


Exemple :


public OnPlayerUpdateKeyStatus(playerid)
{
    if(KeyInfo[playerid][key_jump] && KeyInfo[playerid][key_yes] && KeyInfo[playerid][key_walk])
{
SendClientMessage(playerid, 0x165484, "Les touches Jump, Yes et walk ont été préssés.");
}
return 1;
}


public OnKeyReleased(playerid, key)
{
if(GetHoldingTime(playerid, key_yes) > 3) // si le joueur a maintenu la touche pendant 3 sec et la relâche
{
    SendClientMessage(playerid, 0x00FF00FF, "Vous avez maintenu la touche pendant au moins 3 secondes");
}
return 1;
}


Crédit :

Un grand merci à S!m qui m'a montrer une meilleur façon de traiter les informations des touches.


FS/Inc 1.0
Pastebin

(old)Version FS (BETA)
Beta
« Modifié: 23 Avril 2013, 20:07:23 par chneubeul »

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [FS TEST] KeyStatus 1.0
« Réponse #1 le: 08 Février 2013, 04:44:39 »
Salut,

je me suis amusé un peu avec le script et je te propose une autre façon de "détecter" quelles touches sont enfoncés ou non. J'ai joué un peu avec l'apparence et j'ai retiré un nombre de touches de la liste quand j'ai voulu mettre des couleurs sinon j'en avais trop...

http://www.solidfiles.com/d/8cd592bdbe/

Le truc le plus complexe que j'ai fait est ceci:
statut[(newkeys & key_action) > 0],

En gros, ça permet de ramener la détection de touche indépendante (newkeys & key_action) à deux chiffres en tout temps : 0 ou 1. Dans le tableau statut, ça correspond soit à "on" ou "off". Je trouvais ça plus élégant que d'afficher 1 ou 0.

Bonne chance pour la suite pour améliorer ce script.

++Sim++





Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [FS TEST] KeyStatus 1.0
« Réponse #2 le: 08 Février 2013, 22:41:40 »
Salut Sim :p

j'attendais une réponse avec impatience d'un gars comme toi :) je vais regarder ton script et essayer de détecter et d'améliorer les failles si elle existe :p

j'avais créé la version include, je l'ai tester et essaye d'améliorer un peu le script, mais aucun résultat vraiment satisfaisant pour donner des nouvelles on va dire :p

Edit : J'ai tester son script, il marche à merveille :O j'ai honte de moi now x'D petite question à quoi sert les " > 0" dans statut[(newkeys & key_action) > 0], par exemple puisque (newkeys & key_action) va renvoyer le statut 0 ou 1 non ?

A+, Sam.
« Modifié: 08 Février 2013, 22:52:29 par chneubeul »

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [FS TEST] KeyStatus 1.0
« Réponse #3 le: 09 Février 2013, 19:24:58 »
Salut,

effectivement, normalement tu peut enlever cela.

Merci.

ps. ça me fais plaisir d'avoir pu t'aider

++Sim++





Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [FS TEST] KeyStatus 1.0
« Réponse #4 le: 12 Février 2013, 11:52:54 »
Salut,

J'ai tester un peu avec toutes les touches de bases que tu avais mises et ça à crasher, jme suis dit tu as du faire une petite erreur, j'ai donc clarifier un peu les variables tout ça et il y avait quelques erreurs de "place". Mais même encore maintenant ça crash encore, tu n'aurais pas une idée ?

edit : il y a un piège tendu par sa:mp la touche 32768 soit (1 << 15) n'existe pas :p (ça crash toujours)

A+, Sam.
:cheers
« Modifié: 12 Février 2013, 14:19:36 par chneubeul »

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [FS TEST] KeyStatus 1.0
« Réponse #5 le: 13 Février 2013, 02:45:39 »
Salut,

plutôt curieux, ça fonctionnait très bien chez moi.
Peut-être un problème de compatibilité avec un autre script...

J'ai fais mes tests avec la version 0.3e, je vais essayer avec la nouvelle version.

EDIT: Je viens de me rappeler l'utilité des > 0, c'est que si je fais par exemple 12 & 4, la valeur qui sort est 4, non pas 1. Le > 0 permet de ramener cette valeur à 1. C'est la façon la plus élégante que j'ai trouvé de faire cela.

Merci.

++Sim++
« Modifié: 13 Février 2013, 03:12:44 par S!m »





Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [FS TEST] KeyStatus 1.0
« Réponse #6 le: 13 Février 2013, 21:25:36 »
Salut :)

Ah oui pas bête, je l'ai avis remis puisque j'me suis dit que l'utilité étais de "trié" lorsque newkeys est négatif.

Ben écoute j'ai même essayer avec un game mode vide, et ça crash :/

Edit : J'ai regarder de plus prêt le script, et j'ai tester sans le ctrlback, la taille dépassés par les 250 chars puis j'ai tester avec une autre variable pas de crash. J'ai alors mis ~r~ dans ma variable test et la.. CRASH :D je me suis donc rappelez d'une histoire de limite dans les textdraws et j'ai donc lu ceci sur wiki qui confirme ce que je pensais :

"If you use color codes (such as ~R~ ~G~) beyond 255th character the client will crash trying to display the textdraw. "

A+, Sam.
:cheers
« Modifié: 24 Avril 2013, 20:58:57 par chneubeul »