GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Winklevows le 01 Décembre 2010, 22:02:40
-
Bonjour,
Je fais appel à vous car vous êtes mon dernier moyen, sa fait deux jours que je cherche et recherche sur les forums de samp pour créer une porte automatique (une grille qui s'ouvre quand on arrive devant).
J'ai réussi car à ce tuto :
http://wiki.sa-mp.com/wiki/Automatic_Gates (http://wiki.sa-mp.com/wiki/Automatic_Gates)
Sa fonctionne parfaitement MAIS je ne voudrais pas m'arrêter là et faire pour que la porte ne s'ouvre QUE pour clan (: "COP") mais impossible. Soit ma porte s'ouvre pour tout le monde soit elle s'ouvre pour personne...
Pourriez-vous m'expliquer à partir de ce code comment faire svp ?
public CheckGate()
{
new mygate_status;
for(new i;i<MAX_PLAYERS;i++)
{
if(!IsPlayerConnected(i)) continue;
if(IsPlayerInRangeOfPoint(i,10.0,closed_X,closed_Y,closed_Z))mygate_status=1;
}
if(c_gate_status)MoveObject(mygate, open_X, open_Y, open_Z,Moving Speed);
else MoveObject(mygate, closed_X, closed_Y, closed_Z, Moving Speed);
}
(tiré d'ici :http://wiki.sa-mp.com/wiki/Automatic_Gates)
Votre aide me serait d'une grande utilité :)
Merci
-
Salut, quel type de serveur as tu ? DM, RP ? Je demande ça, pour savoir quels est le nom du tableau ou et recensé toutes les informations des joueurs du styles : PlayerInfo pour les serveurs roleplay.. :happy
-
C'est un Cops And Robbers, voici le gamemode que j'utilise : http://forum.sa-mp.com/showthread.php?t=157338&highlight=cops (http://forum.sa-mp.com/showthread.php?t=157338&highlight=cops)
-
Tu met une condition que sa ouvre juste pour un COP
-
Merci de ta réponse mais je ne sais pas comment faire, mes connaissances ne sont pas très avancé.
J'ai essayé quelque chose comme sa (en gras ce que j'ai rajouté en plus du code original) :
forward CheckGate(playerid, classid);
public CheckGate(playerid, classid)
{
new lvpdgate1_status;
for(new i;i<MAX_PLAYERS;i++)
{
if (gTeam[playerid] == COP)
{
if(!IsPlayerConnected(i)) continue;
if(IsPlayerInRangeOfPoint(i,10.0,2334.30908203,2443.67431641,6.30757141))
}
if(lvpdgate1_status)MoveObject(lvpdgate1, 2330.28222656,2436.89086914,6.30757141,5); //OPEN
else MoveObject(lvpdgate1, 2334.30908203,2443.67431641,6.30757141, 5);//CLOSE
}
}
J'ai aussi essayé quelque chose du même type :
forward CheckGate(playerid, classid);
public CheckGate(playerid, classid)
{
new lvpdgate1_status;
for(new i;i<MAX_PLAYERS;i++)
{
if( GetPlayerTeam(i) == COP )
{
if(!IsPlayerConnected(i)) continue;
if(IsPlayerInRangeOfPoint(i,10.0,2334.30908203,2443.67431641,6.30757141))
}
if(lvpdgate1_status)MoveObject(lvpdgate1, 2330.28222656,2436.89086914,6.30757141,5); //OPEN
else MoveObject(lvpdgate1, 2334.30908203,2443.67431641,6.30757141, 5);//CLOSE
}
}
Mais sa ne fonctionne pas, je pense que j'ai du faire une erreur très idiote mais j'ai essayé plusieurs chose par moi même pour arriver au résultat... :(
-
public CheckGate()
{
new mygate_status;
for (new i;i<MAX_PLAYERS;i++) {
if (gTeam[playerid] !== COP) {
continue;
}
if (!IsPlayerConnected(i)) {
continue;
}
if (IsPlayerInRangeOfPoint(i, 10.0, closed_X, closed_Y, closed_Z)) {
mygate_status = 1;
}
}
if (c_gate_status) {
MoveObject(mygate, open_X, open_Y, open_Z, Moving Speed);
}
else {
MoveObject(mygate, closed_X, closed_Y, closed_Z, Moving Speed);
}
}
J'ai regardé la forme du script et j'en est déduit ceci, je n'ai pas essayé mais théoriquement, cela marche !
-
Un grand merci ! Je testerai sa demain pour voir si sa fonctionne mais en tout cas merci beaucoup :)
Double post
public CheckGate()
{
new mygate_status;
for (new i;i<MAX_PLAYERS;i++) {
if (gTeam[playerid] != COP) {
continue;
}
if (!IsPlayerConnected(i)) {
continue;
}
if (IsPlayerInRangeOfPoint(i, 10.0, closed_X, closed_Y, closed_Z)) {
mygate_status = 1;
}
}
if (c_gate_status) {
MoveObject(mygate, open_X, open_Y, open_Z, Moving Speed);
}
else {
MoveObject(mygate, closed_X, closed_Y, closed_Z, Moving Speed);
}
}
J'ai regardé la forme du script et j'en est déduit ceci, je n'ai pas essayé mais théoriquement, cela marche !
Bonjour, j'ai deux erreurs :
error 001: expected token: ";", but found "for" sur la ligne :
for (new i;i<MAX_PLAYERS;i++) {
et error 017: undefined symbol "playerid" sur la ligne :
if (gTeam[playerid] != COP) {
Double post
visiblement la 1ere erreur était un bug car en réécrivant le code elle n'apparait plus.
Pouvez vous m'aider car j'ai vraiment du mal ?
Merci
-
Plus personne ? :(
-
Salut, tout simplement: la varibale playerid n'existe pas.
Pour ton code faut faire sa:
public CheckGate()
{
new mygate_status;
for (new i;i<MAX_PLAYERS;i++) {
if (gTeam[i] != COP) {
continue;
}
if (!IsPlayerConnected(i)) {
continue;
}
if (IsPlayerInRangeOfPoint(i, 10.0, closed_X, closed_Y, closed_Z)) {
mygate_status = 1;
}
}
if(c_gate_status)
{
MoveObject(mygate, open_X, open_Y, open_Z, Moving Speed);
}
else
{
MoveObject(mygate, closed_X, closed_Y, closed_Z, Moving Speed);
}
}
Voila ++ Brian
-
@Winklevows: Je te conseil vivement d'aller lire les règles, tu fais plusieurs double post, et tu ne met pas tes codes en les balises adéquates ...
Va lire et respecte les règles car c'est le seul avertissement que je donne, la prochaine fois que tu ne les respectent pas ne t'attend pas à ce que je soit clément.
-
Salut, tout simplement: la varibale playerid n'existe pas.
Pour ton code faut faire sa:
public CheckGate()
{
new mygate_status;
for (new i;i<MAX_PLAYERS;i++) {
if (gTeam[i] != COP) {
continue;
}
if (!IsPlayerConnected(i)) {
continue;
}
if (IsPlayerInRangeOfPoint(i, 10.0, closed_X, closed_Y, closed_Z)) {
mygate_status = 1;
}
}
if(c_gate_status)
{
MoveObject(mygate, open_X, open_Y, open_Z, Moving Speed);
}
else
{
MoveObject(mygate, closed_X, closed_Y, closed_Z, Moving Speed);
}
}
Voila ++ Brian
Je n'arrive pas a y croire, depuis le temps que j'essaye de faire fonctionner ces foutus portes, sa marche enfin grace à toi ! Merci beaucoup ! Je faisais la même chose sauf que je mettais le "i" entre parenthèses : (i), au lieu de le mettre entre crochets : .
@Winklevows: Je te conseil vivement d'aller lire les règles, tu fais plusieurs double post
Sasuke, je connais les règles.
J'ai fais un double post ? Non car je savais que le forum éditait les messages pour éviter le justement double post, donc où est le problème vu que mon message a été édité ?
J'ai simplement "uppé" mon topic car personne ne répondait et mon dernier message datait de plus de 24h.
et tu ne met pas tes codes en les balises adéquates ...
Je ne met pas mes codes dans les balises ? Relis mon premier messages, le code est dans les balise.
Sa sert à quoi de mettre le code entre balise ? Pour que le message soit plus claire. Pourquoi je n'ai pas mis mon second code dans les balises ?
Parce que j'ai mis des zones en gras pour que sa soit plus claire, et quand on met un code entre balise, on ne peut pas mettre de BBCODE (logique).
-
Salut, bon déjà tu me dit ouvertement et sans le savoir que tu ne connais strictement pas les règles ....
http://www.gtaonline.fr/forums/index.php/topic,12060.0.html (http://www.gtaonline.fr/forums/index.php/topic,12060.0.html)
Va lire ici, les doubles posts ( UP ) sont interdits non pas durant 24 heures mais 48, ensuite ton argument du je savais que le forum éditait n'est pas valide, si tu le savais tu aurai du le faire manuellement !
Ensuite tu me dit que tu met tes codes entre les balises code et tu me dit de regarder le premier poste, mais le problème ne vient pas du premier post, mais d'un autre que tu peut voir ici (http://www.gtaonline.fr/forums/index.php/topic,12197.0.html#msg209556) et même si c'est pour que ce soit plus clair, tu aurai pû le mettre sur le pastebin de GTAOnline ....
-
Pour ton problème, j'ai fait une erreur, j'ai attribué une valeur ou lieu de la comparer.
Pour ton problème qui dit que playerid n'est pas définit, il suffit d'ajouter le paramètre à ta fonction et ensuite de l'appeler avec l'ID du joueur en argument.
public CheckGate(playerid)
{
new mygate_status;
for (new i; i<MAX_PLAYERS; i++) {
if (gTeam[playerid] !== COP) {
continue;
}
if (!IsPlayerConnected(i)) {
continue;
}
if (IsPlayerInRangeOfPoint(i, 10.0, closed_X, closed_Y, closed_Z)) {
mygate_status = 1;
}
}
if (c_gate_status) {
MoveObject(mygate, open_X, open_Y, open_Z, Moving Speed);
}
else {
MoveObject(mygate, closed_X, closed_Y, closed_Z, Moving Speed);
}
}
-
Merci de vos réponses :)
Brian Turner m'a déjà donné un code et il fonctionne, il y a une différence entre le sien et le tien Xartrick ? Vaut mieux utiliser un code plus qu'un autre ?
-
Oui, mon code est complètement faux, si tu utilise mon code, il ne changera jamais de joueur mais il restera sur le joueur qui aura lancé la boucle.
J'avais donné l'ID du joueur alors qu'il fallait donner la valeur de i, je ne devais pas avoir vraiment les idées claires.
D'ailleurs, à ce propos, vérifie d'abord que le joueur n'est pas connecté avant de tester si il est dans telle ou telle équipe, cela évitera certains problèmes facilement évitables !
Le code de Brian_Turner est donc juste, et le mien non, à la différence de l'édition apporté par lui même ;).