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
-
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;
}
-
Rien compris
-
J'ai utiliser un soft pour décrypter et je crois comprendre que tu veux une couleur différente selon le rang du joueur...
-
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 ^^
-
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
-
sufie de crée un if quand le joueur parle...
-
J'ai editer mon sujet, désolés, si vous n'avez rien compris.
-
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;
}
-
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.
-
Ouaip, ou avec une fonction :
Dans tes forwards :
forward GetAdminRankName(rankInt, rankName[32]);
Dans les fonctions :
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).
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.
-
Mon code est quand meme vachement plus simple pour les débutant, moi meme en étant un.
-
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.
-
else if (stats[playerid][Faction] >= 5)
{
format(string, sizeof(string), " %s dit: %s", sendername, text);
}
Et le tour est joué.
-
Et sans vouloir te faire chier, si la variable est négative ?
Essaye plutot :
else
{
format(string, sizeof(string), " %s dit: %s", sendername, text);
}
Comme ca, tu es sur que ca peut prendre n'importe quelle autre valeur !
-
Oui pas bete, jvai mettre sa dans mon code ^^
-
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"
-
essaye a la place de "result" tu met "text"
-
J'ai déjà fait text, =S
-
tes sur que c'est dans OnPlayerText ? a oui aussi, crée pas la variable text.