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

Titre: [Réglé] Besoin d'aide pour créer une porte automatique
Posté 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
Titre: Re : Besoin d'aide pour créer une porte automatique
Posté par: chneubeul le 01 Décembre 2010, 22:23:55
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
Titre: Re : Besoin d'aide pour créer une porte automatique
Posté par: Winklevows le 01 Décembre 2010, 22:30:08
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)
Titre: Re : Besoin d'aide pour créer une porte automatique
Posté par: Hip-hop le 01 Décembre 2010, 23:16:25
Tu met une condition que sa ouvre juste pour un COP
Titre: Re : Besoin d'aide pour créer une porte automatique
Posté par: Winklevows le 01 Décembre 2010, 23:44:52
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... :(

Titre: Re : Besoin d'aide pour créer une porte automatique
Posté par: Xartrick le 02 Décembre 2010, 00:20:41
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 !
Titre: Re : Besoin d'aide pour créer une porte automatique
Posté par: Winklevows le 02 Décembre 2010, 00:29:51
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
Titre: Re : Besoin d'aide pour créer une porte automatique
Posté par: Winklevows le 03 Décembre 2010, 15:25:19
Plus personne ? :(
Titre: Re : Besoin d'aide pour créer une porte automatique
Posté par: Brian Turner le 03 Décembre 2010, 15:47:32
Salut, tout simplement: la varibale playerid n'existe pas.

Pour ton code faut faire sa:
Code: (pawn) [Sélectionner]
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
Titre: Re : Besoin d'aide pour créer une porte automatique
Posté par: Ssk le 03 Décembre 2010, 17:34:59
@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.
Titre: Re : Re : Besoin d'aide pour créer une porte automatique
Posté par: Winklevows le 03 Décembre 2010, 18:02:48
Salut, tout simplement: la varibale playerid n'existe pas.

Pour ton code faut faire sa:
Code: (pawn) [Sélectionner]
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).
Titre: Re : [Réglé] Besoin d'aide pour créer une porte automatique
Posté par: Ssk le 03 Décembre 2010, 20:05:00
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 ....
Titre: Re : [Réglé] Besoin d'aide pour créer une porte automatique
Posté par: Xartrick le 03 Décembre 2010, 20:24:21
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);
}
}
Titre: Re : [Réglé] Besoin d'aide pour créer une porte automatique
Posté par: Winklevows le 03 Décembre 2010, 21:06:34
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 ?
Titre: Re : [Réglé] Besoin d'aide pour créer une porte automatique
Posté par: Xartrick le 03 Décembre 2010, 21:11:41
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 ;).