Raised This Month: $51 Target: $400
 12% 

Module: Special Geoip v1.0.0.1 (Linux + Windows)


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Author Message
claudiuhks
Yam Inside®™℠
Join Date: Jan 2010
Location: Living Randomly
Old 08-27-2012 , 10:53   Module: Special Geoip v1.0.0.1 (Linux + Windows)
Reply With Quote #1

Special Geoip
1.0.0.1




Download
Download latest GeoLiteCity.dat (GeoLite City GZip version) from MaxMind
View C++ source code
GeoIP C Sources

Informations

♠ Compiled on March 16, 2014 GMT.
♠ It uses the latest C sources.
♠ Returns N/A if nothing was found.

AMX Mod X integration

PHP Code:
/** Special Geoip v1.0.0.1
 * by Hattrick (Claudiu HKS)
 */

#if defined _special_geoip_included
   #endinput
#endif

#define _special_geoip_included

#if AMXX_VERSION_NUM >= 175
   #pragma reqlib special_geoip

   #if !defined AMXMODX_NOAUTOLOAD
      #pragma loadlib special_geoip
   #endif
#else
   #pragma library special_geoip
#endif

/** Util functions.
 */
stock AddCommas(NumOutput[], Len)
{
   static 
Tmp[16], OutputPos 0NumPos 0NumLen 0;

   
OutputPos NumPos 0;

   if (
Num 0)
   {
      
Output[OutputPos++] = '-';

      
Num abs(Num);
   }

   
NumLen num_to_str(NumTmpcharsmax(Tmp));

   if (
NumLen <= 3)
      
OutputPos += copy(Output[OutputPos], LenTmp);

   else
   {
      while (
NumPos NumLen && OutputPos Len)
      {
         
Output[OutputPos++] = Tmp[NumPos++];

         if (
NumLen NumPos && !((NumLen NumPos) % 3))
            
Output[OutputPos++] = ',';
      }

      
Output[OutputPos] = '^0';
   }
}

stock GeoipStripAddress(Address[])
{
   static 
Iterator 0;

   for (
Iterator strlen(Address) - 1Iterator >= 0Iterator--)
   {
      if (
Address[Iterator] == ':')
      {
         
Address[Iterator] = '^0';

         break;
      }
   }
}

stock GeoipFloatCommas(Float:ValueBuffer[], Size)
{
   
AddCommas(floatround(Value), BufferSize);
}

stock GeoipNumCommas(ValueBuffer[], Size)
{
   
AddCommas(ValueBufferSize);
}

/** Math predefinitions.
 */
#define F_Cos floatcos
#define F_Sin floatsin

stock Float:F_ACos(Float:Value)
{
   return 
floatacos(Valueradian);
}

stock Float:F_ASin(Float:Value)
{
   return 
floatasin(Valueradian);
}

/** Defines Geoip charsets.
 */
enum GeoCharset
{
   
GC_ISO8859 =    0,    // Normal characters.
   
GC_UTF8 =    1    // Special characters.
};

/** Defines Geoip informations.
 */
enum GeoInfo
{
   
/** Some examples below.
    */
   
GI_Country =        0,    // Romania        United States
   
GI_CountryCode =    1,    // RO            US
   
GI_CountryCode3 =    2,    // ROU            USA
   
GI_Region =        3,    // Cluj            New York
   
GI_TimeZone =        4,    // Europe/Bucharest    America/New_York
   
GI_City =        5,    // Turda            New Rochelle
   
GI_ContinentCode =    6,    // EU            NA
   
GI_RegionCode =        7,    // 13            NY
   
GI_Latitude =        8,    // 46.566700        40.911499
   
GI_Longitude =        9,    // 23.783300        -73.782303
   
GI_AreaCode =        10,    // 0            914
   
GI_PostalCode =        11,    // N/A            N/A
   
GI_MetroCode =        12,    // 0            501
   
GI_DmaCode =        13,    // 0            501
   
GI_NetMask =        14,    // 21            22
   
GI_Continent =        15,    // Europe            North America
   
GI_Charset =        16    // 1            1
};

/** Retrieves a result.
 *
 * @param Address        The IP address to retrieve information from.
 * @param Info        The information to retrieve.
 * @param Buffer        The variable to store result in.
 * @param Size        The variable that represents the buffer size.
 *
 * @return        True if success.
 */
native /* bool */        bool:GeoipInfo(const Address[], GeoInfo:InfoBuffer[], Size);

/** Changes charset.
 *
 * @param Charset        The charset to set.
 *
 * @return        True.
 */
native /* void */        GeoipCharset(GeoCharset:Charset);

/** Retrieves distance.
 *
 * Thanks Arkshine (@Forums.AlliedMods.Com) for this.
 * 0.017453 means PI / 180U and 3959U and 6371U means Earth radius both for imperial and metrical measurement systems.
 *
 * @param Address        The first IP address.
 * @param Other        The second IP address.
 * @param Imperial        Whether or not to use imperial measurement system.
 *
 * @return        The distance, if any. Otherwise, zero.
 */
stock /* long double */    Float:GeoipDistance(const Address[], const Other[], bool:Imperial true)
{
   static 
AddressLatitude[16], AddressLongitude[16], OtherLatitude[16], OtherLongitude[16], \
      
Float:fAddressLatitude 0.0Float:fAddressLongitude 0.0Float:fOtherLatitude 0.0Float:fOtherLongitude 0.0;

   if (
GeoipInfo(AddressGI_LatitudeAddressLatitudecharsmax(AddressLatitude)) && GeoipInfo(OtherGI_LatitudeOtherLatitudecharsmax(OtherLatitude)) && \
      
GeoipInfo(AddressGI_LongitudeAddressLongitudecharsmax(AddressLongitude)) && GeoipInfo(OtherGI_LongitudeOtherLongitudecharsmax(OtherLongitude)))
      {
         
fAddressLatitude str_to_float(AddressLatitude) * 0.017453fOtherLatitude str_to_float(OtherLatitude) * 0.017453;
         
fAddressLongitude str_to_float(AddressLongitude) * 0.017453fOtherLongitude str_to_float(OtherLongitude) * 0.017453;

         return 
Imperial ? \
            
F_ACos(F_Sin(fAddressLatitude) * F_Sin(fOtherLatitude) + F_Cos(fAddressLatitude) * F_Cos(fOtherLatitude) * F_Cos(fOtherLongitude fAddressLongitude)) * 3959.0 : \
            
F_ACos(F_Sin(fAddressLatitude) * F_Sin(fOtherLatitude) + F_Cos(fAddressLatitude) * F_Cos(fOtherLatitude) * F_Cos(fOtherLongitude fAddressLongitude)) * 6371.0;
   }

   return 
0.0;
}

/** Retrieves distance between client and server.
 *
 * Experimental function. This will only work whether server's IP address is the real one (not the local one).
 *
 * @param Client        Client to compare distance with.
 * @param Imperial        Whether or not to use imperial measurement system.
 *
 * @return        The distance, if any. Otherwise, zero.
 */
stock /* long double */    Float:GeoipClientDistance(Clientbool:Imperial true)
{
   static 
ServerAddress[64], ClientAddress[64], \
      
Float:Distance 0.0;

   if (!
is_user_connected(Client) || is_user_bot(Client))
   {
      return 
0.0;
   }

   
get_cvar_string("net_address"ServerAddresscharsmax(ServerAddress));

   
GeoipStripAddress(ServerAddress);

   
get_user_ip(ClientClientAddresscharsmax(ClientAddress), 1);

   
Distance GeoipDistance(ClientAddressServerAddressImperial);

   if (
Distance == 0.0)
   {
      
get_cvar_string("ip"ServerAddresscharsmax(ServerAddress));

      
GeoipStripAddress(ServerAddress);

      
Distance GeoipDistance(ClientAddressServerAddressImperial);
   }

   return 
Distance;

PHP Code:
#include amxmodx 
#include special_geoip

new const g_Address[] =    "24.44.246.135";
new const 
g_Other[] =    "86.124.107.135";

public 
plugin_init()
{
   new 
Country[64], City[64], Region[64], TimeZone[64], PostalCode[64], DmaCode[64], MetroCode[64], NetMask[64], Longitude[64], Latitude[64], CountryCode[64], CountryCode3[64], \
      
RegionCode[64], Continent[64], ContinentCode[64], Charset[64], AreaCode[64], FormattedDistance[64], Float:Distance 0.0Float:ClientDistance 0.0;

   
register_plugin("Special Geoip""1.0""Hattrick (Claudiu HKS)");

   
GeoipInfo(g_AddressGI_CountryCountrycharsmax(Country));
   
GeoipInfo(g_AddressGI_CityCitycharsmax(City));
   
GeoipInfo(g_AddressGI_RegionRegioncharsmax(Region));
   
GeoipInfo(g_AddressGI_TimeZoneTimeZonecharsmax(TimeZone));
   
GeoipInfo(g_AddressGI_PostalCodePostalCodecharsmax(PostalCode));
   
GeoipInfo(g_AddressGI_DmaCodeDmaCodecharsmax(DmaCode));
   
GeoipInfo(g_AddressGI_MetroCodeMetroCodecharsmax(MetroCode));
   
GeoipInfo(g_AddressGI_NetMaskNetMaskcharsmax(NetMask));
   
GeoipInfo(g_AddressGI_LongitudeLongitudecharsmax(Longitude));
   
GeoipInfo(g_AddressGI_LatitudeLatitudecharsmax(Latitude));
   
GeoipInfo(g_AddressGI_CountryCodeCountryCodecharsmax(CountryCode));
   
GeoipInfo(g_AddressGI_CountryCode3CountryCode3charsmax(CountryCode3));
   
GeoipInfo(g_AddressGI_RegionCodeRegionCodecharsmax(RegionCode));
   
GeoipInfo(g_AddressGI_ContinentContinentcharsmax(Continent));
   
GeoipInfo(g_AddressGI_ContinentCodeContinentCodecharsmax(ContinentCode));
   
GeoipInfo(g_AddressGI_CharsetCharsetcharsmax(Charset));
   
GeoipInfo(g_AddressGI_AreaCodeAreaCodecharsmax(AreaCode));

   
server_print("^n----------------------------------------------------------");
   
server_print("Address: %s"g_Address);
   
server_print("Country: %s"Country);
   
server_print("City: %s"City);
   
server_print("Region: %s"Region);
   
server_print("Time Zone: %s"TimeZone);
   
server_print("Postal Code: %s"PostalCode);
   
server_print("Dma Code: %s"DmaCode);
   
server_print("Metro Code: %s"MetroCode);
   
server_print("Area Code: %s"AreaCode);
   
server_print("Net Mask: %s"NetMask);
   
server_print("Longitude: %s"Longitude);
   
server_print("Latitude: %s"Latitude);
   
server_print("Country Code: %s"CountryCode);
   
server_print("Country Code 3: %s"CountryCode3);
   
server_print("Region Code: %s"RegionCode);
   
server_print("Continent: %s"Continent);
   
server_print("Continent Code: %s"ContinentCode);
   
server_print("Charset: %s"Charset);
   
server_print("----------------------------------------------------------");

   
GeoipInfo(g_OtherGI_CountryCountrycharsmax(Country));
   
GeoipInfo(g_OtherGI_CityCitycharsmax(City));
   
GeoipInfo(g_OtherGI_RegionRegioncharsmax(Region));
   
GeoipInfo(g_OtherGI_TimeZoneTimeZonecharsmax(TimeZone));
   
GeoipInfo(g_OtherGI_PostalCodePostalCodecharsmax(PostalCode));
   
GeoipInfo(g_OtherGI_DmaCodeDmaCodecharsmax(DmaCode));
   
GeoipInfo(g_OtherGI_MetroCodeMetroCodecharsmax(MetroCode));
   
GeoipInfo(g_OtherGI_NetMaskNetMaskcharsmax(NetMask));
   
GeoipInfo(g_OtherGI_LongitudeLongitudecharsmax(Longitude));
   
GeoipInfo(g_OtherGI_LatitudeLatitudecharsmax(Latitude));
   
GeoipInfo(g_OtherGI_CountryCodeCountryCodecharsmax(CountryCode));
   
GeoipInfo(g_OtherGI_CountryCode3CountryCode3charsmax(CountryCode3));
   
GeoipInfo(g_OtherGI_RegionCodeRegionCodecharsmax(RegionCode));
   
GeoipInfo(g_OtherGI_ContinentContinentcharsmax(Continent));
   
GeoipInfo(g_OtherGI_ContinentCodeContinentCodecharsmax(ContinentCode));
   
GeoipInfo(g_OtherGI_CharsetCharsetcharsmax(Charset));
   
GeoipInfo(g_OtherGI_AreaCodeAreaCodecharsmax(AreaCode));

   
server_print("Address: %s"g_Other);
   
server_print("Country: %s"Country);
   
server_print("City: %s"City);
   
server_print("Region: %s"Region);
   
server_print("Time Zone: %s"TimeZone);
   
server_print("Postal Code: %s"PostalCode);
   
server_print("Dma Code: %s"DmaCode);
   
server_print("Metro Code: %s"MetroCode);
   
server_print("Area Code: %s"AreaCode);
   
server_print("Net Mask: %s"NetMask);
   
server_print("Longitude: %s"Longitude);
   
server_print("Latitude: %s"Latitude);
   
server_print("Country Code: %s"CountryCode);
   
server_print("Country Code 3: %s"CountryCode3);
   
server_print("Region Code: %s"RegionCode);
   
server_print("Continent: %s"Continent);
   
server_print("Continent Code: %s"ContinentCode);
   
server_print("Charset: %s"Charset);
   
server_print("----------------------------------------------------------");

   
Distance GeoipDistance(g_Addressg_Other);
   
GeoipFloatCommas(DistanceFormattedDistancecharsmax(FormattedDistance));
   
Distance != 0.0 server_print("Miles: %s"FormattedDistance) : server_print("Miles: %s""N/A");

   
Distance GeoipDistance(g_Addressg_Otherfalse);
   
GeoipFloatCommas(DistanceFormattedDistancecharsmax(FormattedDistance));
   
Distance != 0.0 server_print("Kilometers: %s"FormattedDistance) : server_print("Kilometers: %s""N/A");

   
ClientDistance GeoipClientDistance(0);
   
GeoipFloatCommas(ClientDistanceFormattedDistancecharsmax(FormattedDistance));
   
ClientDistance != 0.0 server_print("Miles between client zero and server: %s"FormattedDistance) : server_print("Miles between client zero and server: %s""N/A");

   
ClientDistance GeoipClientDistance(0false);
   
GeoipFloatCommas(ClientDistanceFormattedDistancecharsmax(FormattedDistance));
   
ClientDistance != 0.0 server_print("Kilometers between client zero and server: %s^n"FormattedDistance) : server_print("Kilometers between client zero and server: %s^n""N/A");

In game pictures





Plug-in example:

PHP Code:
#include amxmodx
#include special_geoip

public client_putinserver(Id)
{
 static 
Name[64], Ip[64], Country[64], City[64], Buffer[256];
 
get_user_ip(IdIp631);
 
GeoipInfo(IpGI_CountryCountry63);
 
GeoipInfo(IpGI_CityCity63);
 
get_user_name(IdName63);
 
formatex(Buffer255"^x04[Special GeoIP]^x03 %s^x01 connected from [^x03%s^x01] [^x03%s^x01]"NameCountryCity);
 for (
Id 1Id <= get_maxplayers(); Id++)
 {
  if (!
is_user_connected(Id)) continue;
  
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("SayText"), _Id);
  
write_byte(get_maxplayers() + 1);
  
write_string(Buffer);
  
message_end();
 }

__________________

Last edited by claudiuhks; 02-12-2015 at 17:12.
claudiuhks is offline
Send a message via MSN to claudiuhks Send a message via Yahoo to claudiuhks Send a message via Skype™ to claudiuhks
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 02:10.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode