[PAMOKA] Apsauga nuo reklamų serveryje - Forumas
Sekmadienis, 2012-05-20, 2:36 PM

E-mail:
Password:
[ New messages · Members · Forum rules · Search · RSS ]
Page 1 of 11
Forumas » Gta San Andreas » Sa mp serverio kūrimas » [PAMOKA] Apsauga nuo reklamų serveryje
[PAMOKA] Apsauga nuo reklamų serveryje
ZipasData: Ketvirtadienis, 2010-08-19, 4:43 PM | Pranešimas # 1
Administratorius
Pranešimai: 68
Reputacija: 0 ±
Ispėjimai: ±
Statusas: Atsijungęs


Medaliai:

Svetaines ir forumo Dievas Uz gera lankomuma forume

Uz svetaines sukurima Uz 20 pranesimu Uz 30 pranesimu
1. Sukuriame funkciją, kuri atliks visą darbą:

Quote
TeksteIP(StrToChk[])
{
new IpTikrinimas = 0; //pradeda tikrinti ir ieškoti IP'o tekste
for(new a = 0; a < strlen(StrToChk); a++) { //tikrina po vieną simbolį, a=simbolis

switch(IpTikrinimas)
{
case 0:{ //Pirmas simbolis, ieškomas tekste, turi būti skaičius
if(IsNum(StrToChk[a])) IpTikrinimas++; //Skaičius rastas, tikrina toliau; jei nėra skaičių, netikrina toliau, laukia skaičių
}
case 1, 2:{ //Rado pirmą skaičių, dabar ieškos skaičiaus arba '.'
if(IsNum(StrToChk[a])) IpTikrinimas++; //Skaičius rastas, tikrina toliau
else if(StrToChk[a] == '.') IpTikrinimas = 4; //rastas pirmas '.', peršoka į 4 žingsnį (case 4:)
else IpTikrinimas = 0; //jei nieko nėra, grįžta į pirmą žingsnį
}
case 3:{ //rado tris pirmus skaičius, reikia dabar rasti '.' arba tai ne IP
if(StrToChk[a] == '.') IpTikrinimas++; // rado, tikrina toliau
else IpTikrinimas = 0; //nerado, grįžta į pirmą žingsnį
}
case 4:{ //rado pirmus skaičius ir pirmą '.', dabar reikia skaičių, arba tai ne IP
if(IsNum(StrToChk[a])) IpTikrinimas++; //skaičius rado, tikrina toliau
else IpTikrinimas = 0; //skaičių nerado, grįžta į pirmą žingsnį
}
case 5, 6:{ // „123.1“ dabar reikia skaičių arba '.'
if(IsNum(StrToChk[a])) IpTikrinimas++; //skaičiai rasti, tikrina toliau
else if(StrToChk[a] == '.') IpTikrinimas = 8; //rado antrą '.', peršoka į 8 žingsnį (case 8:)
else IpTikrinimas = 0; //nerado nei skaičių, nei '.', grįžta į pirmą žingsnį
}
case 7:{ //„123.123“ reikia '.' arba tai ne IP
if(StrToChk[a] == '.') IpTikrinimas++; //rado '.', tikrina toliau
else IpTikrinimas = 0; //nerado, grįžta į pirmą žingsnį
}
case 8:{ //„123.123.“ reikia skaičių, arba tai ne IP
if(IsNum(StrToChk[a])) IpTikrinimas++; //rado skaičius, tikrina toliau
else IpTikrinimas = 0; //nerado skaičių, grįžta į pradžią
}
case 9, 10:{ //„123.123.1“ dabar reikia skaičių arba '.'
if(IsNum(StrToChk[a])) IpTikrinimas++; //skaičiai rasti, tikrina toliau
else if(StrToChk[a] == '.') IpTikrinimas = 12; //rado '.', peršoka į paskutinį žingsnį (case 12:)
else IpTikrinimas = 0; //nerado nei skaičių, nei '.', grįžta į pradžią
}
case 11:{ // „123.123.123“ reikia '.', arba tai ne IP
if(StrToChk[a] == '.') IpTikrinimas++; //rado '.', tikrina toliau
else IpTikrinimas = 0;//nerado, grįžta į pradžią
}
case 12:{ //„123.123.123.“ jei sekantis simbolis bus skaičius - žmogus reklamuoja
if(IsNum(StrToChk[a])) return 1; //skaičius rastas, įvykdytas tikrinimas
else IpTikrinimas = 0; //nerado skaičiaus, grįžta į pradžią
}
}
}
return 0; //IP nerastas
}

IsNum(simbolis) // trumpa funkcija patikrinti simbolis yra skaičius, ar ne
{
if(simbolis == '0') return 1;
if(simbolis == '1') return 1;
if(simbolis == '2') return 1;
if(simbolis == '3') return 1;
if(simbolis == '4') return 1;
if(simbolis == '5') return 1;
if(simbolis == '6') return 1;
if(simbolis == '7') return 1;
if(simbolis == '8') return 1;
if(simbolis == '9') return 1;
return 0;
}

2. Sukuriame funkciją, kuri išmes reklamuotoją ir tekstą užfiksuos faile, bet žaidėjai jo nematys:

Quote
IsmestiZaideja(playerid, text[])
{
new name[MAX_PLAYER_NAME], IP[24], Tekstas[256];// bus imami reklamuotojo duomenys..
new d[3], l[3]; // data, laikas
getdate(d[0],d[1],d[2]); // gauname datą
gettime(l[0],l[1],l[2]); // gauname laiką
GetPlayerName(playerid,name,sizeof(name)); // gauname reklamuotojo vardą
GetPlayerIp(playerid, IP, sizeof(IP)); //reklamuotojo IP'as

format(Tekstas, sizeof(Tekstas),
"[%i-%i-%i, %i:%i:%i] %s(%i) IP:%s ISMESTAS UZ REKLAMA",
d[0], d[1], d[2], l[0], l[1], l[2], name, playerid, IP);
//tekstas, kuris bus rašomas į failą

SendClientMessageToAll(SPALVA_GELTONA,Tekstas); // visiems parodo prieš išmetant reklamuotoją
Kick(playerid); //išmetamas žaidėjas

new File:kickfile;
kickfile = fopen("IsmestiZaidejai.txt", io_append); //atidaromas failas
fwrite(kickfile,"\r\n"); //nauja eilutė įterpiama
fwrite(kickfile,Tekstas); //duomenys reklamuotojo
fwrite(kickfile,"\r\n"); //nauja eilutė
fwrite(kickfile,text); //tekstas, kuriame rastas IP
fclose(kickfile); //uždaromas failas

return 0; //grąžinamas 0, kad nerodytų teksto.


}

Šiuo atveju, faile „scriptfiles/IsmestiZaidejai.txt“ bus viskas fiksuojama.

3. Pritaikome funkciją įvedamam tekstui:

Po

Quote
public OnPlayerCommandText(playerid, cmdtext[])
{

įterpiame eilutę

if(TeksteIP(cmdtext)) return IsmestiZaideja(playerid, cmdtext);

Quote

ir viršuj GM ar FS spalvą pridedam:

#define SPALVA_GELTONA 0xFFFF00AA
Quote

Na, lyg ir viskas. Tokiu pat principu galite pasidaryti apsaugą nuo internetinių adresų savo serveryje, tik tikrinant, pavyzdžiui, ar simbolis yra taškas, ir ar po jo seka raidės, kaip lt, net, com, ar dar koks. Jei kas blogai, sakykit. Laukiu komentarų.
Naudotasi: forum.sa-mp.com, wiki.sa-mp.com



 
mantas14Data: Trečiadienis, 2011-03-02, 11:31 PM | Pranešimas # 2
Narys
Pranešimai: 1
Reputacija: 0 ±
Ispėjimai: ±
Statusas: Atsijungęs


Medaliai:

Naujokas

O kaip juos ikelt i serva? ;D
 
Forumas » Gta San Andreas » Sa mp serverio kūrimas » [PAMOKA] Apsauga nuo reklamų serveryje
Page 1 of 11
Search:

!-- Chat -->
Refresh Smileys Manager
Mini-chat