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

Titre: 2 question
Posté 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é .
Titre: Re : 2 question
Posté par: Bayshore le 05 Juillet 2008, 17:38:16
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
Titre: Re : 2 question
Posté par: Eloctro le 05 Juillet 2008, 18:29:10
Le textDraw je ve que sa face 2:00 apres 1:59 apres 1:58 apres 1:57 apres ect ......................................
Titre: Re : 2 question
Posté par: Bayshore le 05 Juillet 2008, 18:40:38
SetTimer + TextDrawSetString. ;)


++
Alexandre
Titre: Re : 2 question
Posté par: Eloctro le 05 Juillet 2008, 19:21:33
On utilise comment TextDrawSetString
Titre: Re : 2 question
Posté par: Bayshore le 05 Juillet 2008, 19:56:18
http://streetplaya.hopto.org/SAMP_Wiki/wiki.sa-mp.com/wiki/TextDrawSetString.html
Titre: Re : 2 question
Posté par: Eloctro le 05 Juillet 2008, 20:24:09
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"

Titre: Re : 2 question
Posté par: Tunsi le 06 Juillet 2008, 00:34:52
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
Titre: Re : 2 question
Posté par: Eloctro le 06 Juillet 2008, 10:58:16
Un Expemple
Titre: Re : 2 question
Posté par: Tunsi le 06 Juillet 2008, 14:46:27
for(new i = 0; i < MAX_PLAYERS; i++)
{
DisablePlayerCheckpoint(i);
}
Titre: Re : 2 question
Posté par: Eloctro le 06 Juillet 2008, 16:00:28
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
Titre: Re : 2 question
Posté par: Bayshore le 06 Juillet 2008, 18:19:42
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.

Code: (pawn) [Sélectionner]
// descente 1
SetPlayerCheckpoint();
descente[playerid] == 1;

Code: (pawn) [Sélectionner]
// descente 2
SetPlayerCheckpoint();
descente[playerid] == 2;


++
Alexandre
Titre: Re : 2 question
Posté par: Eloctro le 06 Juillet 2008, 18:42:05
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);
Titre: Re : 2 question
Posté par: Bayshore le 06 Juillet 2008, 19:36:54
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
Titre: Re : 2 question
Posté par: Eloctro le 06 Juillet 2008, 19:55:36
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 ?
Titre: Re : 2 question
Posté par: garderer le 07 Juillet 2008, 13:55:55
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
Titre: Re : 2 question
Posté par: Eloctro le 07 Juillet 2008, 14:55:20
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;
}
Titre: Re : 2 question
Posté par: garderer le 07 Juillet 2008, 15:10:21
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
Titre: Re : 2 question
Posté par: Eloctro le 07 Juillet 2008, 15:14:11
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 ?
Titre: Re : 2 question
Posté par: garderer le 07 Juillet 2008, 15:17:39
Je crois avoir compris ce que tu veut il te faudrais que les joueur spawn aléatoirement ?

Titre: Re : 2 question
Posté par: Eloctro le 07 Juillet 2008, 15:36:50
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
Titre: Re : 2 question
Posté par: garderer le 07 Juillet 2008, 16:27:26
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
Titre: Re : 2 question
Posté par: Eloctro le 07 Juillet 2008, 18:12:52
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 .
Titre: Re : 2 question
Posté par: garderer le 07 Juillet 2008, 18:35:41
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.
Titre: Re : 2 question
Posté par: Eloctro le 07 Juillet 2008, 18:43:20
De toute façon sa fait 120 timer mais jen est fait plus sa va pas bugué faut juste me dire comment faire.
Titre: Re : 2 question
Posté par: garderer le 07 Juillet 2008, 18:49:34
Ok ben je vais t'espliquer je prépare un truc sur mon fofo
Titre: Re : 2 question
Posté par: Eloctro le 07 Juillet 2008, 18:50:50
Ok merci !!
Titre: Re : 2 question
Posté par: garderer le 07 Juillet 2008, 19:06:40
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
Titre: Re : 2 question
Posté par: Eloctro le 07 Juillet 2008, 19:31:38
Ok Coco-Strike sort bientôt
Titre: Re : 2 question
Posté par: [StAfF]MaN le 07 Juillet 2008, 19:39:35
Lol t'as de la chance moi mon mode avance pas, personne veut m'aider  :'(
Titre: Re : 2 question
Posté par: Bayshore le 07 Juillet 2008, 19:44:12
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
Titre: Re : 2 question
Posté par: garderer le 07 Juillet 2008, 19:54:28
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
Titre: Re : 2 question
Posté par: Eloctro le 07 Juillet 2008, 20:19:09
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;
Titre: Re : 2 question
Posté par: garderer le 07 Juillet 2008, 20:21:15
Tu comprend ce que je dit ou pas tu veut que sa soi pour tous les joueur ou pour un joueur ?
Titre: Re : 2 question
Posté par: Eloctro le 07 Juillet 2008, 20:46:27
Tous
Titre: Re : 2 question
Posté par: garderer le 08 Juillet 2008, 01:54:02
Ben utilise la boucle for

Max User

Edit :

C'est bon ?
Titre: Re : 2 question
Posté par: Eloctro le 08 Juillet 2008, 11:39:59
NN ses pas bon mes je crois avoire trouver un otre moyen pas male
Titre: Re : 2 question
Posté par: garderer le 08 Juillet 2008, 12:11:12
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.
Titre: Re : 2 question
Posté par: Dedepc le 08 Juillet 2008, 12:18:53
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, ++
Titre: Re : 2 question
Posté par: Eloctro le 08 Juillet 2008, 12:53:40
J'ai trouvée un moyen comment pour activer une commande que sur l'id 0