• 24 Avril 2025, 05:37:51


Auteur Sujet: Quand un joueur Spray.  (Lu 1052 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne ApocKalipsS

  • *
  • Gangster
  • **** | Une experience GTA IV hors du commun !
  • Messages: 1141
    • Voir le profil
Quand un joueur Spray.
« le: 24 Août 2009, 16:18:59 »
Bonjour,
Voilà j'ai ce code :

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
  if(newkeys == KEY_FIRE && GetPlayerWeapon(playerid) == 41)
    {
    SetTimerEx("OnPlayerSpray",2000,0,"d",playerid);
    }

Puis un message dans OnPlayerPray, pourtant, quand je tire avec l'arme n°41, rien ne se passe, je ne comprend pas...

Pouvez-vous m'aider ?
Merci d'avance !

Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
Re : Quand un joueur Spray.
« Réponse #1 le: 24 Août 2009, 16:21:44 »
fait voir ton OnPlayerSpray
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

Hors ligne ApocKalipsS

  • *
  • Gangster
  • **** | Une experience GTA IV hors du commun !
  • Messages: 1141
    • Voir le profil
Re : Quand un joueur Spray.
« Réponse #2 le: 24 Août 2009, 16:29:20 »
Voilà :

public OnPlayerSpray(playerid)
{
        new keys,updown,leftright;
        GetPlayerKeys(playerid,keys,updown,leftright);
        if(keys == KEY_FIRE)
        {
            if(PlayerInfo[playerid][pMember] == 15||PlayerInfo[playerid][pLeader] == 15) // Ballas
            {
EnTag[playerid] = 0;
SendClientMessage(playerid, COLOR_WHITE, "Vous avez tagger une partie de votre territoire.");
    CreateObject(1528, 2422.969238, -1682.314819, 13.917331, 0.0000, 0.0000, 0.0000);
}
        }
}

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Quand un joueur Spray.
« Réponse #3 le: 24 Août 2009, 16:31:30 »
regarde s tu est ballas
et place ce code dans OnplayerKeyStateChange ;)



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne ApocKalipsS

  • *
  • Gangster
  • **** | Une experience GTA IV hors du commun !
  • Messages: 1141
    • Voir le profil
Re : Quand un joueur Spray.
« Réponse #4 le: 24 Août 2009, 16:33:03 »
Oui, mais j'aimerais que le message s'affiche 2 secondes plus tard, tout en vérifiant si il est toujours en train de tagger.

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Quand un joueur Spray.
« Réponse #5 le: 26 Août 2009, 14:18:29 »
Les variables qui contiennent les touches sont en fait des masques (1 bit pour chaque touche).
Donc lorsque l'on appuie sur KEY_FIRE, un certain bit de la variable va prendre la valeur 1.
Si on ne fait qu'appuyer sur la touche KEY_FIRE alors, et seulement dans ce cas, newkeys vaudra effectivement KEY_FIRE.
Mais si on appuie sur une autre touche, un autre bit sera positionné et la valeur de newkeys sera modifiée.

Il faut donc ne tester que le bit qui nous intéresse.
Pour ce faire, il faut utiliser l'opérateur & (et bit à bit).

Si je reprend ton bout de script il aurai fallu écrire :
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
  if((newkeys & KEY_FIRE) && GetPlayerWeapon(playerid) == 41)
    {
    SetTimerEx("OnPlayerSpray",2000,0,"d",playerid);
    }

Explication :
KEY_FIRE vaut 4 soit 00000100 en binaire
KEY_SPRINT vaut 8 soit 00001000 en binaire.

Si le joueur appuie en même temps sur KEY_FIRE et KEY_SPRINT, la valeur de newkeys sera :
00001100 (=8+4=12).
On voit que cette valeur n'est égale ni à KEY_FIRE ni à KEY_SPRINT.

Par contre, si on fait un & entre newkeys et KEY_FIRE on obtient :
00001100 (newkeys)
00000100 (KEY_FIRE)
00000100 = KEY_FIRE


Le test correct devrait donc être
if ((newkeys & KEY_FIRE) == KEY_FIRE ...Mais on peut simplifié car il suffit que (newkeys & KEY_FIRE) soit différent de 0 pour être sûr qu'il contient KEY_FIRE.

Autre exemple de test d'une touche qui n'est pas enfoncé (le joueur appuie en même temps sur KEY_FIRE et KEY_SPRINT) :
00001100 (newkeys)
00000010 (KEY_CROUCH=2, la touche qu'on veut tester)
00000000 (aucun bit positionné, la touche KEY_CROUCH n'est pas enfoncée)


++
Syg

Courtesy of GtaManiac

Hors ligne ApocKalipsS

  • *
  • Gangster
  • **** | Une experience GTA IV hors du commun !
  • Messages: 1141
    • Voir le profil
Re : Quand un joueur Spray.
« Réponse #6 le: 26 Août 2009, 17:06:38 »
Donc je doit faire :
if ((newkeys & KEY_FIRE) == KEY_FIRE && GetPlayerWeapon(playerid) == 41)
C'est ca ?
Je vais tester plus tard, merSySyg  :P

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Quand un joueur Spray.
« Réponse #7 le: 27 Août 2009, 14:43:15 »
Oui lepro49, c'est ça.

++
Syg
Courtesy of GtaManiac