• 16 Mai 2024, 11:41:26


Auteur Sujet: Bogue système anti teamkill.  (Lu 1384 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne ShaDowxx™

  • We are cats.
  • *
  • Grand Banditisme
  • Messages: 706
    • Voir le profil
Bogue système anti teamkill.
« le: 26 Février 2014, 19:39:49 »
Bonsoir !

J'ai un problème avec mon petit code d'anti teamkill. Suivant ce que je voulais faire, un joueur qui tue un autre de son équipe se retrouvé sanctionné de -$2500.

Et, un joueur qui tue un autre joueur se retrouve avec un gain de $2500.

Or, le problème est que l'argent se multiplie, jusque des valeurs phénoménales.

Voici le lien du code.

Merci pour votre aide.

Cordialement.



Hors ligne Kiloutre

  • Nolife, nerd et geek passionné d'Ordinatique ! ^^
  • *
  • Grand Banditisme
  • Messages: 567
    • Voir le profil
Re : Bogue système anti teamkill.
« Réponse #1 le: 26 Février 2014, 20:02:25 »
Code: (pawn) [Sélectionner]
    if(Team[killerid] != Team[playerid])
        {
            GivePlayerMoney(killerid,GetPlayerMoney(playerid));
            ResetPlayerMoney(playerid);
        }
       
        if(Team[killerid] == Team[playerid])
        {
            GivePlayerMoney(killerid,GetPlayerMoney(playerid));
            GivePlayerMoney(playerid, 2500);
        }
Tu peux remplacer par
Code: (pawn) [Sélectionner]
    if(Team[killerid] != Team[playerid])
        {
            GivePlayerMoney(killerid,GetPlayerMoney(playerid));
            ResetPlayerMoney(playerid);
        }
       
        else
        {
            GivePlayerMoney(killerid,GetPlayerMoney(playerid));
            GivePlayerMoney(playerid, 2500);
        }

Pour ton code tout est correct, la seule chose qui peut causer un truc de ce type c'est
Code: (pawn) [Sélectionner]
GivePlayerMoney(killerid,GetPlayerMoney(playerid));
A moins que tu ais modifié la fonction GivePlayerMoney ou GetPlayerMoney, ça ne peut venir que de ça

[/url]

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : Bogue système anti teamkill.
« Réponse #2 le: 26 Février 2014, 21:25:41 »
Code: (pawn) [Sélectionner]
GivePlayerMoney(killerid, GetPlayerMoney(playerid));
En faisant ça, tu donnes au tueur tout l'argent du joueur tué. Il semble que ce n'est pas ce que tu veux. Contentes-toi de ça :

Code: (pawn) [Sélectionner]
if(Team[killerid] == Team[playerid] && killerid != INVALID_PLAYER_ID)
{
    new killer_money = GetPlayerMoney(killerid);
    killer_money -= 2500;
    ResetPlayerMoney(killerid);
    GivePlayerMoney(killerid, killer_money);
}

else if(killerid != INVALID_PLAYER_ID)
{
    GivePlayerMoney(killerid, 2500);
}

La première condition peut sembler compliquée pour rien, mais en réalité c'est le plus simple qu'on puisse faire sur SA-MP, puisqu'il n'existe pas de fonction SetPlayerMoney. Il faut donc enregistrer la valeur, remettre l'argent du joueur à zéro, puis appliquer la nouvelle valeur.
Voir les messages suivants


Edit : Correction du code, je prends en compte le fait que le tueur puisse ne pas exister.
« Modifié: 26 Février 2014, 21:35:13 par Gzsume »

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3550
    • Voir le profil
Re : Bogue système anti teamkill.
« Réponse #3 le: 26 Février 2014, 21:30:19 »
Et en faisant un GivePlayerMoney avec une valeur négative ...?


Adju ♥
(-_-)



Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : Bogue système anti teamkill.
« Réponse #4 le: 26 Février 2014, 21:34:01 »
Effectivement, ça fonctionne. Je n'y ai pas pensé. Voilà donc le code sans cette complication :

Code: (pawn) [Sélectionner]
if(Team[killerid] == Team[playerid] && killerid != INVALID_PLAYER_ID)
    GivePlayerMoney(killerid, -2500);

else if(killerid != INVALID_PLAYER_ID)
    GivePlayerMoney(killerid, 2500);

Hors ligne ShaDowxx™

  • We are cats.
  • *
  • Grand Banditisme
  • Messages: 706
    • Voir le profil
Re : Bogue système anti teamkill.
« Réponse #5 le: 27 Février 2014, 11:13:35 »
Je te remercie de ton aide Gzsume !

Je change pas, j'oublie toujours des codes essentiels.. :dry: