GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Winklevows le 06 Décembre 2010, 00:07:06

Titre: Aide pour une commande
Posté par: Winklevows le 06 Décembre 2010, 00:07:06
Bonjour,

J'ai besoin d'aide pour "finaliser" une commande.

Enfaite, lorsqu'un admin banni un joueur, il doit commenter son ban, le commentaire et ensuite sauvegardé dans un fichier texte.
La commande est :
!COMMENTAIRE
et sa enregistre dans Banlog.txt :
|Commentaire BAN| Admin: X | Commantaire: COMMENTAIRE
Actuellement tout fonctionne mais je souhaiterais faire pour que sa enregistre:
|Commentaire BAN| Admin: X | Joueur bannis: NOM | Commentaire: COMMENTAIRE

Il faut que l'admin tape le nom du joueur vu qu'il vient d'être bannis, exemple:
!martin commentaire
Qui enregistrerait :
|Commentaire BAN| Admin: X | Joueur bannis: martin | Commentaire: commentaire

Mais je ne sais pas comment faire du tout, voici mon code :
public OnPlayerText(playerid, text[])
{
if(text[0] == '!' && AccInfo[playerid][Level] >= 1)
{
   new string[128]; GetPlayerName(playerid,string,sizeof(string));
format(string,sizeof(string),"|Commentaire BAN| Admin: %s | Commentaire: %s.",string,text[1]);
SaveIn("BanLog",string);
SendClientMessage(playerid,red,"Merci d'avoir d'ajouté plus d'informations à votre ban, votre commentaire doit être COMPLET (circonstances, préciser la raison, duré du ban...).");
   return 0;
}


Merci de votre aide :)
Titre: Re : Aide pour une commande
Posté par: Xartrick le 06 Décembre 2010, 00:16:08
Pour pouvoir récupérer le nom du joueur et celui de l'admin, il faudrait demander plus d'information en commentaire.
Par exemple:


![ID] [Commentaire]
! - Ajout d'un commentaire
ID - ID du joueur (pas de l'admin, l'ID de l'admin est contenue dans playerid)
Commentaire - Commentaire !

Je te conseillerais de donner des noms explicites à tes commandes...


/ajoutercommentaire [ID] [Commentaire]
! - Ajout d'un commentaire
ID - ID du joueur (pas de l'admin, l'ID de l'admin est contenue dans playerid)
Commentaire - Commentaire !
Titre: Re : Aide pour une commande
Posté par: Winklevows le 06 Décembre 2010, 00:35:03
Merci de ta réponse mais j'ai pas trop compris ^^

En faite, ma commande commentaire enregistre plus d'information sur la raison d'un ban dans un fichier texte.
Par exemple, un admin bannis le joueur "antoine" pour spam (/ban id raison)
Une semaine plus tard ce joueur vient sur mon forum faire une demande de "débannisage" :
"Bonjour, mon pseudo a été bannis pour spam mais je n'ai absolument pas spammé quoi que ce soit"
Là, je vais voir mes logs, effectivement Antoine a bien été bannis pour spam mais je n'en sais pas plus.
MAIS vu que l'admin qui l'a bannis à commenté son ban, je peux lire que Antoine a été bannis par Mathieu, et que Mathieu a indiqué : "il a spammé 13 fois le texte "Vive moi, fuck les autres", ne pas le débannir s'il fait une demande car il perturbait tout le monde"

Ma commande permet déjà d'enregistrer DANS le fichier text BanLogs le nom de l'admin, et la description de son ban.

je voudrais que si par exemple il tape !Antoine il a spammé 13 fois le texte "Vive moi, fuck les autres", ne pas le débannir s'il fait une demande car il perturbait tout le monde

Sa enregistre DISTINCTEMENT Antoine de il a spammé..... et donc que sa enregistre dans le fichier:
|Commentaire BAN| Admin: %s | Nom du joueur: %s | Commantaire: %s.

A l'heure actuelle sa enregistre :
|Commentaire BAN| Admin: Mathieu | Nom du joueur: Antoine il a spammé 13 fois le texte "Vive moi, fuck les autres", ne pas le débannir s'il fait une demande car il perturbait tout le monde | Commantaire: %s.

Normal car il ne discerne pas le nom du joueur et le commentaire.

Et je ne peux pas récupérer le nom du joueur ou son id, car le joueur est déjà bannis (donc plus sur serveur).

En résumé je voudrais faire que CEQUEJETAPEICI "se mette" dans %s

pour après si je fais
!CEQUEJETAPEICI1 CEQUEJETAPEICI2
sa enregistre le fichier :
blablabla CEQUEJETAPEICI1 blablalbla CEQUEJETAPEICI2
Titre: Re : Aide pour une commande
Posté par: Xartrick le 06 Décembre 2010, 00:44:29
Le mieux serait que tu te créé ta fonction pour bannir des personnes et que tu enregistre les informations dans un autre fichier.

Pourquoi ?

- Tu pourra être plus à l'aise pour ajouté des logs
- Tu pourra utiliser la fonction Ban

Référence:

- http://www.gtaonline.fr/forums/index.php/topic,8555.0.html (http://www.gtaonline.fr/forums/index.php/topic,8555.0.html)
- http://wiki.sa-mp.com/wiki/Ban (http://wiki.sa-mp.com/wiki/Ban)

Dernier conseil, effectue toutes les actions tels que l'ajout de logs, etc... avant de bannir l'utilisateur !
Le mieux est de créer une commande pour bannir les utilisateurs et ajouter un commentaire en même temps !


Titre: Re : Re : Aide pour une commande
Posté par: Winklevows le 06 Décembre 2010, 00:51:12

Le mieux est de créer une commande pour bannir les utilisateurs et ajouter un commentaire en même temps ![/b]


J'y ai pensé mais je me suis dit que c'était plus simple de pas le faire en même temps.

Je veux bannir l'id 4:
/ban [id] [raison] [commentairepourlesadmins]
donc je fais :
/ban 4 maraison moncommentaire
L'id 4 voit sur son écran :
Vous avez été bannis par Admin. Raison : maraison

Mais bien sur sans lui afficher le commentaire pour les admins.

Je pense pas que sa soit possible pour sa que je voulais le faire séparer
Titre: Re : Aide pour une commande
Posté par: Xartrick le 06 Décembre 2010, 00:52:59
Le plus simple est de tout faire en même temps et de le bannir à la fin de ces opérations.
Avec les liens que je t'ai donné, tu devrais facilement pouvoir faire ce que tu désire !
Titre: Re : Aide pour une commande
Posté par: Winklevows le 06 Décembre 2010, 01:02:46
Merci :)
Titre: Re : Re : Aide pour une commande
Posté par: scott1 le 06 Décembre 2010, 01:06:52
Le plus simple est de tout faire en même temps et de le bannir à la fin de ces opérations.
Avec les liens que je t'ai donné, tu devrais facilement pouvoir faire ce que tu désire !


Ceci est encore mieux

http://wiki.sa-mp.com/wiki/BanEx (http://wiki.sa-mp.com/wiki/BanEx)
Titre: Re : Aide pour une commande
Posté par: Xartrick le 06 Décembre 2010, 01:12:37
Je ne pense pas que ceci corresponde à ses attentes, c'est pour cela que je lui est conseillais d'utiliser Ban et d'ajouter une trace du bannissement dans un fichier indépendant.
Titre: Re : Aide pour une commande
Posté par: scott1 le 06 Décembre 2010, 01:15:38
public BanLog(string[])
{
new entry[256];
format(entry, sizeof(entry), "%s\n",string);
new File:hFile;
hFile = fopen("ban.log", io_append);
fwrite(hFile, entry);
fclose(hFile);
}
Titre: Re : Aide pour une commande
Posté par: Xartrick le 06 Décembre 2010, 01:25:18
Pour l'exemple, j'ai utilisé zcmd de Zeex et sscanf2 de Y_Less, il est tard donc j'ai un peu la flème !

#include <a_samp>
#include <zcmd>
#include <sscanf2>

main(){}

CMD:bannir(playerid, params[])
{
new bannedplayerid = 0, reason[256], admincomment[256];

if (sscanf(params, "iss", bannedplayerid, reason, admincomment))
{
SendClientMessage(playerid, 0xFFFFFFAA, "Usage: /bannir <id> <raison> <commentaire>");
   
return 0;
}
else
{
new adminname[256], playername[256], string[256];
   
GetPlayerName(playerid, adminname, sizeof(adminname));
GetPlayerName(bannedplayerid, playername, sizeof(playername));
   
format(string, sizeof(string), "Vous avez été banni par %s (Raison: %s)",  adminname, reason);
SendClientMessage(playerid, 0xFFFFFFAA, string);
   
new File:BansLogs;

BansLogs = fopen("bans.log", io_write);
   
format(string, sizeof(string), "Pseudo: %s (ID: %d) | Raison: %s | Commentaire: %s\n", playername, bannedplayerid, reason, admincomment);

fwrite(BansLogs, string);
fclose(BansLogs);
   
Ban(bannedplayerid);
}

return 1;
}

Résultat:

Citer
/bannir 0 Insultes Ne_pas_débannir_!

Vous avez été banni par Xartrick (Raison: Insultes)

Citation de: bans.log
Pseudo: Joueur (ID: 0) | Raison: Insultes | Commentaire: Ne_pas_débannir_!
Titre: Re : Aide pour une commande
Posté par: Winklevows le 09 Décembre 2010, 11:48:22
C'est exactement ce que je souhaitais ! Merci beaucoup :)