GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: UrbanGhetto le 12 Septembre 2007, 00:29:53
-
Bonjour tout le monde.
Voila, J'ai envie de créer une commande, Qui execute une actions, Qui cette action est activable par une touche.
Alors j'ai pencer a GetPlayerKey mais ca prend seulement les touches du clavier du joueur.
Apres j'ai créer une commande dans ce genre :
if (strcmp("/key", cmdtext, true, 10) == 0)
{
TogglePlayerControllable(playerid,0);
if (KEY_ACTION(playerid)) {
SendClientMessage(playerid,0xAA3333AA,"Test");
}
return 1;
}
Mais ca marche pas il y a quel que erreurs...
Alors si vous pouviez m'aider ca serais sympa.
PS: Merci de ne pas me donner le code, Expliquez moi juste le principale, je ferais le reste tout seul :)
Merci d'avance ;)
-
La fonction magique pour ce que tu veux faire c'est la callback OnPlayerKeyStateChange.
Je ne t'en dit pas plus.
++
Syg
-
Merci Syg :)
Si je réussi je vous donnerais le code :D
Edit : Tu pourais m'en dit un tout petit peux plus quand même ::)
-
Et moi l'expliquation complete lol je voulais en faire une :)
AK NV.
-
Y'a déjà quelqu'un qui avait demandé sur ce topic :
http://www.gtaonline.fr/forums/index.php/topic,1284.msg11210.html#msg11210
++
Syg
-
Oui, Mais moi je cherche a faire une commande qui active l'action qui cette action est activable par une Key :(
-
J'ai pas compris.
++
Syg
-
Bon si tu veux, Je lance une commande (/key) Ensuite quand j'appuis sur JUMP il y a un SendClientMessage qui s'affiche. Mais je n'ai envie pas envie que JUMP soit utilisable avant que tu tappe /Key... J'espert avoir été clair :)
Mais bon le SendClientMessage c'est juste un exemple...
Alors j'ai pençer a faire ça :
if (strcmp("/key", cmdtext, true, 10) == 0)
{
TogglePlayerControllable(playerid,0);
if (KEY_ACTION(playerid)) {
SendClientMessage(playerid,0xAA3333AA,"Test");
}
return 1;
}
Mais la encors il y a des erreurs :(
Merci d'avance :)
-
Je reste persuadé que tu dois passer pas la callback OnPlayerKeyStateChange.
Pour faire ce que tu veux faire, tu déclares un tableau d'indicateur (un par joueur) que tu positionnes à VRAI quand le joueur saisie la commande et tu testes cette indicateur dans OnPlayerKeyStateChange quand le joueur appuie sur une touche :
new PlayerAllowed[MAX_PLAYERS] =) 0;
public OnPlayerCommandText (playerid, cmdtext[])
{
if (strcmp(cmd, "/key", true) == 0)
{
PlayerAllowed[playerid] = 1;
}
}
public OnPlayerKeyStateChange (playerid, newkeys, oldkeys)
{
if (newkeys & KEY_JUMP)
{
if (PlayerAllowed[playerid] == 1)
{
/* Faire l'action */
}
}
}
Voilà.
++
Syg
-
Pas mal comme idée :)
Merci Syg ;)
-
C'est possible de mettre autre chose a la place de KEY_SECONDARY_ATTACK par exemple > KEY_(premiere attack) (c'est un exemple) ??
AK NV.
-
-----------NOM-----------------------------ID--------
KEY_ACTION 1
KEY_CROUCH 2
KEY_FIRE 4
KEY_SPRINT 8
KEY_SECONDARY_ATTACK 16
KEY_JUMP 32
KEY_LOOK_RIGHT 64
KEY_HANDBRAKE 128
KEY_LOOK_LEFT 256
KEY_SUBMISSION 512
KEY_LOOK_BEHIND 512
KEY_WALK 1024
KEY_ANALOG_UP 2048
KEY_ANALOG_DOWN 4096
KEY_ANALOG_RIGHT 16384
KEY_ANALOG_LEFT 8192
KEY_UP 65408
KEY_DOWN 128
KEY_LEFT 65408
KEY_RIGHT 128
-
Merci ^^
AK NV.