Commit d36b98eb authored by nanahira's avatar nanahira

Merge branch 'master' of https://github.com/moecube/srvpro into mc

parents 702b3eb1 8757cd68
...@@ -11,9 +11,10 @@ config.user.bak ...@@ -11,9 +11,10 @@ config.user.bak
/config /config
/ygopro /ygopro
/windbot /windbot
/decks/ /decks
/decks_save* /decks_save*
/node_modules/ /replays
/node_modules
/ssl /ssl
/ygosrv233 /ygosrv233
......
{ {
"name": "ygopro-server", "name": "srvpro",
"version": "2.3.3", "version": "2.3.3",
"description": "a server for ygopro", "description": "a server for ygopro",
"repository": "github:mycard/ygopro-server", "repository": "github:mycard/srvpro",
"keywords": [ "keywords": [
"mycard", "mycard",
"ygopro", "ygopro",
"srvpro",
"server" "server"
], ],
"author": "zh99998 <zh99998@gmail.com>, mercury233 <me@mercury233.me>", "author": "zh99998 <zh99998@gmail.com>, mercury233 <me@mercury233.me>",
"dependencies": { "dependencies": {
"bunyan": "latest", "bunyan": "latest",
"deepmerge": "latest", "deepmerge": "latest",
"load-json-file": "latest",
"moment": "latest", "moment": "latest",
"request": "latest", "request": "latest",
"underscore": "latest", "underscore": "latest",
......
...@@ -8,8 +8,9 @@ ...@@ -8,8 +8,9 @@
*/ */
var sqlite3 = require('sqlite3').verbose(); var sqlite3 = require('sqlite3').verbose();
var fs = require('fs'); var fs = require('fs');
var config = require('./config/deckstats.json'); //{ "deckpath": "../decks", "dbfile": "cards.cdb" } var loadJSON = require('load-json-file').sync;
var constants = require('./data/constants.json'); var config = loadJSON('./config/deckstats.json'); //{ "deckpath": "../decks", "dbfile": "cards.cdb" }
var constants = loadJSON('./data/constants.json');
var ALL_MAIN_CARDS={}; var ALL_MAIN_CARDS={};
var ALL_SIDE_CARDS={}; var ALL_SIDE_CARDS={};
......
...@@ -15,16 +15,19 @@ var spawn = require('child_process').spawn; ...@@ -15,16 +15,19 @@ var spawn = require('child_process').spawn;
var url = require('url'); var url = require('url');
var moment = require('moment'); var moment = require('moment');
moment.locale('zh-cn'); moment.locale('zh-cn');
var loadJSON = require('load-json-file').sync;
var constants = require('./data/constants.json'); var constants = loadJSON('./data/constants.json');
var settings = require('./config/config.json'); var settings = loadJSON('./config/config.json');
config=settings.modules.pre_util; config=settings.modules.pre_util;
//全卡HTML列表 //全卡HTML列表
var cardHTMLs=[]; var cardHTMLs=[];
//http长连接 //http长连接
var responder; var responder;
//URL里的更新时间戳
var dataver = moment().format("YYYYMMDDHHmmss");
//输出反馈信息,如有http长连接则输出到http,否则输出到控制台 //输出反馈信息,如有http长连接则输出到http,否则输出到控制台
var sendResponse = function(text) { var sendResponse = function(text) {
...@@ -186,6 +189,7 @@ var loadDb = function(db_file) { ...@@ -186,6 +189,7 @@ var loadDb = function(db_file) {
sendResponse(db_file + ":" + err); sendResponse(db_file + ":" + err);
} }
else { else {
dataver = moment().format("YYYYMMDDHHmmss");
sendResponse("已加载数据库"+db_file+",共"+num+"张卡。"); sendResponse("已加载数据库"+db_file+",共"+num+"张卡。");
} }
}); });
...@@ -196,6 +200,8 @@ var writeToFile = function(message) { ...@@ -196,6 +200,8 @@ var writeToFile = function(message) {
var fileContent=fs.readFileSync(config.html_path+config.html_filename, {"encoding":"utf-8"}); var fileContent=fs.readFileSync(config.html_path+config.html_filename, {"encoding":"utf-8"});
var newContent=cardHTMLs.join("\n"); var newContent=cardHTMLs.join("\n");
fileContent=fileContent.replace(/<tbody class="auto-generated">[\w\W]*<\/tbody>/,'<tbody class="auto-generated">\n'+newContent+'\n</tbody>'); fileContent=fileContent.replace(/<tbody class="auto-generated">[\w\W]*<\/tbody>/,'<tbody class="auto-generated">\n'+newContent+'\n</tbody>');
fileContent = fileContent.replace(/data-ygosrv233-download="(http.+)" href="http.+"/g, 'data-ygosrv233-download="$1" href="$1"');
fileContent = fileContent.replace(/href="(http.+)dataver/g, 'href="$1' + dataver);
if (message) { if (message) {
message="<li>"+moment().format('L HH:mm')+"<ul><li>"+message.split("!换行符!").join("</li><li>")+"</li></ul></li>"; message="<li>"+moment().format('L HH:mm')+"<ul><li>"+message.split("!换行符!").join("</li><li>")+"</li></ul></li>";
fileContent=fileContent.replace(/<ul class="auto-generated">/,'<ul class="auto-generated">\n'+message); fileContent=fileContent.replace(/<ul class="auto-generated">/,'<ul class="auto-generated">\n'+message);
...@@ -250,12 +256,17 @@ var fetchDatas = function() { ...@@ -250,12 +256,17 @@ var fetchDatas = function() {
//更新本地网页到服务器,异步 //更新本地网页到服务器,异步
var pushDatas = function() { var pushDatas = function() {
if (config.cdn.enabled) { if (config.cdn.enabled) {
uploadCDN(config.cdn.local, config.cdn.remote, function () { uploadCDN(config.cdn.local, config.cdn.remote + "/" + dataver, function () {
uploadCDN(config.db_path + "pics", config.cdn.pics_remote + "pics", function () { uploadCDN(config.db_path + "pics", config.cdn.pics_remote + "pics", function () {
sendResponse("CDN上传全部完成。"); sendResponse("CDN上传全部完成。");
pushHTMLs();
}); });
}); });
} }
}
var pushHTMLs = function() {
sendResponse("开始上传到网页。");
try { try {
execSync('git add --all .', { cwd: config.git_html_path, env: process.env }); execSync('git add --all .', { cwd: config.git_html_path, env: process.env });
execSync('git commit -m update-auto', { cwd: config.git_html_path, env: process.env }); execSync('git commit -m update-auto', { cwd: config.git_html_path, env: process.env });
...@@ -427,7 +438,7 @@ http.createServer(function (req, res) { ...@@ -427,7 +438,7 @@ http.createServer(function (req, res) {
} }
else if (u.pathname === '/api/push_datas') { else if (u.pathname === '/api/push_datas') {
res.writeHead(200); res.writeHead(200);
res.end(u.query.callback+'({"message":"开始上传到网页。"});'); res.end(u.query.callback+'({"message":"开始上传数据。"});');
pushDatas(); pushDatas();
} }
else if (u.pathname === '/api/write_to_file') { else if (u.pathname === '/api/write_to_file') {
......
...@@ -42,6 +42,8 @@ moment.locale('zh-cn', { ...@@ -42,6 +42,8 @@ moment.locale('zh-cn', {
merge = require 'deepmerge' merge = require 'deepmerge'
loadJSON = require('load-json-file').sync
#heapdump = require 'heapdump' #heapdump = require 'heapdump'
# 配置 # 配置
...@@ -49,7 +51,7 @@ merge = require 'deepmerge' ...@@ -49,7 +51,7 @@ merge = require 'deepmerge'
if not fs.existsSync('./config') if not fs.existsSync('./config')
fs.mkdirSync('./config') fs.mkdirSync('./config')
try try
oldconfig=require('./config.user.json') oldconfig=loadJSON('./config.user.json')
if oldconfig.tips if oldconfig.tips
oldtips = {} oldtips = {}
oldtips.file = './config/tips.json' oldtips.file = './config/tips.json'
...@@ -90,7 +92,7 @@ try ...@@ -90,7 +92,7 @@ try
log.info 'imported old config from config.user.json' log.info 'imported old config from config.user.json'
fs.renameSync('./config.user.json', './config.user.bak') fs.renameSync('./config.user.json', './config.user.bak')
catch e catch e
log.info e unless e.code == 'MODULE_NOT_FOUND' log.info e unless e.code == 'ENOENT'
setting_save = (settings) -> setting_save = (settings) ->
fs.writeFileSync(settings.file, JSON.stringify(settings, null, 2)) fs.writeFileSync(settings.file, JSON.stringify(settings, null, 2))
...@@ -113,37 +115,37 @@ setting_change = (settings, path, val) -> ...@@ -113,37 +115,37 @@ setting_change = (settings, path, val) ->
return return
# 读取配置 # 读取配置
default_config = require('./data/default_config.json') default_config = loadJSON('./data/default_config.json')
try try
config = require('./config/config.json') config = loadJSON('./config/config.json')
catch catch
config = {} config = {}
settings = global.settings = merge(default_config, config, { arrayMerge: (destination, source) -> source }) settings = global.settings = merge(default_config, config, { arrayMerge: (destination, source) -> source })
# 读取数据 # 读取数据
default_data = require('./data/default_data.json') default_data = loadJSON('./data/default_data.json')
try try
tips = require('./config/tips.json') tips = loadJSON('./config/tips.json')
catch catch
tips = default_data.tips tips = default_data.tips
setting_save(tips) setting_save(tips)
try try
dialogues = require('./config/dialogues.json') dialogues = loadJSON('./config/dialogues.json')
catch catch
dialogues = default_data.dialogues dialogues = default_data.dialogues
setting_save(dialogues) setting_save(dialogues)
try try
badwords = require('./config/badwords.json') badwords = loadJSON('./config/badwords.json')
catch catch
badwords = default_data.badwords badwords = default_data.badwords
setting_save(badwords) setting_save(badwords)
try try
duel_log = require('./config/duel_log.json') duel_log = loadJSON('./config/duel_log.json')
catch catch
duel_log = default_data.duel_log duel_log = default_data.duel_log
setting_save(duel_log) setting_save(duel_log)
try try
chat_color = require('./config/chat_color.json') chat_color = loadJSON('./config/chat_color.json')
catch catch
chat_color = default_data.chat_color chat_color = default_data.chat_color
setting_save(chat_color) setting_save(chat_color)
...@@ -170,7 +172,7 @@ if settings.modules.cloud_replay.enabled ...@@ -170,7 +172,7 @@ if settings.modules.cloud_replay.enabled
return return
if settings.modules.windbot.enabled if settings.modules.windbot.enabled
windbots = require(settings.modules.windbot.botlist).windbots windbots = loadJSON(settings.modules.windbot.botlist).windbots
# 组件 # 组件
ygopro = require './ygopro.js' ygopro = require './ygopro.js'
...@@ -1401,6 +1403,7 @@ ygopro.stoc_follow 'GAME_MSG', false, (buffer, info, client, server)-> ...@@ -1401,6 +1403,7 @@ ygopro.stoc_follow 'GAME_MSG', false, (buffer, info, client, server)->
pos = pos * 2 if pos >= 0 and room.hostinfo.mode == 2 pos = pos * 2 if pos >= 0 and room.hostinfo.mode == 2
val = buffer.readInt32LE(2) val = buffer.readInt32LE(2)
room.dueling_players[pos].lp -= val room.dueling_players[pos].lp -= val
room.dueling_players[pos].lp = 0 if room.dueling_players[pos].lp < 0
if 0 < room.dueling_players[pos].lp <= 100 if 0 < room.dueling_players[pos].lp <= 100
ygopro.stoc_send_chat_to_room(room, "${lp_low_opponent}", ygopro.constants.COLORS.PINK) ygopro.stoc_send_chat_to_room(room, "${lp_low_opponent}", ygopro.constants.COLORS.PINK)
...@@ -1424,6 +1427,7 @@ ygopro.stoc_follow 'GAME_MSG', false, (buffer, info, client, server)-> ...@@ -1424,6 +1427,7 @@ ygopro.stoc_follow 'GAME_MSG', false, (buffer, info, client, server)->
pos = pos * 2 if pos >= 0 and room.hostinfo.mode == 2 pos = pos * 2 if pos >= 0 and room.hostinfo.mode == 2
val = buffer.readInt32LE(2) val = buffer.readInt32LE(2)
room.dueling_players[pos].lp -= val room.dueling_players[pos].lp -= val
room.dueling_players[pos].lp = 0 if room.dueling_players[pos].lp < 0
if 0 < room.dueling_players[pos].lp <= 100 if 0 < room.dueling_players[pos].lp <= 100
ygopro.stoc_send_chat_to_room(room, "${lp_low_self}", ygopro.constants.COLORS.PINK) ygopro.stoc_send_chat_to_room(room, "${lp_low_self}", ygopro.constants.COLORS.PINK)
...@@ -1904,14 +1908,12 @@ ygopro.stoc_follow 'CHAT', true, (buffer, info, client, server)-> ...@@ -1904,14 +1908,12 @@ ygopro.stoc_follow 'CHAT', true, (buffer, info, client, server)->
return unless room and pid < 4 and settings.modules.chat_color.enabled return unless room and pid < 4 and settings.modules.chat_color.enabled
if room.started and room.turn > 0 and !room.dueling_players[0].is_first if room.started and room.turn > 0 and !room.dueling_players[0].is_first
if room.hostinfo.mode == 2 if room.hostinfo.mode == 2
if pid == 0 pid = {
pid = 2 0: 2,
else if pid = 1 1: 3,
pid = 3 2: 0,
else if pid = 2 3: 1
pid = 0 }[pid]
else if pid = 3
pid = 1
else else
pid = 1 - pid pid = 1 - pid
for player in room.players when player and player.pos == pid for player in room.players when player and player.pos == pid
......
// Generated by CoffeeScript 1.12.7 // Generated by CoffeeScript 1.12.7
(function() { (function() {
var Cloud_replay_ids, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_connected_ip, ROOM_find_by_name, ROOM_find_by_port, ROOM_find_by_title, ROOM_find_or_create_ai, ROOM_find_or_create_by_name, ROOM_find_or_create_random, ROOM_players_banned, ROOM_players_oppentlist, ROOM_unwelcome, ROOM_validate, Room, _, addCallback, badwords, ban_user, bunyan, chat_color, config, cppversion, crypto, date, default_config, default_data, dialogues, duel_log, e, exec, execFile, fs, geoip, get_memory_usage, http, http_server, https, https_server, lflists, list, load_dialogues, load_tips, log, memory_usage, merge, moment, net, oldbadwords, oldconfig, olddialogues, oldduellog, oldtips, options, os, path, pgClient, pg_client, pg_query, redis, redisdb, report_to_big_brother, request, requestListener, roomlist, setting_change, setting_save, settings, spawn, spawnSync, tips, url, users_cache, wait_room_start, wait_room_start_arena, windbot_bin, windbot_parameters, windbot_process, windbots, ygopro, zlib; var Cloud_replay_ids, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_connected_ip, ROOM_find_by_name, ROOM_find_by_port, ROOM_find_by_title, ROOM_find_or_create_ai, ROOM_find_or_create_by_name, ROOM_find_or_create_random, ROOM_players_banned, ROOM_players_oppentlist, ROOM_unwelcome, ROOM_validate, Room, _, addCallback, badwords, ban_user, bunyan, chat_color, config, cppversion, crypto, date, default_config, default_data, dialogues, duel_log, e, exec, execFile, fs, geoip, get_memory_usage, http, http_server, https, https_server, lflists, list, loadJSON, load_dialogues, load_tips, log, memory_usage, merge, moment, net, oldbadwords, oldconfig, olddialogues, oldduellog, oldtips, options, os, path, pgClient, pg_client, pg_query, redis, redisdb, report_to_big_brother, request, requestListener, roomlist, setting_change, setting_save, settings, spawn, spawnSync, tips, url, users_cache, wait_room_start, wait_room_start_arena, windbot_bin, windbot_parameters, windbot_process, windbots, ygopro, zlib;
net = require('net'); net = require('net');
...@@ -60,12 +60,14 @@ ...@@ -60,12 +60,14 @@
merge = require('deepmerge'); merge = require('deepmerge');
loadJSON = require('load-json-file').sync;
if (!fs.existsSync('./config')) { if (!fs.existsSync('./config')) {
fs.mkdirSync('./config'); fs.mkdirSync('./config');
} }
try { try {
oldconfig = require('./config.user.json'); oldconfig = loadJSON('./config.user.json');
if (oldconfig.tips) { if (oldconfig.tips) {
oldtips = {}; oldtips = {};
oldtips.file = './config/tips.json'; oldtips.file = './config/tips.json';
...@@ -115,7 +117,7 @@ ...@@ -115,7 +117,7 @@
fs.renameSync('./config.user.json', './config.user.bak'); fs.renameSync('./config.user.json', './config.user.bak');
} catch (error1) { } catch (error1) {
e = error1; e = error1;
if (e.code !== 'MODULE_NOT_FOUND') { if (e.code !== 'ENOENT') {
log.info(e); log.info(e);
} }
} }
...@@ -144,10 +146,10 @@ ...@@ -144,10 +146,10 @@
setting_save(settings); setting_save(settings);
}; };
default_config = require('./data/default_config.json'); default_config = loadJSON('./data/default_config.json');
try { try {
config = require('./config/config.json'); config = loadJSON('./config/config.json');
} catch (error1) { } catch (error1) {
config = {}; config = {};
} }
...@@ -158,38 +160,38 @@ ...@@ -158,38 +160,38 @@
} }
}); });
default_data = require('./data/default_data.json'); default_data = loadJSON('./data/default_data.json');
try { try {
tips = require('./config/tips.json'); tips = loadJSON('./config/tips.json');
} catch (error1) { } catch (error1) {
tips = default_data.tips; tips = default_data.tips;
setting_save(tips); setting_save(tips);
} }
try { try {
dialogues = require('./config/dialogues.json'); dialogues = loadJSON('./config/dialogues.json');
} catch (error1) { } catch (error1) {
dialogues = default_data.dialogues; dialogues = default_data.dialogues;
setting_save(dialogues); setting_save(dialogues);
} }
try { try {
badwords = require('./config/badwords.json'); badwords = loadJSON('./config/badwords.json');
} catch (error1) { } catch (error1) {
badwords = default_data.badwords; badwords = default_data.badwords;
setting_save(badwords); setting_save(badwords);
} }
try { try {
duel_log = require('./config/duel_log.json'); duel_log = loadJSON('./config/duel_log.json');
} catch (error1) { } catch (error1) {
duel_log = default_data.duel_log; duel_log = default_data.duel_log;
setting_save(duel_log); setting_save(duel_log);
} }
try { try {
chat_color = require('./config/chat_color.json'); chat_color = loadJSON('./config/chat_color.json');
} catch (error1) { } catch (error1) {
chat_color = default_data.chat_color; chat_color = default_data.chat_color;
setting_save(chat_color); setting_save(chat_color);
...@@ -234,7 +236,7 @@ ...@@ -234,7 +236,7 @@
} }
if (settings.modules.windbot.enabled) { if (settings.modules.windbot.enabled) {
windbots = require(settings.modules.windbot.botlist).windbots; windbots = loadJSON(settings.modules.windbot.botlist).windbots;
} }
ygopro = require('./ygopro.js'); ygopro = require('./ygopro.js');
...@@ -1689,6 +1691,9 @@ ...@@ -1689,6 +1691,9 @@
} }
val = buffer.readInt32LE(2); val = buffer.readInt32LE(2);
room.dueling_players[pos].lp -= val; room.dueling_players[pos].lp -= val;
if (room.dueling_players[pos].lp < 0) {
room.dueling_players[pos].lp = 0;
}
if ((0 < (ref = room.dueling_players[pos].lp) && ref <= 100)) { if ((0 < (ref = room.dueling_players[pos].lp) && ref <= 100)) {
ygopro.stoc_send_chat_to_room(room, "${lp_low_opponent}", ygopro.constants.COLORS.PINK); ygopro.stoc_send_chat_to_room(room, "${lp_low_opponent}", ygopro.constants.COLORS.PINK);
} }
...@@ -1725,6 +1730,9 @@ ...@@ -1725,6 +1730,9 @@
} }
val = buffer.readInt32LE(2); val = buffer.readInt32LE(2);
room.dueling_players[pos].lp -= val; room.dueling_players[pos].lp -= val;
if (room.dueling_players[pos].lp < 0) {
room.dueling_players[pos].lp = 0;
}
if ((0 < (ref1 = room.dueling_players[pos].lp) && ref1 <= 100)) { if ((0 < (ref1 = room.dueling_players[pos].lp) && ref1 <= 100)) {
ygopro.stoc_send_chat_to_room(room, "${lp_low_self}", ygopro.constants.COLORS.PINK); ygopro.stoc_send_chat_to_room(room, "${lp_low_self}", ygopro.constants.COLORS.PINK);
} }
...@@ -2401,15 +2409,12 @@ ...@@ -2401,15 +2409,12 @@
} }
if (room.started && room.turn > 0 && !room.dueling_players[0].is_first) { if (room.started && room.turn > 0 && !room.dueling_players[0].is_first) {
if (room.hostinfo.mode === 2) { if (room.hostinfo.mode === 2) {
if (pid === 0) { pid = {
pid = 2; 0: 2,
} else if (pid = 1) { 1: 3,
pid = 3; 2: 0,
} else if (pid = 2) { 3: 1
pid = 0; }[pid];
} else if (pid = 3) {
pid = 1;
}
} else { } else {
pid = 1 - pid; pid = 1 - pid;
} }
......
...@@ -14,8 +14,9 @@ var formidable = require('formidable'); ...@@ -14,8 +14,9 @@ var formidable = require('formidable');
var _ = require('underscore'); var _ = require('underscore');
_.str = require('underscore.string'); _.str = require('underscore.string');
_.mixin(_.str.exports()); _.mixin(_.str.exports());
var loadJSON = require('load-json-file').sync;
var settings = require('./config/config.json'); var settings = loadJSON('./config/config.json');
config=settings.modules.tournament_mode; config=settings.modules.tournament_mode;
//http长连接 //http长连接
......
...@@ -16,10 +16,11 @@ var spawnSync = require('child_process').spawnSync; ...@@ -16,10 +16,11 @@ var spawnSync = require('child_process').spawnSync;
var url = require('url'); var url = require('url');
var moment = require('moment'); var moment = require('moment');
moment.locale('zh-cn'); moment.locale('zh-cn');
var loadJSON = require('load-json-file').sync;
var constants = require('./data/constants.json'); var constants = loadJSON('./data/constants.json');
var settings = require('./config/config.json'); var settings = loadJSON('./config/config.json');
config=settings.modules.update_util; config=settings.modules.update_util;
//全卡名称列表 //全卡名称列表
......
...@@ -3,14 +3,15 @@ _.str = require 'underscore.string' ...@@ -3,14 +3,15 @@ _.str = require 'underscore.string'
_.mixin(_.str.exports()) _.mixin(_.str.exports())
Struct = require('./struct.js').Struct Struct = require('./struct.js').Struct
loadJSON = require('load-json-file').sync
i18ns = require './data/i18n.json' i18ns = loadJSON './data/i18n.json'
#常量/类型声明 #常量/类型声明
structs_declaration = require './data/structs.json' #结构体声明 structs_declaration = loadJSON './data/structs.json' #结构体声明
typedefs = require './data/typedefs.json' #类型声明 typedefs = loadJSON './data/typedefs.json' #类型声明
@proto_structs = require './data/proto_structs.json' #消息与结构体的对应,未完成,对着duelclient.cpp加 @proto_structs = loadJSON './data/proto_structs.json' #消息与结构体的对应,未完成,对着duelclient.cpp加
@constants = require './data/constants.json' #network.h里定义的常量 @constants = loadJSON './data/constants.json' #network.h里定义的常量
#结构体定义 #结构体定义
@structs = {} @structs = {}
......
// Generated by CoffeeScript 1.12.7 // Generated by CoffeeScript 1.12.7
(function() { (function() {
var Struct, _, declaration, field, i, i18ns, len, name, result, structs_declaration, type, typedefs; var Struct, _, declaration, field, i, i18ns, len, loadJSON, name, result, structs_declaration, type, typedefs;
_ = require('underscore'); _ = require('underscore');
...@@ -10,15 +10,17 @@ ...@@ -10,15 +10,17 @@
Struct = require('./struct.js').Struct; Struct = require('./struct.js').Struct;
i18ns = require('./data/i18n.json'); loadJSON = require('load-json-file').sync;
structs_declaration = require('./data/structs.json'); i18ns = loadJSON('./data/i18n.json');
typedefs = require('./data/typedefs.json'); structs_declaration = loadJSON('./data/structs.json');
this.proto_structs = require('./data/proto_structs.json'); typedefs = loadJSON('./data/typedefs.json');
this.constants = require('./data/constants.json'); this.proto_structs = loadJSON('./data/proto_structs.json');
this.constants = loadJSON('./data/constants.json');
this.structs = {}; this.structs = {};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment