GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: [StAfF]MaN le 13 Octobre 2007, 21:19:02

Titre: Récompense kill pour TEAM DIFFéRENTES
Posté par: [StAfF]MaN le 13 Octobre 2007, 21:19:02
Slt ^^ Alors voila c'est a mon tour de poser mes problèmes ^^

J'aimerais savoir si quelqu'un pourrais m'aider a faire en sorte que quand un player tue un player d'un team, il reçoivent une somme d'argent.

Jusque la c'est très simple ^^ C'est déjà dans mon script sa.

mais voila, quand il tue un player FLIC par exemple, il reçoit 1500,  quand il tue un player Alcooliques il reçoit 1000 etc. Des montants différent par team, de ce fait, un player alcoolique tue un FLIC il reçoit 2000 et quand il tue un stunter il reçoit rien et son argent baise a 0.

J'aimerais savoir si vous pouvez m'aider SVP ^^ Merci de vos réponses ;)
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: spykerc8 le 14 Octobre 2007, 02:53:55
Fait un switch avec la team comme paramètre...
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: [StAfF]MaN le 14 Octobre 2007, 19:46:20
Quoi ?  :laugh
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: spykerc8 le 14 Octobre 2007, 20:11:28
Un switch...tu sais..xD

Code: (c) [Sélectionner]
   
switch(LA_TEAM) {
case TEAM1: print("boooh"); //
case TEAM2: print("meh"); //
}

Tu prends la team comme paramètres et tu fais un switch dessus, qui va te permettre de faire une action selon la team.

Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: R@f le 14 Octobre 2007, 20:12:34
si tu veux en savoir plus :
http://www.siteduzero.com/tuto-3-2192-1-les-conditions.html#ss_part_3

++
R@f
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: [StAfF]MaN le 14 Octobre 2007, 20:22:35
Merci d'avoir répondu mais j'ais tout ça dans mon OnPlayerDeath

    public OnPlayerDeath(playerid, killerid, reason)
{
new name[MAX_PLAYER_NAME];
new string[256];
new deathreason[20];
new playercash;
GetPlayerName(playerid, name, sizeof(name));
GetWeaponName(reason, deathreason, 20);
if (killerid == INVALID_PLAYER_ID) {
    switch (reason) {
case WEAPON_DROWN:
{
                format(string, sizeof(string), "*** %s c'est noyé.)", name);
}
default:
{
    if (strlen(deathreason) > 0) {
format(string, sizeof(string), "*** %s a été tué. (%s)", name, deathreason);
} else {
    format(string, sizeof(string), "*** %s c'est suicidé.", name);
}
}
}
}
else {
new killer[MAX_PLAYER_NAME];
GetPlayerName(killerid, killer, sizeof(killer));
if (strlen(deathreason) > 0) {
format(string, sizeof(string), "*** %s a tué %s. (%s)", killer, name, deathreason);
} else {
format(string, sizeof(string), "*** %s a tué %s.", killer, name);
GivePlayerMoney(playerid, 1000);
}
}
SendClientMessageToAll(COLOR_RED, string);
{
playercash = GetPlayerMoney(playerid);
if (playercash > 25000)
        {
}
else
{
}
}
  return 1;
}

Je met mes swicth a la fin ou entre les deux ??
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: Syg le 14 Octobre 2007, 23:58:44
En fait, dans ton cas le switch n'est pas trsè pratique puisque tu veux des cas tordus.
Donc je te conseille plutôt des simples if.

A la place de la ligne
GivePlayerMoney(playerid, 1000);

Tu met une suite de if/else if comme ci-dessous :
Code: (cpp) [Sélectionner]
/* Un alcoolique tue un flic */
if (gTeam[killerid] == TEAM_ALCOOLO && gTeam[playerid] == TEAM_FLIC)
{
   /* On lui donne 2000 $ */
   GivePlayerMoney (killerid, 2000);
}
/* Un flic tue un stunter */
else if (gTeam[killerid] == TEAM_FLIC && gTeam[playerid] == TEAM_STUNTER)
{
   /* On lui enlève tout son fric */
   SetPlayerMoney (killerid, 0);
}
else if ...... etc

++
Syg
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: [StAfF]MaN le 15 Octobre 2007, 19:40:53
OK merci je vais essayer cette technique ^^ ++

 ps: A la place de SetPlayerMOney, on peut mettre ,ResetPayerMoney ?? ça revien au même non ? puisque sa réset....


Bon ba en tout cas merci a tous de vos réponses ^^ c'est un truk que j'arrivais pas a faire lol, pourtant c'était pas bien compliqué (surtout long mais bon ^^ )

Donc maintenant me reste plus cas tester avec des gens ^^ ++
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: Damaker03 le 15 Octobre 2007, 22:21:49
Reset c'est pas pour remettre a zéro ?? O_o
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: Syg le 15 Octobre 2007, 23:39:18
Oui, ResetPlayerMoney (playerid); ça remet l'argent du joueur à 0 donc ça fait bien la même chose que SetPlayerMoney (playerid, 0);.
On peut utiliser indifférement l'un ou l'autre.

++
Syg
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: [StAfF]MaN le 16 Octobre 2007, 19:18:01
Bon, slt deja ^^ mdr, Bah c'est juste pour dire que sa amrche pas, aucune erreur, un warning mais qui était deja la depuis un bon bout de temps... Et pas de récompce quand on kill un player... erf


http://pastebin.gtaonline.fr/pastebin.php?show=126


erf.... (en faite j'ais peut être mal fait mon script....)

Vous pouvez m'aider ??  :laugh  :-[
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: Syg le 16 Octobre 2007, 22:08:53
T'avais un peu (beaucoup) merdé dans les accolades ce qui fait que ton code n'était exécuté que si la chaine deathreason était vide (ce qui n'est jamais le cas).

Tiens, j'ai fais une correction, ça devrait marcher :
http://pastebin.gtaonline.fr/pastebin.php?show=127

++
Syg
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: [StAfF]MaN le 17 Octobre 2007, 14:16:15
aaaaaaaaaaaaaaaaaaaah ^^ PTDR   :lmao ^^ autant pour moi désolé, je savais pas pourquoi sa amrchais pas, bon ba je vous tien au courrant ^^ Merci encore tou t le monde ^^
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: spykerc8 le 17 Octobre 2007, 14:35:00
Tu devrais utiliser


Code: (cpp) [Sélectionner]

               else if (gTeam[killerid] == gTeam[playerid])
                {
                   SetPlayerScore(killerid,GetPlayerScore(killerid)-1);
                   GameTextForPlayer(playerid, "~r~Tu as tué un de tes potes !!!", 7000, 3);
                }

Au lieu de le faire pour toutes les teams...ça allègerait le code et l'optimiserait.
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: Syg le 17 Octobre 2007, 14:48:37
Oui pour regrouper tous les cas de teamkill ce serait bien.
Par contre, il devra conserver toutes les autres combinaisons ....
Donc je te conseille de ne pas rajouter de team.

++
Syg
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: [StAfF]MaN le 17 Octobre 2007, 15:09:30
Ha... Ok bon ba je ferais avec tant pi ^^   :happy

Donc a la place de


else if (gTeam[killerid] == TEAM_ALCOOLIQUES && gTeam[playerid] == TEAM_ALCOOLIQUES)
      {
         SetPlayerScore(killerid,GetPlayerScore(killerid)-1);
         GameTextForPlayer(playerid, "~r~Tu as tué un de tes potes !!!", 7000, 3);
      }


je met


else if (gTeam[killerid] == gTeam[playerid])

          {

                  SetPlayerScore(killerid,GetPlayerScore(killerid)-1);

                  GameTextForPlayer(playerid, "~r~Tu as tué un de tes potes !!!", 7000, 3);

               }

??
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: [StAfF]MaN le 17 Octobre 2007, 18:07:33
Désolé de double poster... Mais en faite, y a un prob lol, deja les massages n'appraissent pas quand on fait un teamkill, ensuite c'est le player qui meurt qui recoit la récompense lol...  :laugh

Petit coup de main ??  :happy


PS : Résolu !!!!! Voila en faite, je sais pourquoi sa ne fonctionnais pas, a la place de

GivePlayerMoney (playerid, 1500);

il fallais que je mette

GivePlayerMoney (killerid, 1500);

mdr, pareil pour les textes... Ra la la... Merci encore a tous ;)

PS (2) : Alors en faite, les textes ne s'affiches pas... je ne sais pas pourquoi... Mias je me demande s'il n'y a pas quelque chose a mettre a la place du zéro de

if (strlen(deathreason) > 0)

?? non ?? Vous n'avez pas une petite idée de ce que sa peut être ??
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: Syg le 18 Octobre 2007, 17:09:21
Oui, j'ai une petite idée de pourquoi ton texte s'affiche pas, j'ai même une grosse idée :

Code: (cpp) [Sélectionner]
if (strlen(deathreason) > 0)
{
   format(string, sizeof(string), "*** %s a tué %s. (%s)", killer, name, deathreason);
}
else
{
   format(string, sizeof(string), "*** %s a tué %s.", killer, name);
}
Il manque un GameTextForAll ou mieux, un SendMessageToAll pour afficher le texte, la fonction format ne fait que formatter une chaine de caractère mais ne l'affiche pas.

++
Syg
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: [StAfF]MaN le 18 Octobre 2007, 18:05:20
Donc je met quoi ??


SendPlayerMessageToAll() (ça juste au dessus des  Formats ??)
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: [StAfF]MaN le 19 Octobre 2007, 21:32:43
Salut ^^ Alors voila, mes message dans la chat box marchent bien, mais c'est les messages qui doivent apparaitrent a l'écran qui ne marche pas....

Est ce quelqu'un peut m'aider, j'ais cherché pendant un bon moment, avnt d'avoir poster ça :

Citer
PS (2) : Alors en faite, les textes ne s'affiches pas... je ne sais pas pourquoi... Mias je me demande s'il n'y a pas quelque chose a mettre a la place du zéro de

if (strlen(deathreason) > 0)

?? non ?? Vous n'avez pas une petite idée de ce que sa peut être ??

^^

++ en attente de vos réponses ^^
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: Syg le 19 Octobre 2007, 22:46:33
Je n'avais pas vu que tu avais répondu hier.

Pour les messages dans la chat box tu dis qu'ils fonctionnent donc tu as du ajouter un SendMessageToAll après le format.

En ce qui concerne les messages à l'écran, j'imagine que tu veux parler des gros messages au milieu de l'écran.
Si c'est le cas, c'est le même principe, mais tu utilises GameTextForAll à la place de SendMessageToAll.

Sinon, ne t'inquiète pas pour le if (strlen(deathreason) > 0), ce n'est pas lui qui est en cause.

++
Syg
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: [StAfF]MaN le 20 Octobre 2007, 12:36:37
Oui c'est bien les gros messages, mais je voudrais que seulement le killer vois le message, GamTexteForPlayer ne marche pas dans mon cas, c'est pour ça que je te demande l'aide.

Est ce qu'il faut que je mette

GameTexteForPlayer(playierid, koi, koi, koi); ?? je met quoi a la place des koi ?? ^^

avec comme exemple ça

format(string, sizeof(string), "*** %s est mort ^^!.", name);
SendClientMessageToAll(COLOR_BLEUTROUBLE, string);
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: Syg le 20 Octobre 2007, 18:46:01
Tiens :

format (string, sizeof(string), "~r~%s est mort ^^!.",  name);
GameTextForPlayer (killerid, string, 5000, 5);


Le ~r~ dans le format c'est pour afficher en rouge (il y en a d'autres : http://forum.sa-mp.com/index.php?topic=139.0)
Le dernier paramètre de GameTextForPlayer est le style (tu trouvera au même endroit que ci-dessus)
Le 5000 c'est le temps d'affichage en millisecondes (5000 ms = 5 s).
Et j'ai mis killerid au lieu de playerid comme premier paramètre parce que je pense que c'est ce que tu veux.

++
Syg
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: [StAfF]MaN le 20 Octobre 2007, 21:05:10
Mias moi je veu mettre un GameTextForPlayer mais pas a la place du SendClientMessageToAll....
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: Syg le 20 Octobre 2007, 21:42:00
Tu peux garder les deux, ce n'est pas interdit :

format(string, sizeof(string), "*** %s est mort ^^!.", name);
SendClientMessageToAll(COLOR_BLEUTROUBLE, string);
format (string, sizeof(string), "~r~%s est mort ^^!.",  name);
GameTextForPlayer (killerid, string, 5000, 5);


++
Syg
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: [StAfF]MaN le 20 Octobre 2007, 22:03:51
Bah j'ais mis ça mais sa marche pas :

http://pastebin.gtaonline.fr/pastebin.php?show=142
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: Syg le 21 Octobre 2007, 00:45:08
J'ai regardé ton script.
Cette ligne :
GameTextForPlayer(killerid, texte, 7000, 2);
ne marche que si il y a effectivement un tueur, si le playerid s'est tué tout seul, la ligne ce-dessus ne fera rien.
De plus, tu utilises le style 2, c'est pas le mieux, il ne disparait pas, essaies plutôt le style 3.

Pour voir ce que ça donne, remplaces la ligne ci-dessus par celle-ci :
GameTextForPlayer(playerid, texte, 7000, 3);

++
Syg
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: [StAfF]MaN le 21 Octobre 2007, 11:43:11
Ok merci ^^ Pour quand le player ce kill tout seul sa marche nikel ^^  :cheers

Mais juste une question, pour quand le player tue un autre, comme dans certaines lignes de mon script, il faut que je remplace playerid par killerid non ?? ça me parrais logique mais je te pose la question quand même ^^


Sinon merci encore pour tes réponses SYG ^^
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: Syg le 21 Octobre 2007, 18:51:59
Oui, ta logique est bonne, quand le joueur (playerid) se fait tuer par un autre joueur (killerid) il faut que tu mettes killerid comme paramètre pour que ce soit le tueur (killerid) qui voit les messages.

++
Syg
Titre: Re : Récompense kill pour TEAM DIFFéRENTES
Posté par: [StAfF]MaN le 22 Octobre 2007, 19:51:03
Désolé de répondre que maintenant ^^ MERCI !!!!!!!!!!!!!!!!!!!!!!!!!!!! ^^ Ra la la, il men aura fait voir ce script ptdr ;)
Titre: Re : Récompense kill pour TEAM Différentes
Posté par: Eloctro le 22 Octobre 2007, 19:57:58
J'ai un script sur mon serveur stunt si y tue un flic prison 30 secondes ou si ses un pompiers y se trouve dans une cage créer par moi dans l'eau et se noie 15 secondes et il a presque plus de vie.

Moi je trouve que ses bien après vous ses votre opinions.