diff --git a/Player.js b/Player.js
index 6a9c890..99167e8 100644
--- a/Player.js
+++ b/Player.js
@@ -2274,46 +2274,6 @@ Player.prototype.setCoin = function(count) {
}
};
-// For test:
-Player.prototype.matchCard = function (arg) {
- var cid = 0;
- for (var i = 0; i < this.game.cards.length; i++) {
- var card = this.game.cards[i];
- var info = CardInfo[card.cid];
- var matched = info.name === arg ||
- info.name_zh_CN === arg ||
- info.cid === arg ||
- info.wxid === arg;
- if (matched) {
- cid = card.cid;
- break;
- }
- }
- if (!cid) return null;
- var cards = concat(this.mainDeck.cards,this.trashZone.cards,this.enerZone.cards,this.lifeClothZone.cards);
- for (var i = 0; i < cards.length; i++) {
- var card = cards[i];
- if (card.cid === cid) {
- return card;
- }
- }
- return null;
-};
-
-Player.prototype.getCard = function (arg) {
- var card = this.matchCard(arg);
- if (!card) return null;
- card.moveTo(this.handZone);
- return card;
-};
-
-Player.prototype.putCardToLifeCloth = function (arg) {
- var card = this.matchCard(arg);
- if (!card) return null;
- card.moveTo(this.lifeClothZone);
- return card;
-};
-
Player.prototype.getInfectedZones = function() {
return this.signiZones.filter(function (zone) {
return zone.virus;
diff --git a/dango.js b/dango.js
new file mode 100644
index 0000000..9725ab3
--- /dev/null
+++ b/dango.js
@@ -0,0 +1,173 @@
+// function require (file) {
+// return window[file.replace(/^\.[\/\\]/,'').replace(/.js$/,'')];
+// }
+function handleCardInfo() {
+ // var defaultValueMap = {
+ // "rarity": "LR",
+ // "cardType": "SIGNI",
+ // "color": "white",
+ // "level": 0,
+ // "limit": 0,
+ // "power": 0,
+ // "limiting": "",
+ // "classes": [],
+ // "costWhite": 0,
+ // "costBlack": 0,
+ // "costRed": 0,
+ // "costBlue": 0,
+ // "costGreen": 0,
+ // "costColorless": 0,
+ // "guardFlag": false,
+ // "multiEner": false,
+ // };
+ for (var x in CardInfo) {
+ var info = CardInfo[x];
+ delete info.timestamp;
+ delete info.kana;
+ delete info.imgUrl;
+ delete info.cardText;
+ delete info.cardText_zh_CN;
+ delete info.cardText_en;
+ delete info.constEffects;
+ delete info.actionEffects;
+ delete info.startUpEffects;
+ delete info.spellEffect;
+ delete info.artsEffect;
+ delete info.burstEffect
+ delete info.faqs;
+ delete info.cardSkills;
+ delete info.growCondition;
+ delete info.useCondition;
+ delete info.costChange;
+ delete info.costChangeBeforeUseAsyn;
+ delete info.resonaPhase;
+ delete info.resonaCondition;
+ delete info.resonaAsyn;
+ delete info.encore;
+ delete info.bettedCost;
+ if (info.rise) info.rise = true;
+ // for (var key in defaultValueMap) {
+ // if (info[key] === defaultValueMap[key]) {
+ // delete info[key];
+ // }
+ // }
+ }
+ // var textarea = document.createElement('textarea');
+ // textarea.value = JSON.stringify(CardInfo);
+ // document.body.appendChild(textarea);
+ // textarea.select();
+}
+
+function handleCardInfo_ko(min, max) {
+ var props = [
+ "name",
+ "actionEffectTexts",
+ "constEffectTexts",
+ "startUpEffectTexts",
+ "spellEffectTexts",
+ "artsEffectTexts",
+ "burstEffectTexts",
+ "attachedEffectTexts",
+ "extraTexts",
+ ];
+ var suffix = [
+ "",
+ "_zh_CN",
+ "_en"
+ ]
+ var arr = [];
+ for (var x in CardInfo) {
+ // if (x <= 1762) continue;
+ if (x < min || x > max) continue;
+ var info = CardInfo[x];
+ var obj = {
+ pid: info.pid,
+ wxid: info.wxid,
+ };
+ props.forEach(function(rawprop) {
+ // suffix.forEach(function (suf) {
+ // var prop = rawprop + suf;
+ // if (!info[prop]) return;
+ // obj[prop] = info[prop];
+ // });
+ obj[rawprop + "_ko"] = info[rawprop + "_en"];
+ });
+ arr.push(obj);
+ }
+ down(arr, `${min}-${max}.json`)
+}
+
+function fetchAndHandleRuJson(url) {
+ let CardInfo_ru = {};
+ fetch(url).then(res => res.json()).then(arr => {
+ arr.forEach(info => {
+ let info_ru = {};
+ for (let prop in info) {
+ if (!prop.match(/_ru$/)) continue;
+ info_ru[prop] = info[prop];
+ }
+ CardInfo_ru[info.pid] = info_ru;
+ });
+ window.ru = JSON.stringify(CardInfo_ru);
+ });
+}
+
+function getPrCards() {
+ let ids = [];
+ for (let pid in CardInfo) {
+ let card = CardInfo[pid];
+ let id = +card.wxid.replace('PR-', '');
+ if (id) ids.push(id);
+ }
+ ids.sort((a, b) => a - b);
+ let ranges = [];
+ let start = ids[0];
+ let end = ids[0];
+ ids.slice(1).concat(0).forEach(id => {
+ if ((id - end) === 1) {
+ end = id;
+ } else {
+ let range = `${('000'+start).slice(-3)}-${('000'+end).slice(-3)}`;
+ if (start === end) range = ('000' + start).slice(-3);
+ ranges.push(range);
+ start = end = id;
+ }
+ })
+ return ranges;
+}
+
+function getUntestedPr() {
+ let ids = [];
+ for (let pid in CardInfo) {
+ if (pid <= 1762) continue;
+ let card = CardInfo[pid];
+ if (card.pid !== card.cid) continue;
+ if (/^PR-/.test(card.wxid)) ids.push(card.wxid);
+ }
+ return ids;
+}
+
+function getNewCardNames() {
+ let names = [];
+ for (let pid in CardInfo) {
+ if (pid <= 1762) continue;
+ let card = CardInfo[pid];
+ if (card.pid !== card.cid) continue;
+ names.push(card.name_zh_CN);
+ }
+ return names;
+}
+
+function down(content, filename = 'down.txt') {
+ if (typeof content === 'object') {
+ content = JSON.stringify(content, null, ' ')
+ }
+ let blob = new Blob([content], {
+ type: 'application/octet-stream'
+ })
+ let url = URL.createObjectURL(blob)
+ let link = document.createElement('a')
+ link.href = url
+ link.download = filename
+ link.click()
+}
diff --git a/index.html b/index.html
index 54cc546..7013eda 100644
--- a/index.html
+++ b/index.html
@@ -6,179 +6,6 @@
Server
@@ -200,8 +27,8 @@
-
+
diff --git a/test.html b/test.html
deleted file mode 100644
index 1e36c0c..0000000
--- a/test.html
+++ /dev/null
@@ -1,200 +0,0 @@
-
-
-
-
-Server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/test.js b/test.js
index a409a07..7bf6ef5 100644
--- a/test.js
+++ b/test.js
@@ -1,192 +1,167 @@
'use strict';
-if (!global.window) {
- global.Random = require("random-js");
- require("./util.js");
- require("./Callback.js");
- require("./Game.js");
- require("./Phase.js");
- require("./IO.js");
- require("./Player.js");
- require("./Card.js");
- require("./Zone.js");
- require("./CardInfo.js");
- require("./Timming.js");
- require("./Mask.js");
- require("./ConstEffect.js");
- require("./ConstEffectManager.js");
- require("./Effect.js");
- require("./EffectManager.js");
- require("./Client.js");
- require("./Room.js");
- require("./RoomManager.js");
-}
+// node env only
-var io;
-if (global.window) {
- io = {
- on: function (name,handler) {
- io._handler = handler;
- },
- use: function () {}
- };
- global.window.newClient = function () {
- var win = window.open('./webxoss-client/?local=true');
- win.addEventListener('load',function () {
- var socket = new FakeSocket(win);
- win.addEventListener('unload',function () {
- socket._doEmit('disconnect');
- });
- win.document.title = 'Client' + socket.id;
- io._handler(socket);
- });
- }
-} else {
- var noStaticServe = process.argv.slice(2).some(function (arg) {
- return arg === 'no-static-server';
- });
- // static server
- if (!noStaticServe) {
- var express = require('express');
- var compression = require('compression');
- var app = express();
- var server = require('http').Server(app);
- app.use(compression());
- app.use('/background',express.static(__dirname + '/webxoss-client/images',{
- maxAge: '2h'
- }));
- app.use('/images',express.static(__dirname + '/webxoss-client/images',{
- maxAge: '30d'
- }));
- app.use(express.static(__dirname + '/webxoss-client'));
- var port = 80;
- process.argv.slice(2).forEach(function (arg) {
- var match = arg.match(/^port=(\d+)/)
- if (match) {
- port = +match[1];
- }
- });
- server.listen(port);
- }
- // game server
- var getArg = function (key) {
- var value = '';
- process.argv.slice(2).forEach(function (arg) {
- if (arg.indexOf(key + '=') === 0) {
- value = arg.replace(key + '=', '');
- }
- });
- return value;
- };
- var gameServer
- if (getArg('key')) {
- var fs = require('fs');
- gameServer = require('https').createServer({
- key: fs.readFileSync(getArg('key')),
- cert: fs.readFileSync(getArg('cert')),
- ca: fs.readFileSync(getArg('ca')),
- });
- } else {
- gameServer = require('http').createServer();
- }
- io = require('socket.io')(gameServer,{
- pingTimeout: 30000,
- maxHttpBufferSize: 1024*1024,
- });
- gameServer.listen(2015);
+global.Random = require("random-js");
+require("./util.js");
+require("./Callback.js");
+require("./Game.js");
+require("./Phase.js");
+require("./IO.js");
+require("./Player.js");
+require("./Card.js");
+require("./Zone.js");
+require("./CardInfo.js");
+require("./Timming.js");
+require("./Mask.js");
+require("./ConstEffect.js");
+require("./ConstEffectManager.js");
+require("./Effect.js");
+require("./EffectManager.js");
+require("./Client.js");
+require("./Room.js");
+require("./RoomManager.js");
+
+var noStaticServe = process.argv.slice(2).some(function(arg) {
+ return arg === 'no-static-server';
+});
+// static server
+if (!noStaticServe) {
+ var express = require('express');
+ var compression = require('compression');
+ var app = express();
+ var server = require('http').Server(app);
+ app.use(compression());
+ app.use('/background', express.static(__dirname + '/webxoss-client/images', {
+ maxAge: '2h'
+ }));
+ app.use('/images', express.static(__dirname + '/webxoss-client/images', {
+ maxAge: '30d'
+ }));
+ app.use(express.static(__dirname + '/webxoss-client'));
+ var port = 80;
+ process.argv.slice(2).forEach(function(arg) {
+ var match = arg.match(/^port=(\d+)/)
+ if (match) {
+ port = +match[1];
+ }
+ });
+ server.listen(port);
+ console.log('server listen on 127.0.0.1:' + port);
}
+// game server
+var getArg = function(key) {
+ var value = '';
+ process.argv.slice(2).forEach(function(arg) {
+ if (arg.indexOf(key + '=') === 0) {
+ value = arg.replace(key + '=', '');
+ }
+ });
+ return value;
+};
+var gameServer
+if (getArg('key')) {
+ var fs = require('fs');
+ gameServer = require('https').createServer({
+ key: fs.readFileSync(getArg('key')),
+ cert: fs.readFileSync(getArg('cert')),
+ ca: fs.readFileSync(getArg('ca')),
+ });
+} else {
+ gameServer = require('http').createServer();
+}
+var io = require('socket.io')(gameServer, {
+ pingTimeout: 30000,
+ maxHttpBufferSize: 1024 * 1024,
+});
+gameServer.listen(2015);
var cfg = {
- MAX_ROOMS: 100,
- MAX_CLIENTS: 500,
- MAX_ROOM_NAME_LENGTH: 15,
- MAX_NICKNAME_LENGTH: 10,
- MAX_PASSWORD_LENGTH: 15
+ MAX_ROOMS: 100,
+ MAX_CLIENTS: 500,
+ MAX_ROOM_NAME_LENGTH: 15,
+ MAX_NICKNAME_LENGTH: 10,
+ MAX_PASSWORD_LENGTH: 15
};
var roomManager = new RoomManager(cfg);
var MAX_SOCKETS = 500;
// var MAX_SOCKETS_PER_IP = 50;
// var ipTable = {};
-function getSocketCount () {
- if (!io.sockets) return 0;
- return Object.keys(io.sockets.connected).length;
+function getSocketCount() {
+ if (!io.sockets) return 0;
+ return Object.keys(io.sockets.connected).length;
}
-io.use(function (socket,next) {
- if (getSocketCount() >= MAX_SOCKETS) {
- next(new Error('MAX_SOCKETS'));
- return;
- }
- // var handshake = socket.request;
- // var ip = handshake.connection.remoteAddress;
- // if (!ip) {
- // next();
- // return;
- // }
- // if (ip in ipTable) {
- // if (ipTable[ip] >= MAX_SOCKETS_PER_IP) {
- // console.log('MAX_SOCKETS_PER_IP: %s',ip);
- // next(new Error('MAX_SOCKETS_PER_IP'));
- // return;
- // } else {
- // ipTable[ip]++;
- // }
- // } else {
- // ipTable[ip] = 1;
- // }
- // socket.on('disconnect',function () {
- // console.log('disconnect: %s, count: %s',ip,getSocketCount());
- // if (ip in ipTable) {
- // if (ipTable[ip] <= 1) {
- // delete ipTable[ip];
- // } else {
- // ipTable[ip]--;
- // }
- // }
- // });
- next();
+io.use(function(socket, next) {
+ if (getSocketCount() >= MAX_SOCKETS) {
+ next(new Error('MAX_SOCKETS'));
+ return;
+ }
+ // var handshake = socket.request;
+ // var ip = handshake.connection.remoteAddress;
+ // if (!ip) {
+ // next();
+ // return;
+ // }
+ // if (ip in ipTable) {
+ // if (ipTable[ip] >= MAX_SOCKETS_PER_IP) {
+ // console.log('MAX_SOCKETS_PER_IP: %s',ip);
+ // next(new Error('MAX_SOCKETS_PER_IP'));
+ // return;
+ // } else {
+ // ipTable[ip]++;
+ // }
+ // } else {
+ // ipTable[ip] = 1;
+ // }
+ // socket.on('disconnect',function () {
+ // console.log('disconnect: %s, count: %s',ip,getSocketCount());
+ // if (ip in ipTable) {
+ // if (ipTable[ip] <= 1) {
+ // delete ipTable[ip];
+ // } else {
+ // ipTable[ip]--;
+ // }
+ // }
+ // });
+ next();
});
-io.on('connect',function (socket) {
- if (global.window) {
- return roomManager.createClient(socket);
- }
- var req = socket.request;
- if (req.connection.destroyed) {
- console.log('req.connection.destroyed');
- return;
- }
- var query = require('url').parse(req.url,true).query;
- // console.log('connect: %s, count: %s',req.connection.remoteAddress,getSocketCount());
- // console.log(query.clientId);
- roomManager.createClient(socket,+query.clientId);
+io.on('connect', function(socket) {
+ var req = socket.request;
+ if (req.connection.destroyed) {
+ console.log('req.connection.destroyed');
+ return;
+ }
+ var query = require('url').parse(req.url, true).query;
+ // console.log('connect: %s, count: %s',req.connection.remoteAddress,getSocketCount());
+ // console.log(query.clientId);
+ roomManager.createClient(socket, +query.clientId);
- // test
- // socket.on('force disconnect',function () {
- // socket.disconnect();
- // });
+ // test
+ // socket.on('force disconnect',function () {
+ // socket.disconnect();
+ // });
- // for debug
- if (typeof process === 'undefined') return;
- var password = '';
- process.argv.slice(2).forEach(function (arg) {
- var match = arg.match(/^debug_password=(\S+)/)
- if (match) {
- password = match[1];
- }
- });
- if (!password) return;
- socket.on('debug',function (psw) {
- if (psw !== password) return;
- try {
- var path = require('path');
- var filePath = './debug.js';
- delete require.cache[path.resolve(filePath)];
- require(filePath);
- } catch (e) {
- console.log(e);
- }
- });
+ // for debug
+ if (typeof process === 'undefined') return;
+ var password = '';
+ process.argv.slice(2).forEach(function(arg) {
+ var match = arg.match(/^debug_password=(\S+)/)
+ if (match) {
+ password = match[1];
+ }
+ });
+ if (!password) return;
+ socket.on('debug', function(psw) {
+ if (psw !== password) return;
+ try {
+ var path = require('path');
+ var filePath = './debug.js';
+ delete require.cache[path.resolve(filePath)];
+ require(filePath);
+ } catch (e) {
+ console.log(e);
+ }
+ });
});
-if (!global.window) {
- exports.roomManager = roomManager;
-}
\ No newline at end of file
+exports.roomManager = roomManager;
diff --git a/testHelper.js b/testHelper.js
index c9b6c20..9c6e9e5 100644
--- a/testHelper.js
+++ b/testHelper.js
@@ -2,10 +2,39 @@
// browser only
-var $ = document.getElementById.bind(document);
+// server
+var io = {
+ on: function (name,handler) {
+ io._handler = handler;
+ },
+ use: function () {}
+};
+var cfg = {
+ MAX_ROOMS: 100,
+ MAX_CLIENTS: 500,
+ MAX_ROOM_NAME_LENGTH: 15,
+ MAX_NICKNAME_LENGTH: 10,
+ MAX_PASSWORD_LENGTH: 15
+};
+var roomManager = new RoomManager(cfg);
+var MAX_SOCKETS = 500;
+function getSocketCount () {
+ if (!io.sockets) return 0;
+ return Object.keys(io.sockets.connected).length;
+}
+io.use(function (socket,next) {
+ if (getSocketCount() >= MAX_SOCKETS) {
+ next(new Error('MAX_SOCKETS'));
+ return;
+ }
+ next();
+});
+io.on('connect',function (socket) {
+ return roomManager.createClient(socket);
+});
+// client
var noBGM = true;
-
function disableAudio(doc) {
// disable BGM
if (!noBGM) {
@@ -20,7 +49,6 @@ function disableAudio(doc) {
sound.click();
}
}
-
function initClient(win) {
var doc = win.document;
var socket = new FakeSocket(win);
@@ -58,7 +86,6 @@ function startBattle() {
initClient(win);
});
}
-
function oben() {
if (sockets.length !== 2) {
log('two client needed.');
@@ -100,7 +127,6 @@ function handleBattle() {
log('Handle game successfully.');
log('Now you can use helper function.');
}
-
function skipDiscards() {
Player.prototype.redrawAsyn = function() {
return new Callback.immediately();
@@ -176,13 +202,14 @@ function matchCard(arg) {
return null;
}
+var $ = document.getElementById.bind(document);
+
var zones = [
'handZone',
'enerZone',
'trashZone',
'lifeClothZone',
];
-
function addTo(zone) {
if (zones.indexOf(zone) === -1) {
log('no such zone: ' + zone);
@@ -202,7 +229,6 @@ function addTo(zone) {
log('card\'s wxid / pid / cid needed.');
}
}
-
function resetLrigDeck() {
var p = selectPlayer();
game.moveCards(p.lrigTrashZone.cards, p.lrigDeck);
@@ -258,7 +284,6 @@ function changeLanguage() {
log('set language to ' + lang + '.');
location.reload();
}
-
function handleDeckEditor() {
var iFrame = $('deck-editor');
@@ -277,7 +302,6 @@ function handleDeckEditor() {
}
});
}
-
function enableButtons() {
var buttons = document.getElementsByTagName('button');
for (var i = 0; i < buttons.length; i++) {
@@ -286,7 +310,6 @@ function enableButtons() {
}
}
}
-
function disableButtons() {
var buttons = document.getElementsByTagName('button');
for (var i = 0; i < buttons.length; i++) {
@@ -295,6 +318,7 @@ function disableButtons() {
}
}
}
+
window.onload = function() {
$('select-language').value = localStorage.getItem('language');
updateDeckSelect();