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
-
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 ;)
-
Fait un switch avec la team comme paramètre...
-
Quoi ? :laugh
-
Un switch...tu sais..xD
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.
-
si tu veux en savoir plus :
http://www.siteduzero.com/tuto-3-2192-1-les-conditions.html#ss_part_3
++
R@f
-
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 ??
-
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 :
/* 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
-
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 ^^ ++
-
Reset c'est pas pour remettre a zéro ?? O_o
-
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
-
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 :-[
-
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
-
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 ^^
-
Tu devrais utiliser
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.
-
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
-
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);
}
??
-
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 ??
-
Oui, j'ai une petite idée de pourquoi ton texte s'affiche pas, j'ai même une grosse idée :
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
-
Donc je met quoi ??
SendPlayerMessageToAll() (ça juste au dessus des Formats ??)
-
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 :
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 ^^
-
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
-
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);
-
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
-
Mias moi je veu mettre un GameTextForPlayer mais pas a la place du SendClientMessageToAll....
-
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
-
Bah j'ais mis ça mais sa marche pas :
http://pastebin.gtaonline.fr/pastebin.php?show=142
-
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
-
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 ^^
-
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
-
Désolé de répondre que maintenant ^^ MERCI !!!!!!!!!!!!!!!!!!!!!!!!!!!! ^^ Ra la la, il men aura fait voir ce script ptdr ;)
-
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.