GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Ssk le 05 Novembre 2008, 18:36:11

Titre: Timer pour un certain Id :)
Posté par: Ssk le 05 Novembre 2008, 18:36:11
salut all
je voudrais savoir s' il est possible de creer un timer que pour une personne c' est pour mes bot en samp 0.2.5 :)

pour que mes bot me suivent en voiture je fais ca

   if(strcmp(cmdtext,"/viens", true) == 0)
   {
   //new tmp;
   //tmp = strval( strtok( cmdtext, idx ) );
   new Float:px, Float:py, Float:pz;
    new vehicleid1;
   SendClientMessage(playerid,COLOR_RED,"ils arrivent");
   vehicleid1 = GetActorVehicleID(1);
   GetPlayerPos(playerid,px,py,pz);
   ActorDriveVehicleTo(1,vehicleid1,px,py,pz,80,100);
   KillTimer(bott);
   bott=SetTimerEx("bot",500,2,"i",1);
   return 1;
   }

mais il vont allez qu a ma positin px py pz donc j ai creer un timer qui tout les 500 millieme prend ma position et que les bot y vont mais le pb c' est que je veut que le bot 1 suivent a personne que je dit mais avec le timer je sais pas comment faie :) voila le timer


public bot(playerid)
{
   if(IsPlayerInAnyVehicle(0)||IsPlayerInAnyVehicle(1)||IsPlayerInAnyVehicle(3))
   {
   if(IsPlayerInAnyVehicle(0))
   {
   new Float:px, Float:py, Float:pz;
    new vehicleid1;
   vehicleid1 = GetActorVehicleID(1);
   GetVehiclePos(GetPlayerVehicleID(0),px,py,pz);
   ActorDriveVehicleTo(1,vehicleid1,px,py,pz,3250,80,100);
   }
   if(IsPlayerInAnyVehicle(1))
   {
   new Float:px1, Float:py1, Float:pz1;
    new vehicleid2;
   vehicleid2 = GetActorVehicleID(2);
   GetVehiclePos(GetPlayerVehicleID(1),px1,py1,pz1);
   ActorDriveVehicleTo(2,vehicleid2,px1,py1,pz1,3250,80,100);
   }
   if(IsPlayerInAnyVehicle(2))
   {
   new Float:px2, Float:py2, Float:pz2;
    new vehicleid3;
   vehicleid3 = GetActorVehicleID(3);
   GetVehiclePos(GetPlayerVehicleID(2),px2,py2,pz2);
   ActorDriveVehicleTo(3,vehicleid3,px2,py2,pz2,2150,3250,100);
   }
   }
   else
   {
   new Float:px, Float:py, Float:pz;
    new vehicleid1;
   vehicleid1 = GetActorVehicleID(1);
   GetPlayerPos(0,px,py,pz);
   ActorDriveVehicleTo(1,vehicleid1,px,py,pz,3250,80,100);

   new Float:px1, Float:py1, Float:pz1;
    new vehicleid2;
   vehicleid2 = GetActorVehicleID(2);
   GetPlayerPos(1,px1,py1,pz1);
   ActorDriveVehicleTo(2,vehicleid2,px1,py1,pz1,3250,80,100);

   new Float:px2, Float:py2, Float:pz2;
    new vehicleid3;
   vehicleid3 = GetActorVehicleID(3);
   GetPlayerPos(2,px2,py2,pz2);
   ActorDriveVehicleTo(3,vehicleid3,px2,py2,pz2,2150,3250,100);
   }
}



donc la j ai defini le bot 1 suit l id 0 ainsi de suite
Titre: Re : Timer pour un certain Id :)
Posté par: S!m le 06 Novembre 2008, 00:30:17
salut,

tu ne met pas le bon paramètres dans ton timer

//en haut
new bott[MAX_PLAYERS];
   bott[playerid]=SetTimerEx("bot",500,2,"i",playerid);

et voilà

++Sim++
Titre: Re : Timer pour un certain Id :)
Posté par: Ssk le 06 Novembre 2008, 07:53:58
hein ?? moi je veut juste que quand je met le tmp par ex je fais /viens 1
ca suivent le gars qu a l id 1 mais avec le timer j arrive aps a le faire :(
Titre: Re : Timer pour un certain Id :)
Posté par: vincentdu90 le 06 Novembre 2008, 20:13:53
Je suis peut-être un peu HS , mais samp 2.5 n'est pas sortit ? Si ? :blink
Titre: Re : Timer pour un certain Id :)
Posté par: [StAfF]MaN le 06 Novembre 2008, 21:16:38
Je me suis posé la question aussi, je suis allé sur samp.com et pas de trace de GTA SAMP 0.2.5 .... Alors si tu as une version avec les bots ( le plugin pour 0.2.2 pour avoir les bots ) dit le nous ^^
Titre: Re : Timer pour un certain Id :)
Posté par: Ssk le 06 Novembre 2008, 21:22:42
alors vous pouvez pas m aidez ??
Titre: Re : Timer pour un certain Id :)
Posté par: S!m le 06 Novembre 2008, 23:36:50
salut,

désolé, j'avais pas vu exactement ce que tu voulais faire, je croyait que tu voulait que le bot suive le joueur qui tape la commande,

alors il te faut juste faire comme ça:

   if(strcmp(cmdtext,"/viens", true) == 0)
   {
   //new tmp;
   //tmp = strval( strtok( cmdtext, idx ) );
   new Float:px, Float:py, Float:pz;
    new vehicleid1;
   SendClientMessage(playerid,COLOR_RED,"ils arrivent");
   vehicleid1 = GetActorVehicleID(1);//si c,est le joueur, met tmp
   GetPlayerPos(playerid,px,py,pz);
   ActorDriveVehicleTo(1,vehicleid1,px,py,pz,80,100);//comme je ne connais pas les bots, le 1, c,est le ID du bot?? si c'est el joueur, met tmp
   KillTimer(bott[tmp]);
   bott[tmp]=SetTimerEx("bot",500,2,"i",tmp);
   return 1;
   }

Alors le bot devrait suivre le joueur avec le numéro d'identification que tu a placé dans ta commande...

Effectivement, vincentdu90 et [StAfF]mAn, sa:mp 0.2.5 n'est pas sortie, par contre, il y a eu de malheureuse (vraiment) fuites, donc certains on une version, qu'on ne pourrais même qualifiée de béta, preuve, aller sur sa-mp.com, ils en sont a 70% du développement, donc très loin de la version finale..
par contre, il semble que ce serveur fonctionne, mais le client n,est pas disponible, alors automatiquement, il ne peut servir qu'a scripter des fonctions d,avance pour que le jour où la 0.2.5 sortira, certains serveurs soit en avance sur les autres..

++Sim++
Titre: Re : Re : Timer pour un certain Id :)
Posté par: Ssk le 07 Novembre 2008, 08:13:29
salut,

désolé, j'avais pas vu exactement ce que tu voulais faire, je croyait que tu voulait que le bot suive le joueur qui tape la commande,

alors il te faut juste faire comme ça:

   if(strcmp(cmdtext,"/viens", true) == 0)
   {
   //new tmp;
   //tmp = strval( strtok( cmdtext, idx ) );
   new Float:px, Float:py, Float:pz;
    new vehicleid1;
   SendClientMessage(playerid,COLOR_RED,"ils arrivent");
   vehicleid1 = GetActorVehicleID(1);//si c,est le joueur, met tmp
   GetPlayerPos(playerid,px,py,pz);
   ActorDriveVehicleTo(1,vehicleid1,px,py,pz,80,100);//comme je ne connais pas les bots, le 1, c,est le ID du bot?? si c'est el joueur, met tmp
   KillTimer(bott[tmp]);
   bott[tmp]=SetTimerEx("bot",500,2,"i",tmp);
   return 1;
   }

Alors le bot devrait suivre le joueur avec le numéro d'identification que tu a placé dans ta commande...

Effectivement, vincentdu90 et [StAfF]mAn, sa:mp 0.2.5 n'est pas sortie, par contre, il y a eu de malheureuse (vraiment) fuites, donc certains on une version, qu'on ne pourrais même qualifiée de béta, preuve, aller sur sa-mp.com, ils en sont a 70% du développement, donc très loin de la version finale..
par contre, il semble que ce serveur fonctionne, mais le client n,est pas disponible, alors automatiquement, il ne peut servir qu'a scripter des fonctions d,avance pour que le jour où la 0.2.5 sortira, certains serveurs soit en avance sur les autres..

++Sim++

Pourquoi tu met tmp devant bott puisuqe qu il va servir a tuer le timer ??? sinon e creer une variable ?



et Pour vous dire il y a le client et le serveur j ai les deux mais y a pas mal de bug sur cette version j essayerais de faire une video et la mettre ici
Titre: Re : Timer pour un certain Id :)
Posté par: S!m le 07 Novembre 2008, 14:03:40
Citer
Pourquoi tu met tmp devant bott puisuqe qu il va servir a tuer le timer Huh? sinon e creer une variable ?

avoir 2 fois le même timer ne sert a rien....d'ailleurs, en y pensant bien, il ne devrait y en avoir qu'un seul, sinon le seul bot que ca contrôle sera tout perdu...

alors la voici refaite:

  if(strcmp(cmdtext,"/viens", true) == 0)
   {
   //new tmp;
   //tmp = strval( strtok( cmdtext, idx ) );
   new Float:px, Float:py, Float:pz;
    new vehicleid1;
   SendClientMessage(playerid,COLOR_RED,"ils arrivent");//ICI TU POURRAIS PEUT-ÊTRE ENVOYER LE MESSAGE AU JOUEUR QUI SE FERA SUIVRE.....
   vehicleid1 = GetActorVehicleID(1);//si c,est le joueur, met tmp
   GetPlayerPos(playerid,px,py,pz);
   ActorDriveVehicleTo(1,vehicleid1,px,py,pz,80,100);//comme je ne connais pas les bots, le 1, c,est le ID du bot?? si c'est el joueur, met tmp
   KillTimer(bott);
   bott=SetTimerEx("bot",500,2,"i",tmp);
   return 1;
   }

en espérant que ce soit mieux....

p.s. fai tun peu attention a tes fautes d'orthographes stp  ;)

++Sim++
Titre: Re : Timer pour un certain Id :)
Posté par: gtafan le 07 Novembre 2008, 16:08:26
salut

sur mon serveur 0.2.5 j'ai fais comme-ça:

new varfollow[MAX_PLAYERS] = 0;
forward FollowMe( playerid, actorid );

if(strcmp( cmd, "/go", true ) == 0)
  {
varfollow[playerid] = 1;
SetTimer("FollowMe", 1000, 1);

        return 1;
  }

if(strcmp( cmd, "/go-off", true ) == 0)
  {
varfollow[playerid] = 0;
        return 1;
  }

public FollowMe(playerid, actorid)
{
if (varfollow[playerid] == 1)
{
        new vehicleid;
        new x=1;
        new Float:fX,Float:fY,Float:fZ;
        GetPlayerPos(playerid, fX, fY, fZ);

        while(x!=20)
        {
          vehicleid = GetActorVehicleID(x);
          if(vehicleid != INVALID_VEHICLE_ID)
          {
           ActorDriveVehicleTo(x,vehicleid,fX, fY, fZ,20.0,2);
          }
          x++;
        }
}
    return 1;
}

killer un timer ne fonctionne pas toujours, alors j'ai préféré utiliser une variable

par contre, je sais pas si ça vient de ma commande ou un bug, mais il faut rouler lentement, sinon on les perds (on les retrouve en faisant demi-tour)
Titre: Re : Timer pour un certain Id :)
Posté par: Syg le 07 Novembre 2008, 16:16:23
Ceci ne marchera que pour le joueur ayant l'ID 0.
Je répète ce que j'ai dit dans un autre topic, pour pouvoir passer des paramètres à un timer, il faut utiliser SetTimerEx.

Dans ton cas, playerid et actorid seront TOUJOURS à 0 dans ton timer.

Sinon, tu recalcules la direction de tes bots toutes les secondes, je pense que c'est trop long, 100 ou 200 ms seraient mieux.
Et puis, je ne connais pas ActorDriveVehicleTo mais je pense que l'un des deux derniers paramètres est la vitesse de déplacement non ?
Si c'est le cas, il ne vaut mieux pas qu'elle soit constante, histoire que les bots accélèrent quand tu accélères et ralentissent quand tu ralentis.

++
Syg
Titre: Re : Timer pour un certain Id :)
Posté par: Ssk le 07 Novembre 2008, 17:39:43
Il veulent pas piger syg. lol personne a repondu a ma reponse mais c' est pas grave j ai trouver la reponse en regarde les premier episode de kyle XY lol