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
1
Vehicle Showroom / [BTTF] Re: Flying Delly - Featured Vehicle
« on June 4th, 02:12 PM »
Link to that mod if anybody curious.
https://www.moddb.com/mods/back-to-the-future-hill-valley
http://www.bttfhillvalley.co.uk

In fact this mod just switch between car and helicopter.
2
General Discussion / Re: Module SDK and Node NAPI addon
« on May 13th, 12:48 PM »
Found jxcore which provides embeddable interface.
I don't know what's the difference between nodejs.

Last updated 2 years ago, a dead project.
3
General Discussion / Re: Module SDK and Node NAPI addon
« on May 13th, 09:16 AM »
You have to embedding nodejs in VC:MP server. Or you have to use some inter-process communication mechanism, which is not efficient.

PS: I used to considered writing a nodejs plugin, but I found it lacks document/library for embedding. While Python has boost.python and pybind11.
4
@=RK=MarineForce #3
The underlying functions are SetObjectTouchedReportEnabled/IsObjectTouchedReportEnabled/OnObjectTouched.
So I guess is when player touch the object.
5
There's only an incomplete document: https://docs.vc-mp.org
You can refer to plugins source code. Most plugins are open source.

For example:
Squirrel
Java
SqMod
Python

And fell free to ask any questions here. Or join dioscord server: https://forum.vc-mp.org/?topic=4856.0
6
I suggest you upgrade your OS. Your hardware is pretty good, why still using such old OS?
After all, LU no longer support Windows XP. And MTASA is going to drop support for XP and Vista and now it provides a legacy build for these OS.
7
Bugs and Crashes / Re: 740 Error
« on April 25th, 09:18 PM »
Where did you get this error? Can you provide any screenshot?
9
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.
11
@umar4911 #1 What encoder?
12
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.
13
@umar4911 #4 You can ask server owner for help.
14
@umar4911 #2 No detailed information. I guess that plugin is deprecated.
15
Where's that plugin? I can't find that on this forum.