GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Lucifer le 14 Novembre 2010, 09:01:00
-
Bonjour,
Je pense que je vais faire comme Myk3L, un topic général ou je poserais toutes mes questions :).
Donc, première question :
1. Je possède l'include de Dixon pour le permis automatique, j'aimerais savoir comment faire pour que le joueur puisse seulement /passercode que si il y a 0 instructeurs de connecté ? (J'ai une idée mais j'aimerais savoir comment vous feriez vous) ?
Merci d'avance de vos aides.
-
Tu fais une fonction pour savoir si les membres d'une faction sont connectés avec boucle for de ce genre.:
forward IsMemberConnected(idfaction);
public IsMemberConnected(idfaction)
{
for(new i = 0; i < MAX_PLAYER; i++)
{
if(IsPlayerConnected(i))
{
if(PlayerInfo[pMember] == idfaction || PlayerInfo[pLeader] == idfaction)
{
return 1;
}
else
{
return 0;
}
}
}
}
PS : Code fait sur un portable ;)
Myk3L.
HS : T'as raison de faire un topic ;)
-
D'accord, je vois le truc et après dans la commande, il faut que je mette quoi ?
-
Bah tu mets quelque chose du genre
Ta commande
{
if(IsAMemberConnected(11))
{
SendClientMessage(playerid, COLOR_WHITE, "Des instructeurs sont disponibles, pour les contactez, attendez ici ((Ou tappez /instructeur))");
return 1;
}
else
{
Fonction de Dixon
}
return 1;
}
Voilà, et tu pourras te servir de cette fonction pour toutes les factions. (11 est l'id de la faction instructeurs je crois)
Myk3L.
-
D'accord merci bien..
J'ai juste ce warning à régler :
38525 : warning 209: function "IsAMemberConnected" should return a value
public IsAMemberConnected(idfaction)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(PlayerInfo[i][pMember] == idfaction || PlayerInfo[i][pLeader] == idfaction)
{
return 1;
}
else
{
return 0;
}
}
}
Ligne 38525 : }
-
Oui :)
Donc, j'ai aucune erreur....juste que sa marche pas correctement.
Que je soit dans la faction 5, 6, 11 ou 32, sa me dit toujours qu'il y a un instructeur de connecté.
Voici ma commande :
if(strcmp(cmdtext, "/passercode",true)==0)
{
if(IsPlayerConnected(playerid))
{
if(PlayerToPoint(5.0, playerid, -2027.1587,-114.5045,1035.1719)) // DMV
{
if(PlayerInfo[playerid][pLevel] > 0)
{
if(PlayerInfo[playerid][pCarLic] < 1)
{
if(IsAMemberConnected(11))
{
if(pTest[playerid] == 0)
{
if(GetPlayerMoney(playerid) >= 500)
{
SetPlayerInterior(playerid,3);
TogglePlayerControllable(playerid, 0);
GameTextForPlayer(playerid, "~r~Suivez les instructions !",5000,3);
pTest[playerid] = 1;
/* ClearChatbox(playerid, 8);
SendClientMessage(playerid, COLOR_LIGHTRED, "The Information Outline Course");
SendClientMessage(playerid, COLOR_YELLOW, " ");
SendClientMessage(playerid, COLOR_YELLOW, "Welcome to the Information Outline course. In this course you");
SendClientMessage(playerid, COLOR_YELLOW, "will learn about the things that will be tested later on.");
SendClientMessage(playerid, COLOR_YELLOW, " "); */
IO1(playerid);
//SetTimerEx("IO1", 10000, 0, "d", playerid);
SetTimerEx("IO2", 20000, 0, "d", playerid);
SetTimerEx("IO3", 40000, 0, "d", playerid);
SetTimerEx("IO4", 60000, 0, "d", playerid);
SetTimerEx("IO5", 80000, 0, "d", playerid);
SetTimerEx("IO6", 60000, 0, "d", playerid);
SetTimerEx("IO7", 100000, 0, "d", playerid);
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Vous n'avez pas 500$ assez d'argent pour passer le test!");
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Vous êtes déjà en train de le passer !");
return 1;
}
}
else
{
SendClientMessage(playerid,COLOR_GREY," Instructeur de Disponible /instructeur");
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Vous avez déjà votre permis de conduire !");
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Vous n'avez pas le niveau requis.");
return 1;
}
}
return 1;
}
return 1;
}
-
C'est normal car tu vérifie si un instructeur est connecté, si oui, tu balance le test, en gros, l'inverse de ce que j'avais dit.
Avec ça, tu devrais y arrivé : http://pastebin.com/dpF9JBG0 (http://pastebin.com/dpF9JBG0)
Myk3L.
-
C'est bizarre.....sa marche toujours pas
-
Essaye de le faire avec juste un truc comme ça :
if(strcmp(cmdtext, "/yadesinstru",true)==0)
{
if(IsAMemberConnected(11))
{
SendClientMessage(playerid,COLOR_GREY,"Instructeur de Disponible /instructeur");
return 1;
}
else SendClientMessage(playerid, COLOR_RED, "Il n'y a pas d'instructeurs en ligne :D");
}
return 1;
}
Myk3L.
PS : Au lieu de faire des copié/collé bêtes de ce que j'ai fais, essaye de réfléchir, de modifier des trucs ... ça marchera un jour ;)
-
PS : Au lieu de faire des copié/collé bêtes de ce que j'ai fais, essaye de réfléchir, de modifier des trucs ... ça marchera un jour Clin d'oeil
C'est ce que je fais ;)
-
Salut,
Essaye plutôt ca:
if(!IsAMemberConnected(11))
a la place de if(IsAMemberConnected(11)
J'espère t'avoir aidé ;)
-
J'y ai pensé après, mais je le laissais réfléchir un peux, si il aurait vraiment rien trouvé, je lui aurais filé un coup de (pied ? :P) main !
Myk3L.
-
;D c'est pire
Si un membre de la faction ID 11 est connecté ça renvoi la valeur 1=true sinon 0=false .
La le fait de mettre un "!" inversse le résultat en remplaçant 1 par 0 soit passe de true à false donc ça n'a aucun interet
Enfin bref l'erreur vient de la fonction .
Avant la boucle de pouvait faire qu'un tour et passer par le joueur id 0 car il y avait un return dans les deux cas .
Ce qui revenait à faire :
public IsAMemberConnected(idfaction)
{
if(IsPlayerConnected(0))
{
if(PlayerInfo[0][pMember] == idfaction || PlayerInfo[0][pLeader] == idfaction)
{
return 1;
}
else
{
return 0;
}
}
}
Tout pour en venir à te dire que la fonction est fausse et de vérifié que même si tu change de faction que tu n'est pas encore leader de la 11 .
Correction :
public IsAMemberConnected(idfaction)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(PlayerInfo[i][pMember] == idfaction || PlayerInfo[i][pLeader] == idfaction)
{
return 1;
}
}
}
return 0;
}
-
Je me coucherais moins con ce soir, je faisais des fonctions avec else return 0; mais en fait pas besoin du else :)
Myk3L.
-
Merci de vos aides, sa marche niquel ;)
C'est juste que je testais mal :). Du coup j'ai mis un NPC instructeur pour voir et sa marche :P
-
Ah les NPC, c'est trop bien ces machins là, surtout que moi ça va me servir pour mon système de job (:P)
Myk3L.
-
Ah bon, pour faire quoi ?
-
... ils v:)ont même interagir avec les joueurs :)
-
C'est à dire ? Sa m'intéresse ton truc :)
2. Quel est la fonction qui permet d'attacher un objet dans le dos d'un joueur par exemple ?
Merci.
-
NPC==> est un robot, ou tu peux faire quelques trucs avec. Il peuvent marcher, piloter, conduire, parler dans le chatbox etc.
Ta deuxième question: Le truc pour mettre des objets est très complexe à mettre!
-
NPC==> est un robot, ou tu peux faire quelques trucs avec. Il peuvent marcher, piloter, conduire, parler dans le chatbox etc.
Ta deuxième question: Le truc pour mettre des objets est très complexe à mettre!
Du tout, tient : http://forum.sa-mp.com/showthread.php?t=186796 (http://forum.sa-mp.com/showthread.php?t=186796) fs déjà tout près.
-
Ah merci, c'est sympa :)
La fonction à par l'air trop compliqué encore :)
3. Comment faire pour créer un NPC avec un TramWay ?
-
Ah merci, c'est sympa :)
La fonction à par l'air trop compliqué encore :)
3. Comment faire pour créer un NPC avec un TramWay ?
Il faut faire un recording pour sa après il y a un tuto pour sa.
-
Il faut faire un recording pour sa après il y a un tuto pour sa.
??? ...je sais qu'il faut faire un recording...mais comme on peut pas conduire un TramWay je voulais savoir comment justement enregistrer le parcours d'un Tramway :)
-
Si on peux conduire le tramway
-
Tu va dans le tram et tu lance le record . . .
-
Salut, si tu veux rentrer plus facilement dans le tram, tu te créé un petit script.
new tram;
OnGameModeInit :
tram = AddStaticVehicle(ID du tram, ...
Ensuite on peut mettre une touche
OnPlayerKeyStateChange :
Si le joueur appuie sur entrer (KEY_SECONDARY_ATTACK)
On prend la position du tram : GetVehiclePos(tram, X, Y, Z);
ensuite on test si il est au alentour :
IsPlayerInRangeOfPoint(playerid, 5.0, X, Y Z);
et donc là si c'est vérifier
PutPlayerInVehicle(playerid, tram);
Avec ce code, tu ne pourras pas sortir, je te laisse faire. :)
A+ Sam.
-
On peut rentrer ? O_o....je suis c** ou quoi :P
Quand j'appuie sur entrer, je peux pas rentrer...quand j'appuie sur G, il ce met en passager mais c'est tous
C'est quoi l'astuce ? Je spawn mon véhicule /veh et ensuite ? :-\
Je ferais un script si et seulement si on peut pas autrement xD, mais merci de l'astuce :)
-
Salut,
Avec le code de Chneubeul, tu peux rentrer, mais pas sortir.
Tu spawn ton véhicule avec /veh IG, ensuite, si tu as inséré le bout de code que t'as donné Chneubeul, tu peux rentrer et le conduire, mais tu ne peux pas sortir.
Si tu veux pouvoir sortir, il faut que tu vérifies si le joueur appuies encore une fois sur la touche ENTRÉE (KEY_SECONDARY_ATTACK), et ensuite tu l'éjectes.
++
Lloyd
-
Ok, bien je vais mettre ce bout de code en place alors, merci bien Lloyd :)
-
Besoin d'aide ;)
Voilà, j'ai un soucis avec mon système d'inscription / connexion. Quand je m'inscris, et que je me connecte, sa marche. Si je me déconnecte et reconnecte, il me demande de me ré-enregistrer et j'arrive pas à trouver comment régler ce soucis, quel code vous faut-il ?
Merci de votre aide..
-
Je n'ai jamais trouvé comment réparer ce bug, mais cependant, j'ai remarqué que (avec mon ancien GM), au bout de 5, 10 connections (de moi même), le système remarche correctement et il n'y a plus ce bug. Mais je pense que cela vient de ton système d'enregistrement qui ne répond plus, au pire, tu crée (dans ton PlayerInfo si tu en as enfin je suppose) pFini, tu le rajoute au système d'enregistrement et de login, et tu met PlayerInfo[playerid][pFini] = 1; a la fin du tuto. Et dans ton SetPlayerSpawn(je suppose toujours que tu en as un), tu met:
if(PlayerInfo[playerid][pTuto] ==1)
{
// Ton endroit de spawn
// Avec tout ce qui faut bien sur ^^
}
else
{
// Ton endroit de spawn pour le tuto
}
-
Je pense pas que se soit la bonne solution çà....
D'autres proposition s'il vous plait ? :-[
Quand je clique sur " Spawn " puisque sa spawn pas le joueur directement :S, sa me met : ** Ce server demande de se logué pour apparaitre (Kick) **" et sa me kick.
-
Salut,
je crois avoir la solution pour ton problème d'ident/enreg, tu Utilise un larp ou autre du même genre ? si c'est sa va dans public onplayerconnection puis tu cherche le new string[MAX_PLAYER_NAME]; et tu le change pas sa new string[50]; en espèrent t avoir aider.
-
Non sa venait pas de çà, j'avais fais une sauvegarde du GM avant modification, j'ai remis celle-ci et j'avais fait une erreur dans OnDialogResponse
Merci quand même