Aller au contenu

Et Oui... Je Demande Encore De L'aide !


thomasleroi

Messages recommandés

Bon voilà, GTA SA me manquez trop :rolleyes: .

 

Je veux continuer à scripter et apprendre :yes: , c'est pour ça que j'ai besoin de vous.

 

 

 

Donc je vous explique ce que j'aimerais faire :

 

 

1. J'aimerais que quand une personne monte dans une ambulance, il regagne toute sa vie.

 

OU

 

2. J'aimerais que quand un skin (par exemple le skin de CJ [iD.0] ) fasse une commande comme "/soigner ID", la personne en question regagne sa vie, mais à proximiter de lui.

 

 

 

 

Personellement j'aimerais mieux connaitre la 2ème reponse à ma question mais si vous pouvez m'aider pour la première sa pourrait m'aider pour mes idées futurs !...

 

 

Merci d'avance, thomasleroi.

Modifié par thomasleroi
Lien vers le commentaire
Partager sur d’autres sites

Je vais pas dire que c'est simple, mais c'est simple ^^ Tu as raison de venir demander de l'aide !!!

 

Alors comme tu veut en priorité ta deuxième question je vais commencer par elle et finir par l'ambulance ;)

 

Pour ta commande, il te faudra utiliser la fonction strtok

 

 

strtok(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }

    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;
}

 

Tu place ce code dans ton script, en fin de script, pour pas qu'il gène ;)

 

Ensuite tu suis cette forme en remplacent bien sur le code pour qu'il soit a ta façon :

 

 

if (!strcmp(cmd, "/soin", true))
{
   if(!strlen(tmp))
   {
      SendClientMessage(playerid, COLOR_GREEN, " /soin [ID] [valeur]");
      return 1;
   }
   pid = strval(tmp);
   if (!(IsPlayerConnected(pid)))
   {
      SendClientMessage(playerid, COLOR_RED, "Joueur non connecté");
      return 1;
   }
   id = strval(tmpp);
   SetPlayerHealth(pid,id);
   return 1;
}

 

LE code fonctionnera mais il faut que tu l'aménage a ton script, tu a des news a mettre etc... Attention aux interférences avec les autres commandes !!!!

 

Ensuite pour que cette commande ne soit possible que quand le joueur est près d'un autre joueur, tu va utiliser ProxDetector, je te laisse le trouver ;) samp.com

 

Tu sera donc obliger de rajouter une condition, par exemple quand le joueur est près d'un autre joueur, une variable se met a 1, et dans la commande tu mettre un if(tavariable == 1) blabla ^^

 

On verra pour ton autre question quand celle ci sera résolu !!! ^^

Modifié par superpompier
Lien vers le commentaire
Partager sur d’autres sites

Bon j'ai implanté la commande, j'ai rajouté les "new". Mais quand je marque :

 

new tmp, new tmpp;

 

J'ai ces erreurs :

 

warning 219: local variable "tmp" shadows a variable at a preceding level
error 035: argument type mismatch (argument 1)
error 035: argument type mismatch (argument 1)
error 035: argument type mismatch (argument 1)
warning 203: symbol is never used: "tmp"
warning 203: symbol is never used: "tmpp"

 

Mais quand j'enlève le new tmp et le tmpp, j'ai ça :

 

error 017: undefined symbol "tmp"
error 017: undefined symbol "tmp"
error 017: undefined symbol "tmpp"

 

 

A me rendre fou ! :angry:

 

...

 

 

ProxDetector c'est quoi au juste ? un Filterscript, un include... ?

 

Modifié par thomasleroi
Lien vers le commentaire
Partager sur d’autres sites

Bon allé je suis gentils je vais te filer le new a mettre ^^

 

new pid,id,tmp[256],tmpp[256];

 

et deux petit truck que je me doutai que tu ne trouverais pas ^^ (en même temps quand on ne sais pas on peut pas l'inventer ^^ :P )

 

tmp = strtok(cmdtext, idx);

tmpp = strtok(cmdtext, idx);

 

Donc a mettre juste en dessous de :

 

if (!strcmp(cmd, "/soin", true))

{

 

Tu avais fait une erreur en ajoutant tes news en plus :

 

new tmp, new tmpp;

 

Si tu veut définir plusieurs chose en un seul new faut faire comme ça :

 

new tmp, tmpp, tmppp, truk[MAX_PLAYERS]; ( en faite séparé d'une virgule et finir par un ; sans remettre de "new" )

 

ProxDetector je te le filerai quand ta commande marchera ;)

 

Edit :

 

 

if (!strcmp(cmd, "/soin", true))
{
   if(!strlen(tmp))
   {
      SendClientMessage(playerid, COLOR_GREEN, " /soin [ID] [valeur]");
      return 1;
   }
   pid = strval(tmp);
   if (!(IsPlayerConnected(pid)))
   {
      SendClientMessage(playerid, COLOR_RED, "Joueur non connecté");
      return 1;
   }
   id = strval(tmpp);
    /////////////////////////////////////////////
    TU PEUT AJOUTER DES CHOSES ICI, GENRE UN MESSAGE OU DES INFOS DIVERSES 
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
   SetPlayerHealth(pid,id);
   return 1;
}

Modifié par superpompier
Lien vers le commentaire
Partager sur d’autres sites

C'est tout a fait possible ^^

 

Dans OnPlayerSpawn, tu met un if(gTeam[playerid]== Team_Medecin) // je ne sais pas comment s'appelle ta team pour cette faction

 

et dans le if tu met une variable, du genre

 

medecin=1;

 

mettre un new en haut de ton script ;)

 

new medecin;

 

Un fois ça fait, tu rajoute une condition dans la commande /soin

 

if(medecin==1)

{

 

ta commande se fait

donc tu met tout ce qui dois se passer normalement ;)

SendClientMessage(playerid, COLOR_YELLOW, " Tu a redonner toute sa vie a la victime");

}

else

{

ta commande ne se fait pas

SendClientMessage(playerid, COLOR_RED, " Tu n'est pas Médecin !! " );

}

 

^^ et voila le tour est joué ^^ !!!

 

Sinon j'ai regardé pour le ProxDetectorS, il est d'origine dans le script sous cette forme

 

ProxDetectorS(Float (c'est la distance qui sépare les deux joueurs, met 4 ou 5 en valeur), playerid (c'est toi ^^), Pid ( c'est l'autre joueur) )

 

Donc tu fait une condition ( if )

 

if(ProxDetectorS(4.5, playerid, pid)

{

blabla

}

 

Voila en gros ton code ^^

Modifié par superpompier
Lien vers le commentaire
Partager sur d’autres sites

D'accord, mais enfète le skin ne se selectionne pas au début, seulement quand je prend un pickup...

Regarde :

 

if (pickupid == v3)
{
SetPlayerSkin(playerid, 101);
SendClientMessage(playerid, COLOR_WHITE, "Vous êtes un medecin de l'armée....");
GivePlayerWeapon(playerid, 31, 200);
GivePlayerWeapon(playerid, 16, 6);
GivePlayerWeapon(playerid, 24, 100);
SetPlayerArmour(playerid, 100);
}

 

 

Lien vers le commentaire
Partager sur d’autres sites

Et ben ^^ réfléchi un tit peut ^^ :P

 

if (pickupid == v3)

{

SetPlayerSkin(playerid, 101);

//////////////////////////////// TU AJOUTE TA VARIABLE LA \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

"""""""""""""""""""""""***medecin=1;***""""""""""""""""""""

SendClientMessage(playerid, COLOR_WHITE, "Vous êtes un medecin de l'armée....");

GivePlayerWeapon(playerid, 31, 200);

GivePlayerWeapon(playerid, 16, 6);

GivePlayerWeapon(playerid, 24, 100);

SetPlayerArmour(playerid, 100);

}

Lien vers le commentaire
Partager sur d’autres sites

Tant que je suis la je te donne l'astuce pour ta 1ère question ^^ Quand la joueur entre dans une Ambulance.

 

Cherche dans ton script ou ajoute ça :

 

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
   if(vehicleid== ID AMBULANCE)
   {
      SetPlayerHealth(playerid, 100);
   }
   return 1;
}

 

Voila c'est fait ;)

Modifié par superpompier
Lien vers le commentaire
Partager sur d’autres sites

 

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
   if(vehicleid==416)
   {
   SetPlayerHealth(playerid, 100);
   }
   return 1;
}

 

 

Donc, j'ai essayer mais ça n'a pas l'air de vouloir remettre la vie à 100. J'ai tester avec l'ID d'un autre vehicule c'est pareille.

 

 

Lien vers le commentaire
Partager sur d’autres sites

heu ce qu'il faudrait faire, c'est que devant tout les AddStaticVehicle qui ont pour ID 416, tu mette par exemple

 

ambu

 

exemple :

 

ambu=AddStaticVehicle(416, X, Y, Z);

 

bien sur il faut que tu mette ambu devant toute les autre ambulance, donc il faudra un

 

news ambu;

 

Après une fois que c'est fait,

 

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
   if(vehicleid==ambu)
   {
   SetPlayerHealth(playerid, 100);
   }
   return 1;
}

 

tu vois ? on nome le véhicule ambu, comme ça on est sur que ce sera celui ci qui sera pris et pas le véhicule n° 416, ce que je crois qui c'est passé et c'est pour ça que ça ne fonctionne pas...

 

A++ et bonne chance

Lien vers le commentaire
Partager sur d’autres sites

J'ai un nouveau problème que je n'arrive pas à résourdre... Alors, j'ai fait des skin reservé seulement aux admins... Mais le problème c'est que, les lignes que j'ai mise par exemple "SetPlayerHeath" non aucun effet sur le deuxième skin.

 

Les lignes :

 

 

else if(gTeam[playerid] == TEAM_A) {

GivePlayerWeapon(playerid, 31, 1500);
GivePlayerWeapon(playerid, 16, 50);
GivePlayerWeapon(playerid, 24, 300);
SetPlayerArmour(playerid, 150);
SetPlayerHealth(playerid, 150);
SetPlayerColor(playerid,COLOR_GREEN);

if(IsPlayerAdmin(playerid) == 1){

}else{

SendClientMessage(playerid, COLOR_WHITE, "Vous avez étais kické...");
Kick(playerid);

  }
  
if(gTeam[playerid] == TEAM_P) {

GivePlayerWeapon(playerid, 31, 1500);
GivePlayerWeapon(playerid, 16, 50);
GivePlayerWeapon(playerid, 24, 300);
SetPlayerArmour(playerid, 150);
SetPlayerHealth(playerid, 150);
SetPlayerColor(playerid,COLOR_BLUE);

if(IsPlayerAdmin(playerid) == 1){

}else{

SendClientMessage(playerid, COLOR_WHITE, "Vous avez étais kické...");

Kick(playerid);

  }
}

Modifié par thomasleroi
Lien vers le commentaire
Partager sur d’autres sites

Alors, ce n'est pas un skin mais une define de team que tu as mis, c'est grave ;)

 

pour que ça marche :

 

 

else if(gTeam[playerid] == TEAM_A) 
{
   if(IsPlayerAdmin(playerid) == 1)
   {
      GivePlayerWeapon(playerid, 31, 1500);
      GivePlayerWeapon(playerid, 16, 50);
      GivePlayerWeapon(playerid, 24, 300);
      SetPlayerArmour(playerid, 150);
      SetPlayerHealth(playerid, 150);
      SetPlayerColor(playerid,COLOR_GREEN);
   }
   else
   {
      SendClientMessage(playerid, COLOR_WHITE, "Vous avez étais kické...");
      Kick(playerid);  
   }
} 
else if(gTeam[playerid] == TEAM_P) 
{
   if(IsPlayerAdmin(playerid) == 1)
   {
      GivePlayerWeapon(playerid, 31, 1500);
      GivePlayerWeapon(playerid, 16, 50);
      GivePlayerWeapon(playerid, 24, 300);
      SetPlayerArmour(playerid, 150);
      SetPlayerHealth(playerid, 150);
      SetPlayerColor(playerid,COLOR_BLUE);
   }
   else
   {
      SendClientMessage(playerid, COLOR_WHITE, "Vous avez étais kické...");
      Kick(playerid);
     }
}

 

voila ;)

 

Edit : Corrige tes fautes d'orthographe quand même :P

 

étais > été

Modifié par superpompier
Lien vers le commentaire
Partager sur d’autres sites

:ph34r: ...La jolie faute... :ph34r: > Participe passé, et on accorde que le premier verbe... Un truck comme ça :P

 

En tout cas ça marche super bien comme ça ^^

Maintenant je vais essayé de faire des portes qui s'ouvre seulement quand une personne d'une certaine équipe arrive. Je pense pouvoir y arrivé, sinon je te demandrais à nouveau de l'aide..

 

++

 

 

 

EDIT: Je pensais pouvoir y arriver...

 

Alors j'ai fait ça :

 

{
if (IsPlayerInArea(playerid,-1337.3512,2536.4910,2540.2971,-1283.4917)){ // Lieu d'action
if(gTeam[playerid] == TEAM_P) // Il faut être du Team_P
{
SendClientMessage(playerid, COLOR_WHITE, "test"); // Action
MoveObject(id4,2294.018310,2508.369628,4.975717,1.0); // Action 2
return 1;
}

 

 

Je les mis dans OnGameModeInit...

Je crois que je dois mettre un forward, mais je fais comment...

-start of function body without function header

-invalid function or declaration...

...

 

 

 

Plus tard je rajouterai un "timer" pour que la porte se referme au bout de 5 secondes...

Modifié par thomasleroi
Lien vers le commentaire
Partager sur d’autres sites

utilise une cmd c'est mieux.

 

public OnPlayerCommandText(playerid, cmdtext[])
{   /// je crois que c'est ça ^^ )
   if(strcmp(cmdtext,"/o", true)==0)
   {
      if (IsPlayerInArea(playerid,-1337.3512,2536.4910,2540.2971,-1283.4917))
      { // Lieu d'action
          if(gTeam[playerid] == TEAM_P) // Il faut être du Team_P
      {
         SendClientMessage(playerid, COLOR_WHITE, "test"); // Action
         MoveObject(id4,2294.018310,2508.369628,4.975717,1.0); // Action 2
         return 1;
      }
      else
      {
         SendClientMessage(playerid, COLOR_RED, "Tu n'est pas en équipe P");
         return 1;
      }
      }
      else
      {
      SendClientMessage(playerid, COLOR_RED, "tu n'est pas dans la zone !!");
      return 1;
      }
   }
   return 1;
}

 

ça devrait donner a peut près ça... Il faudrait que tu fasse ton timer avant d'essayer car tu ne pourra le faire qu'une fois... Bah oui, une fois la cmd taper, l'objet sera monter et il ne redescendra plus lol

A toi de voir ;) tu sais comment faire pour les timer :P

 

Edit : j'ai éditer mon post, fait attention avec le forum l'indentation est pourri...

Modifié par superpompier
Lien vers le commentaire
Partager sur d’autres sites

Sa marche bien ^^

 

Pour le timer j'ai un autre problème, c'est qu'il marche pas...

 

Enfin bref, voilà le parcours d'obstacle :

 

forward CommiPorte ();

 

SendClientMessage(playerid, COLOR_GREEN, "Vous ouvrez les portes."); // Action
MoveObject(id4,2294.018310,2508.369628,4.975717,1.0); // Action 2
MoveObject(id3,2335.225830,2443.929199,0.164209,1.0);
SetTimer("CommiPortee",15000,1);

 

public CommiPorte()
{
KillTimer(CommiPortee);
MoveObject(id3,2335.231445,2443.969726,6.629711,1.0);
MoveObject(id4,2294.005615,2499.361328,4.935194,1.0);
}

 

Aucune erreur quand je compile, c'est juste que le logiciel comprend pas ce que je veux lui dire. :blush:

Modifié par thomasleroi
Lien vers le commentaire
Partager sur d’autres sites

Pourquoi tu as deux objets ??

 

c'est une pote double battants ?

 

vue de haut :

 

__ fermé

 

/ \ ouvert

 

??

 

xD ouais je vois ou est ton problème :P

 

un timer en 15000 milisecondes ;)

 

sachant 1000 = 1s

 

15000 = 15 s

 

tu a attendu combien de temps avant de faire ton pronostique que ton timer ne marche pas ??

 

tu devait pas mettre 5 secondes ??

Modifié par superpompier
Lien vers le commentaire
Partager sur d’autres sites

Enféte, ce n'est pas une porte coulissante, mais sa ouvre deux endroit différents à la fois...

 

J'avais mis 15000ms, car avec 5000, la porte aurait pas eu le temp de s'ouvrir complètement avant de se refermer...

 

...

 

 

Donc je viens de faire plusieurs test, j'ai mis à 1ms, en mettant un message... Mais rien de tout ça n'est arrivé... :blink:

Lien vers le commentaire
Partager sur d’autres sites

Je crois que j'ai trouver !!! Si ce n'est pas ça, regarde en dessous, mais d'abord écoute :

 

 

Je viens de constater que ton nom de public n'avais pas le même nom que celui que ton timer doit appeler :

 

forward CommiPorte();

 

 

SetTimer("CommiPortee",5000,1);

 

 

public CommiPorte()

{

 

 

Et oui tu as mis deux "e" dans ton timer alors que tu n'en défini qu'un seul !!!

 

 

 

 

 

Si ce n'est toujours pas ça regarde ici :

Tes portes s'ouvrent ?? Mais le timer ne fonctionne pas...

 

 

On va faire autrement ^^ On va attendre que tes portes soit ouvertes pour lancer le timer qui les refermes.

 

en haut de ton script en dessous du forward de ton timer :

 

new timer;

 

et ensuite dans ta commande :

 

public OnPlayerCommandText(playerid, cmdtext[])
{
   if(strcmp(cmdtext,"/o", true)==0)
   {
      if (IsPlayerInArea(playerid,-1337.3512,2536.4910,2540.2971,-1283.4917))
      { 
          if(gTeam[playerid] == TEAM_P) // Il faut être du Team_P
         {
            SendClientMessage(playerid, COLOR_GREEN, "Vous ouvrez les portes."); // Action
            MoveObject(id4,2294.018310,2508.369628,4.975717,1.0); // Action 2
            MoveObject(id3,2335.225830,2443.929199,0.164209,1.0);
            if(MoveObject(id3,2335.225830,2443.929199,0.164209,1.0))
            {
               SendClientMessage(playerid, COLOR_YELLOW, "les portent se fermeront dans 5 secondes");
               timer=SetTimer("CommiPortee",5000,1);
            }
            return 1;
         }
         else
         {
            SendClientMessage(playerid, COLOR_RED, "Tu n'est pas en équipe P");
            return 1;
         }
      }
      else
      {
         SendClientMessage(playerid, COLOR_RED, "tu n'est pas dans la zone !!");
         return 1;
      }
   }
   return 1;
}

 

ton public :

 

public CommiPorte()
{
   MoveObject(id3,2335.231445,2443.969726,6.629711,1.0);
   MoveObject(id4,2294.005615,2499.361328,4.935194,1.0);
   KillTimer(timer);  /// ton kill timer il faut toujours le mettre après tes actions !! pour être sur que tes actions se réalisent avant que le timer soit détruit et pense que rien ne doit se passer;)
}

 

bon voila tu n'a plus qu'a essayer tout ça ;)

Modifié par superpompier
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×
×
  • Créer...