GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: [StAfF]MaN le 18 Juin 2008, 20:22:04
-
Salut ^^ Voila j'aimerai un peut d'aide pour la fin de mon mode counter strike !!! Si vous pouvez m'aidez ;)
Voila en faite a la fin de la manche c'est l'équipe qui a marqué le plus de points, qui a le meilleur score quoi, qui remporte ^^ Mais voila, en faite j'ai pas trop compris le système
J'ai trouvé un sujet déjà qui traite du sujet mais comme je viens de dire ^^ pas trop compris, surtout que pour moi c'est pour une TEAM et non pour un player ;)
J'ai fais ça dans mon code :
forward FinDeManche();
dans le code qui fait que les terros marque un point :
SetPlayerScore(playerid,gTeam[TEAM_T || TEAM_T_BOMB]++);
Dans le code qui fait que les CT marquent un points :
SetPlayerScore(playerid,gTeam[TEAM_CT]++);
public FinDeManche()
{
new string[128];
new playerid;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(SetPlayerScore(playerid,gTeam[TEAM_CT]++) == 30)
{
GetPlayerScore(gTeam[TEAM_CT]);
GetPlayerScore(gTeam[TEAM_T || TEAM_T_BOMB]);
format(string,sizeof(string),"Anti-Terroristes Gagnent : ~b~%d ~n~ Terroristes perdent : ~r~%d",gTeam[TEAM_CT], gTeam[TEAM_T || TEAM_T_BOMB]);
GameTextForAll(string, 5000, 3);
SetPlayerScore(i, 0);
return 1;
}
if(SetPlayerScore(playerid,gTeam[TEAM_T || TEAM_T_BOMB]++) == 30)
{
GetPlayerScore(gTeam[TEAM_T || TEAM_T_BOMB]);
GetPlayerScore(gTeam[TEAM_CT]);
format(string,sizeof(string),"Anti-Terroristes Perdent : ~r~%d ~n~ Terroristes Gagnent : ~b~%d",gTeam[TEAM_CT], gTeam[TEAM_T || TEAM_T_BOMB]);
GameTextForAll(string, 5000, 3);
SetPlayerScore(i, 0);
SetPlayerScore(gTeam[TEAM_T || TEAM_T_BOMB], 0);
SetPlayerScore(gTeam[TEAM_CT], 0);
return 1;
}
}
return 1;
}
mais voila ^^ ça ne fonctionne pas tout simplement :p
Est ce que vous pouvez m'aider ? SVP ^^ merci les gars ;)
-
En principe, dans le mode original, ce le fait tout seul ....
++
nikko
-
Bah oui mais la c'est MON mode ^^ le mode original je l'ai aussi pour prendre exemple de certaines choses, mais je ne l'ai regardé que pour le début de mon mode, même pas 2/10ième de mon mode quoi... Donc voila ^^
-
Je UP ^^ Pleas les gens.. j'arrive pas :'( J'arrêt pas de changer des choses mais ça fonctionne toujours pas.... :bangin
-
Si vous pouviez m'aider les gens ^^ SVP !!!!! Merci ;) :-\ :) :D
-
Salut,
Quand un joueur gagne un point, fais SetPlayerScore(playerid, GetPlayerScore(playerid) + 1); ainsi quegTeam[LaTeam]++;, après dans FinDeManche() tu vérifie si les gTeam ont 30 points. :)
++
Alexandre
-
ça donne ça mais sa fonctionne pas :
dans les bouts de scripts ou ils fallait ^^
gTeam[TEAM_CT] ++;
et
gTeal[TEAM_T || TEAM_T_BOMB]++;
et voila mon public FinDeManche :
public FinDeManche()
{
new string[128];
//new playerid;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(gTeam[TEAM_CT] == 3)
{
GetPlayerScore(gTeam[TEAM_CT]);
GetPlayerScore(gTeam[TEAM_T || TEAM_T_BOMB]);
format(string,sizeof(string),"~w~Anti-Terroristes Gagnent : ~b~%d ~n~ ~r~Terroristes perdent : %d",gTeam[TEAM_CT], gTeam[TEAM_T || TEAM_T_BOMB]);
GameTextForAll(string, 5000, 1);
SetPlayerScore(i, 0);
SetPlayerScore(gTeam[TEAM_T || TEAM_T_BOMB], 0);
SetPlayerScore(gTeam[TEAM_CT], 0);
return 1;
}
if(gTeam[TEAM_T || TEAM_T_BOMB] == 3)
{
GetPlayerScore(gTeam[TEAM_T || TEAM_T_BOMB]);
GetPlayerScore(gTeam[TEAM_CT]);
format(string,sizeof(string),"~w~Anti-Terroristes Perdent : %d ~n~ ~r~Terroristes Gagnent : ~b~%d",gTeam[TEAM_CT], gTeam[TEAM_T || TEAM_T_BOMB]);
GameTextForAll(string, 5000, 1);
SetPlayerScore(i, 0);
SetPlayerScore(gTeam[TEAM_T || TEAM_T_BOMB], 0);
SetPlayerScore(gTeam[TEAM_CT], 0);
return 1;
}
}
return 1;
}
Bilan : fonctionne pas :s
-
Là je sais pas trop, que signifie gTeam[TEAM_T || TEAM_T_BOMB] ? :happy
-
les "l l" signifie que "si les scores des Terro ET les score des CT sont a 3 .....
++
nikko
-
si la team Terro et la team Terro + bombe ont le score = a 3, ils gagnent ^^
Mais ça ne fonctionne pas, pareil pour les CT :s
-
Ah ok. :happy
Bon sinon je ne vois pas trop pourquoi ça marche pas, mais ça peut ne pas marcher pour une multitude de raison. :happy
if(gTeam[TEAM_CT] == 3)
{
GetPlayerScore(gTeam[TEAM_CT]); // Là tu prend le score du joueur 3 (vu que gTeamTEAM_CT = 3
GetPlayerScore(gTeam[TEAM_T || TEAM_T_BOMB]); // Là le score du joueur TEAM_T+TEAM_T_BOMB
format(string,sizeof(string),"~w~Anti-Terroristes Gagnent : ~b~%d ~n~ ~r~Terroristes perdent : %d",gTeam[TEAM_CT], gTeam[TEAM_T || TEAM_T_BOMB]); // Tu fais un string dans ta boucle, alors que l'on en a besoin une seule fois
GameTextForAll(string, 5000, 1); // idem
SetPlayerScore(i, 0); // à garder dans la boucle
SetPlayerScore(gTeam[TEAM_T || TEAM_T_BOMB], 0); // Là tu fixes le score du joueur avec l'ID TEAM_T+TEAM_T_BOMB]
SetPlayerScore(gTeam[TEAM_CT], 0); // Là du joueur TEAM_CT
return 1; // Tu met un return dans tes 2 conditions, inutiles
}
Il faudrait d'abord faire la condition, et ensuite le for, sinon ça fait 200 conditions pour rien.
Le seul truc à garder dans ta boucle c'est SetPlayerScore(i, 0);. :)
++
Alexandre
-
Re bon alors ^^ :
public FinDeManche()
{
if(gTeam[TEAM_CT] == 3)
{
GetPlayerScore(gTeam[TEAM_T || TEAM_T_BOMB]);
GetPlayerScore(gTeam[TEAM_CT]);
GameTextForAll("~w~Anti-Terroristes Gagnent : ~b~%d ~n~ ~r~Terroristes perdent : %d", 5000, 3, gTeam[TEAM_CT], gTeam[TEAM_T || TEAM_T_BOMB]);
SetPlayerScore(gTeam[TEAM_CT || TEAM_T_BOMB || TEAM_T], 0);
return 1;
}
if(gTeam[TEAM_T || TEAM_T_BOMB] == 3)
{
GetPlayerScore(gTeam[TEAM_T || TEAM_T_BOMB]);
GetPlayerScore(gTeam[TEAM_CT]);
GameTextForAll("~w~Anti-Terroristes Perdent : %d ~n~ ~r~Terroristes Gagnent : ~b~%d", 5000, 3, gTeam[TEAM_CT], gTeam[TEAM_T || TEAM_T_BOMB]);
SetPlayerScore(gTeam[TEAM_CT || TEAM_T_BOMB || TEAM_T], 0);
return 1;
}
return 1;
}
Et 4 warnings, qui sont "normale" c'est a cause d'eux que j'ai fait un string ( :blink ) (= - =)"
C:\Documents and Settings\.......\Bureau\sa-mp 2.2 r2\gamemodes\CounterStrike.pwn(1058) : warning 202: number of arguments does not match definition
C:\Documents and Settings\.......\Bureau\sa-mp 2.2 r2\gamemodes\CounterStrike.pwn(1058) : warning 202: number of arguments does not match definition
C:\Documents and Settings\.......\Bureau\sa-mp 2.2 r2\gamemodes\CounterStrike.pwn(1066) : warning 202: number of arguments does not match definition
C:\Documents and Settings\.......\Bureau\sa-mp 2.2 r2\gamemodes\CounterStrike.pwn(1066) : warning 202: number of arguments does not match definition
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Warnings.
Je peut les résoudre comment ?? Avec une autre technique que le string ?
-
C'est lesquelles de lignes qui posent des warnings ?
-
GameTextForAll("~w~Anti-Terroristes Gagnent : ~b~%d ~n~ ~r~Terroristes perdent : %d", 5000, 3, gTeam[TEAM_CT], gTeam[TEAM_T || TEAM_T_BOMB]);
et
GameTextForAll("~w~Anti-Terroristes Perdent : %d ~n~ ~r~Terroristes Gagnent : ~b~%d", 5000, 3, gTeam[TEAM_CT], gTeam[TEAM_T || TEAM_T_BOMB]);
Merci ;)
-
Ah bah, fais un string. :happy
-
Ok c'est fait ^^ Mais est ce qu'il faut que j'ai impérativement in SetPlayerScore(playerid, GetPlayerScore(playerid) + 1) ?? Parce que je n'utilise que le gTeam la, c'est peut être pour ça que ça ne fonctionne pas, enfin bon, j'essaye juste avec le gTeam et je verrai après pour le SetPlayerScore(playerid, GetPlayerScore(playerid) + 1) ^^ Merci je tiens au courant !!
-
Ah bah, les utilisent pas. :happy
SetPlayerScore c'est le score d'un JOUEUR (que tu pourras voir quand tu fais Tab), utilises juste gTeam[team]++ quand quelqu'un marque un point. ;)
++
Alexandre
-
Merci -Alexandre ^^ Le code fonctionne bien, mais il y a un prob quand même, quand la manche est fini, le score des deux équipes est affiché, mais c'est le même pour les deux, et c'est toujours le cas des Anti terro qui est repris, par exemple :
j'ai mis le nombre de point a gagner pour gagner la manche a 1.
Les terros Gagnent 1 parti a 0, le Score s'affiche :
Les Anti terro gagnent 1 les Terros perdent 1
Alors que normalement le bon message serait :
Les Anti terro perdent 0 Les terros gagnent 1
Le code :
public FinDeManche()
{
new string[128];
new name[MAX_PLAYER_NAME];
new texte[256];
new playerid;
if(gTeam[TEAM_CT] == 1)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(bombeexplose[i] == 0)
{
GetPlayerScore(gTeam[TEAM_CT]);
GetPlayerScore(gTeam[TEAM_T || TEAM_T_BOMB]);
format(string,sizeof(string),"~w~Anti-Terroristes Gagnent : ~b~%d ~n~ ~r~Terroristes perdent : %d",gTeam[TEAM_CT], gTeam[TEAM_T || TEAM_T_BOMB]);
GameTextForAll(string, 5000, 3);
SetPlayerScore(gTeam[TEAM_CT || TEAM_T_BOMB || TEAM_T], 0);
GetPlayerName(playerid, name, sizeof(name));
format(texte, sizeof(texte), "le player %s est partit de la map de Lost Pueblo", name);
SendClientMessageToAll(COLOR_RED, texte);
SetPlayerPos(playerid, -1480.0541,2636.3113,58.7879);
lost[playerid] = 0;
KillTimer(Bombe);
KillTimer(Spawn);
KillTimer(Explose);
KillTimer(Counter);
KillTimer(Timer);
SetPlayerHealth(playerid, 100);
DisablePlayerCheckpoint(playerid);
if(gTeam[TEAM_T_BOMB]|| gTeam[TEAM_T])
{
GetPlayerName(playerid, name, sizeof(name));
format(texte, sizeof(texte), "le player %s est partit de la map de Lost Pueblo", name);
SendClientMessageToAll(COLOR_RED, texte);
SetPlayerPos(playerid, -1433.7158,2612.1035,55.8359);
lost[playerid] = 0;
SetPlayerHealth(playerid, 100);
bomb[i] = 0;
}
return 1;
}
}
}
if(gTeam[TEAM_T || TEAM_T_BOMB] == 1)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(bombeexplose[i] == 1)
{
GetPlayerScore(gTeam[TEAM_CT]);
GetPlayerScore(gTeam[TEAM_T || TEAM_T_BOMB]);
format(string,sizeof(string),"~w~Anti-Terroristes Perdent : %d ~n~ ~r~Terroristes Gagnent : ~b~%d",gTeam[TEAM_CT], gTeam[TEAM_T || TEAM_T_BOMB]);
GameTextForAll(string, 5000, 3);
SetPlayerScore(gTeam[TEAM_CT || TEAM_T_BOMB || TEAM_T], 0);
GetPlayerName(playerid, name, sizeof(name));
format(texte, sizeof(texte), "le player %s est partit de la map de Lost Pueblo", name);
SendClientMessageToAll(COLOR_RED, texte);
SetPlayerPos(playerid, -1480.0541,2636.3113,58.7879);
lost[playerid] = 0;
KillTimer(Bombe);
KillTimer(Spawn);
KillTimer(Explose);
KillTimer(Counter);
KillTimer(Timer);
bomb[i] = 0;
SetPlayerHealth(playerid, 100);
DisablePlayerCheckpoint(playerid);
if(gTeam[TEAM_CT])
{
GetPlayerName(playerid, name, sizeof(name));
format(texte, sizeof(texte), "le player %s est partit de la map de Lost Pueblo", name);
SendClientMessageToAll(COLOR_RED, texte);
SetPlayerPos(playerid, -1480.0541,2636.3113,58.7879);
lost[playerid] = 0;
SetPlayerHealth(playerid, 100);
KillTimer(Bombe);
KillTimer(Spawn);
KillTimer(Explose);
KillTimer(Counter);
KillTimer(Timer);
DisablePlayerCheckpoint(playerid);
return 1;
}
}
}
}
return 1;
}
Comme vous pouvez le voir le code a bien changer ^^
-
On peu surtout voir que tu as réutilisé des PlayerScore pour définir le score d'une team et pas d'un joueur. :happy
-
Re ^^
Alors j'ai modifié un peut mon script, résultat, plus de message a la fin d'une manche....
code :
public FinDeManche()
{
new string[128];
new name[MAX_PLAYER_NAME];
new texte[256];
new playerid;
KillTimer(Bombe);
KillTimer(Spawn);
KillTimer(Explose);
KillTimer(Counter);
KillTimer(Timer);
if(gTeam[TEAM_CT] == 1)
{
if(bombeexplose[playerid]==0)
{
format(string,sizeof(string),"~w~Anti-Terroristes Gagnent : ~b~%d ~n~ ~r~Terroristes perdent : %d",gTeam[TEAM_CT], gTeam[TEAM_T || TEAM_T_BOMB]);
GameTextForAll(string, 5000, 3);
SetPlayerScore(gTeam[TEAM_CT || TEAM_T_BOMB || TEAM_T], 0);
GetPlayerName(playerid, name, sizeof(name));
format(texte, sizeof(texte), "le player %s est partit de la map de Lost Pueblo", name);
SendClientMessageToAll(COLOR_RED, texte);
SetPlayerPos(playerid, -1480.0541,2636.3113,58.7879);
lost[playerid] = 0;
KillTimer(Bombe);
KillTimer(Spawn);
KillTimer(Explose);
KillTimer(Counter);
KillTimer(Timer);
SetPlayerHealth(playerid, 100);
DisablePlayerCheckpoint(playerid);
return 1;
}
if(gTeam[TEAM_T_BOMB]|| gTeam[TEAM_T])
{
GetPlayerName(playerid, name, sizeof(name));
format(texte, sizeof(texte), "le player %s est partit de la map de Lost Pueblo", name);
SendClientMessageToAll(COLOR_RED, texte);
SetPlayerPos(playerid, -1433.7158,2612.1035,55.8359);
lost[playerid] = 0;
lost[playerid] = 0;
KillTimer(Bombe);
KillTimer(Spawn);
KillTimer(Explose);
KillTimer(Counter);
KillTimer(Timer);
SetPlayerHealth(playerid, 100);
DisablePlayerCheckpoint(playerid);
for(new i = 0; i < MAX_PLAYERS; i++)
{
bomb[i] = 0;
}
}
return 1;
}
else if(gTeam[TEAM_T || TEAM_T_BOMB] == 1)
{
if(bombeexplose[playerid]==1)
{
format(string,sizeof(string),"~w~Anti-Terroristes Perdent : %d ~n~ ~r~Terroristes Gagnent : ~b~%d",gTeam[TEAM_CT], gTeam[TEAM_T || TEAM_T_BOMB]);
GameTextForAll(string, 5000, 3);
SetPlayerScore(gTeam[TEAM_CT || TEAM_T_BOMB || TEAM_T], 0);
GetPlayerName(playerid, name, sizeof(name));
format(texte, sizeof(texte), "le player %s est partit de la map de Lost Pueblo", name);
SendClientMessageToAll(COLOR_RED, texte);
SetPlayerPos(playerid, -1480.0541,2636.3113,58.7879);
DisablePlayerCheckpoint(playerid);
lost[playerid] = 0;
KillTimer(Bombe);
KillTimer(Spawn);
KillTimer(Explose);
KillTimer(Counter);
KillTimer(Timer);
for(new i = 0; i < MAX_PLAYERS; i++)
{
bomb[i] = 0;
}
SetPlayerHealth(playerid, 100);
DisablePlayerCheckpoint(playerid);
}
if(gTeam[TEAM_CT])
{
GetPlayerName(playerid, name, sizeof(name));
format(texte, sizeof(texte), "le player %s est partit de la map de Lost Pueblo", name);
SendClientMessageToAll(COLOR_RED, texte);
SetPlayerPos(playerid, -1480.0541,2636.3113,58.7879);
lost[playerid] = 0;
SetPlayerHealth(playerid, 100);
KillTimer(Bombe);
KillTimer(Spawn);
KillTimer(Explose);
KillTimer(Counter);
KillTimer(Timer);
DisablePlayerCheckpoint(playerid);
return 1;
}
}
return 1;
}
pourtant vu comme ça, ça devrait fonctionner.... :-X
de plus, il n'y a plus de téléportation, et encore d'autres probs que je vous dirais après, pour m'aider a les résoudre aussi ^^
-
bombeexplose[playerid]==0 veut dire qu'il faut que bombeexplose[0]==0, vu que tu n'as pas défini playerid.
Je vois pas trop ce que tu veut faire avec ce playerid, tu pourrais m'en dire plus ? :happy
-
J'ai mis playerid car c'est comme ça que je l'ai mis dans un autre parti de mon mode, c'est tout ^^
J'ai changer, j'ai mis i avec un
for(new i = 0; i < MAX_PLAYERS; i++)
{
a la place du playerid ;)
http://pastebin.gtaonline.fr/pastebin.php?show=449
MODE COMPLèT POUR CEUX QUI VEULENT M'AIDER ET/OU AMéLIORER !!! De toute façon je l'aurais mis dans le showroom ;)
Mais le mode est pas fini alors c'est normale que ça bug ^^
-
Mais tu as refait l'erreur de mettre tes format dans ta boucle. (http://image.jeuxvideo.com/smileys/45.gif)
Sinon, tu pourrais indenter stp ? :happy Parce que là je m'y retrouve plus. :(
-
il est identé t'inquiet ^^
http://pastebin.gtaonline.fr/pastebin.php?show=449
-
Bah pas correctement, lol. :D
-
C'est lisible et très compréhensible je trouve :s c'est pas le sujet de toute façon ^^
Le sujet du moment c'est :
Plus de message a la fin de la manche, plus de téléportations ... Et d'autres probs que si tu regarde bien le script et que tu essay après le GM, tu devrait voir ^^
-
Aidez moi SVP ;D :'( Y a rien a faire j'arrive pas je vois pas d'où ça vient.... :ninja
-
3ième poste a suivre... Je désespère !! Aidez moi S'il vous plais !!! :(
-
Alors la c'est very big Up ^^ mais il faut vraiment que je réussisent a faire le système de comptabilité !!! Pouvez vous m'aider ?? S'il vous plais :D
-
Oo 4 poste Oo
-
Ce n'est pas 4 post d'affilés ;)
seulement 3 :D et le dernier date d'aujourdui
++
nikko
-
oui mais c'est pour la bonne cause ^^
http://pastebin.gtaonline.fr/pastebin.php?show=496
Script bien identé ^^ pour ceux que ça intéressent ^^
Merci pour votre futur aide :king
-
salut[StAfF]mAn ,
alors, premièrement, ta fonction FinDeManche est appelée dans une boucle, et vu ce qu'elle fait, je te recommanderais de l'appelée à l'extérieur.... tu ne veut pas 200 fois le message [StAfF]mAn a quitté la map de ....
je suis désolé...mais ça doit être moi l'idiot... je ne voit aps le pourquoi de la variable bombeexplose[MAX_PLAYERS], à tous les endroit où tu t'en sert, c'est bine pour savoir si la bombe a été planté?? et bien la variable explose ne dit-elle pas la même chose, si bombe != 0 , la bombe est posée.... non?
vraiment désolé, mais il y a plein de KillTimer un peu partout dans le script, et je les trouve un peu trop nombreux, je ne crois pas qu'ils soient tous nécessaire mais bon, c'est ton script, à toi de voir (en plus que je n'ai jamais fait de script du genre excepté un attaque et défense de base pour un mec)
tes killtimer, de FinDeManche sont dans une boucle, je te conseille de les replacer...
aussi, tu utilise mal le : if(gTeam[TEAM_CT] == 1), alors il te faudrait l'écrire if(gTeam[playerid] == TEAM_CT)
après un minimum... voici ce à quoi j'arrive:
lien pastebin (http://pastebin.gtaonline.fr/pastebin.php?show=497)
lol, je l'ai modifié moyennement, alors je te remet tout le script sur pastebin, a toi de voir si tu arrive a quelque chose avec ça...
++Sim++
-
ok ^^ Faut que je regarde ça ;)