GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: [BGS]teck le 21 Février 2008, 18:32:29

Titre: chekpoint race
Posté par: [BGS]teck le 21 Février 2008, 18:32:29
bonjour j'ai creer une course avec des chekpoint mes comment je fait pour la métre dan mon game mode ou filterscript inposible de convertir avec http://up.delux-host.com/1192573787/index.php5 (http://up.delux-host.com/1192573787/index.php5) pourier vous m'aider merci
Titre: Re : chekpoint race
Posté par: S!m le 21 Février 2008, 23:59:45
salut teck,

tu as fait une map avec MTA qui contient des checkpoints??

tu n'as qu'a ouvrir le fichier .map à l'aide de bloc-note et ensuite en tiré les informations dont tu as besoin.... :D

par exemples:
<map mod="race" version="1.0">

  <meta/>

  <options>
    <respawn>timelimit</respawn>
  </options>
jusqu'ici, rien d'interressant  :( :(
  <checkpoint name="checkpoint">
    <position>2477.336914 -1665.437622 12.326383</position>   <<<<<<<<<<<<<------------------------ici
  </checkpoint>
ah...
la position du premier checkpoint
X,Y,X
si contrairement a celui qui suit, il n'y aucune couleur de donné ou size, il s'agit de ceux par défaut,le size par défaut est 1
je croit que l'on ne peut modifier la couleur d'un checkpoint avec samp.....
  <checkpoint name="checkpoint (1)">
    <position>2463.600098 -1660.087280 12.304688</position>
    <size>1.500000</size>               <<<<<<<<<<<<<<<<<<<----------------------------------------------ici et
    <color>152 156 158</color>        <<<<<<<<<<<<<<<<<<--------------------------------------------------ici
  </checkpoint>

  <checkpoint name="checkpoint (2)">
    <position>2432.047852 -1658.491333 12.382813</position>
  </checkpoint>

  <checkpoint name="checkpoint (3)">
    <position>2386.534912 -1658.516357 12.382813</position>
  </checkpoint>

  <checkpoint name="checkpoint (4)">
    <position>2307.131104 -1658.302612 13.372179</position>
  </checkpoint>

  <checkpoint name="checkpoint (5)">
    <position>2255.466797 -1657.492432 14.274627</position>
  </checkpoint>

</map>
bon, ensuite, tu as les données, tu n'as plus qu'a créer les checkpoints  en question

SetPlayerCheckpoint(playerid,X,Y,Z,size);

le playerid étant le joueurs apercevant le checkpoint, le X,Y,Z la position du checkpoint et le size le meme dont j'ai fait mention plus haut
donc voila, tu as les checkpoints que tu voulais :D

si tu veut créer des trucs plus compliqués(ta course)
ehbien, j'ai toujours eu de la difficulté à faire une course avec les checkpoints

en tout cas.... bonne chance teck

++Sim++
Titre: Re : chekpoint race
Posté par: [BGS]teck le 22 Février 2008, 08:58:06
merci de ta reponce mes je  doit les méntre dans onegamemodinit en desou de mes pickup ??? je ne trouve pas merci de me repondre
Titre: Re : chekpoint race
Posté par: ApocKalipsS le 22 Février 2008, 13:14:39
Oui un SetPlayerCheckpoint(playerid,X,Y,Z,size); En dessous de t'es PickUp(OnGameModeInit
Titre: Re : chekpoint race
Posté par: [BGS]teck le 22 Février 2008, 14:08:59
oui mais quan je les mais sa me mes 1 ereur

C:\Users\thomas\Desktop\gamemodes\stuntlandteckto27.pwn(212) : error 017: undefined symbol "playerid"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


1 Error.
donc je fait un forward ou un new j'ai ésséyer les deux et samarche pas petéte quil fodré que je fasse un filterscript ????
Titre: Re : chekpoint race
Posté par: ApocKalipsS le 22 Février 2008, 14:38:54
Ah non exuse moi, enlève le "playerid", qui te fait ca : SetPlayerCheckpoint(X,Y,Z,size);
Titre: Re : chekpoint race
Posté par: S!m le 22 Février 2008, 15:05:23
salut teck,

si tu veut faire une course,

tu pourrais faire un truc genre:
EN HAUT DE TON SCRIPT:

forward check ();
 new race[MAX_PLAYERS];
new check1, check2,check3,check4,check5;  //tu en met autant que tu en as
forward course;

ensuite:
OnGameModeInit (){
SetTimer("check",10000,1);        //on lance un timer qui regarde a toutes les 10 secondes
}

public check (){
     for(new p; p < MAX_PLAYERS; p++){
           if(IsPlayerConnected(p)){ //a quoi bon tester les joueurs qui ne sont pas là
                  if(IsPlayerInArea(MIN_X,MAX_X,MIN_Y,MAX_Y)){ //on créé une zone autour du checkpoint
                      check1 = SetPlayerCheckpoint(p, TON CHECKPOINT);       //un checkpoint ou le joueur se place pour démarré la course
                       }else if(race == 0) { DisablePlayerCheckpoint(p);}
                   }
        }
}   


bon jusqu'ici c'est asser simple, on a fait une variable pour savoir si le joueur est en course, sinon, on rend le checkpoint invisible pour le joueur s'il en est loin car c'est agaçant...
maintenant la commande:
OnPlayerCommandText(playerid,cmdtext[]){

    new name[MAX_PLAYERS_NAME];  //on créé una variable pour stocké le nom
    GetPlayerName(playerid,name,sizeof(name));   //on enregistre le nom dans la variable

     if(!strcmp(cmdtext,"/join",true)){
            if(IsPlayerInCheckpoint(playerid)){     //le joueur est il dans un checkpoint??
                   if(IsPlayerInAnyVehicle(playerid)){         //si le joueur est dans un vehicle
                   if(race[playerid] != 1){
                    race[playerid] = 1;                                                  //on change la variable, le joueur est en course
                    GameTextForPlayer(playerid,"La course commence dans ~g~ 10 secondes, type /exit to leave.", 5000,5);       //on lui dit des trucs
                    for(new p; p < MAX_PLAYERS; p++){
                            if(IsPlayerConnected(p)){                   //a quoi bon tester les joueurs qui ne sont pas là
                                if((race[p] == 1) && (p != playerid)){ //si un autre joueur est déjà là....
                                        KillTimer(timer[p]);
                                        timer[p] = SetTimerEx("course",10000,0,"i",p);             //on relance au début....
                                        }
                                  }
                    }      //on referme la boucle
                    timer[playerid] = SetTimerEx("course",10000,0,"i",playerid);                   //on lance la course
                    new string [256];                 //on créé des variables pour un message
                    format(string,sizeof(string),"%s a commencé le décompte pour la course!!",name);     //on détermine le message
                    SendClientMessageToAll(green,string);
                     }else return SendClientMessage(playerid,red."Tu est déjà en course!!");
                    }else return SendClientMessage(playerid, red, "Tu doit être dans un vehicle pour faire la course.");
                }else{   SendClientMessage(playerid,red,"Tu doit être dans le checkpoint de départ pour lancer la course");
               }
        return 1;
}
        if(!strcmp(cmdtext,"/exit",true)){
             if(race[playerid] == 1){
             race[playerid] = 0;
             KillTimer(timer[playerid]);
             GameTextForPlayer(playerid,"Tu as quitté la course",3500,5);
             new string[256];
             format(string,sizeof(string),"%s a quitté la course.",name);
             }else{ SendClientMessage(playerid,red,"Tu n'est pas en course.");
             }
        return 1;
        }   
        return 0;
}

on lui a fait une commande pour commencer la course quand il est dans un vehicle et qu'il est dans le checkpoint, si quelqu'un d'autre est en course, on relance son timer pour qu'ils soient synchronisés et donc qu'ils coursent l'un contre l'autre 8)

maintenant, le timer du compte a rebours de la course....
public course (player){
      if(IsPlayerInCheckpoint(player){
          if(IsPlayerInAnyVehicle(player)){
      GameTextForPlayer(player,"GOGOGO!!!!!",2500,5);
      SetPlayerCheckpoint(playerid, LE CHECKPOINT no 2);
        }else return SendClientMessage(playerid,red,"Tu doit être dans un vehicle pour faire la course");
     }else{ SendClientMessage(player,red,"Tu doit rester dans le checkpoint jusqu'au départ!!");}
      return 1;
}

et voila on lui créé le premier vrai checkpoint de course....
ensuite lorsqu'il entre dans un checkpoint, on lui place le suivant....

public OnPlayerEnterCheckpoint(playerid){
   if(IsPlayerInArea(playerid,MIN_X,MAX_X,MIN_Y,MAX_Y)){       //il s,agit de la seule technique que je voit puisqu'ils n'ont pas pensé a mettre un checkpointid
          SetPlayerCheckpoint(playerid, 2e checkpoint de la course);  //on lui installe le deuxième checkpoint
    PlayerPlaySound(playerid,1056,x,y,z);              //on lui met un petit sons pour le plaisir
         //et d'autres trucs si tu veut
        }
       if(IsPlayerInArea(playerid,...........)     //on en met d'autres pour chaque checkpoint
      return 1;
}

pour le dernier, tu devrais changer la variable race a 0 et donné un prix a celui qui fini
et voila, c'est a peu près ça....

mon script est surement plein de faute, je viens juste de l'écrire et en plus il n'est peu être pas exact...
je n'ai jamais fait de courses....

Good luck teck :D
au moins j'aurai essayer.... ;D

EDIT: tu pourrais également faire un second timer après la commande qui dirait 5, 4, 3, 2, 1 avant le début de la course

++Sim++
Titre: Re : chekpoint race
Posté par: [BGS]teck le 22 Février 2008, 18:24:45
merci beaucoup et ossi un truc je voudré fair la commandes /join pour aler direct au premier chekpoint donc je pren la coordoner du premier chekpoint et je di course dan 10 secon par exenple et je voudrait freeze le joueur quan il fait /join pour pas tricher et des que je lance mon décompter avec /count ba je voudrait quil soi défrisé quan sa écrit race ???
Titre: Re : chekpoint race
Posté par: ApocKalipsS le 22 Février 2008, 18:56:55
Prend exemple sur mon "/racecount" :

if (strcmp(cmdtext, "/racecount", true)==0)
{
if(Count >= 5)
{
SendClientMessageToAll(COLOR_GREEN, "La course va commencer !!!");
CountDown();
return 1;
}
else
{
SendClientMessage(playerid, COLOR_YELLOW, "Une course est déjà activer. Recommence plus tard !");
return 1;
}
}
//----------------------

public CountDown(){

if (Count > 0){
GameTextForAll( CountText[Count-1], 2500, 3);
Count--;
SetTimer("CountDown", 1000, 0);
}
else{
GameTextForAll("~g~LA ~r~COURSE~y~ COMMENCE~w~ !", 3500, 3);
Count = 5;
}
return 1;
}

new Count = 5;
new CountText[5][5] ={
"~r~1",
"~y~2",
"~b~3",
"~g~4",
"~w~5"
};

Voilà ta plus qu'a te démerder lol ^^
Titre: Re : chekpoint race
Posté par: [BGS]teck le 22 Février 2008, 19:00:44
désoler  mes je nis conpren rien lol j'ai une peu du mal dans les truc de cource come sa si on pouré maider a métre mes chek point ou que je trouveré un traceur car la j'ai trop de truc a fair sur mon serveur je n'em peut plu lol mais la j'ai pas tilter le truc des chekpoint oui j'ai déja fait un race count moi méme mes sque je voudrait ces que le joueur soi frizer des quil arive dans mon chek point et quan les conte a rebourd commence et a écri race a la fin et ba je voudrait que les joueur soit défriser  :wall :wall :wall :wall :wall :wall :wall
Titre: Re : chekpoint race
Posté par: S!m le 22 Février 2008, 20:10:46
Salut,

pour freezer le joueur lorsqu'il fait /join, tu n'as qu'a faire un TooglePlayerControllable(playerid,0);
puis pour défreezer lorsque la course commence, TooglePlayerControllable(playerid,1);

et je croit que je vais réessayer d'en faire une sur mon serveur aussi, la dernière fois c'était il y a très longtemps, peut-être vais-je y arriver cette fois ci....

mais si tu faire des courses d'une façon simple, cherche pour le Yrace

++Sim++
Titre: Re : chekpoint race
Posté par: [BGS]teck le 22 Février 2008, 20:23:19
et comment convertir ma race en YR car j'ai telecharger yrace mes comen je fait pour convertir
Titre: Re : chekpoint race
Posté par: S!m le 22 Février 2008, 20:48:12
eh bien....

dans le fichier yrace, il y a ceci:
YRACE 2 Sim 1 2 0 8.000000
A 0 A 0 A 0 A 0 A 0
A 0 A 0 A 0 A 0 A 0
0.000000 112007.000000 0.000000
120844.000000 0.000000 127753.000000
2096.481689 834.807189 6.446568        <<<<<<<<<<<<-------------------------
2466.802001 835.230346 6.441473
2725.932861 1182.561035 6.440518
2725.099365 2293.141113 6.440557
2545.458984 2588.155761 4.565608
2023.114746 2565.392822 6.498682
1326.486450 2451.088134 6.442695
1207.436279 2045.341796 6.444301
1214.165039 994.541076 6.518639
1976.803100 834.880798 6.445075

donc au début, on a l'auteur de la race....
ensuite je ne sais pas mais il s'agit des paramètre de la race
puis au niveau de la flèche on arrive aux différents checkpoints

et voila c'est tout ce que je sais

++Sim++
Titre: Re : chekpoint race
Posté par: [BGS]teck le 22 Février 2008, 21:48:53
merci a toi tu ma rendu un grand service merci :D :D :D :D :D
Titre: Re : chekpoint race
Posté par: [BGS]teck le 22 Février 2008, 22:40:23
dsl pour le double post j'ai fait come tu mavait di sim mais j'ai 8 erreur
je mes le code
#include <a_samp>

forward check ();
forward course;
new race[MAX_PLAYERS];
new check1, check2,check3,check4,check5;


public OnFilterScriptInit()
{
print("\n--------------------------------------");
print(" course racer kart");
print("--------------------------------------\n");
return 1;
}

OnGameModeInit (){
SetTimer("check",10000,1);       
}

public check (){
     for(new p; p < MAX_PLAYERS; p++){
           if(IsPlayerConnected(p)){
                  if(IsPlayerInArea(MIN_X,MAX_X,MIN_Y,MAX_Y)){
                      check1 = SetPlayerCheckpoint(p, 1706.045654 -520.860229 33.593754);
                       }else if(race == 0) { DisablePlayerCheckpoint(p);}
                   }
        }
}





OnPlayerCommandText(playerid,cmdtext[]){

    new name[MAX_PLAYERS_NAME]; 
    GetPlayerName(playerid,name,sizeof(name));   

     if(!strcmp(cmdtext,"/join",true)){
            if(IsPlayerInCheckpoint(playerid)){   
                   if(IsPlayerInAnyVehicle(playerid)){         
                   if(race[playerid] != 1){
                    race[playerid] = 1;                                                 
                    GameTextForPlayer(playerid,"La course commence dans ~g~ 10 secondes, type /exit to leave.", 5000,5);     
                    for(new p; p < MAX_PLAYERS; p++){
                            if(IsPlayerConnected(p)){                 
                                if((race[p] == 1) && (p != playerid)){
                                        KillTimer(timer[p]);
                                        timer[p] = SetTimerEx("course",10000,0,"i",p);           
                                        }
                                  }
                    }     
                    timer[playerid] = SetTimerEx("course",10000,0,"i",playerid);                   
                    new string [256];               
                    format(string,sizeof(string),"%s a commencé le décompte pour la course!!",name);   
                    SendClientMessageToAll(green,string);
                     }else return SendClientMessage(playerid,red."Tu est déjà en course!!");
                    }else return SendClientMessage(playerid, red, "Tu doit être dans un vehicle pour faire la course.");
                }else{   SendClientMessage(playerid,red,"Tu doit être dans le checkpoint de départ pour lancer la course");
               }
        return 1;
}
        if(!strcmp(cmdtext,"/exit",true)){
             if(race[playerid] == 1){
             race[playerid] = 0;
             KillTimer(timer[playerid]);
             GameTextForPlayer(playerid,"Tu as quitté la course",3500,5);
             new string[256];
             format(string,sizeof(string),"%s a quitté la course.",name);
             }else{ SendClientMessage(playerid,red,"Tu n'est pas en course.");
             }
        return 1;
        }
        return 0;
}


public course (player){
      if(IsPlayerInCheckpoint(player){
          if(IsPlayerInAnyVehicle(player)){
      GameTextForPlayer(player,"race!!!!!",2500,5);
      SetPlayerCheckpoint(playerid, LE CHECKPOINT no 2);
        }else return SendClientMessage(playerid,red,"Tu doit être dans un vehicle pour faire la course");
     }else{ SendClientMessage(player,red,"Tu doit rester dans le checkpoint jusqu'au départ!!");}
      return 1;
}

public OnPlayerEnterCheckpoint(playerid){
      if(IsPlayerInArea(playerid,MIN_X,MAX_X,MIN_Y,MAX_Y)){
      SetPlayerCheckpoint(playerid, 1662.792358 -99.281364 34.294342);// 2 éme chekpoint
    PlayerPlaySound(playerid,1056,x,y,z);             
         
        }
      if(IsPlayerInArea(playerid,MIN_X,MAX_X,MIN_Y,MAX_Y)){
      SetPlayerCheckpoint(playerid, 1634.888794 205.071854 30.785172);// 3 éme chekpoint
    PlayerPlaySound(playerid,1056,x,y,z);

        }
      return 1;
}

voici les 8 erreur
C:\Users\thomas\Desktop\filterscripts\courseteck.pwn(4) : error 001: expected token: "(", but found ";"
C:\Users\thomas\Desktop\filterscripts\courseteck.pwn(5) : error 001: expected token: ")", but found "new"
C:\Users\thomas\Desktop\filterscripts\courseteck.pwn(5) : error 001: expected token: ";", but found "new"
C:\Users\thomas\Desktop\filterscripts\courseteck.pwn(24) : error 017: undefined symbol "IsPlayerInArea"
C:\Users\thomas\Desktop\filterscripts\courseteck.pwn(25) : error 001: expected token: ",", but found "-rational value-"
C:\Users\thomas\Desktop\filterscripts\courseteck.pwn(25) : warning 215: expression has no effect
C:\Users\thomas\Desktop\filterscripts\courseteck.pwn(25) : error 001: expected token: ";", but found ")"
C:\Users\thomas\Desktop\filterscripts\courseteck.pwn(25) : error 029: invalid expression, assumed zero
C:\Users\thomas\Desktop\filterscripts\courseteck.pwn(25) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


8 Errors.

merci de m'aider et désoler encore pour le double poste :wall :wall :wall
Titre: Re : chekpoint race
Posté par: UrbanGhetto le 22 Février 2008, 22:43:04
Hum, Pour les longs code comme ça y'a PastBin (http://pastebin.gtaonline.fr/pastebin.php)...

T'as oublié le public dans ton OnPlayerCommandText...
Titre: Re : chekpoint race
Posté par: S!m le 23 Février 2008, 00:25:33
salut teck,

j'ai bien beau vouloir être gentil et t'aider énormément (ça c'est vrai...),  :-[
il faut que tu cherche un peu sinon tu vas toujours revenir ici.... >:( >:(

mais bon, voilà des indices.....

l'erreur: error 001: expected token: "(", but found ";"veut dire qu'il s'attendait a trouver le caractère ( mais a trouver ; ???
donc, on va voir sur la ligne 4 :-\, qui a t'il??

forward course;

donc c'est qu'un ( va à la place du ;
donc il faut placer ce symbole....

mais regarde les autres, ils n'ont pas d'erreurs......
tu l'écrit comme les autres.... ce qui donne:
forward course ();toutes les error 001 sont des trucs de se genre, ;)

ensuite le error 017 est normal car tu n'as pas défini la fonction IsPlayerInArea,
regarde dans la signature d'Urban, c'est lui qui l'a créé...( merci a toi Urban, très utile comme code)

pour les suivants, regarde dans les accolades, l'erreur doit se trouver la et tu doit changer certains trucs, comme les MIN_X,MAX_X,MIN_Y,MAX_Y, TON CHECKPOINT etc.... :cheers

maintenant, cherche un peu, essai des trucs..... ;)

bonne chance  :D

Titre: Re : chekpoint race
Posté par: [BGS]teck le 23 Février 2008, 01:29:49
Merci a vous si je n'iarive pas je le métré sur pasterbin merci de ces informatin les gar surtout a toi sim



pour éviter le double poste

voila je me prend la téte sur des checkpoint lol non je n'arive pas a le  fair désoler de vous souler je vous donne le pasterbin
http://pastebin.gtaonline.fr/pastebin.php?show=356 (http://pastebin.gtaonline.fr/pastebin.php?show=356)
 
Aider moi merci beaucoup
Titre: Re : chekpoint race
Posté par: ApocKalipsS le 23 Février 2008, 08:57:47
Tu sais v'est vraiment énervant de t'aider quand un gars écrit en francais comme une vache éspagnole..
Donc on t'aidera pas avant que tu es corrigé 4-5 fautes...