forked from mirrors/webxoss-core
340 lines
8.6 KiB
HTML
340 lines
8.6 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>Server</title>
|
|
<script>
|
|
var global = window;
|
|
// 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()
|
|
}
|
|
</script>
|
|
<script src="util.js"></script>
|
|
<script src="random.min.js"></script>
|
|
<script src="Callback.js"></script>
|
|
<script src="Game.js"></script>
|
|
<script src="Phase.js"></script>
|
|
<script src="IO.js"></script>
|
|
<script src="Player.js"></script>
|
|
<script src="Card.js"></script>
|
|
<script src="Zone.js"></script>
|
|
<script src="CardInfo.js"></script>
|
|
<script src="Timming.js"></script>
|
|
<script src="Mask.js"></script>
|
|
<script src="ConstEffect.js"></script>
|
|
<script src="ConstEffectManager.js"></script>
|
|
<script src="Effect.js"></script>
|
|
<script src="EffectManager.js"></script>
|
|
<script src="FakeSocket.js"></script>
|
|
<script src="Client.js"></script>
|
|
<script src="Room.js"></script>
|
|
<script src="RoomManager.js"></script>
|
|
<script src="test.js"></script>
|
|
<script src="testHelper.js"></script>
|
|
</head>
|
|
|
|
<body>
|
|
<div class="flex">
|
|
<div class="helper">
|
|
<div class="flex row">
|
|
<div>
|
|
<span> p1 </span>
|
|
<select id="host-decks"></select>
|
|
</div>
|
|
<div>
|
|
<span> p2 </span>
|
|
<select id="guest-decks"></select>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<button id="oben" onclick="startBattle();">oben!</button>
|
|
<button onclick="grow();">grow!</button>
|
|
<button onclick="draw()">draw</button>
|
|
<button onclick="charge();">ener charge</button>
|
|
</div>
|
|
<div class="flex row">
|
|
<div>
|
|
<span>add</span>
|
|
<input id="card-name" class="card-name" type="text" placeholder="wx15-001" />
|
|
</div>
|
|
<div>
|
|
<span>to</span>
|
|
<select id="target-player" class="target-player">
|
|
<option value="">turn player's</option>
|
|
<option value="opponent">opponent's</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<button onclick="addTo('handZone');">hand</button>
|
|
<button onclick="addTo('lifeClothZone');">life cloth</button>
|
|
<button onclick="addTo('enerZone');">ener zone</button>
|
|
<button onclick="addTo('trashZone');">trash zone</button>
|
|
</div>
|
|
<div>
|
|
<button onclick="resetLrigDeck();">reset lrig deck</button>
|
|
</div>
|
|
<div class="flex-center">
|
|
<textarea id="log" readonly="readonly"></textarea>
|
|
</div>
|
|
<div class="language">
|
|
<span>Language:</span>
|
|
<select id="select-language" onchange="changeLanguage();">
|
|
<option value="en">English</option>
|
|
<option value="zh_CN">简体中文</option>
|
|
<option value="zh_TW">繁體中文</option>
|
|
<option value="jp">日本語</option>
|
|
<option value="ko">한국어</option>
|
|
<option value="ru">русский</option>
|
|
<option value="it">Italiano</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<iframe id="deck-editor" src="./webxoss-client/DeckEditor/" scrolling="no" frameborder="no" border="0"></iframe>
|
|
</div>
|
|
</body>
|
|
<style type="text/css">
|
|
.flex {
|
|
display: flex;
|
|
}
|
|
.helper {
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
.helper>div {
|
|
padding: 0.5em;
|
|
}
|
|
.row>div {
|
|
flex: 1;
|
|
}
|
|
.row>div>span {
|
|
margin-right: 1em;
|
|
}
|
|
.card-name {
|
|
border: none;
|
|
border-bottom: 1px solid #000;
|
|
text-align: center;
|
|
width: 6em;
|
|
}
|
|
.target-player {
|
|
appearance: none;
|
|
-moz-appearance: none;
|
|
/* Firefox */
|
|
-webkit-appearance: none;
|
|
/* Safari 和 Chrome */
|
|
border: none;
|
|
width: 7em;
|
|
}
|
|
.flex-center {
|
|
display: flex;
|
|
flex: 1;
|
|
justify-content: center;
|
|
}
|
|
.language {
|
|
text-align: right;
|
|
}
|
|
|
|
textarea {
|
|
resize: none;
|
|
height: auto;
|
|
width: 100%;
|
|
}
|
|
|
|
button {
|
|
padding: .5em 1em;
|
|
color: #fff;
|
|
border: 1px solid #999;
|
|
border: transparent;
|
|
background-color: #0078e7;
|
|
text-decoration: none;
|
|
border-radius: 2px;
|
|
display: inline-block;
|
|
zoom: 1;
|
|
white-space: nowrap;
|
|
vertical-align: middle;
|
|
text-align: center;
|
|
cursor: pointer;
|
|
}
|
|
button:disabled,
|
|
button[disabled] {
|
|
border: none;
|
|
opacity: .4;
|
|
cursor: not-allowed;
|
|
}
|
|
body {
|
|
font-family: PingFangSC-Regular, 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Microsoft Yahei', sans-serif;
|
|
}
|
|
</style>
|
|
|
|
</html>
|