Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - ysc3839
2
Version 1.1.0 is released. https://github.com/ysc3839/vcmp-squirrel-mmdb/releases/tag/v1.1.0

Since version 1.1.0:
Some squirrel unsupported data types will be convert to other form.
BYTES in database will be convert to array ["BYTES", bytes_string]
UINT64 -> ["UINT64", high32bit, low32bit] on 32bit and squirrel native int on 64bit.
UINT128 -> ["UINT128", high_hi32bit, high_lo32bit, low_hi32bit, low_lo32bit] on 32bit and ["UINT128", high64bit, low64bit] on 64bit.
4
@umar4911 #1 What encoder?
5
MaxMind DB Reader (GeoIP2) for VC:MP Squirrel Plugin.
Source code & Download: https://github.com/ysc3839/vcmp-squirrel-mmdb/releases

Documentation:
class MMDB
Constructor MMDB(filename)
Parameter types: string.
May throw error.

Function metadata()
Return type: table.
May throw error.

Function get(ip_address)
Parameter types: string. Return type: table.
May throw error.

Since version 1.1.0:
Some squirrel unsupported data types will be convert to other form.
BYTES in database will be convert to array ["BYTES", bytes_string]
UINT64 -> ["UINT64", high32bit, low32bit] on 32bit and squirrel native int on 64bit.
UINT128 -> ["UINT128", high_hi32bit, high_lo32bit, low_hi32bit, low_lo32bit] on 32bit and ["UINT128", high64bit, low64bit] on 64bit.

Usage:
Code: [Select]
mmdb <- MMDB("GeoLite2-City.mmdb");
print(JSONEncoder.encode(mmdb.metadata()));
print(JSONEncoder.encode(mmdb.get("128.101.101.101")));
You can use JSONEncoder to dump tables to string.

Example output: (UTF-8 encoding)
Code: [Select]
[SCRIPT]  {"description":{"en":"GeoLite2 City database"},"binary_format_major_version":2,"ip_version":6,"build_epoch":["UINT64",0,1554724656],"node_count":3854641,"languages":["de","en","es","fr","ja","pt-BR","ru","zh-CN"],"database_type":"GeoLite2-City","binary_format_minor_version":0,"record_size":28}
[SCRIPT]  {"subdivisions":[{"names":{"en":"Minnesota","ru":"Миннесота","ja":"ミネソタ州","zh-CN":"明尼苏达州","
es":"Minnesota","pt-BR":"Minesota","fr":"Minnesota"},"geoname_id":5037779,"iso_code":"MN"}],"continent":{"names":{"en":"North America","ru":"Северная Америка","ja":"北アメリカ","zh-CN":"北美洲","de":"Nordamerika","es":"Nortea
mérica","pt-BR":"América do Norte","fr":"Amérique du Nord"},"geoname_id":6255149,"code":"NA"},"country":{"names":{"en":"United States","ru":"США","ja":"アメリカ合衆国","zh-CN":"美国","de":"USA","es":"Estados Unidos","pt-BR":"Estados Unid
os","fr":"États-Unis"},"geoname_id":6252001,"iso_code":"US"},"postal":{"code":"55110"},"city":{"names":{"en":"Saint Paul","ru":"Сент-Пол","ja":"セントポール","zh-CN":"圣保罗","de":"Saint Paul","es":"Saint Paul","pt-BR":"Saint Paul","
fr":"Saint Paul"},"geoname_id":5045360},"registered_country":{"names":{"en":"United States","ru":"США","ja":"アメリカ
合衆国","zh-CN":"美国","de":"USA","es":"Estados Unidos","pt-BR":"Estados Unidos","fr":"États-Unis"},"geoname_id":6252001
,"iso_code":"US"},"location":{"latitude":45.08,"metro_code":613,"longitude":-93.0227,"time_zone":"America\/Chicago","accuracy_radius":20}

Some helper functions like old GeoIP API:
(click to show/hide)
Code: [Select]
function geoip2_country_code_by_addr(ip_address)
{
    local data = mmdb.get(ip_address);
    local res = null;
    try
    {
        res = data.country.iso_code;
    }
    catch(e) {}
    return res;
}

function geoip2_country_name_by_addr(ip_address)
{
    local data = mmdb.get(ip_address);
    local res = null;
    try
    {
        res = data.country.names.en;
    }
    catch(e) {}
    return res;
}

function geoip2_city_name_by_addr(ip_address)
{
    local data = mmdb.get(ip_address);
    local res = null;
    try
    {
        res = data.city.names.en;
    }
    catch(e) {}
    return res;
}

function geoip2_subdivision_code_by_addr(ip_address)
{
    local data = mmdb.get(ip_address);
    local res = null;
    try
    {
        res = data.subdivisions[0].iso_code;
    }
    catch(e) {}
    return res;
}

function geoip2_subdivision_name_by_addr(ip_address)
{
    local data = mmdb.get(ip_address);
    local res = null;
    try
    {
        res = data.subdivisions[0].names.en;
    }
    catch(e) {}
    return res;
}

function geoip2_continent_code_by_addr(ip_address)
{
    local data = mmdb.get(ip_address);
    local res = null;
    try
    {
        res = data.continent.code;
    }
    catch(e) {}
    return res;
}

function geoip2_continent_name_by_addr(ip_address)
{
    local data = mmdb.get(ip_address);
    local res = null;
    try
    {
        res = data.continent.names.en;
    }
    catch(e) {}
    return res;
}
Usage:
Code: [Select]
mmdb <- MMDB("GeoLite2-City.mmdb");
local ip = "128.101.101.101";
print(geoip2_country_code_by_addr(ip));
print(geoip2_country_name_by_addr(ip));
print(geoip2_city_name_by_addr(ip));
print(geoip2_subdivision_code_by_addr(ip));
print(geoip2_subdivision_name_by_addr(ip));
print(geoip2_continent_code_by_addr(ip));
print(geoip2_continent_name_by_addr(ip));
Example output:
Code: [Select]
[SCRIPT]  US
[SCRIPT]  United States
[SCRIPT]  Saint Paul
[SCRIPT]  MN
[SCRIPT]  Minnesota
[SCRIPT]  NA
[SCRIPT]  North America

Free databases can be downloaded here.
6
@umar4911 #4 You can ask server owner for help.
7
@umar4911 #2 No detailed information. I guess that plugin is deprecated.
8
Where's that plugin? I can't find that on this forum.
9
Support / Re: The masterlist was in an unexpected format
« on March 27th, 05:56 PM »
@[SK]Kelvin #2 Seems nothing wrong.
10
Support / Re: The masterlist was in an unexpected format
« on March 25th, 08:25 PM »
Open http://master.vc-mp.org/servers/ in your browser and take a screenshot.
11
Support / Re: Banned from vc-mp forum
« on March 22nd, 02:37 AM »
Maybe the IP address you using is banned. Unfortunately It seems that I can't unban that IP. So wait @Stormeus or try using proxy.
12
Support / Re: Banned from vc-mp forum
« on March 21st, 07:07 AM »
Can you post a screenshot?
13
Script Showroom / [GAMEMODE] Python Demo
« on March 15th, 12:57 PM »
Introduction
This is a demo gamemode for my Python plugin. Working in progress.
https://github.com/ysc3839/vcmp-python-demo

Version 1.0 have settings system (settings.yaml) and a teleport system. Vehicles position are from vl8-pb400 and teleports position are by myself.
This script works with 04rel004-04rel006 (server version v23-v30). Tested with Python 3.6 x64 on both Windows 10 and Ubuntu 18.04.

Deploy instruction
Clone or download the source code first.

Download required binaries
Install required Python package
This project uses pipenv to manage packages.
Install pipenv and run pipenv install inside project folder to install packages.
After installing packages. Run pipenv shell and then start the server.
If you are using Windows, you need to use run_server.bat to start the server. This script sets PYTHONHOME environment variable because Python can not locate virtualenv location. This issue does not exist on Linux so you can start the server directly.
14
Community Plugins / Re: Python plugin
« on March 13th, 04:44 PM »
@DarkRaZoR^ #11 Yes it's possible.
VCMP has built-in functions for plugin communication. However the squirrel plugin doesn't implement such function.
So available options are:
  • Modify squirrel plugin to implement this function.
  • Make another plugin as squirrel extension to implement this function.
  • Use another communication mechanism. For example: network.
I think the last one is easiest. There's a socket plugin for squirrel.
15
Community Plugins / Re: Python plugin
« on March 13th, 03:23 PM »
Version 1.0.5:
  • Fix error message being truncated.
Download: https://github.com/ysc3839/vcmp-python-plugin/releases/tag/v1.0.5