| Zipas | Data: Ketvirtadienis, 2010-08-19, 4:43 PM | Pranešimas # 1 |
Administratorius
Pranešimai: 68
Statusas: Atsijungęs
Medaliai:
| 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
|
| |
| |
| mantas14 | Data: Trečiadienis, 2011-03-02, 11:31 PM | Pranešimas # 2 |
Narys
Pranešimai: 1
Statusas: Atsijungęs
Medaliai:
| O kaip juos ikelt i serva? ;D
|
| |
| |