GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Komolos le 22 Août 2010, 16:34:35

Titre: Aide [/serviceadmin]
Posté par: Komolos le 22 Août 2010, 16:34:35
Bonjour,
J'ai un problème je voudrai des variable pour que ça fasse qu'ont on parle. Administrateur, modérateur etc...
J'ai essaille pleins de choses mais des erreur :s
Je voudrai que qu'ont on tape /serviceadmin, que quand il écrive on voit : Administrateur dit : Salut, etc...

if(!strcmp(cmdtext, "/serviceadmin", true)) // By Ellis
{
if(IsPlayerConnected(playerid))
{
   if(gPlayerLogged[playerid] == 0)
   {
       SendClientMessage(playerid, COLOR_GREY, "   Vous devez d'abord ouvrir une session !");
return 1;
   }
   if(PlayerInfo[playerid][pAdmin] > 2)
   {
       if(AdminDuty[playerid] == 0)
       {
           AdminDuty[playerid] = 1;
           SetPlayerArmour(playerid, 999);
SetPlayerHealth(playerid, 999);
SetPlayerColor(playerid,TEAM_VAGOS_COLOR);
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "[ID:%d] %s se met en service d'Admin", playerid, sendername);
SendClientMessageToAll(COLOR_YELLOW, string);
if(PlayerInfo[playerid][pAdmin] >= 1337)
{
   for(new i = 0; i < sizeof(CarInfo); i++)
{
SetVehicleParamsForPlayer(i,playerid,0,0);
}
}
return 1;
       }
       else if(AdminDuty[playerid] == 1)
       {
           AdminDuty[playerid] = 0;
           SetPlayerArmour(playerid, 0);
SetPlayerHealth(playerid, 100);
SetPlayerColor(playerid,TEAM_HIT_COLOR);
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "[ID:%d]%s n'est plus en service d'Admin", playerid, sendername);
SendClientMessageToAll(COLOR_YELLOW,string);
return 1;
       }
   }
   else
   {
       SendClientMessage(playerid, COLOR_GREY, "   Vous n'êtes pas Admin !");
       return 1;
   }
}
   return 1;
}
Titre: Re : Aide [/serviceadmin]
Posté par: Eloctro le 22 Août 2010, 18:46:45
Rien compris
Titre: Re : Aide [/serviceadmin]
Posté par: [viruz]rider_77 le 22 Août 2010, 18:54:55
J'ai utiliser un soft pour décrypter et je crois comprendre que tu veux une couleur différente selon le rang du joueur...
Titre: Re : Aide [/serviceadmin]
Posté par: Ssk le 22 Août 2010, 18:57:37
Hum, j'ai pas vraiment compris ce que tu voulais mais si c'est ce qu'a dit Rider, un peu de recherche suffira, ce problème à déjà été résolu plusieurs fois ^^
Titre: Re : Aide [/serviceadmin]
Posté par: robyn59 le 22 Août 2010, 19:02:50
il veut que quand les admin font /serviceadmin que quand il parle en tchat local sa ecrive Modo ou ADMIN a la place de leur nom
Titre: Re : Aide [/serviceadmin]
Posté par: Leonidas300 le 22 Août 2010, 19:20:47
sufie de crée un if quand le joueur parle...
Titre: Re : Aide [/serviceadmin]
Posté par: Komolos le 22 Août 2010, 19:43:08
J'ai editer mon sujet, désolés, si vous n'avez rien compris.
Titre: Re : Re : Aide [/serviceadmin]
Posté par: Eloctro le 22 Août 2010, 20:47:25
J'ai utiliser un soft pour décrypter et je crois comprendre que tu veux une couleur différente selon le rang du joueur...
lol faudras que tu me le passe xd

Sinon utilise OnPlayerText :
public OnPlayerText(playerid, text[])
{
if(ADMINMODO=VALEUR)
{
new string[128];
format(string, sizeof(string),"Administrateur :%s", text);
SendClientMessageToAll(COULEUR,string);
return 0;
}
return 1;
}
Titre: Re : Aide [/serviceadmin]
Posté par: dydjyz le 22 Août 2010, 20:51:27
J'ai fait sa pour les faction moi, suit l'exemple:


public OnPlayerText(playerid, text[])
{
  if(realchat)
  {
  new string[128];
   new sendername[MAX_PLAYER_NAME];
     GetPlayerName(playerid, sendername, sizeof(sendername));
   if (stats[playerid][Faction] == 1)
   {
     format(string, sizeof(string), "Policier %s dit: %s", sendername, text);
}
   else if (stats[playerid][Faction] == 0)
   {
     format(string, sizeof(string), "%s dit: %s", sendername, text);
}
   else if (stats[playerid][Faction] == 2)
   {
     format(string, sizeof(string), "Ambulancier %s dit: %s", sendername, text);
}
   else if (stats[playerid][Faction] == 3)
   {
     format(string, sizeof(string), "Pompier %s dit: %s", sendername, text);
}
     SetPlayerChatBubble(playerid, string, TEAM_ORANGE, 100.0, 10000);
  ProxDetector(20.0, playerid, string,COLOR_FADE1,COLOR_FADE2,COLOR_FADE3,COLOR_FADE4,COLOR_FADE5);
  }
return 0;
}
Il te faut le prox detector.
Titre: Re : Aide [/serviceadmin]
Posté par: minimicro le 22 Août 2010, 20:58:19
Ouaip, ou avec une fonction :

Dans tes forwards :

Code: (pawn) [Sélectionner]
forward GetAdminRankName(rankInt, rankName[32]);
Dans les fonctions :

Code: (pawn) [Sélectionner]
public GetAdminRankName(rankInt, rankName[32])
{
      if(rankInt == 1)
            {memcpy(rankName, "Modérateur", 0, sizeof(rankName)*4, sizeof(rankName)*4);}
      else if(rankInt == 2)
            {memcpy(rankName, "Admin level X", 0, sizeof(rankName)*4, sizeof(rankName)*4);}
      ...
      else
            {memcpy(rankName, "Rang inconnu", 0, sizeof(rankName)*4, sizeof(rankName)*4);}
}

Puis, dans ton OnPlayerText :

Appelons var_admin, la variable du joueur actuel qui definit le niveau d'administration du joueur (pAdmin par exemple ... suivant le GM).

Code: (pawn) [Sélectionner]
if(var_admin >= LEVEL MINIMUM ADMIN)
{
      new rankName[32], playername[MAX_PLAYER_NAME]; (peut etre string[128] si ce n'est pas defini ailleurs)
      GetAdminRankName(var_admin, rankName);
      GetPlayerName(playerid, playername, sizeof(playername));
      format(string, sizeof(string), "%s %s: %s", rankName, playername, text);
      SendClientMessageToAll(COULEUR, string);
      return false;
}


On evite le copier/coller ainsi.
Titre: Re : Aide [/serviceadmin]
Posté par: dydjyz le 22 Août 2010, 21:15:10
Mon code est quand meme vachement plus simple pour les débutant, moi meme en étant un.
Titre: Re : Aide [/serviceadmin]
Posté par: minimicro le 22 Août 2010, 21:24:25
En gardant ton code, je suggere une petite choses, tu utilises les else if, mais je suggère un else pour le dernier, avec une situation par défault.

En effet, tu crée une string, vide, jusque la, tout va bien.
Maintenant, tu formate dedans ce que tu souhaite, suivant différents status du joueur, maintenant, imagine que pour une raison quelconque (il faut savoir tout imaginer), la variable faction soit négative, ou supérieure a 4, et bien, tu ne rempliras pas ta string, et tu utilisera donc une variable vide, et cela peux te faire crasher, certaines fonctions (je pense au SendClientMessage) n'apprécie pas ce genre de variable vide. Cela ne va pas forcement arriver tout de suite, mais il faut savoir anticiper.

Ce que tu peux faire, c'est soit remplacer la dernière condition par un else, soit rajouter un else qui envoit au joueur "Erreur variable faction, contactez un scripteur", un truc dans le genre.
Titre: Re : Aide [/serviceadmin]
Posté par: dydjyz le 22 Août 2010, 21:56:05

  else if (stats[playerid][Faction] >= 5)
  {
     format(string, sizeof(string), " %s dit: %s", sendername, text);
}

Et le tour est joué.
Titre: Re : Aide [/serviceadmin]
Posté par: minimicro le 23 Août 2010, 10:19:19
Et sans vouloir te faire chier, si la variable est négative ?

Essaye plutot :

Code: (pawn) [Sélectionner]
else
{
      format(string, sizeof(string), " %s dit: %s", sendername, text);
}

Comme ca, tu es sur que ca peut prendre n'importe quelle autre valeur !
Titre: Re : Aide [/serviceadmin]
Posté par: dydjyz le 23 Août 2010, 10:41:29
Oui pas bete, jvai mettre sa dans mon code ^^
Titre: Re : Aide [/serviceadmin]
Posté par: Komolos le 23 Août 2010, 10:44:32
Donc j'ai fait         if(PlayerInfo[playerid][pAdmin] == 1)
        {
        format(string, sizeof(string), "Administrateur dit: %s ", result);
          }

Mais sa me donne une erreur =S la voici :
C:\Users\Administrateur\Desktop\GM\gamemodes\sf-ulrp.pwn(18172) : error 017: undefined symbol "result"
Titre: Re : Aide [/serviceadmin]
Posté par: Brian Turner le 23 Août 2010, 10:53:03
essaye a la place de "result" tu met "text"
Titre: Re : Aide [/serviceadmin]
Posté par: Komolos le 23 Août 2010, 11:56:38
J'ai déjà fait text, =S
Titre: Re : Aide [/serviceadmin]
Posté par: Brian Turner le 23 Août 2010, 12:17:08
tes sur que c'est dans OnPlayerText ? a oui aussi, crée pas la variable text.