Cannounce 1.1 a město připojení

Technická podpora k herním serverům Counter-Strike: Source
Message
Autor
Uživatelský avatar
Mysteria
Příspěvky: 9122
Registrován: 26 pro 2009, 15:40
Reputation: 7
Bydliště: Česká republika
Kontaktovat uživatele:

Cannounce 1.1 a město připojení

#1 Příspěvekod Mysteria » 16 kvě 2010, 16:57

Na serveru používám tento plugin Cannounce 1.1, který ukazuje, z jaké země se hráč připojil.
Nedávno jsem však viděl stejný plugin, který ale ukazoval i město, ze kterého se hráč připojil nejen zemi, ačkoliv jsem hledal, tak jsem tuto "vytuněnou" verzi nikde nenašel.

Plugin používá databázi GeoIP.dat pro vyhledání země, ze které se hráč připojil.
Existuje však i verze GeoIPCity.dat, která obsahuje i města ;)

Nejprve jsem si myslel, že je to nesmyl, že v ČR určitě nebude moc měst, nejspíše jenom Praha a další velká města, ale byl jsem mile překvapen, že je tam spousta českých měst a to i menších, takže by se to dalo pěkně využít.
Pokud se chcete podívat, jestli je tam i vaše město, tak si ho můžete najít zde - pokud tam není tak určitě nejbližší s 10 000+ tam určitě bude - http://www.maxmind.com/GeoIPCity-534-Location.csv
Soubor je dost velký a dlouho se načítá, takže počkejte s hledáním až bude načten celý!

Problém je však, že plugin toto nejspíše neumí zpracovat, tomuhle už nerozumím, ale pokud to funguje pro státy, tak to upravit, aby to fungovalo i pro města by nemuselo být tak těžké že? ... ;)

Nepředpokládám, že to někdo bude umět, ale co za zkoušku nic nedám...

Edit: Teďka jsem našel velmi podobný plugin pro AMX Mod X, který taktéž využívá GeoIPCity.dat, takže to možné je.
http://forums.alliedmods.net/showthread.php?t=95665

Uživatelský avatar
SPiRIT
Příspěvky: 921
Věk: 34
Registrován: 02 led 2010, 17:38
Reputation: 2
Kontaktovat uživatele:

Re: Cannounce 1.1 a město připojení

#2 Příspěvekod SPiRIT » 16 kvě 2010, 19:44

Tady na to mas zdrojak:

Kód: Vybrat vše

#include <sourcemod>

public Plugin:myinfo =
{
    name = "Get Client City",
    author = "SAMURAI",
    description = "",
    version = "1.0",
    url = "www.cs-utilz.net"
}

enum
{
    a = 0,
    b,
    c,
    d
};

new String:g_szDataBlock[128];
new String:g_szLocationData[128];

public OnPluginStart()
{
    RegConsoleCmd("test_city",fn_cmdTest);
   
}

public OnConfigsExecuted()
{
    BuildPath(Path_SM,g_szDataBlock,sizeof(g_szDataBlock),"configs/geoip/GeoLiteCity-Blocks.csv");
    BuildPath(Path_SM,g_szLocationData,sizeof(g_szLocationData),"configs/geoip/GeoLiteCity-Location.csv");
}

public Action:fn_cmdTest(client,args)
{
    // get client IP
    new String:szIP[32];
    GetClientIP(client,szIP,sizeof(szIP),true);
   
    new iIP = ip_to_num(szIP); // we need IP in number format
    new iLoc = get_loc_id(iIP); // location id from number IP
   
    // now we get city
    new String:szCity[64];
    get_city(iLoc, szCity);
   
    // printing
    PrintToChat(client,"I'm from City : %s (IP:%d | Locid:%d)", szCity, iIP, iLoc);
}



stock ip_to_num(const String:szIp[32])
{
    if(!szIp[0])
        return 0;
   
    new String:szTemp[4][16];
    str_piece(szIp, szTemp, sizeof szTemp, sizeof(szTemp[]), '.');
       
    new iIP;
    iIP = (16777216 * StringToInt(szTemp[a])) + (65536 * StringToInt(szTemp[b])) + (256 * StringToInt(szTemp[c])) + StringToInt(szTemp[d]);
   
    return iIP;
}


stock get_loc_id(iIP)
{
    new Handle:iFile = OpenFile(g_szDataBlock,"rt");
   
    new String:szBuffer[256], String:szTemp[3][64];
    new iLoc;
    while(!IsEndOfFile(iFile))
    {
        ReadFileLine(iFile, szBuffer, sizeof(szBuffer));
       
        TrimString(szBuffer);
       
        str_piece(szBuffer, szTemp, sizeof(szTemp), sizeof (szTemp[]), ',');
       
        for(new i = 0 ; i < 3 ; i++)
            StripQuotes(szTemp[i]);
       
        if(StringToInt(szTemp[0]) <= iIP <= StringToInt(szTemp[1]))
        {
            iLoc = StringToInt(szTemp[2]);
            break;
        }
    }
    CloseHandle(iFile);
    return iLoc;
}


stock get_city(iLocid, String:szCity[64])
{
    new Handle:iFile = OpenFile(g_szLocationData,"rt");
   
    new String:szBuffer[256], String:szTemp[10][64];
    while(!IsEndOfFile(iFile))
    {
        ReadFileLine(iFile, szBuffer, sizeof (szBuffer));
        TrimString(szBuffer);
       
        str_piece(szBuffer, szTemp, sizeof szTemp, sizeof(szTemp[]), ',');
       
        if((StringToInt(szTemp[0]) == iLocid))
        {
            StripQuotes(szTemp[3]);
            FormatEx(szCity, sizeof(szCity), "%s", szTemp[3]);
            break;
        }
    }
    CloseHandle(iFile);
}


stock str_piece(const String:input[], String:output[][], outputsize, piecelen, token = '|')
{
    new i = -1, pieces, len = -1 ;
   
    while ( input[++i] != 0 )
    {
        if ( input[i] != token )
        {
            if ( ++len < piecelen )
                output[pieces][len] = input[i] ;
        }
        else
        {
            output[pieces++][++len] = 0 ;
            len = -1 ;
           
            if ( pieces == outputsize )
                return pieces ;
        }
    }
    return pieces + 1;
}


Nasel jsem to tady:
http://forums.alliedmods.net/showthread.php?t=79647

Ovsem bude nasledujici problem, databaze samotna ma 128MB... kdyz se vezme v potaz ze tech 128MB je cistej text tak to je celkem hafo radku co obsahuje ten dokument, cili doba hledani bude pro herni server da se rict az smrtici >> server muze sem tam v mensi nebo vetsi mire lagovat kdyz se nekdo bude pripojovat, protoze nacitani z tak obsahleho dokumentu zabere celkem velky procesorovy cas

Uživatelský avatar
Mysteria
Příspěvky: 9122
Registrován: 26 pro 2009, 15:40
Reputation: 7
Bydliště: Česká republika
Kontaktovat uživatele:

Re: Cannounce 1.1 a město připojení

#3 Příspěvekod Mysteria » 16 kvě 2010, 19:55

Hm zajímavé, tohle téma jsem našel, ale ten zdroják nešel zkompilovat, psalo to 4 errory... :(

Ten tvůj de, tak to zkusím, pak dám vědět...

Uživatelský avatar
proximo
Příspěvky: 267
Registrován: 25 bře 2010, 16:00
Reputation: 0
Bydliště: Židle u PC
Kontaktovat uživatele:

Re: Cannounce 1.1 a město připojení

#4 Příspěvekod proximo » 16 kvě 2010, 20:13

Mysteria píše:Hm zajímavé, tohle téma jsem našel, ale ten zdroják nešel zkompilovat, psalo to 4 errory... :(

Ten tvůj de, tak to zkusím, pak dám vědět...


Pokud by se ti to podařilo zprovoznit, mohl bych požádat o upload celého pluginu i s tvým configem na ty města, rád bych to taky vyskoušel.
Obrázek

Uživatelský avatar
Mysteria
Příspěvky: 9122
Registrován: 26 pro 2009, 15:40
Reputation: 7
Bydliště: Česká republika
Kontaktovat uživatele:

Re: Cannounce 1.1 a město připojení

#5 Příspěvekod Mysteria » 16 kvě 2010, 20:18

S mým konfigem? Jaký konfig? ;) Ale uploadnu ti to rád...

Uživatelský avatar
proximo
Příspěvky: 267
Registrován: 25 bře 2010, 16:00
Reputation: 0
Bydliště: Židle u PC
Kontaktovat uživatele:

Re: Cannounce 1.1 a město připojení

#6 Příspěvekod proximo » 16 kvě 2010, 20:19

Myslel sem i s těma městama aby to fungovalo. ;)
Obrázek

Uživatelský avatar
Mysteria
Příspěvky: 9122
Registrován: 26 pro 2009, 15:40
Reputation: 7
Bydliště: Česká republika
Kontaktovat uživatele:

Re: Cannounce 1.1 a město připojení

#7 Příspěvekod Mysteria » 16 kvě 2010, 20:24

No státy fungují úplně suprově, v tom problém není, ty mám už asi 5 měsíců na serveru.

Takže plugin nefunguje, nebo alespoň tedy nezobrazí město - žádný problém po restartu nebyl, ale nefunguje to.
Mno nic, hold to bude bez města :(

Uživatelský avatar
proximo
Příspěvky: 267
Registrován: 25 bře 2010, 16:00
Reputation: 0
Bydliště: Židle u PC
Kontaktovat uživatele:

Re: Cannounce 1.1 a město připojení

#8 Příspěvekod proximo » 16 kvě 2010, 20:27

Státy mi fungují taky, jen občas se u někoho objeví místo názvu země Unknown. :D
Obrázek

Uživatelský avatar
Mysteria
Příspěvky: 9122
Registrován: 26 pro 2009, 15:40
Reputation: 7
Bydliště: Česká republika
Kontaktovat uživatele:

Re: Cannounce 1.1 a město připojení

#9 Příspěvekod Mysteria » 16 kvě 2010, 21:26

Tak Unknown znamená, že tu IP adresu nenašel v databázi - logicky nemůže tam být vše ;)

Uživatelský avatar
tiepek
Příspěvky: 25
Věk: 33
Registrován: 26 dub 2011, 17:34
Reputation: 0
Kontaktovat uživatele:

Re: Cannounce 1.1 a město připojení

#10 Příspěvekod tiepek » 27 čer 2011, 00:31

ehm ... tohle myslím nahradí HLSTATS nebo tak něco ... ukazuje odkud se kdo připojil a jsou tam i města!
Co vím, napovím.
Co nevím, vymyslím.!?


Zpět na „Counter-Strike: Source“

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti