GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Eloctro le 05 Juillet 2008, 11:29:41
-
Bonjour ,
Je vous explique je voudrais que un textdraws face un de temp de 2 minute et je ses pas comment faire merci de m'aider et je voudrai que quand sa arrive a 0:00 sa active une commande
Ma deuxème question est sa :
DisablePlayerCheckpoint();
Je voudrait savoir se qui faut mettre entre paranthèse pour que tous le joueurs l'est désactivé .
-
Pour ta textdraw tu veut un temps qui s'affiche ?
Sinon DisablePlayerCheckpoint() a pour argument playerid, donc fait une boucle pour tout les joueurs et ça devrait être bon. :)
++
Alexandre
-
Le textDraw je ve que sa face 2:00 apres 1:59 apres 1:58 apres 1:57 apres ect ......................................
-
SetTimer + TextDrawSetString. ;)
++
Alexandre
-
On utilise comment TextDrawSetString
-
http://streetplaya.hopto.org/SAMP_Wiki/wiki.sa-mp.com/wiki/TextDrawSetString.html
-
donc sa fait sa :
TextDrawSetString(Text:text, string[])
Donc en rouge je mes mon nouveau texte .
Mais je mes ou mon vert(ma define)
#define Heure "2:00"
-
pour désactivé le checkpoint pour tout le monde tu fait une boucle for allant jusqu'à MAX_PLAYERS
Pour le text draw un timer avec la variable affichant le compte a rebour qui reçoi variable-1 a chaque passage du timer
-
Un Expemple
-
for(new i = 0; i < MAX_PLAYERS; i++)
{
DisablePlayerCheckpoint(i);
}
-
Sa je savais comme même ses pour les textedraws l'exemple que je veut .
[EDIT]
public OnPlayerEnterCheckpoint(playerid) {
if (desente1){
if(gTeam[playerid] == TEAM_Terroriste) {
SendClientMessage(playerid, COLOR_YELLOW,"Vous avez amorcé la bomb!!");
SendClientMessageToAll(COLOR_LIGHTBLUE,"> Les terroristes on amorcé la bomb !");
for(new i = 0; i < MAX_PLAYERS; i++)
{
DisablePlayerCheckpoint(i);
}
SetTimer("desb", 1000, 0);
SetTimer("bomb", 1000, 0);
}
else if(gTeam[playerid] == TEAM_Anti-Terroriste) {
SendClientMessage(playerid, COLOR_YELLOW,"La Bomb n'est pas amorcé !!");
}
}
if (desente2){
if(gTeam[playerid] == TEAM_Terroriste) {
SendClientMessage(playerid, COLOR_YELLOW,"Vous avez déja amorcé la bomb!!");
}
else if(gTeam[playerid] == TEAM_Anti-Terroriste) {
SendClientMessageToAll(COLOR_LIGHTBLUE,"> Les Anti-Terroriste on désamorcé la Bomb !");
SendClientMessage(playerid, COLOR_YELLOW,"Vous avez désamorcez la Bomb !!");
SetTimer("AntiGagne", 1000, 0);
}
}
return 1;
}
Et j'ai un probleme sa marche mais je retire avec DisablePlayerCheckpoint(); ses bon sa marche mais quand je mes desente2 il y aussi desente1 qui se met en route
desente2 = SetPlayerCheckpoint(i, 6.5432,2513.4006,16.4844, 4);
Voila la ligne
-
Un CP n'a pas d'ID, donc tu ne peut pas faire desente2 = SetPlayerCheckpoint(i, 6.5432,2513.4006,16.4844, 4);, il faut faire une variable intermédiaire.
// descente 1
SetPlayerCheckpoint();
descente[playerid] == 1;
// descente 2
SetPlayerCheckpoint();
descente[playerid] == 2;
++
Alexandre
-
Explique toi aulieu de donnez des truc que tu trouve sur WiKi sinon a la place de se tropic on mais un lien pour allez sur WiKi mais on a mis un tropic .
Donc :
SetPlayerCheckpoint(i, 6.5432,2513.4006,16.4844, 4);
descente[playerid] == 1
Je mes ou sa je remplace a quoi :
J'ai des modifications a faire le dedans :
public OnPlayerEnterCheckpoint(playerid) {
if (desente1){
if(gTeam[playerid] == TEAM_Terroriste) {
SendClientMessage(playerid, COLOR_YELLOW,"Vous avez amorcé la bomb!!");
SendClientMessageToAll(COLOR_LIGHTBLUE,"> Les terroristes on amorcé la bomb !");
for(new i = 0; i < MAX_PLAYERS; i++)
{
DisablePlayerCheckpoint(i);
}
SetTimer("desb", 1000, 0);
SetTimer("bomb", 1000, 0);
}
else if(gTeam[playerid] == TEAM_Anti-Terroriste) {
SendClientMessage(playerid, COLOR_YELLOW,"La Bomb n'est pas amorcé !!");
}
}
if (desente2){
if(gTeam[playerid] == TEAM_Terroriste) {
SendClientMessage(playerid, COLOR_YELLOW,"Vous avez déja amorcé la bomb!!");
}
else if(gTeam[playerid] == TEAM_Anti-Terroriste) {
SendClientMessageToAll(COLOR_LIGHTBLUE,"> Les Anti-Terroriste on désamorcé la Bomb !");
SendClientMessage(playerid, COLOR_YELLOW,"Vous avez désamorcez la Bomb !!");
SetTimer("AntiGagne", 1000, 0);
}
}
return 1;
}
Et sa jen fait quoi ?
desente2 = SetPlayerCheckpoint(i, 6.5432,2513.4006,16.4844, 4);
-
Non je n'ai pas copié/collé ça du Wiki, et même je ne vois pas trop ce que tu as contre le Wiki SA:MP car il contient tout ce qu'il faut...
Pour ton descente2 je t'ai déjà dit par quoi le remplacer mais tu ne veux pas car tu penses que ça sort du Wiki...
++
Alexandre
-
Ok mais dit comment on fait tu ma que le CP n'as pas d'id et que desente2 = ect ne peut pas marcher et qu'il faut faire une variable mais je la mes ou la variable ou remplce de quoi ?
-
Je sait pas si c'est ce qui tinterresse mais j'ai fait quelque chose sur mon forum regarde http://fight-international.com/forums/index.php?showtopic=139
++
Garderer
-
Tes sure de ton Code
[EDIT]J'ai des erreur pouvez m'aider
public OnPlayerEnterCheckpoint(playerid)
{
switch(desbomb[playerid])
case 1:
{
if(gTeam[playerid] == TEAM_Terroriste)
{
SendClientMessage(playerid, COLOR_YELLOW,"Vous avez amorcé la bomb!!");
SendClientMessageToAll(COLOR_LIGHTBLUE,"> Les terroristes on amorcé la bomb !");
for(new i = 0; i < MAX_PLAYERS; i++)
{
DisablePlayerCheckpoint(i);
}
SetTimer("desb", 1000, 0);
SetTimer("bomb", 1000, 0);
}
else if(gTeam[playerid] == TEAM_Anti-Terroriste)
{
SendClientMessage(playerid, COLOR_YELLOW,"La Bomb n'est pas amorcé !!");
}
SetPlayerCheckpoint(playerid,2035.2924,1014.1985,10.9446, 10.0);
}
case 2:
{
if(gTeam[playerid] == TEAM_Terroriste)
{
SendClientMessage(playerid, COLOR_YELLOW,"Vous avez déja amorcé la bomb!!");
}
else if(gTeam[playerid] == TEAM_Anti-Terroriste)
{
SendClientMessageToAll(COLOR_LIGHTBLUE,"> Les Anti-Terroriste on désamorcé la Bomb !");
SendClientMessage(playerid, COLOR_YELLOW,"Vous avez désamorcez la Bomb !!");
SetTimer("AntiGagne", 1000, 0);
}
SetPlayerCheckpoint(playerid,2035.2924,1014.1985,10.9446, 10.0);
}
}
return 1;
}
-
Ben enfait je t'explique crée un variable par defaut
new test[MAX_PLAYERS];
Ensuite dans les chekpoint
on utilise un switch de case sa évite les bug.
Donc dans les case tu défini la prochaine aprés le chekpoint exemple on est dans la case 1,
Pour que quand le joueur quand il rentre dans le Checkpoint est un nouveau checkpoint tu fait sa
test[playerid] =2;
et sa switch vers une nouvelle case la 2.
A la deux tu commence par
DisablePlayerCheckpoint(playerid);
Et tu relance un Checkpoint aprés avec ensuite la varible pour passer a la case3
test[playerid] =3;
Dé que tu a fini ta suite de chekpoint tu peut envisager de finir comme sa
DisablePlayerCheckpoint(playerid);
//avec la variable
test[playerid] =0;
J'espere que tu aura compris
Sinon reposte on contacte moi via pm
EDit :
Et j'oublié pour lancer la variable tu fait dans onpalyeurspawn si j'ai bien compri le checkpoin puis la case apré le checkpoint test[playerid] =1;
Du genre switch vers la premiére case
Envoie sinon tes erreur
++
Garderer
-
Je vient de réussir j'ai mis du temps avec L'indentation je vai testé .
même pas 1 warning xd 0 warning 0 erreur masi y reste le test et esque ses possbile de modifié le Spawn du joueur pendant le jeu ?
-
Je crois avoir compris ce que tu veut il te faudrais que les joueur spawn aléatoirement ?
-
Enfaite je voudrai par exemple la je me spawn a LS apres avoire choisi mon skin et la je tape une commande qui va changé le lieu de spawn a LV
-
Je vois peut être comment faire sa:
Lance une commande.
http://pastebin.com/m66851929
Edit j'ai oublié sa aussi :
new spawnls[MAX_PLAYERS];
new spawnlv[MAX_PLAYERS];
Tu peut réduire ces variable a la j'ai fait comme sa pour que tu comprenne, sinon
Crée un seul varibale new spawnvaribale[MAX_PLAYERS];
Le spawnvaribale = 2 //spawn lv
Le spawnvaribale = 3 //spawn ls
-
Une dernière chose
Voila j'ai mis sa dans OnPlayerConnect
new string[256];
new name[MAX_PLAYER_NAME];
new Text:text = TextDrawCreate(500.0, 5.0,Heure);
TextDrawUseBox(text, 0);
TextDrawFont(text, 3);
TextDrawSetShadow(text,0);
TextDrawSetOutline(text,1);
TextDrawBackgroundColor(text,0x000000FF);
TextDrawColor(text,0xFFFFFFFF);
TextDrawShowForPlayer(playerid, text);
Et apres je veut le modfié
public Heure1(playerid)
{
TextDrawSetString( text, "1:59" );
return 1;
}Y me dedemande de mettre texte donc j'ai mis sa :
public Heure1(playerid)
{
new Text:text
TextDrawSetString( text, "1:59" );
return 1;
}
Et il n'y a pas d'erreur mais sa ne marche pas pendant le jeu .
-
J'ai une idée comment faire mais sa ferai beaucoup des TimeOut je pense, j'ai pas envie de te donner un truc de bug donc j'attend les autres post pour ceux qui seront le faire.
Et aussi je sait pas utiliser cette fonction TextDrawSetString sa change le text apparament.
Sinon crée un seule variable puis un public et un switch avec des setimer de seconde mé sa fait beaucoup de switch c'est pour sa que je pense que sa crée des bugs faudrais voire si quelq'un connais comment faire.
-
De toute façon sa fait 120 timer mais jen est fait plus sa va pas bugué faut juste me dire comment faire.
-
Ok ben je vais t'espliquer je prépare un truc sur mon fofo
-
Ok merci !!
-
Attend un peu je réfléchie à certaine chose on peut résumé sa a un seul Timer avec une boucle. et avec la variable +1
Edit : ok je pense que sa marchera je le fait et je le mais dans 20 minutes a peu près
-
Ok Coco-Strike sort bientôt
-
Lol t'as de la chance moi mon mode avance pas, personne veut m'aider :'(
-
Normal que ça ne amrche pas pendant le jeu car text est deux textdraw différente selon la callback dans laquelle ils sont appelés.
Il faut mettre new Text: text; en haut de ton script.
++
Alexandre
-
Oui alexandre a raison.
Voila les swicht
http://pastebin.com/fecb3841
Je crois que il y'a certaines erreur à voir le problème je sait pas si tu veut que sa change pour tout le monde ou pour le joueur.
a voir
-
MTa oublié un truc avec les variables
Sa mes sa :
F:\SA MP\gamemodes\Coco-Strike.pwn(995) : error 033: array must be indexed (variable "comptre")
pour toute le sligne comme sa :
comptre[playerid] == 5;
-
Tu comprend ce que je dit ou pas tu veut que sa soi pour tous les joueur ou pour un joueur ?
-
Tous
-
Ben utilise la boucle for
Max User
Edit :
C'est bon ?
-
NN ses pas bon mes je crois avoire trouver un otre moyen pas male
-
Si ton idée et de mettre 120 timers content de t'avoir connu sa marchera mais vois la longeur de script et aussi les bug possible je te dit utilise la boucle for avec -1 en variable.
-
Comment veux-tu que ton script fonctionne Garderer ??
comptre[playerid] = 1;
-> Assigne une variable à un joueur bien précis, autrement dit un seul joueur verra ton affichage de Temps ...
swicht(comptre){}
-> Tu fais un switch sur une variable étant égale à "1" sur un joueur non définis ..
if(comptre[playerid] == 1){}
if(comptre[playerid] == 2){}
-> Ces conditions seront remplies mais vaux mieux que tu incrémentes ta variable ( variable ++;) par ton Timer
TextDrawSetString( text, "1:58" );
-> Où est la déclaration de ton TextDraw ? (new Texte:text;)
-> Où est la création de ton TextDraw ? (CreateTextDraw(); )
-> Où est la demande d'affichage du TextDraw ? (TextDrawShowForPlayer(); )
-> Où est la destruction finale de ton TextDraw ? (après 0:00)
-> Optimise ce code en insérant ton modèle "m:sec" dans une string que tu modifieras avec un format (il faut coder la partie 1min = 60 sec, surement dispo sur un forum) tu ne vas pas écrire le texte de chaque secondes ...
SetTimer("compteree",1000,1); //on relance toutes les secondes
-> Tu ne tue jamais ton Timer (KillTimer(); ) Ton code sera sans cesse relancé ...
Revoit ton code car ce que vous aviez prévu de faire est entièrement réalisable !
Renseignez-vous auprès des fonctions sur le wiki-sa-mp
http://www.sareallife.org/sampwiki/wiki.sa-mp.com/wiki/Main_Page.html
Il y a d'ailleurs des exemples bien concrets ! Il faut apprendre un peu de théorie avt de foncer tête baissée
Pour les TextDraw : http://forum.sa-mp.com/index.php?topic=19613.0
Bonne continuation, ++
-
J'ai trouvée un moyen comment pour activer une commande que sur l'id 0