thomasleroi Posté(e) le 25 décembre 2008 Signaler Partager Posté(e) le 25 décembre 2008 (modifié) Bon voilà, GTA SA me manquez trop . 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é le 25 décembre 2008 par thomasleroi Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
StAfF MaN Posté(e) le 26 décembre 2008 Signaler Partager Posté(e) le 26 décembre 2008 (modifié) 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é le 26 décembre 2008 par superpompier Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
thomasleroi Posté(e) le 26 décembre 2008 Auteur Signaler Partager Posté(e) le 26 décembre 2008 (modifié) 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 ! ... ProxDetector c'est quoi au juste ? un Filterscript, un include... ? Modifié le 26 décembre 2008 par thomasleroi Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
StAfF MaN Posté(e) le 26 décembre 2008 Signaler Partager Posté(e) le 26 décembre 2008 (modifié) 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 ^^ ) 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é le 26 décembre 2008 par superpompier Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
thomasleroi Posté(e) le 27 décembre 2008 Auteur Signaler Partager Posté(e) le 27 décembre 2008 C'est bon, sa marche Par contre, j'ai une sorte de faction medecin, et j'aimerais savoir si c'est possible que il y est qu'une seul sorte de skin qui pourrait utiliser la commande /soin ? (ID:101) Sinon c'est pas grave, et je te remercie. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
StAfF MaN Posté(e) le 27 décembre 2008 Signaler Partager Posté(e) le 27 décembre 2008 (modifié) 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é le 27 décembre 2008 par superpompier Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
thomasleroi Posté(e) le 27 décembre 2008 Auteur Signaler Partager Posté(e) le 27 décembre 2008 (modifié) (Désolé du double post, j'ai fait une erreur de manipulation...) Modifié le 27 décembre 2008 par thomasleroi Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
thomasleroi Posté(e) le 27 décembre 2008 Auteur Signaler Partager Posté(e) le 27 décembre 2008 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); } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
StAfF MaN Posté(e) le 27 décembre 2008 Signaler Partager Posté(e) le 27 décembre 2008 Et ben ^^ réfléchi un tit peut ^^ 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); } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
thomasleroi Posté(e) le 27 décembre 2008 Auteur Signaler Partager Posté(e) le 27 décembre 2008 Ah oui, sa parait logique... Encore merci. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
StAfF MaN Posté(e) le 27 décembre 2008 Signaler Partager Posté(e) le 27 décembre 2008 (modifié) 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é le 27 décembre 2008 par superpompier Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
thomasleroi Posté(e) le 28 décembre 2008 Auteur Signaler Partager Posté(e) le 28 décembre 2008 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
StAfF MaN Posté(e) le 28 décembre 2008 Signaler Partager Posté(e) le 28 décembre 2008 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 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
thomasleroi Posté(e) le 28 décembre 2008 Auteur Signaler Partager Posté(e) le 28 décembre 2008 Ah d'accord je comprend ^^. Par contre le problème c'est que j'utilise le FS "tAxI_XVM" (tu sais avec le /vmenu). Mais ce n'est pas grave j'ai une petite idée sa devrait pas poser de problème. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
StAfF MaN Posté(e) le 29 décembre 2008 Signaler Partager Posté(e) le 29 décembre 2008 Ok ^^ Si t'as un prob j'suis la Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
thomasleroi Posté(e) le 2 janvier 2009 Auteur Signaler Partager Posté(e) le 2 janvier 2009 (modifié) 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é le 2 janvier 2009 par thomasleroi Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
StAfF MaN Posté(e) le 2 janvier 2009 Signaler Partager Posté(e) le 2 janvier 2009 (modifié) 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 étais > été Modifié le 2 janvier 2009 par superpompier Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
thomasleroi Posté(e) le 3 janvier 2009 Auteur Signaler Partager Posté(e) le 3 janvier 2009 (modifié) ...La jolie faute... > Participe passé, et on accorde que le premier verbe... Un truck comme ça 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é le 3 janvier 2009 par thomasleroi Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
StAfF MaN Posté(e) le 3 janvier 2009 Signaler Partager Posté(e) le 3 janvier 2009 (modifié) 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 Edit : j'ai éditer mon post, fait attention avec le forum l'indentation est pourri... Modifié le 3 janvier 2009 par superpompier Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
thomasleroi Posté(e) le 3 janvier 2009 Auteur Signaler Partager Posté(e) le 3 janvier 2009 (modifié) 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. Modifié le 4 janvier 2009 par thomasleroi Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
StAfF MaN Posté(e) le 4 janvier 2009 Signaler Partager Posté(e) le 4 janvier 2009 (modifié) 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 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é le 4 janvier 2009 par superpompier Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
thomasleroi Posté(e) le 4 janvier 2009 Auteur Signaler Partager Posté(e) le 4 janvier 2009 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é... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
StAfF MaN Posté(e) le 4 janvier 2009 Signaler Partager Posté(e) le 4 janvier 2009 (modifié) 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é le 4 janvier 2009 par superpompier Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
thomasleroi Posté(e) le 10 janvier 2009 Auteur Signaler Partager Posté(e) le 10 janvier 2009 Arf... Sa ne marche toujours pas... Tan pis, je ferrais la commande /fermer, et dans la commande ouvrir, il y aura le message "Tapez /fermer pour fermer". P.S : Dans le lycée ou je suis je suis interne, donc je répondrais au message que le week-end... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
StAfF MaN Posté(e) le 11 janvier 2009 Signaler Partager Posté(e) le 11 janvier 2009 Tu as bien regarder ton erreur des "e" ?? parce que dans le code que je t'es donné je n'avais pas corrigé les "e" Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
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.