Szerző Téma: Ban rendszer!  (Megtekintve 3129 alkalommal)

Nem elérhető Rupert

  • 2301
    • Profil megtekintése
Ban rendszer!
« Dátum: 2012. április 16. - 19:05:31 »
+5 Show voters
Sziasztok!
Sokszor találkozom olyanokkal, akiknek problémát okoz egy olyan banrendszer megírása, aminek indokát látja a játékos, miután próbál csatlakozni. Nos, én most megírtam ezt az egyszerû scriptet, illetve kódot. A \'scriptfiles\' mappa tartalmazzon egy \'bannoltusers\' mappát, különben a scriptem semmit nem ér. Remélem hasznotokra fog válni!
Ui: Egy /kick parancsot is írtam a /ban parancs mellé.  ;)
 
#include <a_samp>
#include <dutils>
#include <sscanf>
#include <zcmd>
#include <dini>
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_RED 0xAA3333AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_ORANGE 0xFF9933AA
#define COLOR_LIGHTBLUE 0x33CCFFAA
forward banolvaVan(playerid);
new file[128];
new indok[128];
public OnFilterScriptInit()
{
print(\"\\n--------------------------------------\");
print(\" Ban rendszer by Rupert \");
print(\"--------------------------------------\\n\");
return 1;
}
public OnFilterScriptExit()
{
print(\"Ban rendszer FS bezarva\");
return 1;
}
CMD:ban(playerid, params[])
{
new gid, name[MAX_PLAYER_NAME], ipc[128], string[128];
GetPlayerName(gid, name, sizeof(name));
GetPlayerIp(playerid, ipc, sizeof(ipc));
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, \"Nem vagy admin!\");
if(sscanf(params, \"us\", gid, indok)) return SendClientMessage(playerid, COLOR_GREY, \"Használat: /ban [iD] [indok]!\");
if(gid == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_RED, \"Helytelen ID!\");
format(file, sizeof(file), \"/bannoltusers/%s.ini\", name);
format(string, sizeof(string), \"%s bannolva lett, indok: %s\", name, indok);
SendClientMessageToAll(COLOR_RED, string);
dini_Create(file);
dini_Set(file, \"Indok\", indok);
dini_Set(file, \"IP\", ipc);
Kick(gid);
return 1;
}
CMD:kick(playerid, params[])
{
new gid, name[MAX_PLAYER_NAME], string[128];
GetPlayerName(gid, name, sizeof(name));
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, \"Nem vagy admin!\");
if(sscanf(params, \"us\", gid, indok)) return SendClientMessage(playerid, COLOR_GREY, \"Használat: /kick [iD] [indok]!\");
if(gid == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_RED, \"Helytelen ID!\");
format(string, sizeof(string), \"%s bannolva lett, indok: %s\", name, indok);
SendClientMessageToAll(COLOR_RED, string);
Kick(gid);
return 1;
}
public OnPlayerConnect(playerid)
{
banolvaVan(playerid);
return 1;
}
stock banolvaVan(playerid)
{
new name[MAX_PLAYER_NAME], string[128], ipc[256], ipc2[256];
GetPlayerName(playerid, name, sizeof(name));
GetPlayerIp(playerid, ipc, sizeof(ipc));
ipc2 = dini_Get(file, \"IP\");
format(file, sizeof(file), \"/bannoltusers/%s.ini\", name);
if(dini_Exists(file))
{
    if(ipc2[playerid] == ipc[playerid])
    {
    SendClientMessage(playerid, COLOR_RED, \"Sajnálom, bannolva vagy a szerverrõl!\");
   format(string, sizeof(string), \"Indok: %s\", dini_Get(file, \"Indok\"));
   SendClientMessage(playerid, COLOR_RED, string);
    Kick(playerid);
}
}
return 1;
}
« Utoljára szerkesztve: 2012. április 17. - 15:25:59 írta Rupert »

Nem elérhető Rexii

  • 471
    • Profil megtekintése
Ban rendszer!
« Válasz #1 Dátum: 2012. április 16. - 19:17:29 »
0 Show voters
Szép munka!Sokaknak hasznos lehet!

Nem elérhető Benceee

  • 4785
    • Profil megtekintése
Ban rendszer!
« Válasz #2 Dátum: 2012. április 16. - 19:26:50 »
0 Show voters
Szép.
Viszont kitiltásnál Kick(playerid);helyett jobb lenne Ban(playerid); szerintem.

Ban rendszer!
« Válasz #3 Dátum: 2012. április 16. - 19:30:09 »
+1 Show voters
pont ez kellet nekem  :thumbsup:

Nem elérhető Rupert

  • 2301
    • Profil megtekintése
Ban rendszer!
« Válasz #4 Dátum: 2012. április 16. - 19:30:34 »
0 Show voters
Idézetet írta: Benceee date=1334597210\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"20294\" data-ipsquote-contentclass=\"forums_Topic
Szép.
Viszont kitiltásnál Kick(playerid);helyett jobb lenne Ban(playerid); szerintem.
 
Megpróbáltam úgy, de akkor elõször az alap banolt játékosok listája fut le, mikor csatlakozok, így elõször bannol és utána írja az indokot.
Szóval: Ígyis-úgyis hiába csatlakozik, hisz\' kickelve lesz.

Ban rendszer!
« Válasz #5 Dátum: 2012. április 16. - 19:39:53 »
0 Show voters
Jó lett, de nem ellenõrizted le sehol, hogy valódi-e a játékos akit bannolni/kickelni akarnak.

Ban rendszer!
« Válasz #6 Dátum: 2012. április 16. - 19:46:28 »
0 Show voters
Grat! Ment a + !
Kezdesz belejönni a Scriptelésbe ;)

Nem elérhető Rupert

  • 2301
    • Profil megtekintése
Ban rendszer!
« Válasz #7 Dátum: 2012. április 16. - 19:47:14 »
0 Show voters
Idézetet írta: Szabyxxx date=1334598388\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"20294\" data-ipsquote-contentclass=\"forums_Topic
Grat! Ment a + !
Kezdesz belejönni a Scriptelésbe ;)
 
Eddig is tudtam scriptelni, csak most aktívan kezdtem publikálni dolgokat.

Dupla hozzászólás automatikusan összefûzve. ( 2012. április 16. - 19:51:21 )


Jó lett, de nem ellenõrizted le sehol, hogy valódi-e a játékos akit bannolni/kickelni akarnak.
 
[/quote]
Lekértem a nevét, úgy gondolom ez elég. Gondolj bele, ki akarna egy olyan játékos nevével feljönni, akirõl alapból tudni hogy bannolva van? Azonban ha igényt tartotok az IP-cím lekérésre is, akkor beleírom.
« Utoljára szerkesztve: 2012. április 16. - 19:51:21 írta Rupert »

Ban rendszer!
« Válasz #8 Dátum: 2012. április 16. - 20:25:01 »
0 Show voters
Akkor mondom máshogy :D :
Ha azt írom be, hogy /ban 9999 akkor kiírja, hogy rossz?
Jaaa és most vettem észre, hogy a parancs végén azt kickeli aki beírta a parancsot.
Na meg elõbb kéred le a játékos nevét mielõtt megkapná sscanf-nél a játékos id-t. Tehát létrehozod a gid változót, majd lekéred rajta a nevet. Visszaadja ID 0 nevét ha van. Majd sscanf-nél megkapja a gid a játékos id-jét akit beírt de már elkéstél a név lekéréssel.
És ha olyan névvel vagyok fent amiben olyan karakterek vannak, amit a fájl nem fogad el a nevének? :D:D

Nem elérhető Rupert

  • 2301
    • Profil megtekintése
Ban rendszer!
« Válasz #9 Dátum: 2012. április 16. - 20:28:02 »
+1 Show voters
Idézetet írta: 1ST_Chr date=1334600701\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"20294\" data-ipsquote-contentclass=\"forums_Topic
Akkor mondom máshogy :D :
Ha azt írom be, hogy /ban 9999 akkor kiírja, hogy rossz?
Jaaa és most vettem észre, hogy a parancs végén azt kickeli aki beírta a parancsot.
Na meg elõbb kéred le a játékos nevét mielõtt megkapná sscanf-nél a játékos id-t. Tehát létrehozod a gid változót, majd lekéred rajta a nevet. Visszaadja ID 0 nevét ha van. Majd sscanf-nél megkapja a gid a játékos id-jét akit beírt de már elkéstél a név lekéréssel.
És ha olyan névvel vagyok fent amiben olyan karakterek vannak, amit a fájl nem fogad el a nevének? :D:D
 
Köszönöm hogy felhívtad a hibáimra a figyelmem, így ezeket azonnal javítottam! Sajnos a karakterekkel nem tudok mit kezdeni, mivel a dini eléggé korlátozott lehetõségekkel rendelkezik. MySQL-ben gyerekjáték lenne, de így sajnos nem :\\

Nem elérhető JBauer

  • 1407
    • Profil megtekintése
Ban rendszer!
« Válasz #10 Dátum: 2012. április 16. - 22:55:59 »
0 Show voters
A kicknél ezt írja:
   if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, \"Nem vagy admin!\");
if(sscanf(params, \"us\", gid, indok)) return SendClientMessage(playerid, COLOR_GREY, \"Használat: /kick [iD] [indok]!\");
if(gid == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_RED, \"Helytelen ID!\");
format(string, sizeof(string), \"%s bannolva lett, indok: %s\", name, indok);

 
Amúgy jó lett. Ment egy +

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
Ban rendszer!
« Válasz #11 Dátum: 2012. április 17. - 15:09:04 »
0 Show voters
Most akkor gondolkozz el ezen a rendszeren: feljön egy játékos, valami rosszat csinál, te ki \"banolod\" a rendszerrel, ha megnézed, ezt NÉV alapján teszi, és nem IP alapján. Magyarul a következõt kell tennie: fel jön másik névvel.

Nem elérhető Rupert

  • 2301
    • Profil megtekintése
Ban rendszer!
« Válasz #12 Dátum: 2012. április 17. - 15:26:20 »
0 Show voters
Idézetet írta: DrAkE date=1334668144\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"20294\" data-ipsquote-contentclass=\"forums_Topic
Most akkor gondolkozz el ezen a rendszeren: feljön egy játékos, valami rosszat csinál, te ki \"banolod\" a rendszerrel, ha megnézed, ezt NÉV alapján teszi, és nem IP alapján. Magyarul a következõt kell tennie: fel jön másik névvel.
 
Igazad van. Javítottam (beleírtam).

Ban rendszer!
« Válasz #13 Dátum: 2012. április 17. - 17:00:25 »
0 Show voters
Ez rossz:
if(ipc2[playerid] == ipc[playerid])
És ha csak a név van bannolva?

Nem elérhető Rupert

  • 2301
    • Profil megtekintése
Ban rendszer!
« Válasz #14 Dátum: 2012. április 17. - 17:18:02 »
0 Show voters
Idézetet írta: 1ST_Chr date=1334674825\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"20294\" data-ipsquote-contentclass=\"forums_Topic
Ez rossz:
if(ipc2[playerid] == ipc[playerid])
És ha csak a név van bannolva?
 
Nálam mûködött.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal