/* ¤¤¤¤¤¤¤ [ IpToCountry by Zsolesszka ] ¤¤¤¤¤¤¤¤¤ Date 2011.03.19
Update [2013.03.16]
How to update countrydatabase.db?
Go to http://software77.net/geo-ip/ and download \"IPV4 csv (gz)\" (IpToCountry.csv file),
extract and copy ../myserver/scriptfiles folder,
and run samp_server.exe and wait 7-8 minute.
¤¤¤¤¤¤¤¤¤¤ [ SQLite version ] ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤*/
#include <a_samp>
#include <sscanf2>
#define Database_N \"countrydatabase.db\"
stock const
IpToCountry_csv[] = \"IpToCountry.csv\";
new
DB:database;
public
OnFilterScriptInit()
{
SetTimer(\"IPTC_start\", 1000, false);
print(\"°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\");
print(\" IpToCountry_db by Zsolesszka\");
print(\"°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\");
return 1;
}
forward IPTC_start(); public
IPTC_start()
{
UpDate_DataBase();
database = db_open(Database_N);
// Teszt();
}
public
OnFilterScriptExit()
{
db_close(database);
return 1;
}
public
OnPlayerConnect(playerid)
{
new
MaxPlayers = GetMaxPlayers(),
string[144],
IP[16];
GetPlayerIp(playerid, IP, sizeof IP);
format(string, sizeof string, \"*** %s has joined the server | Country: %s |\", pName(playerid), GetCountry(IP));
for(new p; p < MaxPlayers; p++)
{
if(!IsPlayerConnected(p) || IsPlayerNPC(p) || p == playerid) continue;
SendClientMessage(p, 0x33AA33AA, string);
}
format(string, sizeof string, \" %s IP Adress: %s |\", string, IP);
SendClientMessage(playerid, 0x33AA33AA, string);
return 1;
}
// ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ [ Teszt ] ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
stock
Teszt()
{
new
randomip[16];
for(new i = 0; i < 20; i++)
{
format(randomip, sizeof randomip, \"%d.%d.%d.%d\", random(256), random(256), random(256), random(256));
new
starttime = GetTickCount();
printf(\"Time test | random ip: %s | COUNTRY: %s --> Time: %dms\", randomip, GetCountry(randomip), GetTickCount() - starttime);
}
}
// ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ [ sql version ] ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
GetCountry(Ip[])
{
new
Split_Ip[4 char],
DBResult:result,
query[128];
if(database)
{
if(!strcmp(\"127.0.0.1\", Ip, true))
{
query = \"Localhost\";
} else {
Split_Ip[0] = IptoInt(Ip);
format(query, sizeof query,
\"SELECT `Country` FROM `countrydetected` WHERE ((16777216*%d) + (65536*%d) + (256*%d) + %d) BETWEEN `Ip_From` AND `Ip_to`\",
Split_Ip{0}, Split_Ip{1}, Split_Ip{2}, Split_Ip{3});
printf(\"strlen %d\", strlen(query));
result = db_query(database, query);
if(!db_get_field_assoc(result, \"Country\", query, sizeof query))
{
query = \"Unknown\";
}
db_free_result(result);
}
} else format(query, sizeof query, \"Failed. Not Open \\\"%s\\\" Read IpToCountry.pwn\" , Database_N);
return query;
}
// ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ [ IptoInt ] ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
IptoInt(const Ip[])
{
new
Byte[1],
Count = 1,
Pos = 0;
Byte{0} = strval(Ip[0]);
while(Ip[++Pos]) { if(Ip[Pos] == \'.\') Byte{Count++} = strval(Ip[Pos + 1]); }
return Byte[0];
}
// ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ [ Return PlayerName ] ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
pName(playerid)
{
new
name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof name);
return name;
}
// ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ [ Update script database ] ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
UpDate_DataBase()
{
if(fexist(IpToCountry_csv))
{
new
starttime = GetTickCount();
print(\"Update \"Database_N\" file, please wait......\");
if(fexist(Database_N)) fremove(Database_N);
new
count = 1,
str[256],
File:IPC = fopen(IpToCountry_csv),
DB:data_base = db_open(Database_N);
if(IPC && data_base)
{
new
query[512],
Ip_From[24],
Ip_To[24],
TEXT[64],
Assigned[24],
Ctry[24],
Cntry[24],
Country[128];
db_query(data_base, \"CREATE TABLE IF NOT EXISTS `countrydetected` (ID INTEGER PRIMARY KEY, Ip_From NUMERIC, Ip_To NUMERIC, Registry TEXT, Assigned NUMERIC, Ctry TEXT, Cntry TEXT, Country TEXT);\");
while(fread(IPC, str))
{
if(str[0] == \'#\') continue;
else
{
Replace_Double_Prime(str);
if(sscanf(str, \"p<,>s[24]s[24]s[63]s[24]s[24]s[24]s[128]\", Ip_From, Ip_To, TEXT, Assigned, Ctry, Cntry, Country)) continue;
else
{
format(query, sizeof query,
\"INSERT INTO `countrydetected` (ID,Ip_From,Ip_To,Registry,Assigned,Ctry,Cntry,Country) VALUES (%d,%s,%s,%s,%s,%s,%s,%s);\",
count, Ip_From, Ip_To, TEXT, Assigned, Ctry, Cntry, Country);
db_query(data_base, query);
}
}
count++;
}
fclose(IPC);
db_close(data_base);
}
fremove(IpToCountry_csv); // Delete IpToCountry.csv file
printf(\"\"Database_N\" file update done time: %f m, and deleted %s file. \\n\", float((((GetTickCount() - starttime) / 1000) / 60)), IpToCountry_csv);
}
}
// ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ [ Remove_Double_Prime ] ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
stock
Remove_Double_Prime(str[])
{
new
i = 0,
pos = 0,
lenght = strlen(str);
while(pos < lenght)
{
if(str[pos] != \'\"\')
{
str = str[pos];
i++;
}
pos++;
}
str = EOS;
}
// ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ [ Replace_Double_Prime ] ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
Replace_Double_Prime(str[], ch = \'\\\'\')
{
new
i = 0;
while(str)
{
if(str == \'\"\') str = ch;
i++;
}
}
public
OnPlayerConnect(playerid)
{
new
string[144],
IP[16];
GetPlayerIp(playerid, IP, sizeof IP);
GetPlayerName(playerid, string, 24);
format(string, sizeof string, \"*** %s has joined the server | Country: %s |\", string, GetIpCountry_mysql(IP));
SendClientMessageToAll(0xC00000FF, string);
return 1;
}
[19:13:35] Loading filter script \'IpToCountry.db.amx\'...
[19:13:35] °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
[19:13:35] IpToCountry_db by Phento
[19:13:35] °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
[19:13:35] Time test | random ip: 92.237.111.236 | COUNTRY: United Kingdom
[19:13:35] Time: 20ms
[19:13:35] Time test | random ip: 100.133.235.249 | COUNTRY: Unknown
[19:13:35] Time: 101ms
[19:13:35] Time test | random ip: 149.190.35.91 | COUNTRY: European Union
[19:13:35] Time: 30ms
[19:13:35] Time test | random ip: 42.13.26.61 | COUNTRY: Korea Republic of
[19:13:35] Time: 7ms
[19:13:35] Time test | random ip: 28.47.77.75 | COUNTRY: United States
[19:13:35] Time: 4ms
[19:13:35] Time test | random ip: 74.94.102.93 | COUNTRY: United States
[19:13:35] Time: 27ms
[19:13:35] Time test | random ip: 242.188.7.163 | COUNTRY: Reserved
[19:13:35] Time: 97ms
[19:13:35] Time test | random ip: 39.239.152.142 | COUNTRY: Unknown
[19:13:35] Time: 89ms
[19:13:35] Time test | random ip: 14.156.24.48 | COUNTRY: China
[19:13:35] Time: 4ms
[19:13:35] Time test | random ip: 115.20.122.117 | COUNTRY: Korea Republic of
[19:13:35] Time: 58ms
Készítõ? Eredeti téma link?Az eredeti script nevének megváltoztatása rám tartozik, akkor a készítõ vajon ki is lehet?
Ennek most nem vágom mi értelme :-\\
[/quote]
Akkor ne is foglalkozz vele. ;D
Az eredeti script nevének megváltoztatása rám tartozik, akkor a készítõ vajon ki is lehet?Ezt most nem értem.
Ezt most nem értem.
Az eredeti script nevének megváltoztatása rám tartozik, akkor a készítõ vajon ki is lehet?
[/quote]
:D
Zsolesszka aka smeti and Phento
Így érthetõ?
Az eredeti topic hiv. fórumon nem is létezik.. nem jön be :-\\És azt meg hogy csinálod elárulod? Tudod szép kéken van kiírva HIVATALOS LINK és rá kell vinni az egér mutatót és egy bal egérgombot egyszer megnyomni.
http://forum.sa-mp.com/showthread.php?t=131554
Ez azt jelenti, hogy visszatértél közénk, Phento? :D
E: Szép.
[/quote]
Hát igen, hátha már más helyzet mint anno volt.
Teszek egy kísérletet újból, remélem nem gond. :D
Ez így jónak néz ki, de én maradok a plugin mellett :D.cellmax azaz érték amelyiknél nem tudsz pawn nyelvben nagyobb számot megadni emiatt szalad például /givecash playerid 3333333333 beírása után minuszba a játékos pénze. (már ahol ez nincs javítva)
Amúgy ottvan az elején a cellmax, azt megmondanátok, hogy mit csinál ? ( Hol kéri le és mit jelent )
printf(\"cellmax: %d\", cellmax);
printf(\"cellmin: %d\", cellmin);
És azt meg hogy csinálod elárulod? Tudod szép kéken van kiírva HIVATALOS LINK és rá kell vinni az egér mutatót és egy bal egérgombot egyszer megnyomni.[/quote]
Mostmár bejön de azért kicsit visszábvehetnél... -.-\'\'\'\' Nem ismerlek, s nem is akarlak..... a szép kéken kivan írva szövegedbõl már tudom minden paramétered -.-\'\'\'
Nem tudom miért nem jött be :-\\
És azt meg hogy csinálod elárulod? Tudod szép kéken van kiírva HIVATALOS LINK és rá kell vinni az egér mutatót és egy bal egérgombot egyszer megnyomni.Mostmár bejön de azért kicsit visszábvehetnél... -.-\'\'\'\' Nem ismerlek, s nem is akarlak..... a szép kéken kivan írva szövegedbõl már tudom minden paramétered -.-\'\'\'
[/quote]
Off:
Elég negatív hozzá szólásokhoz hasonlóan negatív válasz dukál de most ezt kihagyom legyen egy jó napod.
zsoleszka ne kezelj már le mindenkit... nem vagyunk hülyék, ha rendesen írod is értjükOff:Szerintem ez enyhe túlzás hogy lekezelek mindenkit, aljas rágalom és tuti biztos vagy benne hogy értik?
/* ¤¤¤¤¤¤¤ [ IpToCountry by Zsolesszka ] ¤¤¤¤¤¤¤¤¤ Date 2011.03.19
Update [2013.03.16]
How to update countrydatabase.db?
Go to http://software77.net/geo-ip/ and download \"IPV4 csv (gz)\" (IpToCountry.csv file),
extract and copy ../myserver/scriptfiles folder,
and run samp_server.exe and wait 7-8 minute.
¤¤¤¤¤¤¤¤¤¤ [ SQLite version ] ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤*/
#include <a_samp>
#include <sscanf2>
#define Database_N \"countrydatabase.db\"
stock const
IpToCountry_csv[] = \"IpToCountry.csv\";
new
DB:database;
public
OnFilterScriptInit()
{
SetTimer(\"IPTC_start\", 1000, false);
print(\"°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\");
print(\" IpToCountry_db by Zsolesszka\");
print(\"°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\");
return 1;
}
forward IPTC_start(); public
IPTC_start()
{
UpDate_DataBase();
database = db_open(Database_N);
// Teszt();
}
public
OnFilterScriptExit()
{
db_close(database);
return 1;
}
public
OnPlayerConnect(playerid)
{
new
MaxPlayers = GetMaxPlayers(),
string[144],
IP[16];
GetPlayerIp(playerid, IP, sizeof IP);
format(string, sizeof string, \"*** %s has joined the server | Country: %s |\", pName(playerid), GetCountry(IP));
for(new p; p < MaxPlayers; p++)
{
if(!IsPlayerConnected(p) || IsPlayerNPC(p) || p == playerid) continue;
SendClientMessage(p, 0x33AA33AA, string);
}
format(string, sizeof string, \" %s IP Adress: %s |\", string, IP);
SendClientMessage(playerid, 0x33AA33AA, string);
return 1;
}
// ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ [ Teszt ] ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
stock
Teszt()
{
new
randomip[16];
for(new i = 0; i < 20; i++)
{
format(randomip, sizeof randomip, \"%d.%d.%d.%d\", random(256), random(256), random(256), random(256));
new
starttime = GetTickCount();
printf(\"Time test | random ip: %s | COUNTRY: %s --> Time: %dms\", randomip, GetCountry(randomip), GetTickCount() - starttime);
}
}
// ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ [ sql version ] ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
GetCountry(Ip[])
{
new
Split_Ip[4 char],
DBResult:result,
query[128];
if(database)
{
if(!strcmp(\"127.0.0.1\", Ip, true))
{
query = \"Localhost\";
} else {
Split_Ip[0] = IptoInt(Ip);
format(query, sizeof query,
\"SELECT `Country` FROM `countrydetected` WHERE ((16777216*%d) + (65536*%d) + (256*%d) + %d) BETWEEN `Ip_From` AND `Ip_to`\",
Split_Ip{0}, Split_Ip{1}, Split_Ip{2}, Split_Ip{3});
// printf(\"strlen %d\", strlen(query));
result = db_query(database, query);
if(!db_get_field_assoc(result, \"Country\", query, sizeof query))
{
query = \"Unknown\";
}
db_free_result(result);
}
} else format(query, sizeof query, \"Failed. Not Open \\\"%s\\\" Read IpToCountry.pwn\" , Database_N);
return query;
}
// ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ [ IptoInt ] ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
IptoInt(const Ip[])
{
new
Byte[1],
Count = 1,
Pos = 0;
Byte{0} = strval(Ip[0]);
while(Ip[++Pos]) { if(Ip[Pos] == \'.\') Byte{Count++} = strval(Ip[Pos + 1]); }
return Byte[0];
}
// ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ [ Return PlayerName ] ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
pName(playerid)
{
new
name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof name);
return name;
}
// ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ [ Update script database ] ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
UpDate_DataBase()
{
if(fexist(IpToCountry_csv))
{
new
starttime = GetTickCount();
print(\"Update \"Database_N\" file, please wait......\");
if(fexist(Database_N)) fremove(Database_N);
new
count = 1,
str[256],
File:IPC = fopen(IpToCountry_csv),
DB:data_base = db_open(Database_N);
if(IPC && data_base)
{
new
query[512],
Ip_From[24],
Ip_To[24],
TEXT[64],
Assigned[24],
Ctry[24],
Cntry[24],
Country[128];
db_query(data_base, \"CREATE TABLE IF NOT EXISTS `countrydetected` (ID INTEGER PRIMARY KEY, Ip_From NUMERIC, Ip_To NUMERIC, Registry TEXT, Assigned NUMERIC, Ctry TEXT, Cntry TEXT, Country TEXT);\");
while(fread(IPC, str))
{
if(str[0] == \'#\') continue;
else
{
Replace_Double_Prime(str);
if(sscanf(str, \"p<,>s[24]s[24]s[63]s[24]s[24]s[24]s[128]\", Ip_From, Ip_To, TEXT, Assigned, Ctry, Cntry, Country)) continue;
else
{
format(query, sizeof query,
\"INSERT INTO `countrydetected` (ID,Ip_From,Ip_To,Registry,Assigned,Ctry,Cntry,Country) VALUES (%d,%s,%s,%s,%s,%s,%s,%s);\",
count, Ip_From, Ip_To, TEXT, Assigned, Ctry, Cntry, Country);
db_query(data_base, query);
}
}
count++;
}
fclose(IPC);
db_close(data_base);
}
fremove(IpToCountry_csv); // Delete IpToCountry.csv file
printf(\"\"Database_N\" file update done time: %f m, and deleted %s file. \\n\", float((((GetTickCount() - starttime) / 1000) / 60)), IpToCountry_csv);
}
}
// ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ [ Remove_Double_Prime ] ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
stock
Remove_Double_Prime(str[])
{
new
i = 0,
pos = 0,
lenght = strlen(str);
while(pos < lenght)
{
if(str[pos] != \'\"\')
{
str = str[pos];
i++;
}
pos++;
}
str = EOS;
}
// ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ [ Replace_Double_Prime ] ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
Replace_Double_Prime(str[], ch = \'\\\'\')
{
new
i = 0;
while(str)
{
if(str == \'\"\') str = ch;
i++;
}
}