Merge pull request #1212 from nofficalfs/Dev-Pref-Format

(W.I.P)修复换行符,并且进行格式化
This commit is contained in:
Spmario233 2024-04-16 12:43:32 +08:00 committed by GitHub
commit 787f0500c0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
201 changed files with 428295 additions and 353160 deletions

View File

@ -31,4 +31,5 @@
- [ ] 如果此次PR涉及到新功能的添加我已在`PR描述`中写入详细文档
- [ ] 如果此次PR需要扩展跟进我已在`扩展适配`中写入详细文档
- [ ] 如果这个PR解决了一个issue我在`诱因和背景`中明确链接到该issue
- [ ] 我保证该PR中没有随意修改换行符等内容没有制造出大量的Diff
- [ ] 我保证该PR中没有随意修改换行符等内容没有制造出大量的Diff
- [ ] 我保证该PR遵循项目中`.editorconfig`、`.eslintrc.json`和`.prettierrc`所规定的代码样式,并且已经通过`prettier`格式化过代码

12
.prettierrc Normal file
View File

@ -0,0 +1,12 @@
{
"arrowParens": "always",
"bracketSpacing": true,
"endOfLine": "lf",
"printWidth": 110,
"proseWrap": "preserve",
"quoteProps": "as-needed",
"semi": true,
"tabWidth": 4,
"trailingComma": "es5",
"useTabs": true
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,290 +1,316 @@
import { lib, game, ui, get, ai, _status } from '../noname.js';
game.import('card', function () {
return {
name:'huanlekapai',
connect:true,
card:{
"monkey":{
audio:true,
fullskin:true,
type:"equip",
subtype:"equip5",
skills:["monkey"],
ai:{
basic:{
equipValue:8,
import { lib, game, ui, get, ai, _status } from "../noname.js";
game.import("card", function () {
return {
name: "huanlekapai",
connect: true,
card: {
monkey: {
audio: true,
fullskin: true,
type: "equip",
subtype: "equip5",
skills: ["monkey"],
ai: {
basic: {
equipValue: 8,
},
},
},
"mianju":{
audio:true,
fullskin:true,
type:"equip",
subtype:"equip2",
skills:["mianju"],
ai:{
order:9.5,
basic:{
equipValue:function (card,player){
if(!player.isTurnedOver()) return 6;
if(player.isTurnedOver()) return -10;
mianju: {
audio: true,
fullskin: true,
type: "equip",
subtype: "equip2",
skills: ["mianju"],
ai: {
order: 9.5,
basic: {
equipValue: function (card, player) {
if (!player.isTurnedOver()) return 6;
if (player.isTurnedOver()) return -10;
return 0;
},
},
},
},
"shoulijian":{
audio:true,
type:"basic",
enable:true,
fullskin:true,
outrange:{
global:2,
shoulijian: {
audio: true,
type: "basic",
enable: true,
fullskin: true,
outrange: {
global: 2,
},
filterTarget:lib.filter.notMe,
content:function (){
"step 0"
if(!target.countCards('he',{type:'equip'})){
filterTarget: lib.filter.notMe,
content: function () {
"step 0";
if (!target.countCards("he", { type: "equip" })) {
target.damage();
event.finish();
} else {
target.chooseToDiscard("he", { type: "equip" }, "弃置一张装备牌或受到1点伤害").ai =
function (card) {
var player = _status.event.player;
var source = _status.event.getParent().player;
if (get.damageEffect(player, source, player) > 0) return -1;
return 7 - get.value(card);
};
}
else{
target.chooseToDiscard('he',{type:'equip'},'弃置一张装备牌或受到1点伤害').ai=function(card){
var player=_status.event.player;
var source=_status.event.getParent().player;
if(get.damageEffect(player,source,player)>0) return -1;
return 7-get.value(card);
};
}
"step 1"
if(!result.bool){
"step 1";
if (!result.bool) {
target.damage();
}
},
ai:{
basic:{
order:9,
value:6,
useful:2,
ai: {
basic: {
order: 9,
value: 6,
useful: 2,
},
result:{
target:-2,
result: {
target: -2,
},
tag:{
discard:1,
damage:1,
tag: {
discard: 1,
damage: 1,
},
},
selectTarget:1,
selectTarget: 1,
},
"kuwu":{
audio:true,
fullskin:true,
type:"equip",
subtype:"equip1",
skills:["kuwu"],
nomod:true,
nopower:true,
unique:true,
distance:{
attackFrom:-1,
kuwu: {
audio: true,
fullskin: true,
type: "equip",
subtype: "equip1",
skills: ["kuwu"],
nomod: true,
nopower: true,
unique: true,
distance: {
attackFrom: -1,
},
ai:{
equipValue:6,
ai: {
equipValue: 6,
},
},
"xuelunyang":{
audio:true,
fullskin:true,
type:"equip",
subtype:"equip5",
skills:["xuelunyang"],
ai:{
basic:{
equipValue:8,
xuelunyang: {
audio: true,
fullskin: true,
type: "equip",
subtype: "equip5",
skills: ["xuelunyang"],
ai: {
basic: {
equipValue: 8,
},
},
},
"jiuwei":{
audio:true,
fullskin:true,
type:"equip",
subtype:"equip5",
skills:["jiuwei"],
ai:{
basic:{
equipValue:8,
jiuwei: {
audio: true,
fullskin: true,
type: "equip",
subtype: "equip5",
skills: ["jiuwei"],
ai: {
basic: {
equipValue: 8,
},
},
},
},
skill:{
"monkey":{
trigger:{
global:"useCardToBegin",
skill: {
monkey: {
trigger: {
global: "useCardToBegin",
},
audio:true,
filter:function (event,player){
var card=player.getEquip(5);
if(card){
var name=card.name;
if(name&&name.indexOf('monkey')!=-1&&event.name=='tao'&&event.player!=player&&event.cards.filterInD().length>0) return true;
audio: true,
filter: function (event, player) {
var card = player.getEquip(5);
if (card) {
var name = card.name;
if (
name &&
name.indexOf("monkey") != -1 &&
event.name == "tao" &&
event.player != player &&
event.cards.filterInD().length > 0
)
return true;
}
return false;
},
check:function (event,player){
return get.attitude(player,event.player)<=0;
check: function (event, player) {
return get.attitude(player, event.player) <= 0;
},
content:function (){
"step 0"
player.$fullscreenpop('猴子偷桃','fire');
content: function () {
"step 0";
player.$fullscreenpop("猴子偷桃", "fire");
trigger.untrigger();
trigger.finish();
"step 1"
"step 1";
player.discard(player.getEquip(5));
"step 2"
player.gain(trigger.cards.filterInD(),'gain2','log');
"step 2";
player.gain(trigger.cards.filterInD(), "gain2", "log");
},
},
"mianju":{
audio:true,
trigger:{
player:"turnOverBefore",
mianju: {
audio: true,
trigger: {
player: "turnOverBefore",
},
forced:true,
equipSkill:true,
content:function (){
forced: true,
equipSkill: true,
content: function () {
trigger.cancel();
},
ai:{
noturnOver:true,
effect:{
target:function (card,player,target,current){
if(get.tag(card,'turnOver')) return [0,0];
ai: {
noturnOver: true,
effect: {
target: function (card, player, target, current) {
if (get.tag(card, "turnOver")) return [0, 0];
},
},
},
},
"kuwu":{
audio:true,
trigger:{
source:"damageSource",
kuwu: {
audio: true,
trigger: {
source: "damageSource",
},
forced:true,
equipSkill:true,
filter:function (event,player){
if(event._notrigger.includes(event.player)) return false;
return event.card&&event.card.name=='sha'&&event.notLink()&&event.player.countCards('he')>0;
forced: true,
equipSkill: true,
filter: function (event, player) {
if (event._notrigger.includes(event.player)) return false;
return (
event.card &&
event.card.name == "sha" &&
event.notLink() &&
event.player.countCards("he") > 0
);
},
content:function (){
trigger.player.chooseToDiscard(true,'he');
content: function () {
trigger.player.chooseToDiscard(true, "he");
},
},
"xuelunyang":{
audio:true,
trigger:{
player:"phaseBegin",
xuelunyang: {
audio: true,
trigger: {
player: "phaseBegin",
},
equipSkill:true,
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt2('xuelunyang'),function(card,player,target){
var names=[];
if(target.name&&!target.isUnseen(0)) names.add(target.name);
if(target.name1&&!target.isUnseen(0)) names.add(target.name1);
if(target.name2&&!target.isUnseen(1)) names.add(target.name2);
var pss=player.getSkills();
for(var i=0;i<names.length;i++){
var info=lib.character[names[i]];
if(info){
var skills=info[3];
for(var j=0;j<skills.length;j++){
if(lib.translate[skills[j]+'_info']&&lib.skill[skills[j]]&&
!lib.skill[skills[j]].unique&&!pss.includes(skills[j])){
return true;
equipSkill: true,
direct: true,
content: function () {
"step 0";
player
.chooseTarget(get.prompt2("xuelunyang"), function (card, player, target) {
var names = [];
if (target.name && !target.isUnseen(0)) names.add(target.name);
if (target.name1 && !target.isUnseen(0)) names.add(target.name1);
if (target.name2 && !target.isUnseen(1)) names.add(target.name2);
var pss = player.getSkills();
for (var i = 0; i < names.length; i++) {
var info = lib.character[names[i]];
if (info) {
var skills = info[3];
for (var j = 0; j < skills.length; j++) {
if (
lib.translate[skills[j] + "_info"] &&
lib.skill[skills[j]] &&
!lib.skill[skills[j]].unique &&
!pss.includes(skills[j])
) {
return true;
}
}
}
return false;
}
return false;
}
}).set('ai',function(target){
return Math.random();
});
'step 1'
if(result.bool){
event.target=result.targets[0];
player.logSkill('xuelunyang',event.target);
}
else{
})
.set("ai", function (target) {
return Math.random();
});
"step 1";
if (result.bool) {
event.target = result.targets[0];
player.logSkill("xuelunyang", event.target);
} else {
event.finish();
}
'step 2'
var names=[];
var list=[];
if(target.name&&!target.isUnseen(0)) names.add(target.name);
if(target.name1&&!target.isUnseen(0)) names.add(target.name1);
if(target.name2&&!target.isUnseen(1)) names.add(target.name2);
var pss=player.getSkills();
for(var i=0;i<names.length;i++){
var info=lib.character[names[i]];
if(info){
var skills=info[3];
for(var j=0;j<skills.length;j++){
if(lib.translate[skills[j]+'_info']&&lib.skill[skills[j]]&&
!lib.skill[skills[j]].unique&&
!pss.includes(skills[j])){
"step 2";
var names = [];
var list = [];
if (target.name && !target.isUnseen(0)) names.add(target.name);
if (target.name1 && !target.isUnseen(0)) names.add(target.name1);
if (target.name2 && !target.isUnseen(1)) names.add(target.name2);
var pss = player.getSkills();
for (var i = 0; i < names.length; i++) {
var info = lib.character[names[i]];
if (info) {
var skills = info[3];
for (var j = 0; j < skills.length; j++) {
if (
lib.translate[skills[j] + "_info"] &&
lib.skill[skills[j]] &&
!lib.skill[skills[j]].unique &&
!pss.includes(skills[j])
) {
list.push(skills[j]);
}
}
}
}
player.chooseControl(list).set('prompt','选择获得一个技能').set('choice',get.max(list,get.skillRank,'item')).set('ai',function(){return _status.event.choice})
'step 3'
player
.chooseControl(list)
.set("prompt", "选择获得一个技能")
.set("choice", get.max(list, get.skillRank, "item"))
.set("ai", function () {
return _status.event.choice;
});
"step 3";
player.addTempSkill(result.control);
player.popup(result.control);
game.log(player,'获得了','#g【'+get.translation(result.control)+'】');
game.log(player, "获得了", "#g【" + get.translation(result.control) + "】");
},
},
"jiuwei":{
trigger:{
player:"phaseEnd",
jiuwei: {
trigger: {
player: "phaseEnd",
},
audio:true,
frequent:true,
equipSkill:true,
content:function (){
if(player.isDamaged()){
audio: true,
frequent: true,
equipSkill: true,
content: function () {
if (player.isDamaged()) {
player.recover();
}
else{
} else {
player.draw();
}
},
},
},
translate:{
"monkey":"猴子",
"monkey_info":"猴子偷桃:当场上有其他角色使用【桃】时,你可以弃掉【猴子】,阻止【桃】的结算并将其收为手牌。",
"mianju":"漩涡面具",
"mianju_info":"<font color=#f00>锁定技</font> 你的武将牌不能被翻面。",
"shoulijian":"手里剑",
"shoulijian_info":"出牌阶段对一名距离1以外的角色使用令其弃置一张装备牌或受到1点伤害。",
"kuwu":"苦无",
"kuwu_info":"<font color=#f00>锁定技</font> 每当你使用【杀】造成一次伤害,受伤角色须弃置一张牌。",
"xuelunyang":"写轮眼",
"xuelunyang_info":"回合开始阶段,你可以选择一名角色,然后获得其一项技能,直到回合结束。",
"jiuwei":"九尾",
"jiuwei_info":"收集查克拉回合结束时若你已受伤你可回复1点体力否则摸一张牌。",
translate: {
monkey: "猴子",
monkey_info:
"猴子偷桃:当场上有其他角色使用【桃】时,你可以弃掉【猴子】,阻止【桃】的结算并将其收为手牌。",
mianju: "漩涡面具",
mianju_info: "<font color=#f00>锁定技</font> 你的武将牌不能被翻面。",
shoulijian: "手里剑",
shoulijian_info: "出牌阶段对一名距离1以外的角色使用令其弃置一张装备牌或受到1点伤害。",
kuwu: "苦无",
kuwu_info: "<font color=#f00>锁定技</font> 每当你使用【杀】造成一次伤害,受伤角色须弃置一张牌。",
xuelunyang: "写轮眼",
xuelunyang_info: "回合开始阶段,你可以选择一名角色,然后获得其一项技能,直到回合结束。",
jiuwei: "九尾",
jiuwei_info: "收集查克拉回合结束时若你已受伤你可回复1点体力否则摸一张牌。",
},
list:[
["diamond","5","monkey"],
["heart","9","jiuwei"],
["heart","2","xuelunyang"],
["spade","6","kuwu"],
["diamond","4","shoulijian"],
["spade","4","shoulijian"],
["club","3","mianju"],
list: [
["diamond", "5", "monkey"],
["heart", "9", "jiuwei"],
["heart", "2", "xuelunyang"],
["spade", "6", "kuwu"],
["diamond", "4", "shoulijian"],
["spade", "4", "shoulijian"],
["club", "3", "mianju"],
],
}
};
});

File diff suppressed because it is too large Load Diff

1107
card/sp.js

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,396 +1,412 @@
import { lib, game, ui, get, ai, _status } from '../noname.js';
game.import('card', function () {
import { lib, game, ui, get, ai, _status } from "../noname.js";
game.import("card", function () {
return {
name:'zhenfa',
card:{
pozhenjue:{
type:'zhenfa',
recastable:true,
enable:true,
notarget:true,
content:function(){
var targets=game.filterPlayer();
var n=targets.length;
while(n--){
game.swapSeat(targets.randomGet(),targets.randomGet());
name: "zhenfa",
card: {
pozhenjue: {
type: "zhenfa",
recastable: true,
enable: true,
notarget: true,
content: function () {
var targets = game.filterPlayer();
var n = targets.length;
while (n--) {
game.swapSeat(targets.randomGet(), targets.randomGet());
}
},
mode:['guozhan'],
ai:{
order:8,
result:{
player:1,
mode: ["guozhan"],
ai: {
order: 8,
result: {
player: 1,
},
}
},
},
changshezhen:{
type:'zhenfa',
recastable:true,
enable:function(card,player){
if(player.inline()) return true;
if(player.identity=='unknown'||player.identity=='ye') return false;
return game.hasPlayer(function(current){
return current!=player&&current.isFriendOf(player);
changshezhen: {
type: "zhenfa",
recastable: true,
enable: function (card, player) {
if (player.inline()) return true;
if (player.identity == "unknown" || player.identity == "ye") return false;
return game.hasPlayer(function (current) {
return current != player && current.isFriendOf(player);
});
},
notarget:true,
content:function(){
if(player.inline()){
var targets=game.filterPlayer(function(current){
notarget: true,
content: function () {
if (player.inline()) {
var targets = game.filterPlayer(function (current) {
return player.inline(current);
});
player.line(targets);
game.asyncDraw(targets);
}
else if(player.getNext()){
var list=game.filterPlayer(function(current){
return current!=player&&current.isFriendOf(player);
} else if (player.getNext()) {
var list = game.filterPlayer(function (current) {
return current != player && current.isFriendOf(player);
});
if(list.length){
list.sort(function(a,b){
return get.distance(player,a,'absolute')-get.distance(player,b,'absolute');
if (list.length) {
list.sort(function (a, b) {
return (
get.distance(player, a, "absolute") - get.distance(player, b, "absolute")
);
});
player.line(list[0]);
game.swapSeat(list[0],player.getNext(),true,true);
game.swapSeat(list[0], player.getNext(), true, true);
}
}
},
mode:['guozhan'],
ai:{
order:6.5,
result:{
player:1,
mode: ["guozhan"],
ai: {
order: 6.5,
result: {
player: 1,
},
tag:{
draw:1
}
}
tag: {
draw: 1,
},
},
},
tianfuzhen:{
type:'zhenfa',
recastable:true,
enable:function(){
return game.hasPlayer(function(current){
tianfuzhen: {
type: "zhenfa",
recastable: true,
enable: function () {
return game.hasPlayer(function (current) {
return current.isMajor();
});
},
filterTarget:function(card,player,target){
return target.isMajor()&&target.countCards('he')>0;
filterTarget: function (card, player, target) {
return target.isMajor() && target.countCards("he") > 0;
},
selectTarget:-1,
content:function(){
target.chooseToDiscard('he',true).delay=false;
selectTarget: -1,
content: function () {
target.chooseToDiscard("he", true).delay = false;
},
mode:['guozhan'],
ai:{
order:7,
result:{
target:-1,
mode: ["guozhan"],
ai: {
order: 7,
result: {
target: -1,
},
tag:{
discard:1
}
}
tag: {
discard: 1,
},
},
},
dizaizhen:{
type:'zhenfa',
recastable:true,
enable:function(){
return game.hasPlayer(function(current){
dizaizhen: {
type: "zhenfa",
recastable: true,
enable: function () {
return game.hasPlayer(function (current) {
return current.isNotMajor();
});
},
filterTarget:function(card,player,target){
filterTarget: function (card, player, target) {
return target.isNotMajor();
},
selectTarget:-1,
content:function(){
selectTarget: -1,
content: function () {
target.draw(false);
target.$draw();
},
mode:['guozhan'],
ai:{
order:7,
result:{
target:1,
mode: ["guozhan"],
ai: {
order: 7,
result: {
target: 1,
},
tag:{
draw:1
}
}
tag: {
draw: 1,
},
},
},
fengyangzhen:{
type:'zhenfa',
recastable:true,
enable:true,
filterTarget:function(card,player,target){
fengyangzhen: {
type: "zhenfa",
recastable: true,
enable: true,
filterTarget: function (card, player, target) {
return target.sieged();
},
selectTarget:-1,
content:function(){
target.addTempSkill('feiying',{player:'damageAfter'});
target.popup('feiying');
game.log(target,'获得了技能','【飞影】');
selectTarget: -1,
content: function () {
target.addTempSkill("feiying", { player: "damageAfter" });
target.popup("feiying");
game.log(target, "获得了技能", "【飞影】");
},
mode:['guozhan'],
ai:{
order:7,
result:{
target:2,
mode: ["guozhan"],
ai: {
order: 7,
result: {
target: 2,
},
}
},
},
yunchuizhen:{
type:'zhenfa',
recastable:true,
enable:true,
filterTarget:function(card,player,target){
yunchuizhen: {
type: "zhenfa",
recastable: true,
enable: true,
filterTarget: function (card, player, target) {
return target.siege();
},
selectTarget:-1,
content:function(){
target.addTempSkill('wushuang',{source:'damageAfter'});
target.popup('wushuang');
game.log(target,'获得了技能','【无双】');
selectTarget: -1,
content: function () {
target.addTempSkill("wushuang", { source: "damageAfter" });
target.popup("wushuang");
game.log(target, "获得了技能", "【无双】");
},
mode:['guozhan'],
ai:{
order:7,
result:{
target:2,
mode: ["guozhan"],
ai: {
order: 7,
result: {
target: 2,
},
}
},
},
qixingzhen:{
type:'zhenfa',
recastable:true,
enable:function(card,player){
return player.siege()||player.sieged();
qixingzhen: {
type: "zhenfa",
recastable: true,
enable: function (card, player) {
return player.siege() || player.sieged();
},
filterTarget:function(card,player,target){
return target==player;
filterTarget: function (card, player, target) {
return target == player;
},
selectTarget:-1,
content:function(){
'step 0'
event.targets=game.filterPlayer(function(current){
selectTarget: -1,
content: function () {
"step 0";
event.targets = game.filterPlayer(function (current) {
return current.siege(player);
});
'step 1'
if(event.targets.length){
var current=event.targets.shift();
player.line(current,'green');
player.discardPlayerCard(current,true);
"step 1";
if (event.targets.length) {
var current = event.targets.shift();
player.line(current, "green");
player.discardPlayerCard(current, true);
event.redo();
}
'step 2'
var card={name:'sha',isCard:true};
var list=game.filterPlayer(function(current){
return current.siege(player)&&player.canUse(card,current);
"step 2";
var card = { name: "sha", isCard: true };
var list = game.filterPlayer(function (current) {
return current.siege(player) && player.canUse(card, current);
});
if(list.length){
player.useCard(card,list,false);
if (list.length) {
player.useCard(card, list, false);
}
},
mode:['guozhan'],
ai:{
order:7,
result:{
target:1,
mode: ["guozhan"],
ai: {
order: 7,
result: {
target: 1,
},
}
},
},
shepanzhen:{
type:'zhenfa',
recastable:true,
enable:function(card,player){
if(player.identity=='unknown'||player.identity=='ye') return false;
if(get.population(player.identity)<=1) return false;
return game.hasPlayer(function(current){
return current!=player&&current.identity==player.identity&&!player.inline(current);
shepanzhen: {
type: "zhenfa",
recastable: true,
enable: function (card, player) {
if (player.identity == "unknown" || player.identity == "ye") return false;
if (get.population(player.identity) <= 1) return false;
return game.hasPlayer(function (current) {
return (
current != player &&
current.identity == player.identity &&
!player.inline(current)
);
});
},
notarget:true,
content:function(){
var targets=game.filterPlayer(function(current){
return current.identity==player.identity;
notarget: true,
content: function () {
var targets = game.filterPlayer(function (current) {
return current.identity == player.identity;
});
targets.sortBySeat();
for(var i=1;i<targets.length;i++){
game.swapSeat(targets[i],targets[i-1].next,false);
for (var i = 1; i < targets.length; i++) {
game.swapSeat(targets[i], targets[i - 1].next, false);
}
game.log(get.translation(player.identity)+'势力角色摆成了蛇蟠阵')
game.log(get.translation(player.identity) + "势力角色摆成了蛇蟠阵");
},
mode:['guozhan'],
ai:{
order:7,
result:{
player:1,
mode: ["guozhan"],
ai: {
order: 7,
result: {
player: 1,
},
}
},
},
longfeizhen:{
type:'zhenfa',
recastable:true,
enable:function(card,player){
longfeizhen: {
type: "zhenfa",
recastable: true,
enable: function (card, player) {
return player.next.siege(player);
},
filterTarget:function(card,player,target){
if(target.getCards('he').length==0) return false;
return target==player.next||target==player.previous;
filterTarget: function (card, player, target) {
if (target.getCards("he").length == 0) return false;
return target == player.next || target == player.previous;
},
selectTarget:-1,
content:function(){
"step 0"
player.choosePlayerCard(target,'he',true);
"step 1"
selectTarget: -1,
content: function () {
"step 0";
player.choosePlayerCard(target, "he", true);
"step 1";
target.discard(result.buttons[0].link);
"step 2"
if(target==targets[targets.length-1]){
"step 2";
if (target == targets[targets.length - 1]) {
player.draw();
}
},
mode:['guozhan'],
ai:{
order:10,
result:{
target:-1,
player:1
mode: ["guozhan"],
ai: {
order: 10,
result: {
target: -1,
player: 1,
},
}
},
huyizhen:{
type:'zhenfa',
recastable:true,
enable:function(card,player){
return player.siege(player.next)||player.siege(player.previous);
},
filterTarget:function(card,player,target){
},
huyizhen: {
type: "zhenfa",
recastable: true,
enable: function (card, player) {
return player.siege(player.next) || player.siege(player.previous);
},
filterTarget: function (card, player, target) {
return player.siege(target);
},
selectTarget:-1,
content:function(){
"step 0"
player.chooseCard('将一张非基本牌当作杀对'+get.translation(target)+'使用','he',function(card){
return get.type(card)!='basic';
}).ai=function(card){
if(get.effect(target,{name:'sha'},player,player)>0){
return 6-get.value(card);
selectTarget: -1,
content: function () {
"step 0";
player.chooseCard(
"将一张非基本牌当作杀对" + get.translation(target) + "使用",
"he",
function (card) {
return get.type(card) != "basic";
}
).ai = function (card) {
if (get.effect(target, { name: "sha" }, player, player) > 0) {
return 6 - get.value(card);
}
return 0;
};
"step 1"
if(result.bool){
player.useCard({name:'sha'},result.cards,target,false);
"step 1";
if (result.bool) {
player.useCard({ name: "sha" }, result.cards, target, false);
}
"step 2"
if(target==player.next) event.player2=player.next.next;
else event.player2=player.previous.previous;
event.player2.chooseCard('将一张非基本牌当作杀对'+get.translation(target)+'使用','he',function(card){
return get.type(card)!='basic';
}).ai=function(card){
if(get.effect(target,{name:'sha'},event.player2,event.player2)>0){
return 6-get.value(card);
"step 2";
if (target == player.next) event.player2 = player.next.next;
else event.player2 = player.previous.previous;
event.player2.chooseCard(
"将一张非基本牌当作杀对" + get.translation(target) + "使用",
"he",
function (card) {
return get.type(card) != "basic";
}
).ai = function (card) {
if (get.effect(target, { name: "sha" }, event.player2, event.player2) > 0) {
return 6 - get.value(card);
}
return 0;
};
"step 3"
if(result.bool){
event.player2.useCard({name:'sha'},result.cards,target,false);
"step 3";
if (result.bool) {
event.player2.useCard({ name: "sha" }, result.cards, target, false);
}
},
mode:['guozhan'],
ai:{
order:7,
result:{
target:-2,
mode: ["guozhan"],
ai: {
order: 7,
result: {
target: -2,
},
}
},
niaoxiangzhen:{
type:'zhenfa',
recastable:true,
enable:true,
filterTarget:function(card,player,target){
if(player.identity==target.identity) return false;
if(target.identity=='unknown'||target.identity=='ye') return false;
return target.identity==target.next.identity||target.identity==target.previous.identity
},
selectTarget:-1,
content:function(){
"step 0"
var next=target.chooseToRespond({name:'shan'});
next.ai=function(card){
if(get.damageEffect(target,player,target)>=0) return 0;
},
niaoxiangzhen: {
type: "zhenfa",
recastable: true,
enable: true,
filterTarget: function (card, player, target) {
if (player.identity == target.identity) return false;
if (target.identity == "unknown" || target.identity == "ye") return false;
return (
target.identity == target.next.identity || target.identity == target.previous.identity
);
},
selectTarget: -1,
content: function () {
"step 0";
var next = target.chooseToRespond({ name: "shan" });
next.ai = function (card) {
if (get.damageEffect(target, player, target) >= 0) return 0;
return 1;
};
next.autochoose=lib.filter.autoRespondShan;
"step 1"
if(result.bool==false){
next.autochoose = lib.filter.autoRespondShan;
"step 1";
if (result.bool == false) {
target.damage();
}
},
ai:{
basic:{
order:9,
useful:1
ai: {
basic: {
order: 9,
useful: 1,
},
result:{
target:-1.5,
result: {
target: -1.5,
},
tag: {
respond: 1,
respondShan: 1,
damage: 1,
},
tag:{
respond:1,
respondShan:1,
damage:1,
}
},
mode:['guozhan'],
mode: ["guozhan"],
},
},
skill:{
},
translate:{
zhenfa:'阵法',
changshezhen:'长蛇阵',
pozhenjue:'破阵决',
tianfuzhen:'天覆阵',
dizaizhen:'地载阵',
fengyangzhen:'风扬阵',
yunchuizhen:'云垂阵',
qixingzhen:'七星阵',
shepanzhen:'蛇蟠阵',
shepanzhen_bg:'列',
yunchuizhen_bg:'垂',
longfeizhen:'龙飞阵',
huyizhen:'虎翼阵',
niaoxiangzhen:'鸟翔阵',
niaoxiangzhen_info:'令所有非你阵营的队列的角色今次打出一张闪或者受到1点伤害。',
qixingzhen_info:'弃置所有围攻你的角色各一张牌,然后视为对所有你围攻的角色使用一张不计入出杀次数的杀。',
skill: {},
translate: {
zhenfa: "阵法",
changshezhen: "长蛇阵",
pozhenjue: "破阵决",
tianfuzhen: "天覆阵",
dizaizhen: "地载阵",
fengyangzhen: "风扬阵",
yunchuizhen: "云垂阵",
qixingzhen: "七星阵",
shepanzhen: "蛇蟠阵",
shepanzhen_bg: "列",
yunchuizhen_bg: "垂",
longfeizhen: "龙飞阵",
huyizhen: "虎翼阵",
niaoxiangzhen: "鸟翔阵",
niaoxiangzhen_info: "令所有非你阵营的队列的角色今次打出一张闪或者受到1点伤害。",
qixingzhen_info:
"弃置所有围攻你的角色各一张牌,然后视为对所有你围攻的角色使用一张不计入出杀次数的杀。",
// longfeizhen_info:'弃置围攻你的角色各一张牌,然后摸一张牌。',
// qixingzhen_info:'令我方所有角色进入围攻状态。',
// shepanzhen_info:'令我方所有角色进入队列状态。',
// yunchuizhen_info:'令所有围攻角色获得技能〖无双〗,直到其首次造成伤害。',
// fengyangzhen_info:'令所有被围攻角色获得技能〖飞影〗,直到其首次受到伤害。',
dizaizhen_info:'所有小势力角色摸一张牌。',
changshezhen_info:'若你处于队列中,与你同一队列的所有角色摸一张牌,否则将与你逆时针距离最近的同势力角色移至你下家。',
dizaizhen_info: "所有小势力角色摸一张牌。",
changshezhen_info:
"若你处于队列中,与你同一队列的所有角色摸一张牌,否则将与你逆时针距离最近的同势力角色移至你下家。",
// pozhenjue_info:'将所有角色的顺序随机重排。',
tianfuzhen_info:'所有大势力角色弃置一张牌。'
tianfuzhen_info: "所有大势力角色弃置一张牌。",
},
list:[
["diamond",1,'changshezhen'],
["club",1,'changshezhen'],
list: [
["diamond", 1, "changshezhen"],
["club", 1, "changshezhen"],
// ["spade",1,'changshezhen'],
// ["heart",1,'changshezhen'],
["diamond",2,'tianfuzhen'],
["diamond", 2, "tianfuzhen"],
// ["club",2,'tianfuzhen'],
["spade",2,'tianfuzhen'],
["heart",2,'tianfuzhen'],
["spade", 2, "tianfuzhen"],
["heart", 2, "tianfuzhen"],
["diamond",3,'dizaizhen'],
["diamond", 3, "dizaizhen"],
// ["club",3,'dizaizhen'],
["spade",3,'dizaizhen'],
["heart",3,'dizaizhen'],
["spade", 3, "dizaizhen"],
["heart", 3, "dizaizhen"],
// ["diamond",4,'fengyangzhen'],
// ["club",4,'fengyangzhen'],
@ -407,9 +423,9 @@ game.import('card', function () {
// ["spade",6,'huyizhen'],
// ["heart",6,'huyizhen'],
["diamond",7,'qixingzhen'],
["club",7,'qixingzhen'],
["spade",7,'qixingzhen'],
["diamond", 7, "qixingzhen"],
["club", 7, "qixingzhen"],
["spade", 7, "qixingzhen"],
// ["heart",7,'qixingzhen'],
// ["diamond",8,'shepanzhen'],
@ -422,10 +438,10 @@ game.import('card', function () {
// ["spade",9,'longfeizhen'],
// ["heart",9,'longfeizhen'],
["diamond",11,'niaoxiangzhen'],
["diamond", 11, "niaoxiangzhen"],
// ["club",11,'niaoxiangzhen'],
["spade",11,'niaoxiangzhen'],
["heart",11,'niaoxiangzhen'],
["spade", 11, "niaoxiangzhen"],
["heart", 11, "niaoxiangzhen"],
// ["diamond",12,'yunchuizhen'],
// ["club",12,'yunchuizhen'],

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,492 +1,516 @@
import { lib, game, ui, get, ai, _status } from '../noname.js';
game.import('character', function () {
import { lib, game, ui, get, ai, _status } from "../noname.js";
game.import("character", function () {
return {
name:'mtg',
character:{
mtg_jiding:['male','qun',4,['mbaizhan','msilian']],
name: "mtg",
character: {
mtg_jiding: ["male", "qun", 4, ["mbaizhan", "msilian"]],
// mtg_qianzhuo:['female','shu',3,[]],
mtg_jiesi:['male','wei',3,['mtongnian','msuoling','mhuanyi']],
mtg_lilianna:['female','qun',3,['lingyong','mduohun']],
mtg_jiesi: ["male", "wei", 3, ["mtongnian", "msuoling", "mhuanyi"]],
mtg_lilianna: ["female", "qun", 3, ["lingyong", "mduohun"]],
// mtg_nisha:['female','wu',3,[]],
// mtg_ayeni:['male','qun',4,[]],
},
characterIntro:{
mtg_jiding:'这名白色魔法的使用者极其注重忠诚,正义和荣誉。他曾全力追捕茜卓纳拉,如今已不可思议地与这位火焰法师成为伙伴。',
mtg_qianzhuo:'茜卓纳拉是使用红色法术力的旅法师。她擅长使用火焰:除了火焰,还是火焰。茜卓性格冲动、易怒、富有激情,不断增长的火焰法术能力随时都准备爆发。她的火花在还很年轻时便已点燃,如今已是相当有经验的烈焰术士和旅法师。',
mtg_jiesi:'杰斯贝连是使用蓝色法术的鹏洛客。他擅长心灵法术:读取心灵,幻影,知识,以及欺瞒的咒语。',
mtg_lilianna:'莉莲娜维斯是一位精通死灵术的旅法师,她擅长用黑色法术力来复活死者,腐化生者,并从死亡中召唤力量。',
mtg_nisha:'赞迪卡妖精部落玖瑞加的一名战士,做事倾尽全力,与大地有密切的联系,还擅使元素魔法。她能够引导时空的魔法生机地脉,为土地赋予生命。',
mtg_ayeni:'金鬃阿耶尼是使用白色法术的鹏洛客。他长于净化身体与心灵的法术:用咒语来治疗、强化盟友,以及唤醒他人内在的心灵精华。',
characterIntro: {
mtg_jiding:
"这名白色魔法的使用者极其注重忠诚,正义和荣誉。他曾全力追捕茜卓纳拉,如今已不可思议地与这位火焰法师成为伙伴。",
mtg_qianzhuo:
"茜卓纳拉是使用红色法术力的旅法师。她擅长使用火焰:除了火焰,还是火焰。茜卓性格冲动、易怒、富有激情,不断增长的火焰法术能力随时都准备爆发。她的火花在还很年轻时便已点燃,如今已是相当有经验的烈焰术士和旅法师。",
mtg_jiesi:
"杰斯贝连是使用蓝色法术的鹏洛客。他擅长心灵法术:读取心灵,幻影,知识,以及欺瞒的咒语。",
mtg_lilianna:
"莉莲娜维斯是一位精通死灵术的旅法师,她擅长用黑色法术力来复活死者,腐化生者,并从死亡中召唤力量。",
mtg_nisha:
"赞迪卡妖精部落玖瑞加的一名战士,做事倾尽全力,与大地有密切的联系,还擅使元素魔法。她能够引导时空的魔法生机地脉,为土地赋予生命。",
mtg_ayeni:
"金鬃阿耶尼是使用白色法术的鹏洛客。他长于净化身体与心灵的法术:用咒语来治疗、强化盟友,以及唤醒他人内在的心灵精华。",
},
skill:{
mduohun:{
trigger:{player:'dyingAfter'},
forced:true,
filter:function(event,player){
return event.source&&event.source.isIn()&&event.source.hp>0;
skill: {
mduohun: {
trigger: { player: "dyingAfter" },
forced: true,
filter: function (event, player) {
return event.source && event.source.isIn() && event.source.hp > 0;
},
logTarget:'source',
content:function(){
logTarget: "source",
content: function () {
trigger.source.loseHp();
},
ai:{
threaten:function(player,target){
if(target.hp==1) return 0.6;
ai: {
threaten: function (player, target) {
if (target.hp == 1) return 0.6;
return 1;
},
effect:{
target:function(card,player,target,current){
if(!target.hasFriend()) return;
if(target.hp<=1&&get.tag(card,'damage')) return [1,0,0,-1];
}
}
}
effect: {
target: function (card, player, target, current) {
if (!target.hasFriend()) return;
if (target.hp <= 1 && get.tag(card, "damage")) return [1, 0, 0, -1];
},
},
},
},
lingyong:{
enable:'phaseUse',
filter:function(event,player){
return !player.hasSkill('subplayer')&&player.getSubPlayers('lingyong_get').length>0;
lingyong: {
enable: "phaseUse",
filter: function (event, player) {
return !player.hasSkill("subplayer") && player.getSubPlayers("lingyong_get").length > 0;
},
nosub:true,
group:'lingyong_get',
direct:true,
delay:0,
skillAnimation:true,
animationColor:'thunder',
content:function(){
player.callSubPlayer().set('tag','lingyong_get');
nosub: true,
group: "lingyong_get",
direct: true,
delay: 0,
skillAnimation: true,
animationColor: "thunder",
content: function () {
player.callSubPlayer().set("tag", "lingyong_get");
},
ai:{
order:1,
result:{
player:function(player,target){
ai: {
order: 1,
result: {
player: function (player, target) {
return 1;
// if(player.hp<=1) return 1;
// if(!player.needsToDiscard(player.hp-1)) return 1;
// return 0;
}
}
},
subSkill:{
get:{
trigger:{global:'dieAfter'},
forced:true,
filter:function(event,player){
return !event.player.isMin()&&![player.name,player.name1,player.name2].includes(event.player.name);
},
content:function(){
var skills=lib.character[trigger.player.name][3].slice(0);
for(var i=0;i<skills.length;i++){
if(lib.skill[skills[i]].nosub){
skills.splice(i--,1);
},
},
subSkill: {
get: {
trigger: { global: "dieAfter" },
forced: true,
filter: function (event, player) {
return (
!event.player.isMin() &&
![player.name, player.name1, player.name2].includes(event.player.name)
);
},
content: function () {
var skills = lib.character[trigger.player.name][3].slice(0);
for (var i = 0; i < skills.length; i++) {
if (lib.skill[skills[i]].nosub) {
skills.splice(i--, 1);
}
}
player.addSubPlayer({
name:trigger.player.name,
skills:skills,
hs:get.cards(2),
intro:'出牌阶段,你可以调遣此随从(直到随从死亡不可再次切换)'
name: trigger.player.name,
skills: skills,
hs: get.cards(2),
intro: "出牌阶段,你可以调遣此随从(直到随从死亡不可再次切换)",
});
}
}
}
},
mhuanyi:{
round:2,
trigger:{player:'phaseEnd'},
direct:true,
addintro:function(storage,player){
if(player.hasSkill('mhuanyi_target')){
return '直到下一回合开始,当成为某类型的卡牌的惟一目标时,将目标转移给某名其他角色;'
}
return '';
},
},
},
content:function(){
'step 0'
var rand=Math.random();
player.chooseTarget(get.prompt2('mhuanyi'),function(card,player,target){
return target!=player;
}).set('ai',function(target){
if(get.attitude(player,target)<0){
return rand;
}
return 0;
});
'step 1'
if(result.bool){
event.target=result.targets[0];
if(player.isUnderControl(true)){
player.line(event.target,'green');
}
player.chooseControl('基本牌','非基本牌','cancel2',function(){
return Math.floor(Math.random()*2);
}).set('prompt','选择一种卡牌类型');
},
mhuanyi: {
round: 2,
trigger: { player: "phaseEnd" },
direct: true,
addintro: function (storage, player) {
if (player.hasSkill("mhuanyi_target")) {
return "直到下一回合开始,当成为某类型的卡牌的惟一目标时,将目标转移给某名其他角色;";
}
else{
return "";
},
content: function () {
"step 0";
var rand = Math.random();
player
.chooseTarget(get.prompt2("mhuanyi"), function (card, player, target) {
return target != player;
})
.set("ai", function (target) {
if (get.attitude(player, target) < 0) {
return rand;
}
return 0;
});
"step 1";
if (result.bool) {
event.target = result.targets[0];
if (player.isUnderControl(true)) {
player.line(event.target, "green");
}
player
.chooseControl("基本牌", "非基本牌", "cancel2", function () {
return Math.floor(Math.random() * 2);
})
.set("prompt", "选择一种卡牌类型");
} else {
event.finish();
}
'step 2'
if(result.control&&result.control!='cancel2'){
player.logSkill('mhuanyi');
player.storage.mhuanyi_target=[event.target,result.index];
player.addTempSkill('mhuanyi_target',{player:'phaseBegin'});
"step 2";
if (result.control && result.control != "cancel2") {
player.logSkill("mhuanyi");
player.storage.mhuanyi_target = [event.target, result.index];
player.addTempSkill("mhuanyi_target", { player: "phaseBegin" });
}
},
subSkill:{
target:{
trigger:{target:'useCardToBefore'},
priority:6,
forced:true,
onremove:true,
group:'mhuanyi_die',
filter:function(event,player){
if(!player.storage.mhuanyi_target) return false;
if(event.player==player.storage.mhuanyi_target[0]) return false;
if(get.type(event.card)=='basic'){
if(player.storage.mhuanyi_target[1]!=0) return false;
subSkill: {
target: {
trigger: { target: "useCardToBefore" },
priority: 6,
forced: true,
onremove: true,
group: "mhuanyi_die",
filter: function (event, player) {
if (!player.storage.mhuanyi_target) return false;
if (event.player == player.storage.mhuanyi_target[0]) return false;
if (get.type(event.card) == "basic") {
if (player.storage.mhuanyi_target[1] != 0) return false;
} else {
if (player.storage.mhuanyi_target[1] != 1) return false;
}
else{
if(player.storage.mhuanyi_target[1]!=1) return false;
}
if(!lib.filter.targetEnabled2(event.card,event.player,player.storage.mhuanyi_target[0])){
if (
!lib.filter.targetEnabled2(
event.card,
event.player,
player.storage.mhuanyi_target[0]
)
) {
return false;
}
return true;
},
logTarget:function(event,player){
logTarget: function (event, player) {
return player.storage.mhuanyi_target[0];
},
content:function(){
trigger.target=player.storage.mhuanyi_target[0];
player.removeSkill('mhuanyi_target');
}
},
die:{
trigger:{global:'dieAfter'},
silent:true,
filter:function(event,player){
if(!player.storage.mhuanyi_target) return false;
return event.player==player.storage.mhuanyi_target[0];
content: function () {
trigger.target = player.storage.mhuanyi_target[0];
player.removeSkill("mhuanyi_target");
},
content:function(){
player.removeSkill('mhuanyi_target');
}
}
}
},
die: {
trigger: { global: "dieAfter" },
silent: true,
filter: function (event, player) {
if (!player.storage.mhuanyi_target) return false;
return event.player == player.storage.mhuanyi_target[0];
},
content: function () {
player.removeSkill("mhuanyi_target");
},
},
},
},
msuoling:{
trigger:{global:'useCard'},
direct:true,
priority:5.5,
round:1,
filter:function(event,player){
if(get.type(event.card)=='trick'&&event.card.isCard){
if(event.player==player) return false;
if(!player.countCards('he',{suit:get.suit(event.card)})) return false;
msuoling: {
trigger: { global: "useCard" },
direct: true,
priority: 5.5,
round: 1,
filter: function (event, player) {
if (get.type(event.card) == "trick" && event.card.isCard) {
if (event.player == player) return false;
if (!player.countCards("he", { suit: get.suit(event.card) })) return false;
return true;
}
return false;
},
content:function(){
'step 0'
var att=get.attitude(player,trigger.player);
var suit=get.suit(trigger.card);
player.chooseToDiscard('he',get.prompt2('msuoling',trigger.player),function(card){
return get.suit(card)==suit;
}).set('autodelay',true).set('logSkill',['msuoling',trigger.player]).ai=function(card){
if(att<0){
return 8-get.value(card);
content: function () {
"step 0";
var att = get.attitude(player, trigger.player);
var suit = get.suit(trigger.card);
player
.chooseToDiscard("he", get.prompt2("msuoling", trigger.player), function (card) {
return get.suit(card) == suit;
})
.set("autodelay", true)
.set("logSkill", ["msuoling", trigger.player]).ai = function (card) {
if (att < 0) {
return 8 - get.value(card);
}
return 0;
};
'step 1'
if(result.bool){
"step 1";
if (result.bool) {
trigger.cancel();
player.chooseUseTarget(true,trigger.card);
player.chooseUseTarget(true, trigger.card);
}
}
},
},
msuoling_old:{
enable:'phaseUse',
usable:1,
subSkill:{
ai:{
onremove:true
}
msuoling_old: {
enable: "phaseUse",
usable: 1,
subSkill: {
ai: {
onremove: true,
},
},
filter:function(event,player){
var nh=player.countCards('h');
if(nh<=1||nh>=5) return false;
return lib.skill.msuoling.getc(player).number>0;
filter: function (event, player) {
var nh = player.countCards("h");
if (nh <= 1 || nh >= 5) return false;
return lib.skill.msuoling.getc(player).number > 0;
},
getc:function(player){
var hs=player.getCards('h');
for(var i=0;i<hs.length;i++){
if(hs[i].mtongnian_link){
getc: function (player) {
var hs = player.getCards("h");
for (var i = 0; i < hs.length; i++) {
if (hs[i].mtongnian_link) {
return hs[i];
}
}
return -1;
},
getn:function(player){
var hs=player.getCards('h');
var ns=[];
for(var i=0;i<hs.length;i++){
if(!hs[i].mtongnian_link){
getn: function (player) {
var hs = player.getCards("h");
var ns = [];
for (var i = 0; i < hs.length; i++) {
if (!hs[i].mtongnian_link) {
ns.push(hs[i].number);
}
}
return ns;
},
test:function(player){
var cs=lib.skill.msuoling.getc(player).number;
var ns=lib.skill.msuoling.getn(player);
return lib.skill.msuoling.calc(ns,cs);
test: function (player) {
var cs = lib.skill.msuoling.getc(player).number;
var ns = lib.skill.msuoling.getn(player);
return lib.skill.msuoling.calc(ns, cs);
},
calc:function(arr, num){
for(var i=0;i<arr.length;i++){
if(arr[i]==num){
calc: function (arr, num) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] == num) {
return true;
}
}
if(arr.length>1){
for(var i=0;i<arr.length-1;i++){
for(var j=i+1;j<arr.length;j++){
var brr=[];
for(var k=0;k<arr.length;k++){
if(k!=i&&k!=j){
if (arr.length > 1) {
for (var i = 0; i < arr.length - 1; i++) {
for (var j = i + 1; j < arr.length; j++) {
var brr = [];
for (var k = 0; k < arr.length; k++) {
if (k != i && k != j) {
brr.push(arr[k]);
}
}
if(lib.skill.msuoling.calc(brr.concat([arr[i]+arr[j]]),num)) return true;
if(lib.skill.msuoling.calc(brr.concat([arr[i]-arr[j]]),num)) return true;
if(lib.skill.msuoling.calc(brr.concat([arr[i]*arr[j]]),num)) return true;
if(lib.skill.msuoling.calc(brr.concat([arr[i]/arr[j]]),num)) return true;
if (lib.skill.msuoling.calc(brr.concat([arr[i] + arr[j]]), num)) return true;
if (lib.skill.msuoling.calc(brr.concat([arr[i] - arr[j]]), num)) return true;
if (lib.skill.msuoling.calc(brr.concat([arr[i] * arr[j]]), num)) return true;
if (lib.skill.msuoling.calc(brr.concat([arr[i] / arr[j]]), num)) return true;
}
}
}
return false;
},
check:function(card){
check: function (card) {
// if(player.isUnderControl(true)) return 0;
var player=_status.event.player;
if(player.hasSkill('msuoling_ai')){
var player = _status.event.player;
if (player.hasSkill("msuoling_ai")) {
return false;
}
if(lib.skill.msuoling.test(player)){
if (lib.skill.msuoling.test(player)) {
return true;
}
else{
player.addTempSkill('msuoling_ai',{player:['gainAfter','phaseAfter']});
} else {
player.addTempSkill("msuoling_ai", { player: ["gainAfter", "phaseAfter"] });
return false;
}
},
content:function(){
'step 0'
content: function () {
"step 0";
player.showHandcards();
'step 1'
if(lib.skill.msuoling.test(player)){
var card=lib.skill.msuoling.getc(player);
card.classList.remove('glow');
"step 1";
if (lib.skill.msuoling.test(player)) {
var card = lib.skill.msuoling.getc(player);
card.classList.remove("glow");
delete card.mtongnian_link;
delete card._destroy;
var list=lib.skill.mtongnian.getList(player);
if(list.length){
var card=list.randomGet();
var fake=game.createCard(card);
fake.mtongnian_link=card;
player.gain(fake,'draw')._triggered=null;
fake.classList.add('glow');
fake._destroy='mtongnian';
var list = lib.skill.mtongnian.getList(player);
if (list.length) {
var card = list.randomGet();
var fake = game.createCard(card);
fake.mtongnian_link = card;
player.gain(fake, "draw")._triggered = null;
fake.classList.add("glow");
fake._destroy = "mtongnian";
}
}
},
selectCard:[1,Infinity],
ai:{
order:11
}
selectCard: [1, Infinity],
ai: {
order: 11,
},
},
mtongnian:{
trigger:{player:'phaseUseBegin'},
forced:true,
filter:function(event,player){
var enemies=player.getEnemies();
for(var i=0;i<enemies.length;i++){
if(enemies[i].countCards('h')) return true;
mtongnian: {
trigger: { player: "phaseUseBegin" },
forced: true,
filter: function (event, player) {
var enemies = player.getEnemies();
for (var i = 0; i < enemies.length; i++) {
if (enemies[i].countCards("h")) return true;
}
return false;
},
getList:function(player){
var list=[];
var enemies=player.getEnemies();
for(var i=0;i<enemies.length;i++){
list.addArray(enemies[i].getCards('h'));
getList: function (player) {
var list = [];
var enemies = player.getEnemies();
for (var i = 0; i < enemies.length; i++) {
list.addArray(enemies[i].getCards("h"));
}
return list;
},
content:function(){
var list=lib.skill.mtongnian.getList(player);
if(list.length){
var card=list.randomGet();
var fake=game.createCard(card);
fake.mtongnian_link=card;
player.gain(fake,'draw')._triggered=null;
fake.classList.add('glow');
fake._destroy='mtongnian';
content: function () {
var list = lib.skill.mtongnian.getList(player);
if (list.length) {
var card = list.randomGet();
var fake = game.createCard(card);
fake.mtongnian_link = card;
player.gain(fake, "draw")._triggered = null;
fake.classList.add("glow");
fake._destroy = "mtongnian";
}
},
group:['mtongnian_change','mtongnian_use','mtongnian_lose'],
subSkill:{
change:{
trigger:{player:'useCard'},
silent:true,
filter:function(event,player){
return player.hasCard(function(card){
return card.mtongnian_link?true:false;
},'h');
group: ["mtongnian_change", "mtongnian_use", "mtongnian_lose"],
subSkill: {
change: {
trigger: { player: "useCard" },
silent: true,
filter: function (event, player) {
return player.hasCard(function (card) {
return card.mtongnian_link ? true : false;
}, "h");
},
content:function(){
var list=lib.skill.mtongnian.getList(player);
var hs=player.getCards('h',function(card){
return card.mtongnian_link?true:false;
content: function () {
var list = lib.skill.mtongnian.getList(player);
var hs = player.getCards("h", function (card) {
return card.mtongnian_link ? true : false;
});
for(var i=0;i<hs.length;i++){
var current=hs[i].mtongnian_link;
hs[i].mtongnian_link=list.randomGet(current);
if(!hs[i].mtongnian_link){
hs[i].mtongnian_link=current;
for (var i = 0; i < hs.length; i++) {
var current = hs[i].mtongnian_link;
hs[i].mtongnian_link = list.randomGet(current);
if (!hs[i].mtongnian_link) {
hs[i].mtongnian_link = current;
}
hs[i].init(hs[i].mtongnian_link);
}
}
},
use:{
trigger:{player:'useCardBefore'},
silent:true,
filter:function(event,player){
return event.card.mtongnian_link?true:false;
},
content:function(){
var link=trigger.card.mtongnian_link;
var target=get.owner(link);
if(target&&target!=player){
},
use: {
trigger: { player: "useCardBefore" },
silent: true,
filter: function (event, player) {
return event.card.mtongnian_link ? true : false;
},
content: function () {
var link = trigger.card.mtongnian_link;
var target = get.owner(link);
if (target && target != player) {
trigger.cards.add(trigger.card);
player.lose(trigger.cards,ui.discardPile);
trigger.card=link;
trigger.cards.length=0;
player.lose(trigger.cards, ui.discardPile);
trigger.card = link;
trigger.cards.length = 0;
trigger.cards.push(link);
target.lose(link,ui.discardPile);
player.logSkill('mtongnian',target);
game.log(target,'失去了',link);
target.lose(link, ui.discardPile);
player.logSkill("mtongnian", target);
game.log(target, "失去了", link);
game.delayx();
}
else{
} else {
player.lose(trigger.card);
trigger.cancel();
}
}
},
},
lose:{
trigger:{player:'phaseUseEnd',global:'loseEnd'},
silent:true,
filter:function(event,player){
if(event.name=='lose'){
return lib.skill.mtongnian.getList(player).length==0;
lose: {
trigger: { player: "phaseUseEnd", global: "loseEnd" },
silent: true,
filter: function (event, player) {
if (event.name == "lose") {
return lib.skill.mtongnian.getList(player).length == 0;
}
return true;
},
content:function(){
var hs=player.getCards('h',function(card){
return card.mtongnian_link?true:false;
content: function () {
var hs = player.getCards("h", function (card) {
return card.mtongnian_link ? true : false;
});
if(hs.length){
player.lose(hs)._triggered=null;
if (hs.length) {
player.lose(hs)._triggered = null;
}
}
}
},
},
},
ai: {
threaten: 1.3,
},
ai:{
threaten:1.3
}
},
mbaizhan:{
trigger:{source:'damageEnd'},
forced:true,
filter:function(event){
return event.num>0;
mbaizhan: {
trigger: { source: "damageEnd" },
forced: true,
filter: function (event) {
return event.num > 0;
},
content:function(){
content: function () {
player.changeHujia(trigger.num);
},
ai:{
damageBonus:true
}
ai: {
damageBonus: true,
},
},
msilian:{
trigger:{player:'phaseEnd'},
filter:function(event,player){
return player.hujia>0;
msilian: {
trigger: { player: "phaseEnd" },
filter: function (event, player) {
return player.hujia > 0;
},
check:function(event,player){
return player.hujia>1&&player.hp>1;
check: function (event, player) {
return player.hujia > 1 && player.hp > 1;
},
content:function(){
player.storage.msilian=player.hujia;
content: function () {
player.storage.msilian = player.hujia;
player.changeHujia(-player.hujia);
player.insertPhase();
},
group:['msilian_hp','msilian_draw'],
subSkill:{
hp:{
trigger:{player:'phaseAfter'},
silent:true,
filter:function(event,player){
return event.skill=='msilian'&&!player.getStat('damage');
group: ["msilian_hp", "msilian_draw"],
subSkill: {
hp: {
trigger: { player: "phaseAfter" },
silent: true,
filter: function (event, player) {
return event.skill == "msilian" && !player.getStat("damage");
},
content:function(){
content: function () {
player.loseHp();
}
},
draw:{
trigger:{player:'phaseDrawBegin'},
filter:function(event){
return event.getParent('phase').skill=='msilian';
},
silent:true,
content:function(){
trigger.num+=player.storage.msilian-2;
}
}
}
}
},
draw: {
trigger: { player: "phaseDrawBegin" },
filter: function (event) {
return event.getParent("phase").skill == "msilian";
},
silent: true,
content: function () {
trigger.num += player.storage.msilian - 2;
},
},
},
},
},
translate:{
mtg_jiding:'基定',
mtg_qianzhuo:'茜卓',
mtg_jiesi:'杰斯',
mtg_lilianna:'莉莲娜',
mtg_nisha:'妮莎',
mtg_ayeni:'阿耶尼',
translate: {
mtg_jiding: "基定",
mtg_qianzhuo: "茜卓",
mtg_jiesi: "杰斯",
mtg_lilianna: "莉莲娜",
mtg_nisha: "妮莎",
mtg_ayeni: "阿耶尼",
mduohun:'夺魂',
mduohun_info:'锁定技当你解除濒死状态后令你进入濒死状态的角色失去1点体力。',
lingyong:'灵俑',
lingyong2:'灵俑',
lingyong3:'灵俑',
lingyong3_bg:'俑',
lingyong_info:'锁定技每当一名其他角色死亡你获得一个与该角色同名且体力上限为1、初始手牌为2的随从出牌阶段你可以调遣以此法获得的随从直到随从死亡不可再次切换。',
mbaizhan:'百战',
mbaizhan_info:'锁定技每当你造成1点伤害你获得1点护甲。',
msilian:'祀炼',
msilian_info:'结束阶段若你有护甲你可以移去全部护甲然后进行一个额外回合在额外回合中你的摸牌阶段摸牌基数为你移去的护甲数额外回合结束后若你未造成伤害你失去1点体力。',
mtongnian:'通念',
mtongnian_info:'锁定技,出牌阶段开始时,你获得一张替身牌,此牌对应一名随机敌人的一张随机手牌;每当你使用一张非替身牌,随机更换替身牌对应的牌;当你使用替身牌时,改为使用替身牌对应的牌;当出牌阶段结束,或替身牌离开手牌区,或敌方角色没有手牌时,销毁替身牌。',
msuoling:'塑灵',
msuoling_info:'每轮限一次,当一名其他角色使用一张非转化的普通锦囊牌时,你可以弃置一张与之花色相同的牌取消之,然后你视为使用该锦囊牌。',
msuoling_old_info:'出牌阶段限一次若你手牌中有替身牌且手牌数不超过5你可以展示手牌若其中的非替身手牌能通过四则运算得到你的替身牌的点数你将替身牌转化为非替身牌然后获得一张新的替身牌此技能托管无效。',
mhuanyi:'幻逸',
mhuanyi_info:'每两轮限一次,结束阶段,你可以选择一名其他角色和一种卡牌类型(选择结果对其他角色不可见),直到下一回合开始,当你首次成为该类型卡牌的惟一目标时,你将目标转移给你指定的角色(目标须合法)。',
mduohun: "夺魂",
mduohun_info: "锁定技当你解除濒死状态后令你进入濒死状态的角色失去1点体力。",
lingyong: "灵俑",
lingyong2: "灵俑",
lingyong3: "灵俑",
lingyong3_bg: "俑",
lingyong_info:
"锁定技每当一名其他角色死亡你获得一个与该角色同名且体力上限为1、初始手牌为2的随从出牌阶段你可以调遣以此法获得的随从直到随从死亡不可再次切换。",
mbaizhan: "百战",
mbaizhan_info: "锁定技每当你造成1点伤害你获得1点护甲。",
msilian: "祀炼",
msilian_info:
"结束阶段若你有护甲你可以移去全部护甲然后进行一个额外回合在额外回合中你的摸牌阶段摸牌基数为你移去的护甲数额外回合结束后若你未造成伤害你失去1点体力。",
mtongnian: "通念",
mtongnian_info:
"锁定技,出牌阶段开始时,你获得一张替身牌,此牌对应一名随机敌人的一张随机手牌;每当你使用一张非替身牌,随机更换替身牌对应的牌;当你使用替身牌时,改为使用替身牌对应的牌;当出牌阶段结束,或替身牌离开手牌区,或敌方角色没有手牌时,销毁替身牌。",
msuoling: "塑灵",
msuoling_info:
"每轮限一次,当一名其他角色使用一张非转化的普通锦囊牌时,你可以弃置一张与之花色相同的牌取消之,然后你视为使用该锦囊牌。",
msuoling_old_info:
"出牌阶段限一次若你手牌中有替身牌且手牌数不超过5你可以展示手牌若其中的非替身手牌能通过四则运算得到你的替身牌的点数你将替身牌转化为非替身牌然后获得一张新的替身牌此技能托管无效。",
mhuanyi: "幻逸",
mhuanyi_info:
"每两轮限一次,结束阶段,你可以选择一名其他角色和一种卡牌类型(选择结果对其他角色不可见),直到下一回合开始,当你首次成为该类型卡牌的惟一目标时,你将目标转移给你指定的角色(目标须合法)。",
},
};
});

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,118 +1,123 @@
import { lib, game, ui, get, ai, _status } from '../noname.js';
game.import('character', function () {
return {
name:'xiake',
character:{
// xk_dongfangweiming:['male','shu',4,[]],
xk_guyuexuan:['male','qun',4,['rouquan','gzhenji']],
xk_jinji:['male','shu',4,['zhongzhan','lianpo']],
// xk_shenxiangyun:['female','wei',3,['zhenjiu']],
xk_fujianhan:['male','qun',4,['zuijian','zitong']],
},
skill:{
zhongzhan:{
trigger:{source:'damageBegin'},
logTarget:'player',
check:function(event,player){
if(get.damageEffect(event.player,player,player)>0&&
get.attitude(player,event.player)<0){
return player.hp>event.player.hp&&player.hp>=2;
}
return false;
},
content:function(){
player.loseHp();
trigger.num++;
}
},
rouquan:{
mod:{
selectTarget:function(card,player,range){
if(card.name=='sha'&&!player.getEquip(1)&&range[1]!=-1) range[1]=Infinity;
}
},
enable:'phaseUse',
position:'e',
filter:function(event,player){
return player.hasCard(card=>lib.skill.rouquan.filterCard(card,player),lib.skill.rouquan.position);
},
filterCard:lib.filter.cardRecastable,
prompt:'将要重铸的牌置入弃牌堆并摸一张牌',
discard:false,
lose:false,
delay:false,
check:function(card,player){
var val=get.equipValue(card);
var player=_status.event.player;
var cards=player.getCards('h',{subtype:get.subtype(card)});
for(var i=0;i<cards.length;i++){
if(get.equipValue(cards[i])>=val){
return 1;
}
}
return 0;
},
content:function(){
player.recast(cards);
},
ai:{
order:9.5,
result:{
player:1
}
}
},
gzhenji:{
trigger:{source:'damageEnd'},
frequent:true,
filter:function(event,player){
if(event._notrigger.includes(event.player)) return false;
return _status.currentPhase==player&&event.card&&event.card.name=='sha';
},
content:function(){
player.draw();
player.addTempSkill('gzhenji3');
}
},
gzhenji3:{
mod:{
cardUsable:function(card,player,num){
if(card.name=='sha') return num+1;
}
},
},
zitong:{
trigger:{player:'useCard'},
frequent:true,
filter:function(event,player){
return _status.currentPhase==player&&player.countUsed()==3;
},
content:function(){
var card=get.cardPile('chuansongmen');
if(!card){
card=game.createCard('chuansongmen');
}
player.gain(card,'gain2');
},
ai:{
threaten:1.2
}
}
},
translate:{
xk_dongfangweiming:'东方未明',
xk_guyuexuan:'谷月轩',
xk_jinji:'荆棘',
xk_shenxiangyun:'沈湘芸',
xk_fujianhan:'傅剑寒',
zhongzhan:'重斩',
zhongzhan_info:'每当你即将造成伤害你可失去1点体力令伤害+1。',
gzhenji:'震击',
gzhenji_info:'你使用杀造成伤害后,可以摸一张牌,并且本回合内可以额外使用一张杀。',
rouquan:'柔拳',
rouquan_info:'你可以重铸装备区内的牌;当你没有武器牌时,你的杀可以指定任意个目标。',
zitong:'通悟',
zitong_info:'当你于自己的回合内使用第三张牌时,你可以将一张传送门置于你的手牌。',
},
};
});
import { lib, game, ui, get, ai, _status } from "../noname.js";
game.import("character", function () {
return {
name: "xiake",
character: {
// xk_dongfangweiming:['male','shu',4,[]],
xk_guyuexuan: ["male", "qun", 4, ["rouquan", "gzhenji"]],
xk_jinji: ["male", "shu", 4, ["zhongzhan", "lianpo"]],
// xk_shenxiangyun:['female','wei',3,['zhenjiu']],
xk_fujianhan: ["male", "qun", 4, ["zuijian", "zitong"]],
},
skill: {
zhongzhan: {
trigger: { source: "damageBegin" },
logTarget: "player",
check: function (event, player) {
if (
get.damageEffect(event.player, player, player) > 0 &&
get.attitude(player, event.player) < 0
) {
return player.hp > event.player.hp && player.hp >= 2;
}
return false;
},
content: function () {
player.loseHp();
trigger.num++;
},
},
rouquan: {
mod: {
selectTarget: function (card, player, range) {
if (card.name == "sha" && !player.getEquip(1) && range[1] != -1) range[1] = Infinity;
},
},
enable: "phaseUse",
position: "e",
filter: function (event, player) {
return player.hasCard(
(card) => lib.skill.rouquan.filterCard(card, player),
lib.skill.rouquan.position
);
},
filterCard: lib.filter.cardRecastable,
prompt: "将要重铸的牌置入弃牌堆并摸一张牌",
discard: false,
lose: false,
delay: false,
check: function (card, player) {
var val = get.equipValue(card);
var player = _status.event.player;
var cards = player.getCards("h", { subtype: get.subtype(card) });
for (var i = 0; i < cards.length; i++) {
if (get.equipValue(cards[i]) >= val) {
return 1;
}
}
return 0;
},
content: function () {
player.recast(cards);
},
ai: {
order: 9.5,
result: {
player: 1,
},
},
},
gzhenji: {
trigger: { source: "damageEnd" },
frequent: true,
filter: function (event, player) {
if (event._notrigger.includes(event.player)) return false;
return _status.currentPhase == player && event.card && event.card.name == "sha";
},
content: function () {
player.draw();
player.addTempSkill("gzhenji3");
},
},
gzhenji3: {
mod: {
cardUsable: function (card, player, num) {
if (card.name == "sha") return num + 1;
},
},
},
zitong: {
trigger: { player: "useCard" },
frequent: true,
filter: function (event, player) {
return _status.currentPhase == player && player.countUsed() == 3;
},
content: function () {
var card = get.cardPile("chuansongmen");
if (!card) {
card = game.createCard("chuansongmen");
}
player.gain(card, "gain2");
},
ai: {
threaten: 1.2,
},
},
},
translate: {
xk_dongfangweiming: "东方未明",
xk_guyuexuan: "谷月轩",
xk_jinji: "荆棘",
xk_shenxiangyun: "沈湘芸",
xk_fujianhan: "傅剑寒",
zhongzhan: "重斩",
zhongzhan_info: "每当你即将造成伤害你可失去1点体力令伤害+1。",
gzhenji: "震击",
gzhenji_info: "你使用杀造成伤害后,可以摸一张牌,并且本回合内可以额外使用一张杀。",
rouquan: "柔拳",
rouquan_info: "你可以重铸装备区内的牌;当你没有武器牌时,你的杀可以指定任意个目标。",
zitong: "通悟",
zitong_info: "当你于自己的回合内使用第三张牌时,你可以将一张传送门置于你的手牌。",
},
};
});

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,342 +1,343 @@
import { lib, game, ui, get, ai, _status } from '../noname.js';
game.import('character', function () {
return {
name:'zhuogui',
character:{
nianshou:['male','shu',4,['nianrui','qixiang']],
mamian:['male','qun',4,['lianyu','guiji']],
niutou:['male','shu',4,['manjia','xiaoshou']],
baiwuchang:['male','qun',3,['qiangzheng','moukui']],
heiwuchang:['male','qun',3,['suoling','xixing']],
},
skill:{
qixiang:{
group:['qixiang1','qixiang2'],
ai:{
effect:{
target:function(card,player,target,current){
if(card.name=='lebu'&&card.name=='bingliang') return 0.8;
}
}
}
},
qixiang1:{
trigger:{player:'judge'},
forced:true,
filter:function(event,player){
if(event.card){
if(event.card.viewAs){
return event.card.viewAs=='lebu';
}
else{
return event.card.name=='lebu';
}
}
},
content:function(){
player.addTempSkill('qixiang3','phaseJudgeAfter');
}
},
qixiang2:{
trigger:{player:'judge'},
forced:true,
filter:function(event,player){
if(event.card){
if(event.card.viewAs){
return event.card.viewAs=='bingliang';
}
else{
return event.card.name=='bingliang';
}
}
},
content:function(){
player.addTempSkill('qixiang4','phaseJudgeAfter');
}
},
qixiang3:{
mod:{
suit:function(card,suit){
if(suit=='diamond') return 'heart';
}
}
},
qixiang4:{
mod:{
suit:function(card,suit){
if(suit=='spade') return 'club';
}
}
},
nianrui:{
trigger:{player:['phaseBegin','phaseEnd']},
content:function(){
"step 0"
player.judge(function(card){
return get.color(card)=='red'?1:0;
});
"step 1"
if(result.bool){
player.draw();
}
}
},
lianyu:{
enable:'phaseUse',
usable:1,
filterCard:{color:'red'},
check:function(card){return 6-get.value(card)},
filterTarget:true,
selectTarget:-1,
line:'fire',
content:function(){
target.damage('fire');
},
ai:{
result:{
player:function(card,player,target){
var eff=0;
for(var i=0;i<game.players.length;i++){
if(!game.players[i].isOut()){
eff+=get.damageEffect(game.players[i],player,player,'fire');
}
}
return eff;
}
},
expose:0.1
}
},
manjia:{
group:['manjia1','manjia2']
},
manjia1:{
trigger:{target:'useCardToBefore'},
forced:true,
priority:6,
filter:function(event,player){
if(player.getEquip(2)) return false;
return lib.skill.tengjia1.filter(event,player);
},
content:function(){
trigger.cancel();
},
ai:{
effect:{
target:function(card,player,target,current){
if(target.getEquip(2)) return;
return lib.skill.tengjia1.ai.effect.target.apply(this,arguments);
}
}
}
},
manjia2:{
trigger:{player:'damageBegin'},
filter:function(event,player){
if(player.getEquip(2)) return false;
if(event.hasNature('fire')) return true;
},
forced:true,
check:function(){
return false;
},
content:function(){
trigger.num++;
},
ai:{
effect:{
target:function(card,player,target,current){
if(target.getEquip(2)) return;
return lib.skill.tengjia2.ai.effect.target.apply(this,arguments);
}
}
}
},
xiaoshou:{
trigger:{player:'phaseEnd'},
filter:function(event,player){
var players=game.players.slice(0);
players.sort(function(a,b){
return b.hp-a.hp;
});
return players[0].hp>players[1].hp&&players[0]!=player;
},
check:function(event,player){
var players=game.players.slice(0);
players.sort(function(a,b){
return b.hp-a.hp;
});
return get.damageEffect(players[0],player,player,'fire')>0;
},
prompt:function(){
var players=game.players.slice(0);
players.sort(function(a,b){
return b.hp-a.hp;
});
return '枭首:是否对'+get.translation(players[0])+'造成1点火焰伤害';
},
content:function(){
var players=game.players.slice(0);
players.sort(function(a,b){
return b.hp-a.hp;
});
if(players[0].hp>players[1].hp&&players[0]!=player){
players[0].damage('fire');
player.line(players[0],'fire');
}
},
ai:{
expose:0.2
}
},
guiji:{
trigger:{player:'phaseJudgeBegin'},
forced:true,
content:function(){
player.discard(player.getCards('j').randomGet());
},
filter:function(event ,player){
return player.countCards('j')>0;
},
ai:{
effect:{
target:function(card,player,target,current){
if(get.type(card)=='delay'&&target.countCards('j')==0) return 0.1;
}
}
}
},
qiangzheng:{
audio:2,
trigger:{player:'phaseEnd'},
direct:true,
forced:true,
filter:function(event,player){
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player&&game.players[i].countCards('h')) return true;
}
return false;
},
content:function(){
"step 0"
player.chooseTarget('获得一名角色的一张手牌',true,function(card,player,target){
return player!=target&&target.countCards('h')>0;
}).ai=function(target){
return -get.attitude(player,target);
};
"step 1"
if(result.targets&&result.targets.length){
player.logSkill('qiangzheng',result.targets);
player.gain(result.targets[0].getCards('h').randomGet(),result.targets[0]);
result.targets[0].$give(1,player);
game.delay();
}
},
ai:{
threaten:1.7
}
},
suoling:{
trigger:{player:'phaseEnd'},
forced:true,
filter:function(event,player){
if(player.isLinked()) return true;
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player&&!game.players[i].isLinked()){
return true;
}
}
return false;
},
content:function(){
"step 0"
event.targets=game.players.slice(0);
event.targets.remove(player);
event.targets.sort(lib.sort.seat);
if(player.isLinked()) player.link();
"step 1"
if(event.targets.length){
var target=event.targets.shift();
if(!target.isLinked()){
target.link();
}
event.redo();
}
}
},
xixing:{
enable:'phaseUse',
usable:1,
filterCard:function(card){
var type=get.type(card);
for(var i=0;i<ui.selected.cards.length;i++){
if(get.type(ui.selected.cards[i])==type) return false;
}
return true;
},
complexCard:true,
selectCard:3,
position:'he',
filterTarget:function(card,player,target){
return player!=target;
},
check:function(card){
if(_status.event.player.hp==_status.event.player.maxHp){
return 5-get.value(card);
}
return 10-get.value(card);
},
content:function(){
"step 0"
target.damage();
"step 1"
player.recover();
},
ai:{
order:9.5,
result:{
target:function(player,target){
return get.damageEffect(target,player);
}
},
expose:0.2
}
}
},
translate:{
nianshou:'年兽',
nianrui:'年瑞',
qixiang:'祺祥',
qixiang1:'祺祥',
qixiang2:'祺祥',
nianrui_info:'准备阶段和结束阶段,你可以进行一次判定,若结果为红色则摸一张牌。',
qixiang_info:'乐不思蜀判定时,你的方块判定牌视为红桃;兵粮寸断判定时,你的黑桃判定牌视为草花。',
mamian:'马面',
lianyu:'炼狱',
lianyu_info:'出牌阶段限一次你可以弃置一张红色手牌令场上所有角色受到1点火焰伤害。',
niutou:'牛头',
manjia:'蛮甲',
manjia1:'蛮甲',
manjia2:'蛮甲',
manjia_info:'锁定技,若你的装备区内没有防具牌,则你视为装备了【藤甲】。',
xiaoshou:'枭首',
xiaoshou_info:'结束阶段若场上体力值最多的角色只有一个你可以对其造成1点火焰伤害。',
guiji:'诡计',
guiji_info:'锁定技,准备阶段结束时,若你的判定区内有牌,你随机弃置其中一张牌。',
baiwuchang:'白无常',
qiangzheng:'强征',
qiangzheng_info:'锁定技,结束阶段,你获得一名其他角色的一张手牌。',
zuijiu:'醉酒',
zuijiu_info:'锁定技,你的黑杀造成的伤害+1造成伤害后须弃置一张手牌。',
heiwuchang:'黑无常',
suoling:'索令',
suoling_info:'锁定技,结束阶段,你解除横置状态,除你之外的所有角色进入横置状态。',
xixing:'吸星',
xixing_info:'出牌阶段限一次你可以弃置三张不同类别的牌对一名其他角色造成1点伤害然后回复1点体力。',
},
};
});
import { lib, game, ui, get, ai, _status } from "../noname.js";
game.import("character", function () {
return {
name: "zhuogui",
character: {
nianshou: ["male", "shu", 4, ["nianrui", "qixiang"]],
mamian: ["male", "qun", 4, ["lianyu", "guiji"]],
niutou: ["male", "shu", 4, ["manjia", "xiaoshou"]],
baiwuchang: ["male", "qun", 3, ["qiangzheng", "moukui"]],
heiwuchang: ["male", "qun", 3, ["suoling", "xixing"]],
},
skill: {
qixiang: {
group: ["qixiang1", "qixiang2"],
ai: {
effect: {
target: function (card, player, target, current) {
if (card.name == "lebu" && card.name == "bingliang") return 0.8;
},
},
},
},
qixiang1: {
trigger: { player: "judge" },
forced: true,
filter: function (event, player) {
if (event.card) {
if (event.card.viewAs) {
return event.card.viewAs == "lebu";
} else {
return event.card.name == "lebu";
}
}
},
content: function () {
player.addTempSkill("qixiang3", "phaseJudgeAfter");
},
},
qixiang2: {
trigger: { player: "judge" },
forced: true,
filter: function (event, player) {
if (event.card) {
if (event.card.viewAs) {
return event.card.viewAs == "bingliang";
} else {
return event.card.name == "bingliang";
}
}
},
content: function () {
player.addTempSkill("qixiang4", "phaseJudgeAfter");
},
},
qixiang3: {
mod: {
suit: function (card, suit) {
if (suit == "diamond") return "heart";
},
},
},
qixiang4: {
mod: {
suit: function (card, suit) {
if (suit == "spade") return "club";
},
},
},
nianrui: {
trigger: { player: ["phaseBegin", "phaseEnd"] },
content: function () {
"step 0";
player.judge(function (card) {
return get.color(card) == "red" ? 1 : 0;
});
"step 1";
if (result.bool) {
player.draw();
}
},
},
lianyu: {
enable: "phaseUse",
usable: 1,
filterCard: { color: "red" },
check: function (card) {
return 6 - get.value(card);
},
filterTarget: true,
selectTarget: -1,
line: "fire",
content: function () {
target.damage("fire");
},
ai: {
result: {
player: function (card, player, target) {
var eff = 0;
for (var i = 0; i < game.players.length; i++) {
if (!game.players[i].isOut()) {
eff += get.damageEffect(game.players[i], player, player, "fire");
}
}
return eff;
},
},
expose: 0.1,
},
},
manjia: {
group: ["manjia1", "manjia2"],
},
manjia1: {
trigger: { target: "useCardToBefore" },
forced: true,
priority: 6,
filter: function (event, player) {
if (player.getEquip(2)) return false;
return lib.skill.tengjia1.filter(event, player);
},
content: function () {
trigger.cancel();
},
ai: {
effect: {
target: function (card, player, target, current) {
if (target.getEquip(2)) return;
return lib.skill.tengjia1.ai.effect.target.apply(this, arguments);
},
},
},
},
manjia2: {
trigger: { player: "damageBegin" },
filter: function (event, player) {
if (player.getEquip(2)) return false;
if (event.hasNature("fire")) return true;
},
forced: true,
check: function () {
return false;
},
content: function () {
trigger.num++;
},
ai: {
effect: {
target: function (card, player, target, current) {
if (target.getEquip(2)) return;
return lib.skill.tengjia2.ai.effect.target.apply(this, arguments);
},
},
},
},
xiaoshou: {
trigger: { player: "phaseEnd" },
filter: function (event, player) {
var players = game.players.slice(0);
players.sort(function (a, b) {
return b.hp - a.hp;
});
return players[0].hp > players[1].hp && players[0] != player;
},
check: function (event, player) {
var players = game.players.slice(0);
players.sort(function (a, b) {
return b.hp - a.hp;
});
return get.damageEffect(players[0], player, player, "fire") > 0;
},
prompt: function () {
var players = game.players.slice(0);
players.sort(function (a, b) {
return b.hp - a.hp;
});
return "枭首:是否对" + get.translation(players[0]) + "造成1点火焰伤害";
},
content: function () {
var players = game.players.slice(0);
players.sort(function (a, b) {
return b.hp - a.hp;
});
if (players[0].hp > players[1].hp && players[0] != player) {
players[0].damage("fire");
player.line(players[0], "fire");
}
},
ai: {
expose: 0.2,
},
},
guiji: {
trigger: { player: "phaseJudgeBegin" },
forced: true,
content: function () {
player.discard(player.getCards("j").randomGet());
},
filter: function (event, player) {
return player.countCards("j") > 0;
},
ai: {
effect: {
target: function (card, player, target, current) {
if (get.type(card) == "delay" && target.countCards("j") == 0) return 0.1;
},
},
},
},
qiangzheng: {
audio: 2,
trigger: { player: "phaseEnd" },
direct: true,
forced: true,
filter: function (event, player) {
for (var i = 0; i < game.players.length; i++) {
if (game.players[i] != player && game.players[i].countCards("h")) return true;
}
return false;
},
content: function () {
"step 0";
player.chooseTarget("获得一名角色的一张手牌", true, function (card, player, target) {
return player != target && target.countCards("h") > 0;
}).ai = function (target) {
return -get.attitude(player, target);
};
"step 1";
if (result.targets && result.targets.length) {
player.logSkill("qiangzheng", result.targets);
player.gain(result.targets[0].getCards("h").randomGet(), result.targets[0]);
result.targets[0].$give(1, player);
game.delay();
}
},
ai: {
threaten: 1.7,
},
},
suoling: {
trigger: { player: "phaseEnd" },
forced: true,
filter: function (event, player) {
if (player.isLinked()) return true;
for (var i = 0; i < game.players.length; i++) {
if (game.players[i] != player && !game.players[i].isLinked()) {
return true;
}
}
return false;
},
content: function () {
"step 0";
event.targets = game.players.slice(0);
event.targets.remove(player);
event.targets.sort(lib.sort.seat);
if (player.isLinked()) player.link();
"step 1";
if (event.targets.length) {
var target = event.targets.shift();
if (!target.isLinked()) {
target.link();
}
event.redo();
}
},
},
xixing: {
enable: "phaseUse",
usable: 1,
filterCard: function (card) {
var type = get.type(card);
for (var i = 0; i < ui.selected.cards.length; i++) {
if (get.type(ui.selected.cards[i]) == type) return false;
}
return true;
},
complexCard: true,
selectCard: 3,
position: "he",
filterTarget: function (card, player, target) {
return player != target;
},
check: function (card) {
if (_status.event.player.hp == _status.event.player.maxHp) {
return 5 - get.value(card);
}
return 10 - get.value(card);
},
content: function () {
"step 0";
target.damage();
"step 1";
player.recover();
},
ai: {
order: 9.5,
result: {
target: function (player, target) {
return get.damageEffect(target, player);
},
},
expose: 0.2,
},
},
},
translate: {
nianshou: "年兽",
nianrui: "年瑞",
qixiang: "祺祥",
qixiang1: "祺祥",
qixiang2: "祺祥",
nianrui_info: "准备阶段和结束阶段,你可以进行一次判定,若结果为红色则摸一张牌。",
qixiang_info: "乐不思蜀判定时,你的方块判定牌视为红桃;兵粮寸断判定时,你的黑桃判定牌视为草花。",
mamian: "马面",
lianyu: "炼狱",
lianyu_info: "出牌阶段限一次你可以弃置一张红色手牌令场上所有角色受到1点火焰伤害。",
niutou: "牛头",
manjia: "蛮甲",
manjia1: "蛮甲",
manjia2: "蛮甲",
manjia_info: "锁定技,若你的装备区内没有防具牌,则你视为装备了【藤甲】。",
xiaoshou: "枭首",
xiaoshou_info: "结束阶段若场上体力值最多的角色只有一个你可以对其造成1点火焰伤害。",
guiji: "诡计",
guiji_info: "锁定技,准备阶段结束时,若你的判定区内有牌,你随机弃置其中一张牌。",
baiwuchang: "白无常",
qiangzheng: "强征",
qiangzheng_info: "锁定技,结束阶段,你获得一名其他角色的一张手牌。",
zuijiu: "醉酒",
zuijiu_info: "锁定技,你的黑杀造成的伤害+1造成伤害后须弃置一张手牌。",
heiwuchang: "黑无常",
suoling: "索令",
suoling_info: "锁定技,结束阶段,你解除横置状态,除你之外的所有角色进入横置状态。",
xixing: "吸星",
xixing_info:
"出牌阶段限一次你可以弃置三张不同类别的牌对一名其他角色造成1点伤害然后回复1点体力。",
},
};
});

View File

@ -1,136 +1,161 @@
import { lib, game, ui, get, ai, _status } from '../../noname.js';
game.import('play', function () {
import { lib, game, ui, get, ai, _status } from "../../noname.js";
game.import("play", function () {
return {
name:'boss',
init:function(){
if(get.mode()=='tafang') return;
var storage=localStorage.getItem('boss_storage_playpackconfig');
try{
storage=JSON.parse(storage)||{};
name: "boss",
init: function () {
if (get.mode() == "tafang") return;
var storage = localStorage.getItem("boss_storage_playpackconfig");
try {
storage = JSON.parse(storage) || {};
} catch (e) {
storage = {};
}
catch(e){
storage={};
}
if(get.mode()!='boss'){
lib.characterPack.mode_extension_boss=storage.boss||{};
for(var i in lib.characterPack.mode_extension_boss){
lib.characterPack.mode_extension_boss[i][4].push('mode:boss');
lib.character[i]=lib.characterPack.mode_extension_boss[i];
if(typeof lib.character[i][2]!='number'&&(typeof lib.character[i][2]!='string'||lib.character[i][2].indexOf('/')==-1)){
lib.character[i][2]=Infinity;
if (get.mode() != "boss") {
lib.characterPack.mode_extension_boss = storage.boss || {};
for (var i in lib.characterPack.mode_extension_boss) {
lib.characterPack.mode_extension_boss[i][4].push(
"mode:boss"
);
lib.character[i] = lib.characterPack.mode_extension_boss[i];
if (
typeof lib.character[i][2] != "number" &&
(typeof lib.character[i][2] != "string" ||
lib.character[i][2].indexOf("/") == -1)
) {
lib.character[i][2] = Infinity;
}
if(!lib.config.boss_enableai_playpackconfig){
if (!lib.config.boss_enableai_playpackconfig) {
lib.config.forbidai.push(i);
}
}
}
var list2=storage.versus||{};
if(get.mode()!='versus'||get.config('versus_mode')!='jiange'){
lib.characterPack.mode_extension_jiange=list2;
for(var i in list2){
lib.characterPack.mode_extension_jiange[i]=list2[i];
lib.characterPack.mode_extension_jiange[i][4].push('mode:versus');
lib.character[i]=list2[i];
if(typeof lib.character[i][2]!='number'){
lib.character[i][2]=Infinity;
var list2 = storage.versus || {};
if (
get.mode() != "versus" ||
get.config("versus_mode") != "jiange"
) {
lib.characterPack.mode_extension_jiange = list2;
for (var i in list2) {
lib.characterPack.mode_extension_jiange[i] = list2[i];
lib.characterPack.mode_extension_jiange[i][4].push(
"mode:versus"
);
lib.character[i] = list2[i];
if (typeof lib.character[i][2] != "number") {
lib.character[i][2] = Infinity;
}
if(!lib.config.boss_enableai_playpackconfig){
if (!lib.config.boss_enableai_playpackconfig) {
lib.config.forbidai.push(i);
}
}
lib.characterIntro.boss_liedixuande=lib.characterIntro.liubei;
lib.characterIntro.boss_gongshenyueying=lib.characterIntro.huangyueying;
lib.characterIntro.boss_tianhoukongming=lib.characterIntro.shen_zhugeliang;
lib.characterIntro.boss_yuhuoshiyuan=lib.characterIntro.pangtong;
lib.characterIntro.boss_qiaokuijunyi=lib.characterIntro.zhanghe;
lib.characterIntro.boss_jiarenzidan=lib.characterIntro.caozhen;
lib.characterIntro.boss_duanyuzhongda=lib.characterIntro.simayi;
lib.characterIntro.boss_juechenmiaocai=lib.characterIntro.xiahouyuan;
}
else if(_status.mode!='jiange'){
for(var i in list2){
lib.character[i]=list2[i];
if(!lib.config.boss_enableai_playpackconfig){
lib.characterIntro.boss_liedixuande = lib.characterIntro.liubei;
lib.characterIntro.boss_gongshenyueying =
lib.characterIntro.huangyueying;
lib.characterIntro.boss_tianhoukongming =
lib.characterIntro.shen_zhugeliang;
lib.characterIntro.boss_yuhuoshiyuan =
lib.characterIntro.pangtong;
lib.characterIntro.boss_qiaokuijunyi =
lib.characterIntro.zhanghe;
lib.characterIntro.boss_jiarenzidan =
lib.characterIntro.caozhen;
lib.characterIntro.boss_duanyuzhongda =
lib.characterIntro.simayi;
lib.characterIntro.boss_juechenmiaocai =
lib.characterIntro.xiahouyuan;
} else if (_status.mode != "jiange") {
for (var i in list2) {
lib.character[i] = list2[i];
if (!lib.config.boss_enableai_playpackconfig) {
lib.config.forbidai.push(i);
}
}
}
var list=storage.translate||{};
list.mode_extension_boss_character_config='挑战武将';
list.mode_extension_jiange_character_config='剑阁武将';
var list = storage.translate || {};
list.mode_extension_boss_character_config = "挑战武将";
list.mode_extension_jiange_character_config = "剑阁武将";
for(var i in list){
lib.translate[i]=lib.translate[i]||list[i];
for (var i in list) {
lib.translate[i] = lib.translate[i] || list[i];
}
},
arenaReady:function(){
if(get.mode()=='tafang') return;
var storage=localStorage.getItem('boss_storage_playpackconfig');
try{
storage=JSON.parse(storage)||{};
arenaReady: function () {
if (get.mode() == "tafang") return;
var storage = localStorage.getItem("boss_storage_playpackconfig");
try {
storage = JSON.parse(storage) || {};
} catch (e) {
storage = {};
}
catch(e){
storage={};
if (!storage.translate) {
storage.translate = {};
}
if(!storage.translate){
storage.translate={};
}
var loadversus=function(){
if(get.mode()!='versus'){
game.loadModeAsync('versus',function(mode){
for(var i in mode.translate){
lib.translate[i]=lib.translate[i]||mode.translate[i];
storage.translate[i]=mode.translate[i];
var loadversus = function () {
if (get.mode() != "versus") {
game.loadModeAsync("versus", function (mode) {
for (var i in mode.translate) {
lib.translate[i] =
lib.translate[i] || mode.translate[i];
storage.translate[i] = mode.translate[i];
}
for(var i in mode.skill){
if(lib.skill[i]) console.log(i);
if(i!='versus_ladder'){
lib.skill[i]=mode.skill[i];
for (var i in mode.skill) {
if (lib.skill[i]) console.log(i);
if (i != "versus_ladder") {
lib.skill[i] = mode.skill[i];
}
}
for(var ii in mode.skill){
if(ii!='versus_ladder'){
for (var ii in mode.skill) {
if (ii != "versus_ladder") {
game.finishSkill(ii);
}
}
storage.versus={};
for(var i in mode.jiangeboss){
if(mode.jiangeboss[i][4].includes('bossallowed')){
storage.versus[i]=mode.jiangeboss[i];
storage.versus = {};
for (var i in mode.jiangeboss) {
if (mode.jiangeboss[i][4].includes("bossallowed")) {
storage.versus[i] = mode.jiangeboss[i];
}
}
localStorage.setItem('boss_storage_playpackconfig',JSON.stringify(storage));
localStorage.setItem(
"boss_storage_playpackconfig",
JSON.stringify(storage)
);
});
}
else{
localStorage.setItem('boss_storage_playpackconfig',JSON.stringify(storage));
} else {
localStorage.setItem(
"boss_storage_playpackconfig",
JSON.stringify(storage)
);
}
};
if(get.mode()!='boss'){
game.loadModeAsync('boss',function(mode){
for(var i in mode.translate){
lib.translate[i]=lib.translate[i]||mode.translate[i];
storage.translate[i]=mode.translate[i];
if (get.mode() != "boss") {
game.loadModeAsync("boss", function (mode) {
for (var i in mode.translate) {
lib.translate[i] =
lib.translate[i] || mode.translate[i];
storage.translate[i] = mode.translate[i];
}
for(var i in mode.skill){
if(lib.skill[i]) console.log(i);
lib.skill[i]=mode.skill[i];
for (var i in mode.skill) {
if (lib.skill[i]) console.log(i);
lib.skill[i] = mode.skill[i];
}
for(var ii in mode.skill){
if(ii!='versus_ladder'){
for (var ii in mode.skill) {
if (ii != "versus_ladder") {
game.finishSkill(ii);
}
}
storage.boss={};
for(var i in mode.characterPack.mode_boss){
if(mode.characterPack.mode_boss[i][4].includes('bossallowed')){
storage.boss[i]=mode.characterPack.mode_boss[i];
storage.boss = {};
for (var i in mode.characterPack.mode_boss) {
if (
mode.characterPack.mode_boss[i][4].includes(
"bossallowed"
)
) {
storage.boss[i] = mode.characterPack.mode_boss[i];
}
}
loadversus();
});
}
else{
} else {
loadversus();
}
},

View File

@ -1,92 +1,102 @@
import { lib, game, ui, get, ai, _status } from '../../noname.js';
game.import('play', function () {
import { lib, game, ui, get, ai, _status } from "../../noname.js";
game.import("play", function () {
return {
name:'cardpile',
arenaReady:function(){
var data={
total:160,
sha:{
diamond:6,
club:14,
heart:3,
spade:7,
name: "cardpile",
arenaReady: function () {
var data = {
total: 160,
sha: {
diamond: 6,
club: 14,
heart: 3,
spade: 7,
},
huosha:{
diamond:2,
heart:3
huosha: {
diamond: 2,
heart: 3,
},
leisha:{
spade:5,
club:4
leisha: {
spade: 5,
club: 4,
},
shan:{
heart:6,
diamond:18
shan: {
heart: 6,
diamond: 18,
},
jiu:{
diamond:1,
spade:2,
club:2
jiu: {
diamond: 1,
spade: 2,
club: 2,
},
tao:{
heart:9,
diamond:3,
tao: {
heart: 9,
diamond: 3,
},
wanjian:{
heart:1,
wanjian: {
heart: 1,
},
nanman:{
spade:2,
club:1,
nanman: {
spade: 2,
club: 1,
},
guohe:{
spade:3,
club:2,
heart:1
guohe: {
spade: 3,
club: 2,
heart: 1,
},
shunshou:{
spade:3,
diamond:2
shunshou: {
spade: 3,
diamond: 2,
},
wuxie:{
heart:2,
diamond:1,
spade:2,
club:2
wuxie: {
heart: 2,
diamond: 1,
spade: 2,
club: 2,
},
tiesuo:{
spade:2,
club:4
tiesuo: {
spade: 2,
club: 4,
},
};
var rand = function () {
return Math.ceil(Math.random() * 13);
};
var getn = function (i, j) {
return Math.round(
data[i][j] *
parseFloat(
lib.config["cardpile_" + i + "_playpackconfig"]
)
);
};
var num = 0;
for (var i in data) {
for (var j in data[i]) {
num += getn(i, j);
}
}
var rand=function(){
return Math.ceil(Math.random()*13);
};
var getn=function(i,j){
return Math.round(data[i][j]*parseFloat(lib.config['cardpile_'+i+'_playpackconfig']));
};
var num=0;
for(var i in data){
for(var j in data[i]){
num+=getn(i,j);
}
}
var dn=num*(lib.card.list.length-data.total)/(data.total-num);
if(dn>1000) dn=1000;
if(dn>0){
var p=0;
for(var i in data){
for(var j in data[i]){
var n=Math.round(dn*getn(i,j)/num);
while(n--){
if(i=='huosha'){
lib.card.list.push([j,rand(),'sha','fire']);
}
else if(i=='leisha'){
lib.card.list.push([j,rand(),'sha','thunder']);
}
else{
lib.card.list.push([j,rand(),i]);
var dn =
(num * (lib.card.list.length - data.total)) /
(data.total - num);
if (dn > 1000) dn = 1000;
if (dn > 0) {
var p = 0;
for (var i in data) {
for (var j in data[i]) {
var n = Math.round((dn * getn(i, j)) / num);
while (n--) {
if (i == "huosha") {
lib.card.list.push([j, rand(), "sha", "fire"]);
} else if (i == "leisha") {
lib.card.list.push([
j,
rand(),
"sha",
"thunder",
]);
} else {
lib.card.list.push([j, rand(), i]);
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,229 +1,376 @@
import { lib, game, ui, get, ai, _status } from '../../noname.js';
game.import('play', function () {
import { lib, game, ui, get, ai, _status } from "../../noname.js";
game.import("play", function () {
return {
name:'wuxing',
arenaReady:function(){
if(_status.connectMode) return;
lib.card.list.splice(Math.floor(lib.card.list.length*Math.random()),0,['spade',5,'wuxingpan']);
if(!_status.video){
name: "wuxing",
arenaReady: function () {
if (_status.connectMode) return;
lib.card.list.splice(
Math.floor(lib.card.list.length * Math.random()),
0,
["spade", 5, "wuxingpan"]
);
if (!_status.video) {
lib.video.push({
type:'play',
name:'wuxing'
type: "play",
name: "wuxing",
});
}
},
video:function(){
for(var i in this.translate){
lib.translate[i]=this.translate[i];
video: function () {
for (var i in this.translate) {
lib.translate[i] = this.translate[i];
}
for(var i in this.card){
lib.card[i]=this.card[i];
for (var i in this.card) {
lib.card[i] = this.card[i];
}
for(var i in this.skill){
lib.skill[i]=this.skill[i];
for (var i in this.skill) {
lib.skill[i] = this.skill[i];
}
},
element:{
player:{
init:function(player){
if(player.node.wuxing){
element: {
player: {
init: function (player) {
if (player.node.wuxing) {
player.node.wuxing.remove();
}
if(_status.video||_status.connectMode) return;
var node=ui.create.div('.wunature',player);
var list=['metal','wood','water','fire','soil'];
var nature=list.randomGet();
player.wunature=nature;
node.dataset.nature=nature;
node.innerHTML=get.translation(nature);
player.node.wuxing=node;
}
if (_status.video || _status.connectMode) return;
var node = ui.create.div(".wunature", player);
var list = ["metal", "wood", "water", "fire", "soil"];
var nature = list.randomGet();
player.wunature = nature;
node.dataset.nature = nature;
node.innerHTML = get.translation(nature);
player.node.wuxing = node;
},
},
card:{
init:function(card){
if(_status.video||_status.connectMode) return;
if(card.name=='wuxingpan') return;
if(card.wunature) return;
if(Math.random()>(parseFloat(lib.config.wuxing_num_playpackconfig)||0)) return;
var node=ui.create.div('.wunature',card);
var list=['metal','wood','water','fire','soil'];
var nature=list.randomGet();
card.wunature=nature;
node.dataset.nature=nature;
node.innerHTML=get.translation(nature);
card.node.wuxing=node;
if(!card.suit||!card.number){
card.node.wuxing.style.display='none';
card: {
init: function (card) {
if (_status.video || _status.connectMode) return;
if (card.name == "wuxingpan") return;
if (card.wunature) return;
if (
Math.random() >
(parseFloat(lib.config.wuxing_num_playpackconfig) || 0)
)
return;
var node = ui.create.div(".wunature", card);
var list = ["metal", "wood", "water", "fire", "soil"];
var nature = list.randomGet();
card.wunature = nature;
node.dataset.nature = nature;
node.innerHTML = get.translation(nature);
card.node.wuxing = node;
if (!card.suit || !card.number) {
card.node.wuxing.style.display = "none";
}
}
}
},
},
},
skill:{
_shengke:{
trigger:{target:'useCardToBegin'},
forced:true,
popup:false,
filter:function(event,player){
if(_status.connectMode) return false;
return event.card.wunature&&player.wunature;
skill: {
_shengke: {
trigger: { target: "useCardToBegin" },
forced: true,
popup: false,
filter: function (event, player) {
if (_status.connectMode) return false;
return event.card.wunature && player.wunature;
},
content:function(){
switch(trigger.card.wunature){
case 'metal':
switch(player.wunature){
case 'wood':
if(player.countCards('he')){
game.log(player,'被'+get.translation(trigger.card.wunature)+'属性的卡牌克制');
player.chooseToDiscard('你被金属性卡牌克制,需弃置一张牌',true,'he').ai=get.disvalue;player.popup('金克木')}return;
case 'water':
game.log(player,'得到'+get.translation(trigger.card.wunature)+'属性卡牌的加成');
player.draw();player.popup('金生水');
return;
}
return;
case 'wood':
switch(player.wunature){
case 'soil':
if(player.countCards('he')){
game.log(player,'被'+get.translation(trigger.card.wunature)+'属性的卡牌克制');
player.chooseToDiscard('你被木属性卡牌克制,需弃置一张牌',true,'he').ai=get.disvalue;player.popup('木克土')}return;
case 'fire':
game.log(player,'得到'+get.translation(trigger.card.wunature)+'属性卡牌的加成');
player.draw();player.popup('木生火');
return;
}
return;
case 'water':
switch(player.wunature){
case 'fire':
if(player.countCards('he')){
game.log(player,'被'+get.translation(trigger.card.wunature)+'属性的卡牌克制');
player.chooseToDiscard('你被水属性卡牌克制,需弃置一张牌',true,'he').ai=get.disvalue;player.popup('水克火')}return;
case 'wood':
game.log(player,'得到'+get.translation(trigger.card.wunature)+'属性卡牌的加成');
player.draw();player.popup('水生木');
return;
}
return;
case 'fire':
switch(player.wunature){
case 'metal':
if(player.countCards('he')){
game.log(player,'被'+get.translation(trigger.card.wunature)+'属性的卡牌克制');
player.chooseToDiscard('你被火属性卡牌克制,需弃置一张牌',true,'he').ai=get.disvalue;player.popup('火克金')}return;
case 'soil':
game.log(player,'得到'+get.translation(trigger.card.wunature)+'属性卡牌的加成');
player.draw();player.popup('火生土');
return;
}
return;
case 'soil':
switch(player.wunature){
case 'water':
if(player.countCards('he')){
game.log(player,'被'+get.translation(trigger.card.wunature)+'属性的卡牌克制');
player.chooseToDiscard('你被土属性卡牌克制,需弃置一张牌',true,'he').ai=get.disvalue;player.popup('土克水')}return;
case 'metal':
game.log(player,'得到'+get.translation(trigger.card.wunature)+'属性卡牌的加成');
player.draw();player.popup('土生金');
return;
}
return;
}
},
ai:{
effect:{
target:function(card,player,target,current){
switch(card.wunature){
case 'metal':
switch(target.wunature){
case 'wood':if(current!=0) return [1,-0.3];return;
case 'water':if(current!=0) return [1,0.3];return;
}
return;
case 'wood':
switch(target.wunature){
case 'soil':if(current!=0) return [1,-0.3];return;
case 'fire':if(current!=0) return [1,0.3];return;
}
return;
case 'water':
switch(target.wunature){
case 'fire':if(current!=0) return [1,-0.3];return;
case 'wood':if(current!=0) return [1,0.3];return;
}
return;
case 'fire':
switch(target.wunature){
case 'metal':if(current!=0) return [1,-0.3];return;
case 'soil':if(current!=0) return [1,0.3];return;
}
return;
case 'soil':
switch(target.wunature){
case 'water':if(current!=0) return [1,-0.3];return;
case 'metal':if(current!=0) return [1,0.3];return;
}
return;
content: function () {
switch (trigger.card.wunature) {
case "metal":
switch (player.wunature) {
case "wood":
if (player.countCards("he")) {
game.log(
player,
"被" +
get.translation(
trigger.card.wunature
) +
"属性的卡牌克制"
);
player.chooseToDiscard(
"你被金属性卡牌克制,需弃置一张牌",
true,
"he"
).ai = get.disvalue;
player.popup("金克木");
}
return;
case "water":
game.log(
player,
"得到" +
get.translation(
trigger.card.wunature
) +
"属性卡牌的加成"
);
player.draw();
player.popup("金生水");
return;
}
}
return;
case "wood":
switch (player.wunature) {
case "soil":
if (player.countCards("he")) {
game.log(
player,
"被" +
get.translation(
trigger.card.wunature
) +
"属性的卡牌克制"
);
player.chooseToDiscard(
"你被木属性卡牌克制,需弃置一张牌",
true,
"he"
).ai = get.disvalue;
player.popup("木克土");
}
return;
case "fire":
game.log(
player,
"得到" +
get.translation(
trigger.card.wunature
) +
"属性卡牌的加成"
);
player.draw();
player.popup("木生火");
return;
}
return;
case "water":
switch (player.wunature) {
case "fire":
if (player.countCards("he")) {
game.log(
player,
"被" +
get.translation(
trigger.card.wunature
) +
"属性的卡牌克制"
);
player.chooseToDiscard(
"你被水属性卡牌克制,需弃置一张牌",
true,
"he"
).ai = get.disvalue;
player.popup("水克火");
}
return;
case "wood":
game.log(
player,
"得到" +
get.translation(
trigger.card.wunature
) +
"属性卡牌的加成"
);
player.draw();
player.popup("水生木");
return;
}
return;
case "fire":
switch (player.wunature) {
case "metal":
if (player.countCards("he")) {
game.log(
player,
"被" +
get.translation(
trigger.card.wunature
) +
"属性的卡牌克制"
);
player.chooseToDiscard(
"你被火属性卡牌克制,需弃置一张牌",
true,
"he"
).ai = get.disvalue;
player.popup("火克金");
}
return;
case "soil":
game.log(
player,
"得到" +
get.translation(
trigger.card.wunature
) +
"属性卡牌的加成"
);
player.draw();
player.popup("火生土");
return;
}
return;
case "soil":
switch (player.wunature) {
case "water":
if (player.countCards("he")) {
game.log(
player,
"被" +
get.translation(
trigger.card.wunature
) +
"属性的卡牌克制"
);
player.chooseToDiscard(
"你被土属性卡牌克制,需弃置一张牌",
true,
"he"
).ai = get.disvalue;
player.popup("土克水");
}
return;
case "metal":
game.log(
player,
"得到" +
get.translation(
trigger.card.wunature
) +
"属性卡牌的加成"
);
player.draw();
player.popup("土生金");
return;
}
return;
}
}
},
ai: {
effect: {
target: function (card, player, target, current) {
switch (card.wunature) {
case "metal":
switch (target.wunature) {
case "wood":
if (current != 0) return [1, -0.3];
return;
case "water":
if (current != 0) return [1, 0.3];
return;
}
return;
case "wood":
switch (target.wunature) {
case "soil":
if (current != 0) return [1, -0.3];
return;
case "fire":
if (current != 0) return [1, 0.3];
return;
}
return;
case "water":
switch (target.wunature) {
case "fire":
if (current != 0) return [1, -0.3];
return;
case "wood":
if (current != 0) return [1, 0.3];
return;
}
return;
case "fire":
switch (target.wunature) {
case "metal":
if (current != 0) return [1, -0.3];
return;
case "soil":
if (current != 0) return [1, 0.3];
return;
}
return;
case "soil":
switch (target.wunature) {
case "water":
if (current != 0) return [1, -0.3];
return;
case "metal":
if (current != 0) return [1, 0.3];
return;
}
return;
}
},
},
},
},
wuxingpan_skill:{
enable:'phaseUse',
usable:1,
filterCard:true,
lose:false,
prompt:'选择一张手牌永久改变其五行属性',
content:function(){
"step 0"
player.chooseControl('metal','wood','water','fire','soil');
"step 1"
var card=cards[0];
if(!card.node.wuxing){
card.node.wuxing=ui.create.div('.wunature',card);
wuxingpan_skill: {
enable: "phaseUse",
usable: 1,
filterCard: true,
lose: false,
prompt: "选择一张手牌永久改变其五行属性",
content: function () {
"step 0";
player.chooseControl(
"metal",
"wood",
"water",
"fire",
"soil"
);
("step 1");
var card = cards[0];
if (!card.node.wuxing) {
card.node.wuxing = ui.create.div(".wunature", card);
}
card.wunature=result.control;
card.node.wuxing.dataset.nature=result.control;
card.node.wuxing.innerHTML=get.translation(result.control);
}
}
card.wunature = result.control;
card.node.wuxing.dataset.nature = result.control;
card.node.wuxing.innerHTML = get.translation(
result.control
);
},
},
},
card:{
wuxingpan:{
type:'equip',
subtype:'equip5',
skills:['wuxingpan_skill'],
fullskin:true
}
card: {
wuxingpan: {
type: "equip",
subtype: "equip5",
skills: ["wuxingpan_skill"],
fullskin: true,
},
},
translate:{
metal:'金',
wood:'木',
water:'水',
soil:'土',
goldColor:'rgb(236,236,130)',
woodColor:'rgb(149,202,147)',
waterColor:'rgb(150,88,201)',
fireColor:'rgb(236,132,106)',
soilColor:'rgb(201,159,98)',
goldColor2:'rgba(236,236,57,0.3)',
woodColor2:'rgba(33,155,10,0.3)',
waterColor2:'rgba(29,156,255,0.3)',
fireColor2:'rgba(255,51,0,0.3)',
soilColor2:'rgba(163,98,0,0.3)',
wuxingpan:'五行盘',
wuxingpan_skill:'五行',
wuxingpan_skill_info:'出牌阶段限一次,你可以永久改变一张手牌的五行属性',
wuxingpan_info:'出牌阶段限一次,你可以永久改变一张手牌的五行属性',
translate: {
metal: "金",
wood: "木",
water: "水",
soil: "土",
goldColor: "rgb(236,236,130)",
woodColor: "rgb(149,202,147)",
waterColor: "rgb(150,88,201)",
fireColor: "rgb(236,132,106)",
soilColor: "rgb(201,159,98)",
goldColor2: "rgba(236,236,57,0.3)",
woodColor2: "rgba(33,155,10,0.3)",
waterColor2: "rgba(29,156,255,0.3)",
fireColor2: "rgba(255,51,0,0.3)",
soilColor2: "rgba(163,98,0,0.3)",
wuxingpan: "五行盘",
wuxingpan_skill: "五行",
wuxingpan_skill_info:
"出牌阶段限一次,你可以永久改变一张手牌的五行属性",
wuxingpan_info: "出牌阶段限一次,你可以永久改变一张手牌的五行属性",
},
help: {
五行生克:
"<ul><li>每名角色在游戏开始时随机获得一个属性<li>牌堆中三分之一的牌会随机获得一个属性<li>当一名成为相克属性卡牌的目标时," +
"须弃置一张牌<li>当一名角色成为相生的卡牌的目标时,须摸一张牌" +
"<li>金克木,金生水;<br>木克土,木生火;<br>水克火,水生木;<br>火克金,火生土;<br>土克水,土生金",
},
help:{
'五行生克':'<ul><li>每名角色在游戏开始时随机获得一个属性<li>牌堆中三分之一的牌会随机获得一个属性<li>当一名成为相克属性卡牌的目标时,'+
'须弃置一张牌<li>当一名角色成为相生的卡牌的目标时,须摸一张牌'+
'<li>金克木,金生水;<br>木克土,木生火;<br>水克火,水生木;<br>火克金,火生土;<br>土克水,土生金'
}
};
});

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
// apk每次安装后第一次启动加载Service Worker会失败
// 所以每次导入这个ts判断是否会成功失败的话重启一次
export const text: string = 'ts文件导入成功';
export const text: string = "ts文件导入成功";

File diff suppressed because it is too large Load Diff

View File

@ -1,249 +1,410 @@
window.config={
extension_sources:{
'GitHub Proxy':'https://mirror.ghproxy.com/https://raw.githubusercontent.com/libccy/noname-extension/master/',
FastGit:'https://raw.fgit.cf/libccy/noname-extension/master/',
GitHub:'https://raw.githubusercontent.com/libccy/noname-extension/master/'
window.config = {
extension_sources: {
"GitHub Proxy":
"https://mirror.ghproxy.com/https://raw.githubusercontent.com/libccy/noname-extension/master/",
FastGit: "https://raw.fgit.cf/libccy/noname-extension/master/",
GitHub: "https://raw.githubusercontent.com/libccy/noname-extension/master/",
},
extension_source:'GitHub Proxy',
forbidai:['ns_liuzhang'],
forbidai_user:[],
forbidall:[],
forbidstone:['zhugedan','pal_xuanxiao','hs_malfurion','lusu','chenlin','hs_siwangzhiyi',
'gjqt_bailitusu','yuanshao','swd_anka','swd_nicole','daqiao','re_daqiao','hs_xuanzhuanjijia',
'zhuran','huatuo','swd_tuwei','hs_guldan','wangyi','caoang','swd_guyue','swd_rongshuang',
'swd_jiangziya','guojia','re_guojia','shen_caocao','swd_qiner','caopi','hs_yngvar','guansuo',
'gjqt_aruan','swd_hanluo','hs_anduin','swd_huanglei','yxs_yujix','yxs_luzhishen','swd_muyun','ow_tianshi',
'pal_yuejinzhao','hs_antonidas','xushi','hs_lreno'
extension_source: "GitHub Proxy",
forbidai: ["ns_liuzhang"],
forbidai_user: [],
forbidall: [],
forbidstone: [
"zhugedan",
"pal_xuanxiao",
"hs_malfurion",
"lusu",
"chenlin",
"hs_siwangzhiyi",
"gjqt_bailitusu",
"yuanshao",
"swd_anka",
"swd_nicole",
"daqiao",
"re_daqiao",
"hs_xuanzhuanjijia",
"zhuran",
"huatuo",
"swd_tuwei",
"hs_guldan",
"wangyi",
"caoang",
"swd_guyue",
"swd_rongshuang",
"swd_jiangziya",
"guojia",
"re_guojia",
"shen_caocao",
"swd_qiner",
"caopi",
"hs_yngvar",
"guansuo",
"gjqt_aruan",
"swd_hanluo",
"hs_anduin",
"swd_huanglei",
"yxs_yujix",
"yxs_luzhishen",
"swd_muyun",
"ow_tianshi",
"pal_yuejinzhao",
"hs_antonidas",
"xushi",
"hs_lreno",
],
forbidchess:['hetaihou','swd_kangnalishi'],
forbidboss:['caiwenji','gjqt_aruan','pal_xuanxiao','swd_hupo'],
forbiddouble:['zhugedan','swd_kangnalishi','dongzhuo','wutugu','hs_siwangzhiyi','hs_ronghejuren','hs_shanlingjuren'],
forbidthreecard:['qiankunbiao','shenhuofeiya','gw_ciguhanshuang','gw_birinongwu','gw_qinpendayu','gw_poxiao'],
zhinang_tricks:['guohe','wuxie','wuzhong','dongzhuxianji'],
connect_zhinang_tricks:['guohe','wuxie','wuzhong','dongzhuxianji'],
all:{
sgscharacters:['standard','shenhua','xinghuoliaoyuan','refresh','yijiang','sp','sp2','xianding','huicui','extra','old','mobile','shiji','tw','yingbian','offline','jsrg','sb','clan','collab','onlyOL'],
sgscards:['standard','extra','sp','guozhan','zhulu','yingbian','yongjian'],
sgsmodes:['identity','guozhan','versus','doudizhu','single','brawl','connect'],
stockmode:['identity','guozhan','versus','boss','doudizhu','single','chess','stone','connect','brawl','tafang'],
stockextension:['boss','cardpile','coin','wuxing'],
layout:['default','newlayout'],
theme:['woodden','music','simple'],
card_font:['xiaozhuan','huangcao','caoshu','xingshu'],
double_hp:['hejiansan','pingjun','zuidazhi','zuixiaozhi','zonghe'],
image_background_filter:['default','blur','gray','sepia','invert','saturate','contrast','hue','brightness'],
forbidchess: ["hetaihou", "swd_kangnalishi"],
forbidboss: ["caiwenji", "gjqt_aruan", "pal_xuanxiao", "swd_hupo"],
forbiddouble: [
"zhugedan",
"swd_kangnalishi",
"dongzhuo",
"wutugu",
"hs_siwangzhiyi",
"hs_ronghejuren",
"hs_shanlingjuren",
],
forbidthreecard: [
"qiankunbiao",
"shenhuofeiya",
"gw_ciguhanshuang",
"gw_birinongwu",
"gw_qinpendayu",
"gw_poxiao",
],
zhinang_tricks: ["guohe", "wuxie", "wuzhong", "dongzhuxianji"],
connect_zhinang_tricks: ["guohe", "wuxie", "wuzhong", "dongzhuxianji"],
all: {
sgscharacters: [
"standard",
"shenhua",
"xinghuoliaoyuan",
"refresh",
"yijiang",
"sp",
"sp2",
"xianding",
"huicui",
"extra",
"old",
"mobile",
"shiji",
"tw",
"yingbian",
"offline",
"jsrg",
"sb",
"clan",
"collab",
"onlyOL",
],
sgscards: [
"standard",
"extra",
"sp",
"guozhan",
"zhulu",
"yingbian",
"yongjian",
],
sgsmodes: [
"identity",
"guozhan",
"versus",
"doudizhu",
"single",
"brawl",
"connect",
],
stockmode: [
"identity",
"guozhan",
"versus",
"boss",
"doudizhu",
"single",
"chess",
"stone",
"connect",
"brawl",
"tafang",
],
stockextension: ["boss", "cardpile", "coin", "wuxing"],
layout: ["default", "newlayout"],
theme: ["woodden", "music", "simple"],
card_font: ["xiaozhuan", "huangcao", "caoshu", "xingshu"],
double_hp: ["hejiansan", "pingjun", "zuidazhi", "zuixiaozhi", "zonghe"],
image_background_filter: [
"default",
"blur",
"gray",
"sepia",
"invert",
"saturate",
"contrast",
"hue",
"brightness",
],
},
game:'sgs',
duration:500,
hoveration:1000,
doubleclick_intro:true,
cheat:false,
volumn_background:8,
volumn_audio:8,
game: "sgs",
duration: 500,
hoveration: 1000,
doubleclick_intro: true,
cheat: false,
volumn_background: 8,
volumn_audio: 8,
connect_avatar:'caocao',
connect_nickname:'无名玩家',
config_menu:true,
auto_popped_config:true,
auto_popped_history:false,
auto_skill:true,
auto_confirm:true,
enable_drag:true,
enable_pressure:false,
pressure_taptic:true,
hover_handcard:true,
hover_all:true,
right_info:true,
longpress_info:true,
long_info:true,
background_music:'music_default',
background_audio:true,
background_speak:true,
glow_phase:'yellow',
die_move:'flip',
connect_avatar: "caocao",
connect_nickname: "无名玩家",
config_menu: true,
auto_popped_config: true,
auto_popped_history: false,
auto_skill: true,
auto_confirm: true,
enable_drag: true,
enable_pressure: false,
pressure_taptic: true,
hover_handcard: true,
hover_all: true,
right_info: true,
longpress_info: true,
long_info: true,
background_music: "music_default",
background_audio: true,
background_speak: true,
glow_phase: "yellow",
die_move: "flip",
skin:{},
gameRecord:{},
extensionInfo:{},
autoskilllist:[],
hiddenModePack:[],
hiddenCharacterPack:[],
hiddenCardPack:[],
hiddenPlayPack:[],
hiddenBackgroundPack:[],
customBackgroundPack:[],
favouriteCharacter:[],
favouriteMode:[],
recentIP:[],
vintageSkills:[],
alteredSkills:[],
brokenFile:[],
skin: {},
gameRecord: {},
extensionInfo: {},
autoskilllist: [],
hiddenModePack: [],
hiddenCharacterPack: [],
hiddenCardPack: [],
hiddenPlayPack: [],
hiddenBackgroundPack: [],
customBackgroundPack: [],
favouriteCharacter: [],
favouriteMode: [],
recentIP: [],
vintageSkills: [],
alteredSkills: [],
brokenFile: [],
theme:'woodden',
layout:'mobile',
card_style:'default',
cardback_style:'default',
hp_style:'default',
theme: "woodden",
layout: "mobile",
card_style: "default",
cardback_style: "default",
hp_style: "default",
image_character:'default',
image_background:'default',
image_character: "default",
image_background: "default",
asset_image:true,
asset_font:true,
asset_image: true,
asset_font: true,
card_font:'xiaozhuan',
show_statusbar_ios:'off',
show_statusbar_android:false,
show_name:true,
show_replay:false,
show_round_menu:true,
show_pause:true,
show_auto:true,
show_volumn:true,
show_cardpile:true,
only_fullskin:true,
show_connect:true,
show_wuxie:false,
show_wuxie_self:true,
show_stat:true,
show_playerids:true,
show_scrollbar:false,
mousewheel:true,
fold_card:true,
threed_card:false,
vertical_scroll:false,
handcard_scroll:0,
animation:true,
skill_animation_type:'default',
paused:false,
title:false,
button_press:true,
damage_shake:true,
log_highlight:true,
player_border:'normal',
radius_size:'default',
card_font: "xiaozhuan",
show_statusbar_ios: "off",
show_statusbar_android: false,
show_name: true,
show_replay: false,
show_round_menu: true,
show_pause: true,
show_auto: true,
show_volumn: true,
show_cardpile: true,
only_fullskin: true,
show_connect: true,
show_wuxie: false,
show_wuxie_self: true,
show_stat: true,
show_playerids: true,
show_scrollbar: false,
mousewheel: true,
fold_card: true,
threed_card: false,
vertical_scroll: false,
handcard_scroll: 0,
animation: true,
skill_animation_type: "default",
paused: false,
title: false,
button_press: true,
damage_shake: true,
log_highlight: true,
player_border: "normal",
radius_size: "default",
modeconfig:false,
gameconfig:false,
appearence:false,
video:'20',
coin:0,
modeconfig: false,
gameconfig: false,
appearence: false,
video: "20",
coin: 0,
intro:'i',
right_click:'pause',
sort:'type_sort',
intro: "i",
right_click: "pause",
sort: "type_sort",
cards:['standard','extra'],
characters:['standard','shenhua','sp','sp2','yijiang','refresh','xinghuoliaoyuan','mobile','extra','yingbian','sb','tw','offline','clan','collab','xianding','huicui','shiji','jsrg','onlyOL'],
connect_characters:['diy'],
connect_cards:['huanlekapai','guozhan','sp','zhulu','yingbian','yongjian'],
plays:[],
extensions:[],
banned:[],
bannedcards:[],
forbidlist:[],
bannedpile:{},
customcardpile:{},
addedpile:{},
cards: ["standard", "extra"],
characters: [
"standard",
"shenhua",
"sp",
"sp2",
"yijiang",
"refresh",
"xinghuoliaoyuan",
"mobile",
"extra",
"yingbian",
"sb",
"tw",
"offline",
"clan",
"collab",
"xianding",
"huicui",
"shiji",
"jsrg",
"onlyOL",
],
connect_characters: ["diy"],
connect_cards: [
"huanlekapai",
"guozhan",
"sp",
"zhulu",
"yingbian",
"yongjian",
],
plays: [],
extensions: [],
banned: [],
bannedcards: [],
forbidlist: [],
bannedpile: {},
customcardpile: {},
addedpile: {},
mode:'identity',
mode_config:{
global:{
player_number:8,
auto_identity:'off',
double_character:false,
save_progress:true,
free_choose:true,
swap:true,
change_identity:true,
battle_number:3,
double_hp:'pingjun',
mode: "identity",
mode_config: {
global: {
player_number: 8,
auto_identity: "off",
double_character: false,
save_progress: true,
free_choose: true,
swap: true,
change_identity: true,
battle_number: 3,
double_hp: "pingjun",
},
identity:{
identity:[
['zhu','fan'],
['zhu','nei','fan'],
['zhu','zhong','nei','fan'],
['zhu','zhong','nei','fan','fan'],
['zhu','zhong','nei','fan','fan','fan'],
['zhu','zhong','zhong','nei','fan','fan','fan'],
['zhu','zhong','zhong','nei','fan','fan','fan','fan'],
['zhu','zhong','zhong','zhong','nei','fan','fan','fan','fan'],
['zhu','zhong','zhong','zhong','nei','nei','fan','fan','fan','fan'],
identity: {
identity: [
["zhu", "fan"],
["zhu", "nei", "fan"],
["zhu", "zhong", "nei", "fan"],
["zhu", "zhong", "nei", "fan", "fan"],
["zhu", "zhong", "nei", "fan", "fan", "fan"],
["zhu", "zhong", "zhong", "nei", "fan", "fan", "fan"],
["zhu", "zhong", "zhong", "nei", "fan", "fan", "fan", "fan"],
[
"zhu",
"zhong",
"zhong",
"zhong",
"nei",
"fan",
"fan",
"fan",
"fan",
],
[
"zhu",
"zhong",
"zhong",
"zhong",
"nei",
"nei",
"fan",
"fan",
"fan",
"fan",
],
],
choice:{
zhu:3,
zhong:4,
nei:5,
fan:3,
choice: {
zhu: 3,
zhong: 4,
nei: 5,
fan: 3,
},
show_identity:true,
difficulty:'normal',
dierestart:true
show_identity: true,
difficulty: "normal",
dierestart: true,
},
guozhan:{
difficulty:'normal',
initshow_draw:'mark',
dierestart:true
guozhan: {
difficulty: "normal",
initshow_draw: "mark",
dierestart: true,
},
},
current_mode:{},
customforbid:[],
forbid:[
['huashen'],
['rehuashen'],
['xinmanjuan'],
current_mode: {},
customforbid: [],
forbid: [
["huashen"],
["rehuashen"],
["xinmanjuan"],
//['xinleiji','fuji'],
['xinleiji','xinfu_jijun'],
['reluanji','jueqing'],
['lianying','rende'],
['lianying','anxian'],
['lianying','yinguo'],
['lianying','qingjian'],
['boss_juejing','rende'],
['boss_juejing','anxian'],
['boss_juejing','yinguo'],
['boss_juejing','qingjian'],
['shangshi','rende'],
['shangshi','anxian'],
['shangshi','yinguo'],
['shangshi','qingjian'],
['rende','relianying'],
['anxian','relianying'],
['yinguo','relianying'],
['shenxing','relianying'],
['qingjian','relianying'],
['rende','yuling'],
['anxian','yuling'],
['yinguo','yuling'],
['qingjian','yuling'],
["xinleiji", "xinfu_jijun"],
["reluanji", "jueqing"],
["lianying", "rende"],
["lianying", "anxian"],
["lianying", "yinguo"],
["lianying", "qingjian"],
["boss_juejing", "rende"],
["boss_juejing", "anxian"],
["boss_juejing", "yinguo"],
["boss_juejing", "qingjian"],
["shangshi", "rende"],
["shangshi", "anxian"],
["shangshi", "yinguo"],
["shangshi", "qingjian"],
["rende", "relianying"],
["anxian", "relianying"],
["yinguo", "relianying"],
["shenxing", "relianying"],
["qingjian", "relianying"],
["rende", "yuling"],
["anxian", "yuling"],
["yinguo", "yuling"],
["qingjian", "yuling"],
//['qingnang','yiji'],
//['qingnang','reyiji'],
//['qingjian','tuntian'],
// ['yiji','tuntian'],
// ['reyiji','tuntian'],
['tuntian','guidao'],
['tuntian','tiandao'],
['tuntian','huanshi'],
["tuntian", "guidao"],
["tuntian", "tiandao"],
["tuntian", "huanshi"],
// ['tuntian','guicai'],
// ['jiang','chongzhen'],
// ['fenji','yuling'],
['jiushi','guixin'],
['xiuhua','qiaoxie'],
['xiuhua','xuanfeng'],
['xiuhua','duanxing'],
['xiuhua','xiaoji'],
['xiuhua','xiaoji'],
["jiushi", "guixin"],
["xiuhua", "qiaoxie"],
["xiuhua", "xuanfeng"],
["xiuhua", "duanxing"],
["xiuhua", "xiaoji"],
["xiuhua", "xiaoji"],
// ['jiushi','jushou'],
// ['jiushi','kuiwei'],
['zishu','xinfu_songsang'],
['zishu','shenxing'],
['minishendao','luoshen'],
['minishendao','reluoshen'],
['akane_quanqing','lianying'],
['akane_quanqing','relianying'],
['akane_quanqing','shangshi'],
['dcruyi','cxliushi'],
]
["zishu", "xinfu_songsang"],
["zishu", "shenxing"],
["minishendao", "luoshen"],
["minishendao", "reluoshen"],
["akane_quanqing", "lianying"],
["akane_quanqing", "relianying"],
["akane_quanqing", "shangshi"],
["dcruyi", "cxliushi"],
],
};

View File

@ -1,176 +1,198 @@
var fs=require('fs');
var path=require('path');
var exec = require('child_process').exec;
global.window=global;
require(__dirname+'/update.js');
require(__dirname+'/asset.js');
var updates=window.noname_update;
var newversion=false;
var commit=false
if(process.argv[2]){
if(/[0-9]/.test(process.argv[2][0])){
newversion=true;
updates.update = updates.version;
updates.version = '1.9.' + process.argv[2];
commit=updates.version;
}
else{
commit=process.argv[2];
}
}
var assetlist='';
var skinlist='window.noname_skin_list={\n';
var entrylist=[];
var entrymap={};
var get = function(dir,callback){
fs.readdir(dir,function(err,list){
var shift=function(){
if(list.length){
var filename=list.shift();
var delay=false;
if(!/\.|~|_/.test(filename[0])){
var url=dir+'/'+filename;
var stat=fs.statSync(url);
if(stat.isFile()){
if(['.jpg','.png','.mp3','.ttf'].indexOf(path.extname(url))!=-1){
var assetentry=path.relative(path.dirname(__dirname),url);
assetlist+=',\n\t\''+assetentry+'\'';
entrylist.push(assetentry);
}
}
else if(stat.isDirectory()){
if(dir==path.dirname(__dirname)+'/image/skin'){
fs.readdir(url,function(err,list){
var num=0;
for(var i=0;i<list.length;i++){
var url2=url+'/'+list[i];
var stat=fs.statSync(url2);
if(stat.isFile()&&path.extname(url2)=='.jpg'){
num++;
}
}
skinlist+='\t'+filename+':'+num+',\n';
entrymap[filename]=num;
shift();
});
delay=true;
}
else{
get(url,shift);
delay=true;
}
}
}
if(!delay){
shift();
}
}
else{
callback();
}
}
shift();
});
};
get(path.dirname(__dirname),function(){
var diff=false;
if(window.noname_asset_list.length==entrylist.length+1){
for(var i=0;i<entrylist.length;i++){
if(entrylist[i]!=window.noname_asset_list[i+1]){
diff=true;
break;
}
}
if(!diff){
for(var i in entrymap){
if(window.noname_skin_list[i]!==entrymap[i]){
diff=true;
break;
}
}
for(var i in noname_skin_list){
if(window.noname_skin_list[i]!==entrymap[i]){
diff=true;
break;
}
}
}
}
else{
diff=true;
}
var next=function(){
exec('git diff --name-only', (error, stdout, stderr) => {
var updatelist='window.noname_update={\n\tversion:\''+updates.version+'\',';
updatelist+='\n\tupdate:\''+(updates.update||'')+'\',';
var apply=function(name,list){
updatelist+='\n\t'+name+':[\n';
for(var i=0;i<list.length;i++){
updatelist+='\t\t\''+list[i]+'\'';
if(i<list.length-1){
updatelist+=',';
}
updatelist+='\n';
}
updatelist+='\t]';
};
if(updates.changeLog){
apply('changeLog',updates.changeLog);
updatelist+=',';
}
if(updates.players){
apply('players',updates.players);
updatelist+=',';
}
if(updates.cards){
apply('cards',updates.cards);
updatelist+=',';
}
var changes = stdout.split('\n');
for(var i=0;i<changes.length;i++){
var extname=path.extname(changes[i]);
if(!changes[i]||(extname!='.js'&&extname!='.css')||changes[i]=='game/update.js'){
changes.splice(i--,1);
}
}
var files;
if(newversion){
files = [];
}
else{
files = updates.files || [];
}
for(var i=0;i<changes.length;i++){
if(files.indexOf(changes[i])===-1){
files.push(changes[i])
}
}
files.sort(function(a,b){
if (a>b) return 1;
if (a<b) return -1;
return 0;
})
apply('files',files);
fs.writeFile('game/update.js',updatelist+'\n};','utf-8',function(){
console.log('updated update.js');
if(commit && typeof commit==='string'){
exec('git add . && git commit -am '+commit);
console.log('committed '+commit);
}
});
});
}
if(diff){
var assetversion='window.noname_asset_list=[\n\t\''+updates.version+'\'';
fs.writeFile('game/asset.js',assetversion+assetlist+'\n];\n'+skinlist.slice(0,skinlist.length-2)+'\n};','utf-8',function(){
console.log('udpated asset.js');
next();
});
}
else{
next();
}
});
var fs = require("fs");
var path = require("path");
var exec = require("child_process").exec;
global.window = global;
require(__dirname + "/update.js");
require(__dirname + "/asset.js");
var updates = window.noname_update;
var newversion = false;
var commit = false;
if (process.argv[2]) {
if (/[0-9]/.test(process.argv[2][0])) {
newversion = true;
updates.update = updates.version;
updates.version = "1.9." + process.argv[2];
commit = updates.version;
} else {
commit = process.argv[2];
}
}
var assetlist = "";
var skinlist = "window.noname_skin_list={\n";
var entrylist = [];
var entrymap = {};
var get = function (dir, callback) {
fs.readdir(dir, function (err, list) {
var shift = function () {
if (list.length) {
var filename = list.shift();
var delay = false;
if (!/\.|~|_/.test(filename[0])) {
var url = dir + "/" + filename;
var stat = fs.statSync(url);
if (stat.isFile()) {
if (
[".jpg", ".png", ".mp3", ".ttf"].indexOf(
path.extname(url)
) != -1
) {
var assetentry = path.relative(
path.dirname(__dirname),
url
);
assetlist += ",\n\t'" + assetentry + "'";
entrylist.push(assetentry);
}
} else if (stat.isDirectory()) {
if (dir == path.dirname(__dirname) + "/image/skin") {
fs.readdir(url, function (err, list) {
var num = 0;
for (var i = 0; i < list.length; i++) {
var url2 = url + "/" + list[i];
var stat = fs.statSync(url2);
if (
stat.isFile() &&
path.extname(url2) == ".jpg"
) {
num++;
}
}
skinlist += "\t" + filename + ":" + num + ",\n";
entrymap[filename] = num;
shift();
});
delay = true;
} else {
get(url, shift);
delay = true;
}
}
}
if (!delay) {
shift();
}
} else {
callback();
}
};
shift();
});
};
get(path.dirname(__dirname), function () {
var diff = false;
if (window.noname_asset_list.length == entrylist.length + 1) {
for (var i = 0; i < entrylist.length; i++) {
if (entrylist[i] != window.noname_asset_list[i + 1]) {
diff = true;
break;
}
}
if (!diff) {
for (var i in entrymap) {
if (window.noname_skin_list[i] !== entrymap[i]) {
diff = true;
break;
}
}
for (var i in noname_skin_list) {
if (window.noname_skin_list[i] !== entrymap[i]) {
diff = true;
break;
}
}
}
} else {
diff = true;
}
var next = function () {
exec("git diff --name-only", (error, stdout, stderr) => {
var updatelist =
"window.noname_update={\n\tversion:'" + updates.version + "',";
updatelist += "\n\tupdate:'" + (updates.update || "") + "',";
var apply = function (name, list) {
updatelist += "\n\t" + name + ":[\n";
for (var i = 0; i < list.length; i++) {
updatelist += "\t\t'" + list[i] + "'";
if (i < list.length - 1) {
updatelist += ",";
}
updatelist += "\n";
}
updatelist += "\t]";
};
if (updates.changeLog) {
apply("changeLog", updates.changeLog);
updatelist += ",";
}
if (updates.players) {
apply("players", updates.players);
updatelist += ",";
}
if (updates.cards) {
apply("cards", updates.cards);
updatelist += ",";
}
var changes = stdout.split("\n");
for (var i = 0; i < changes.length; i++) {
var extname = path.extname(changes[i]);
if (
!changes[i] ||
(extname != ".js" && extname != ".css") ||
changes[i] == "game/update.js"
) {
changes.splice(i--, 1);
}
}
var files;
if (newversion) {
files = [];
} else {
files = updates.files || [];
}
for (var i = 0; i < changes.length; i++) {
if (files.indexOf(changes[i]) === -1) {
files.push(changes[i]);
}
}
files.sort(function (a, b) {
if (a > b) return 1;
if (a < b) return -1;
return 0;
});
apply("files", files);
fs.writeFile(
"game/update.js",
updatelist + "\n};",
"utf-8",
function () {
console.log("updated update.js");
if (commit && typeof commit === "string") {
exec("git add . && git commit -am " + commit);
console.log("committed " + commit);
}
}
);
});
};
if (diff) {
var assetversion =
"window.noname_asset_list=[\n\t'" + updates.version + "'";
fs.writeFile(
"game/asset.js",
assetversion +
assetlist +
"\n];\n" +
skinlist.slice(0, skinlist.length - 2) +
"\n};",
"utf-8",
function () {
console.log("udpated asset.js");
next();
}
);
} else {
next();
}
});

View File

@ -1,137 +1,171 @@
import { game, get, lib, boot } from "../noname.js";
import { canUseHttpProtocol, sendUpdate } from "../noname/init/index.js";
import { userAgent } from "../noname/util/index.js";
const coreAndVersion = get.coreInfo();
const core = coreAndVersion[0], version = coreAndVersion[1];
//@todo: 77 -> 80
if (core === 'chrome' && !isNaN(version) && version < 77) {
const tip = '检测到您的浏览器内核版本小于77请及时升级浏览器或手机webview内核';
console.warn(tip);
game.print(tip);
const redirect_tip = `您使用的浏览器或无名杀客户端内核版本过低,将在未来的版本被废弃!\n目前使用的浏览器UA信息为\n${userAgent}\n点击“确认”以前往GitHub下载最新版无名杀客户端可能需要科学上网`;
if (confirm(redirect_tip)) {
window.open('https://github.com/libccy/noname/releases/tag/chromium77-client');
}
}
boot().then(() => {
// 判断是否从file协议切换到http/s协议
if (canUseHttpProtocol()) {
/*
升级方法:
1. 游戏启动后导出数据然后以http/s协议重启
2. 以http/s协议导入数据
3. 保存http/s协议的状态以后不再以file协议启动
*/
// 导出数据到根目录的noname.config.txt
let data;
let export_data = function (data) {
game.promises.writeFile(lib.init.encode(JSON.stringify(data)), './', 'noname.config.txt')
.then(saveProtocol)
.catch(e => {
console.error('升级失败:', e);
});
};
// @ts-ignore
if (!lib.db) {
data = {};
for (let i in localStorage) {
if (i.startsWith(lib.configprefix)) {
data[i] = localStorage[i];
}
}
export_data(data);
}
else {
game.getDB('config', null, function (data1) {
game.getDB('data', null, function (data2) {
export_data({
config: data1,
data: data2
});
});
});
}
// 保存协议的切换状态
function saveProtocol() {
const url = sendUpdate();
if (typeof url == 'string') {
if (typeof window.require == 'function' && typeof window.process == 'object') {
// @ts-ignore
const remote = require('@electron/remote');
const thisWindow = remote.getCurrentWindow();
thisWindow.loadURL(url);
} else {
location.href = url;
}
}
}
} else {
// 成功导入后删除noname.config.txt
let searchParams = new URLSearchParams(location.search);
for (let [key, value] of searchParams) {
if (key === 'sendUpdate' && value === 'true') {
game.promises.readFileAsText('noname.config.txt').then(data => {
return /** @type {Promise<void>} */(new Promise(async (resolve, reject) => {
if (!data) return reject('!data');
try {
data = JSON.parse(lib.init.decode(data));
if (!data || typeof data != 'object') {
throw ('err');
}
// @ts-ignore
if (lib.db && (!data.config || !data.data)) {
throw ('err');
}
}
catch (e) {
console.log(e);
if (e == 'err') {
alert('导入文件格式不正确');
reject('导入文件格式不正确');
} else {
alert('导入失败: ' + e.message);
reject('导入失败: ' + e.message);
}
return;
}
alert('导入成功, 即将自动重启');
// @ts-ignore
if (!lib.db) {
const noname_inited = localStorage.getItem('noname_inited');
const onlineKey = localStorage.getItem(lib.configprefix + 'key');
localStorage.clear();
if (noname_inited) {
localStorage.setItem('noname_inited', noname_inited);
}
if (onlineKey) {
localStorage.setItem(lib.configprefix + 'key', onlineKey);
}
for (let i in data) {
localStorage.setItem(i, data[i]);
}
}
else {
for (let i in data.config) {
await game.putDB('config', i, data.config[i]);
lib.config[i] = data.config[i];
}
for (let i in data.data) {
await game.putDB('data', i, data.data[i]);
}
}
lib.init.background();
resolve();
}));
}).then(() => {
return game.promises.removeFile('noname.config.txt');
}).then(() => {
const url = new URL(location.href);
location.href = url.origin + url.pathname;
});
}
}
}
});
import { game, get, lib, boot } from "../noname.js";
import { canUseHttpProtocol, sendUpdate } from "../noname/init/index.js";
import { userAgent } from "../noname/util/index.js";
const coreAndVersion = get.coreInfo();
const core = coreAndVersion[0],
version = coreAndVersion[1];
//@todo: 77 -> 80
if (core === "chrome" && !isNaN(version) && version < 77) {
const tip =
"检测到您的浏览器内核版本小于77请及时升级浏览器或手机webview内核";
console.warn(tip);
game.print(tip);
const redirect_tip = `您使用的浏览器或无名杀客户端内核版本过低,将在未来的版本被废弃!\n目前使用的浏览器UA信息为\n${userAgent}\n点击“确认”以前往GitHub下载最新版无名杀客户端可能需要科学上网`;
if (confirm(redirect_tip)) {
window.open(
"https://github.com/libccy/noname/releases/tag/chromium77-client"
);
}
}
boot().then(() => {
// 判断是否从file协议切换到http/s协议
if (canUseHttpProtocol()) {
/*
升级方法:
1. 游戏启动后导出数据然后以http/s协议重启
2. 以http/s协议导入数据
3. 保存http/s协议的状态以后不再以file协议启动
*/
// 导出数据到根目录的noname.config.txt
let data;
let export_data = function (data) {
game.promises
.writeFile(
lib.init.encode(JSON.stringify(data)),
"./",
"noname.config.txt"
)
.then(saveProtocol)
.catch((e) => {
console.error("升级失败:", e);
});
};
// @ts-ignore
if (!lib.db) {
data = {};
for (let i in localStorage) {
if (i.startsWith(lib.configprefix)) {
data[i] = localStorage[i];
}
}
export_data(data);
} else {
game.getDB("config", null, function (data1) {
game.getDB("data", null, function (data2) {
export_data({
config: data1,
data: data2,
});
});
});
}
// 保存协议的切换状态
function saveProtocol() {
const url = sendUpdate();
if (typeof url == "string") {
if (
typeof window.require == "function" &&
typeof window.process == "object"
) {
// @ts-ignore
const remote = require("@electron/remote");
const thisWindow = remote.getCurrentWindow();
thisWindow.loadURL(url);
} else {
location.href = url;
}
}
}
} else {
// 成功导入后删除noname.config.txt
let searchParams = new URLSearchParams(location.search);
for (let [key, value] of searchParams) {
if (key === "sendUpdate" && value === "true") {
game.promises
.readFileAsText("noname.config.txt")
.then((data) => {
return /** @type {Promise<void>} */ (
new Promise(async (resolve, reject) => {
if (!data) return reject("!data");
try {
data = JSON.parse(lib.init.decode(data));
if (!data || typeof data != "object") {
throw "err";
}
// @ts-ignore
if (
lib.db &&
(!data.config || !data.data)
) {
throw "err";
}
} catch (e) {
console.log(e);
if (e == "err") {
alert("导入文件格式不正确");
reject("导入文件格式不正确");
} else {
alert("导入失败: " + e.message);
reject("导入失败: " + e.message);
}
return;
}
alert("导入成功, 即将自动重启");
// @ts-ignore
if (!lib.db) {
const noname_inited =
localStorage.getItem("noname_inited");
const onlineKey = localStorage.getItem(
lib.configprefix + "key"
);
localStorage.clear();
if (noname_inited) {
localStorage.setItem(
"noname_inited",
noname_inited
);
}
if (onlineKey) {
localStorage.setItem(
lib.configprefix + "key",
onlineKey
);
}
for (let i in data) {
localStorage.setItem(i, data[i]);
}
} else {
for (let i in data.config) {
await game.putDB(
"config",
i,
data.config[i]
);
lib.config[i] = data.config[i];
}
for (let i in data.data) {
await game.putDB(
"data",
i,
data.data[i]
);
}
}
lib.init.background();
resolve();
})
);
})
.then(() => {
return game.promises.removeFile("noname.config.txt");
})
.then(() => {
const url = new URL(location.href);
location.href = url.origin + url.pathname;
});
}
}
}
});

View File

@ -1,232 +1,301 @@
"use strict";
new Promise(resolve => {
// 客户端自带core.js的请注意跟进core.js版本
if ('__core-js_shared__' in window) resolve(null);
else {
const nonameInitialized = localStorage.getItem('noname_inited');
const assetURL = location.protocol.startsWith('http') || typeof nonameInitialized != 'string' || nonameInitialized == 'nodejs' ? '' : nonameInitialized;
const coreJSBundle = document.createElement('script');
coreJSBundle.onerror = coreJSBundle.onload = resolve;
coreJSBundle.src = `${assetURL}game/core-js-bundle.js`;
document.head.appendChild(coreJSBundle);
}
}).then(() => {
const nonameInitialized = localStorage.getItem('noname_inited');
const assetURL = location.protocol.startsWith('http') || typeof nonameInitialized != 'string' || nonameInitialized == 'nodejs' ? '' : nonameInitialized;
const userAgent = navigator.userAgent.toLowerCase();
const exit = () => {
const ios = userAgent.includes('iphone') || userAgent.includes('ipad') || userAgent.includes('macintosh');
//electron
if (typeof window.process == 'object' && typeof window.require == 'function') {
const versions = window.process.versions;
// @ts-ignore
const electronVersion = parseFloat(versions.electron);
let remote;
if (electronVersion >= 14) {
// @ts-ignore
remote = require('@electron/remote');
} else {
// @ts-ignore
remote = require('electron').remote;
}
const thisWindow = remote.getCurrentWindow();
thisWindow.destroy();
window.process.exit();
}
//android-cordova环境
//ios-cordova环境或ios浏览器环境
//非ios的网页版
else if (!ios) {
window.close();
}
};
// 这个弹窗在升级到http协议下的客户端不应该进行提示。
if (!localStorage.getItem('gplv3_noname_alerted')) {
const nonameInitialized = localStorage.getItem('noname_inited');
const callback = () => {
if (confirm('①无名杀是一款基于GPLv3协议的开源软件\n你可以在遵守GPLv3协议的基础上任意使用修改并转发《无名杀》以及所有基于《无名杀》开发的拓展。\n点击“确定”即代表您认可并接受GPLv3协议↓\nhttps://www.gnu.org/licenses/gpl-3.0.html\n②无名杀官方发布地址仅有GitHub仓库\n其他所有的所谓“无名杀”社群包括但不限于绝大多数“官方”QQ群、QQ频道等均为玩家自发组织与无名杀官方无关')) {
// @ts-ignore
localStorage.setItem('gplv3_noname_alerted', true);
}
else {
exit();
}
};
if (location.protocol.startsWith('http')) {
if (!nonameInitialized || nonameInitialized.length == 0) {
callback();
} else {
// @ts-ignore
localStorage.setItem('gplv3_noname_alerted', true);
}
} else callback();
}
window['b' + 'ann' + 'e' + 'dE' + 'x' + 'ten' + 's' + 'i' + 'o' + 'ns'] = ['\u4fa0\u4e49', '\u5168\u6559\u7a0b'];
/**
*
* @returns {["firefox" | "chrome" | "safari" | "other", number, number, number]}
*/
function coreInfo() {
const regex = /(firefox|chrome|safari)\/(\d+(?:\.\d+)+)/
let result
if (!(result = userAgent.match(regex))) return ["other", NaN, NaN, NaN]
if (result[1] != "safari") {
const [major, minor, patch] = result[2].split(".")
// @ts-ignore
return [result[1], parseInt(major), parseInt(minor), parseInt(patch)]
}
result = userAgent.match(/version\/(\d+(?:\.\d+)+).*safari/)
// @ts-ignore
const [major, minor, patch] = result[1].split(".")
return ["safari", parseInt(major), parseInt(minor), parseInt(patch)]
}
const [core, major, minor, patch] = coreInfo();
const supportMap = {
"firefox": [60, 0, 0],
"chrome": [61, 0, 0],
"safari": [14, 5, 0]
}
const versions = [major, minor, patch]
// require是需求的版本号current是浏览器环境本身的版本号
const check = (require, current) => {
// 防止不存在的意外,提前截断当前版本号的长度
if (current.length > require.length) current.length = require.length
// 考虑到玄学的NaN情况记录是否存在NaN
let flag = false
// 从主版本号遍历到修订版本号,只考虑当前版本号的长度
for (let i = 0; i < current.length; ++i) {
// 当前环境版本号当前位若是NaN则记录后直接到下一位
if (isNaN(current[i])) {
flag = true
continue
}
// 如果此时flag为true且current[i]不为NaN版本号则不合法直接否
if (flag) return false
// 上位版本号未达到要求,直接否决
if (require[i] > current[i]) return false
// 上位版本号已超过要求,直接可行
if (current[i] > require[i]) return true
}
return true
}
if (core in supportMap && !check(supportMap[core], versions)) {
const tip = '检测到您的浏览器内核版本无法支持当前无名杀所需的功能请立即升级浏览器或手机webview内核';
console.error(tip);
let redirect_tip = `您使用的浏览器或无名杀客户端内核版本过低,已经无法正常运行无名杀!\n目前使用的浏览器UA信息为\n${userAgent}\n点击“确认”以前往GitHub下载最新版无名杀客户端可能需要科学上网\n稍后您的无名杀将自动退出(可能的话)`;
if (core === 'safari') {
alert(`您使用的safari浏览器无法支持当前无名杀所需的功能请至少升级至14.5.0\n稍后您的无名杀将自动退出(可能的话)`);
} else {
if (confirm(redirect_tip)) {
window.open('https://github.com/libccy/noname/releases/tag/chromium77-client');
}
}
exit();
}
else {
// node环境下
if (typeof window.require == 'function' &&
typeof window.process == 'object' &&
typeof window.__dirname == 'string') {
// 在http环境下修改__dirname和require的逻辑
if (location.protocol.startsWith('http') &&
window.__dirname.endsWith('electron.asar\\renderer')) {
const path = require('path');
window.__dirname = path.join(path.resolve(), 'resources/app');
const oldData = Object.entries(window.require);
// @ts-ignore
window.require = function (moduleId) {
try {
return module.require(moduleId);
} catch {
return module.require(path.join(window.__dirname, moduleId));
}
};
oldData.forEach(([key, value]) => {
window.require[key] = value;
});
}
// 增加导入ts的逻辑
window.require.extensions['.ts'] = function (module, filename) {
// @ts-ignore
const _compile = module._compile;
// @ts-ignore
module._compile = function (code, fileName) {
/**
* @type { import('typescript') }
*/
// @ts-ignore
const ts = require('./game/typescript.js');
// 使用ts compiler对ts文件进行编译
const result = ts.transpile(code, {
module: ts.ModuleKind.CommonJS,
//@todo: ES2019 -> ES2020
target: ts.ScriptTarget.ES2019,
inlineSourceMap: true,
resolveJsonModule: true,
esModuleInterop: true,
}, fileName);
// 使用默认的js编译函数获取返回值
return _compile.call(this, result, fileName);
}
// @ts-ignore
module._compile(require('fs').readFileSync(filename, 'utf8'), filename);
};
}
// 使serviceWorker加载完成后再加载entry.js
const loadEntryJs = () => {
const script = document.createElement('script')
script.type = "module";
script.src = `${assetURL}game/entry.js`;
script.async = true;
script.onerror = event => {
console.error(event);
const message = `您使用的浏览器或《无名杀》客户端加载内容失败!\n请检查是否缺少游戏文件!隔版本更新请下载完整包而不是离线包!\n目前使用的浏览器UA信息为\n${userAgent}\n若您使用的客户端为自带内核的旧版“兼容版”,请及时更新客户端版本!\n若您使用的客户端为手机端的非兼容版《无名杀》请尝试更新手机的WebView内核或者更换为1.8.2版本及以上的兼容版!\n若您是直接使用浏览器加载index.html进行游戏请改为运行文件夹内的“noname-server.exe”或使用VSCode等工具启动Live Server以动态服务器的方式启动《无名杀》\n若您使用的是苹果端请至少将Safari升级至14.5.0`;
console.error(message);
alert(message);
exit();
}
document.head.appendChild(script);
};
if (location.protocol.startsWith('http') && 'serviceWorker' in navigator) {
let scope = window.location.protocol + '//' + window.location.host + '/';
navigator.serviceWorker.getRegistrations()
.then(async registrations => {
let findServiceWorker = registrations.find(registration => {
return registration && registration.active && registration.active.scriptURL == `${scope}service-worker.js`;
});
try {
const registration_1 = await navigator.serviceWorker.register(`${scope}service-worker.js`, {
type: 'module',
updateViaCache: "all",
scope,
});
// 初次加载worker需要重新启动一次
if (!findServiceWorker) location.reload();
// 接收消息,暂时没用到
navigator.serviceWorker.addEventListener('message', e => {
console.log(e);
});
registration_1.update().catch(e => console.error('worker update失败', e));
if (!sessionStorage.getItem('canUseTs')) {
await import('./canUse.ts').then(({ text }) => console.log(text)).catch(() => {
sessionStorage.setItem('canUseTs', '1');
location.reload();
});
}
} catch (e_1) {
console.log('serviceWorker加载失败: ', e_1);
}
}).finally(loadEntryJs);
} else {
loadEntryJs();
}
}
});
"use strict";
new Promise((resolve) => {
// 客户端自带core.js的请注意跟进core.js版本
if ("__core-js_shared__" in window) resolve(null);
else {
const nonameInitialized = localStorage.getItem("noname_inited");
const assetURL =
location.protocol.startsWith("http") ||
typeof nonameInitialized != "string" ||
nonameInitialized == "nodejs"
? ""
: nonameInitialized;
const coreJSBundle = document.createElement("script");
coreJSBundle.onerror = coreJSBundle.onload = resolve;
coreJSBundle.src = `${assetURL}game/core-js-bundle.js`;
document.head.appendChild(coreJSBundle);
}
}).then(() => {
const nonameInitialized = localStorage.getItem("noname_inited");
const assetURL =
location.protocol.startsWith("http") ||
typeof nonameInitialized != "string" ||
nonameInitialized == "nodejs"
? ""
: nonameInitialized;
const userAgent = navigator.userAgent.toLowerCase();
const exit = () => {
const ios =
userAgent.includes("iphone") ||
userAgent.includes("ipad") ||
userAgent.includes("macintosh");
//electron
if (
typeof window.process == "object" &&
typeof window.require == "function"
) {
const versions = window.process.versions;
// @ts-ignore
const electronVersion = parseFloat(versions.electron);
let remote;
if (electronVersion >= 14) {
// @ts-ignore
remote = require("@electron/remote");
} else {
// @ts-ignore
remote = require("electron").remote;
}
const thisWindow = remote.getCurrentWindow();
thisWindow.destroy();
window.process.exit();
}
//android-cordova环境
//ios-cordova环境或ios浏览器环境
//非ios的网页版
else if (!ios) {
window.close();
}
};
// 这个弹窗在升级到http协议下的客户端不应该进行提示。
if (!localStorage.getItem("gplv3_noname_alerted")) {
const nonameInitialized = localStorage.getItem("noname_inited");
const callback = () => {
if (
confirm(
"①无名杀是一款基于GPLv3协议的开源软件\n你可以在遵守GPLv3协议的基础上任意使用修改并转发《无名杀》以及所有基于《无名杀》开发的拓展。\n点击“确定”即代表您认可并接受GPLv3协议↓\nhttps://www.gnu.org/licenses/gpl-3.0.html\n②无名杀官方发布地址仅有GitHub仓库\n其他所有的所谓“无名杀”社群包括但不限于绝大多数“官方”QQ群、QQ频道等均为玩家自发组织与无名杀官方无关"
)
) {
// @ts-ignore
localStorage.setItem("gplv3_noname_alerted", true);
} else {
exit();
}
};
if (location.protocol.startsWith("http")) {
if (!nonameInitialized || nonameInitialized.length == 0) {
callback();
} else {
// @ts-ignore
localStorage.setItem("gplv3_noname_alerted", true);
}
} else callback();
}
window["b" + "ann" + "e" + "dE" + "x" + "ten" + "s" + "i" + "o" + "ns"] = [
"\u4fa0\u4e49",
"\u5168\u6559\u7a0b",
];
/**
*
* @returns {["firefox" | "chrome" | "safari" | "other", number, number, number]}
*/
function coreInfo() {
const regex = /(firefox|chrome|safari)\/(\d+(?:\.\d+)+)/;
let result;
if (!(result = userAgent.match(regex))) return ["other", NaN, NaN, NaN];
if (result[1] != "safari") {
const [major, minor, patch] = result[2].split(".");
// @ts-ignore
return [
result[1],
parseInt(major),
parseInt(minor),
parseInt(patch),
];
}
result = userAgent.match(/version\/(\d+(?:\.\d+)+).*safari/);
// @ts-ignore
const [major, minor, patch] = result[1].split(".");
return ["safari", parseInt(major), parseInt(minor), parseInt(patch)];
}
const [core, major, minor, patch] = coreInfo();
const supportMap = {
firefox: [60, 0, 0],
chrome: [61, 0, 0],
safari: [14, 5, 0],
};
const versions = [major, minor, patch];
// require是需求的版本号current是浏览器环境本身的版本号
const check = (require, current) => {
// 防止不存在的意外,提前截断当前版本号的长度
if (current.length > require.length) current.length = require.length;
// 考虑到玄学的NaN情况记录是否存在NaN
let flag = false;
// 从主版本号遍历到修订版本号,只考虑当前版本号的长度
for (let i = 0; i < current.length; ++i) {
// 当前环境版本号当前位若是NaN则记录后直接到下一位
if (isNaN(current[i])) {
flag = true;
continue;
}
// 如果此时flag为true且current[i]不为NaN版本号则不合法直接否
if (flag) return false;
// 上位版本号未达到要求,直接否决
if (require[i] > current[i]) return false;
// 上位版本号已超过要求,直接可行
if (current[i] > require[i]) return true;
}
return true;
};
if (core in supportMap && !check(supportMap[core], versions)) {
const tip =
"检测到您的浏览器内核版本无法支持当前无名杀所需的功能请立即升级浏览器或手机webview内核";
console.error(tip);
let redirect_tip = `您使用的浏览器或无名杀客户端内核版本过低,已经无法正常运行无名杀!\n目前使用的浏览器UA信息为\n${userAgent}\n点击“确认”以前往GitHub下载最新版无名杀客户端可能需要科学上网\n稍后您的无名杀将自动退出(可能的话)`;
if (core === "safari") {
alert(
`您使用的safari浏览器无法支持当前无名杀所需的功能请至少升级至14.5.0\n稍后您的无名杀将自动退出(可能的话)`
);
} else {
if (confirm(redirect_tip)) {
window.open(
"https://github.com/libccy/noname/releases/tag/chromium77-client"
);
}
}
exit();
} else {
// node环境下
if (
typeof window.require == "function" &&
typeof window.process == "object" &&
typeof window.__dirname == "string"
) {
// 在http环境下修改__dirname和require的逻辑
if (
location.protocol.startsWith("http") &&
window.__dirname.endsWith("electron.asar\\renderer")
) {
const path = require("path");
window.__dirname = path.join(path.resolve(), "resources/app");
const oldData = Object.entries(window.require);
// @ts-ignore
window.require = function (moduleId) {
try {
return module.require(moduleId);
} catch {
return module.require(
path.join(window.__dirname, moduleId)
);
}
};
oldData.forEach(([key, value]) => {
window.require[key] = value;
});
}
// 增加导入ts的逻辑
window.require.extensions[".ts"] = function (module, filename) {
// @ts-ignore
const _compile = module._compile;
// @ts-ignore
module._compile = function (code, fileName) {
/**
* @type { import('typescript') }
*/
// @ts-ignore
const ts = require("./game/typescript.js");
// 使用ts compiler对ts文件进行编译
const result = ts.transpile(
code,
{
module: ts.ModuleKind.CommonJS,
//@todo: ES2019 -> ES2020
target: ts.ScriptTarget.ES2019,
inlineSourceMap: true,
resolveJsonModule: true,
esModuleInterop: true,
},
fileName
);
// 使用默认的js编译函数获取返回值
return _compile.call(this, result, fileName);
};
// @ts-ignore
module._compile(
require("fs").readFileSync(filename, "utf8"),
filename
);
};
}
// 使serviceWorker加载完成后再加载entry.js
const loadEntryJs = () => {
const script = document.createElement("script");
script.type = "module";
script.src = `${assetURL}game/entry.js`;
script.async = true;
script.onerror = (event) => {
console.error(event);
const message = `您使用的浏览器或《无名杀》客户端加载内容失败!\n请检查是否缺少游戏文件!隔版本更新请下载完整包而不是离线包!\n目前使用的浏览器UA信息为\n${userAgent}\n若您使用的客户端为自带内核的旧版“兼容版”,请及时更新客户端版本!\n若您使用的客户端为手机端的非兼容版《无名杀》请尝试更新手机的WebView内核或者更换为1.8.2版本及以上的兼容版!\n若您是直接使用浏览器加载index.html进行游戏请改为运行文件夹内的“noname-server.exe”或使用VSCode等工具启动Live Server以动态服务器的方式启动《无名杀》\n若您使用的是苹果端请至少将Safari升级至14.5.0`;
console.error(message);
alert(message);
exit();
};
document.head.appendChild(script);
};
if (
location.protocol.startsWith("http") &&
"serviceWorker" in navigator
) {
let scope =
window.location.protocol + "//" + window.location.host + "/";
navigator.serviceWorker
.getRegistrations()
.then(async (registrations) => {
let findServiceWorker = registrations.find(
(registration) => {
return (
registration &&
registration.active &&
registration.active.scriptURL ==
`${scope}service-worker.js`
);
}
);
try {
const registration_1 =
await navigator.serviceWorker.register(
`${scope}service-worker.js`,
{
type: "module",
updateViaCache: "all",
scope,
}
);
// 初次加载worker需要重新启动一次
if (!findServiceWorker) location.reload();
// 接收消息,暂时没用到
navigator.serviceWorker.addEventListener(
"message",
(e) => {
console.log(e);
}
);
registration_1
.update()
.catch((e) =>
console.error("worker update失败", e)
);
if (!sessionStorage.getItem("canUseTs")) {
await import("./canUse.ts")
.then(({ text }) => console.log(text))
.catch(() => {
sessionStorage.setItem("canUseTs", "1");
location.reload();
});
}
} catch (e_1) {
console.log("serviceWorker加载失败: ", e_1);
}
})
.finally(loadEntryJs);
} else {
loadEntryJs();
}
}
});

View File

@ -1,87 +1,111 @@
var http = require('http');
var fs = require('fs');
var server = new http.Server();
server.listen(80);
server.on('request', function(request, response) {
var url = require('url').parse(request.url);
switch(url.pathname) {
case ''||'/' :
fs.readFile('./index.html', function(err, content){
if(err) {
response.writeHead(404, { 'Content-Type':'text/plain; charset="UTF-8"' });
response.write(err.message);
response.end();
} else {
response.writeHead(200, { 'Content-Type' : 'text/html; charset=UTF-8' });
response.write(content);
response.end();
}
});
break;
case '/test/delay':
var delay = parseInt(url.query) || 2000;
response.writeHead(200, {'Content-type':'text/plain; charset=UTF-8'});
response.write('Sleeping for' + delay + ' milliseconds...');
setTimeout(function(){
response.write('done.');
response.end();
}, delay);
break;
case '/test/mirror':
response.writeHead(200, {'Content-type':'text/plain; charset=UTF-8'});
response.write(request.mothod + ' ' + request.url + ' HTTP/' + request.httpVersion + '\r\n');
for (var h in request.headers) {
response.write(h + ':' + request.headers[h] + '\r\n');
}
response.write('\r\n');
request.on('data', function(chunk) { response.write(chunk); });
request.on('end', function(chunk){ response.end(); });
break;
case '/json' :
response.writeHead(200, {'Content-type':'application/json; charset=UTF-8'});
response.write(JSON.stringify({test:'success'}));
response.end();
break;
default:
var filename = url.pathname.substring(1);
var type = getType(filename.substring(filename.lastIndexOf('.')+1));
fs.readFile(filename, function(err, content){
if(err) {
response.writeHead(404, { 'Content-Type':'text/plain; charset="UTF-8"' });
response.write(err.message);
response.end();
} else {
response.writeHead(200, { 'Content-Type' : type });
response.write(content);
response.end();
}
});
break;
}
});
function getType(endTag){
var type=null;
switch(endTag){
case 'html' :
case 'htm' :
type = 'text/html; charset=UTF-8';
break;
case 'js' :
type = 'application/javascript; charset="UTF-8"';
break;
case 'css' :
type = 'text/css; charset="UTF-8"';
break;
case 'txt' :
type = 'text/plain; charset="UTF-8"';
break;
case 'manifest' :
type = 'text/cache-manifest; charset="UTF-8"';
break;
default :
type = 'application/octet-stream';
break;
}
return type;
}
var http = require("http");
var fs = require("fs");
var server = new http.Server();
server.listen(80);
server.on("request", function (request, response) {
var url = require("url").parse(request.url);
switch (url.pathname) {
case "" || "/":
fs.readFile("./index.html", function (err, content) {
if (err) {
response.writeHead(404, {
"Content-Type": 'text/plain; charset="UTF-8"',
});
response.write(err.message);
response.end();
} else {
response.writeHead(200, {
"Content-Type": "text/html; charset=UTF-8",
});
response.write(content);
response.end();
}
});
break;
case "/test/delay":
var delay = parseInt(url.query) || 2000;
response.writeHead(200, {
"Content-type": "text/plain; charset=UTF-8",
});
response.write("Sleeping for" + delay + " milliseconds...");
setTimeout(function () {
response.write("done.");
response.end();
}, delay);
break;
case "/test/mirror":
response.writeHead(200, {
"Content-type": "text/plain; charset=UTF-8",
});
response.write(
request.mothod +
" " +
request.url +
" HTTP/" +
request.httpVersion +
"\r\n"
);
for (var h in request.headers) {
response.write(h + ":" + request.headers[h] + "\r\n");
}
response.write("\r\n");
request.on("data", function (chunk) {
response.write(chunk);
});
request.on("end", function (chunk) {
response.end();
});
break;
case "/json":
response.writeHead(200, {
"Content-type": "application/json; charset=UTF-8",
});
response.write(JSON.stringify({ test: "success" }));
response.end();
break;
default:
var filename = url.pathname.substring(1);
var type = getType(
filename.substring(filename.lastIndexOf(".") + 1)
);
fs.readFile(filename, function (err, content) {
if (err) {
response.writeHead(404, {
"Content-Type": 'text/plain; charset="UTF-8"',
});
response.write(err.message);
response.end();
} else {
response.writeHead(200, { "Content-Type": type });
response.write(content);
response.end();
}
});
break;
}
});
function getType(endTag) {
var type = null;
switch (endTag) {
case "html":
case "htm":
type = "text/html; charset=UTF-8";
break;
case "js":
type = 'application/javascript; charset="UTF-8"';
break;
case "css":
type = 'text/css; charset="UTF-8"';
break;
case "txt":
type = 'text/plain; charset="UTF-8"';
break;
case "manifest":
type = 'text/cache-manifest; charset="UTF-8"';
break;
default:
type = "application/octet-stream";
break;
}
return type;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,3 @@
window.bannedKeyWords=JSON.parse(
decodeURIComponent(
atob("JTVCJTIyZ2hzJTIyJTJDJTIyJUU3JTlCJUI0JUU4JTgyJUEwJTIyJTJDJTIyJUU2JTgwJUE3JUU0JUJBJUE0JTIyJTJDJTIyJUU1JTgxJTlBJUU3JTg4JUIxJTIyJTJDJTIyaHR0cCUyMiUyQyUyMiVFNSU5MCU4MyVFNSVBNSVCNiUyMiUyQyUyMiVFOSVBQSU5QSVFOSU4MCVCQyUyMiUyQyUyMiVFNSU5MyU4OCVFNSVCNyVCNCVFNyU4QiU5NyUyMiUyQyUyMiVFNyVCRSU4RSVFNyU5QyU4OSUyMiUyQyUyMiVFNyU5OSU4QyUyMiUyQyUyMiVFNSVCMSU4MSVFNyU5QyVCQyUyMiUyQyUyMiVFOCU4OSVCOSUyMiUyQyUyMiVFNSU4MiVCQiVFOSU4MCVCQyUyMiUyQyUyMiVFNiU5MyU4RCVFNCVCRCVBMCUyMiUyQyUyMiVFNSU4MSU5QSVFOSVCOCVBMSUyMiUyQyUyMiVFNSVBNSVCOCUyMiUyQyUyMiVFNSVBNyVBNiUyMiUyQyUyMiVFNSU4RCU4RSVFNCVCOCVCQSUyMiUyQyUyMiVFNSVCMSU4NCUyMiUyQyUyMiVFNyU4QiU5NyVFNSVBRCU5MCUyMiUyQyUyMiVFNSVCMSU4RSUyMiUyQyUyMiVFNSU5MCU4QyVFNiU4MCVBNyVFNiU4MSU4QiUyMiUyQyUyMiVFOCU4MiU5NiVFNiU4OCU5OCUyMiUyQyUyMiVFOSVCOCVBMSVFNSVCNyVCNCUyMiUyQyUyMiVFNyVCMiVCRSVFNiVCNiVCMiUyMiUyQyUyMiVFNyVCMiVBQSVFNiVCMCVCNCUyMiUyQyUyMiVFNiU4QyU4MiVFNiU5QyU4OCVFNCVCQSVBRSVFNCVCOCVBRCUyMiUyQyUyMiVFOCVCNCVCMSVFOSVBQSVBOCVFNSVBNCVCNCUyMiUyQyUyMiVFNSU5MCU4MyVFNSVCMSU4MSUyMiUyQyUyMiVFNSU4MiVCQiUyMiUyQyUyMiVFNSVBNSVBNSVFNSU4OCVBOSVFNyVCQiU5OSUyMiUyQyUyMiVFNCVCOCU4MSVFNyU5QyU5RiUyMiUyQyUyMiVFOCU5QiU4NiUyMiUyQyUyMiVFOSVCQyVBMCVFOSVCQyVBMCUyMiUyQyUyMiVFOSVCQyVBMCVFNCVCQSVCQSUyMiUyQyUyMiVFNyVBNSU5RSVFNSU4RiU4QiUyMiUyQyUyMiUzQyUyRmElM0UlMjIlNUQ=")));
atob("JTVCJTIyZ2hzJTIyJTJDJTIyJUU3JTlCJUI0JUU4JTgyJUEwJTIyJTJDJTIyJUU2JTgwJUE3JUU0JUJBJUE0JTIyJTJDJTIyJUU1JTgxJTlBJUU3JTg4JUIxJTIyJTJDJTIyaHR0cCUyMiUyQyUyMiVFNSU5MCU4MyVFNSVBNSVCNiUyMiUyQyUyMiVFOSVBQSU5QSVFOSU4MCVCQyUyMiUyQyUyMiVFNSU5MyU4OCVFNSVCNyVCNCVFNyU4QiU5NyUyMiUyQyUyMiVFNyVCRSU4RSVFNyU5QyU4OSUyMiUyQyUyMiVFNyU5OSU4QyUyMiUyQyUyMiVFNSVCMSU4MSVFNyU5QyVCQyUyMiUyQyUyMiVFOCU4OSVCOSUyMiUyQyUyMiVFNSU4MiVCQiVFOSU4MCVCQyUyMiUyQyUyMiVFNiU5MyU4RCVFNCVCRCVBMCUyMiUyQyUyMiVFNSU4MSU5QSVFOSVCOCVBMSUyMiUyQyUyMiVFNSVBNSVCOCUyMiUyQyUyMiVFNSVBNyVBNiUyMiUyQyUyMiVFNSU4RCU4RSVFNCVCOCVCQSUyMiUyQyUyMiVFNSVCMSU4NCUyMiUyQyUyMiVFNyU4QiU5NyVFNSVBRCU5MCUyMiUyQyUyMiVFNSVCMSU4RSUyMiUyQyUyMiVFNSU5MCU4QyVFNiU4MCVBNyVFNiU4MSU4QiUyMiUyQyUyMiVFOCU4MiU5NiVFNiU4OCU5OCUyMiUyQyUyMiVFOSVCOCVBMSVFNSVCNyVCNCUyMiUyQyUyMiVFNyVCMiVCRSVFNiVCNiVCMiUyMiUyQyUyMiVFNyVCMiVBQSVFNiVCMCVCNCUyMiUyQyUyMiVFNiU4QyU4MiVFNiU5QyU4OCVFNCVCQSVBRSVFNCVCOCVBRCUyMiUyQyUyMiVFOCVCNCVCMSVFOSVBQSVBOCVFNSVBNCVCNCUyMiUyQyUyMiVFNSU5MCU4MyVFNSVCMSU4MSUyMiUyQyUyMiVFNSU4MiVCQiUyMiUyQyUyMiVFNSVBNSVBNSVFNSU4OCVBOSVFNyVCQiU5OSUyMiUyQyUyMiVFNCVCOCU4MSVFNyU5QyU5RiUyMiUyQyUyMiVFOCU5QiU4NiUyMiUyQyUyMiVFOSVCQyVBMCVFOSVCQyVBMCUyMiUyQyUyMiVFOSVCQyVBMCVFNCVCQSVCQSUyMiUyQyUyMiVFNyVBNSU5RSVFNSU4RiU4QiUyMiUyQyUyMiUzQyUyRmElM0UlMjIlNUQ=")));

View File

@ -1,144 +1,144 @@
window.noname_package={
character:{
standard:'标准',
refresh:'界限突破',
shenhua:'神话再临',
yijiang:'一将成名',
sp:'璀璨星河',
onlyOL:'OL专属',
yingbian:'文德武备',
clan:'门阀士族',
xinghuoliaoyuan:'星火燎原',
huicui:'群英荟萃',
xianding:'限定专属',
sp2:'系列专属',
extra:'神将',
mobile:'移动版',
shiji:'始计篇',
sb:'谋攻篇',
tw:'外服武将',
collab:'联动卡',
offline:'线下武将',
jsrg:'江山如故',
old:'怀旧',
diy:'DIY',
ddd:'3D精选',
yxs:'英雄杀',
hearth:'炉石传说',
gwent:'昆特牌',
mtg:'万智牌',
ow:'守望先锋',
swd:'轩辕剑',
gujian:'古剑奇谭',
xianjian:'仙剑奇侠传',
window.noname_package = {
character: {
standard: "标准",
refresh: "界限突破",
shenhua: "神话再临",
yijiang: "一将成名",
sp: "璀璨星河",
onlyOL: "OL专属",
yingbian: "文德武备",
clan: "门阀士族",
xinghuoliaoyuan: "星火燎原",
huicui: "群英荟萃",
xianding: "限定专属",
sp2: "系列专属",
extra: "神将",
mobile: "移动版",
shiji: "始计篇",
sb: "谋攻篇",
tw: "外服武将",
collab: "联动卡",
offline: "线下武将",
jsrg: "江山如故",
old: "怀旧",
diy: "DIY",
ddd: "3D精选",
yxs: "英雄杀",
hearth: "炉石传说",
gwent: "昆特牌",
mtg: "万智牌",
ow: "守望先锋",
swd: "轩辕剑",
gujian: "古剑奇谭",
xianjian: "仙剑奇侠传",
},
card:{
standard:'标准',
extra:'军争',
guozhan:'国战',
yingbian:'应变篇',
yongjian:'用间篇',
sp:'忠胆英杰',
zhulu:'逐鹿天下',
yunchou:'运筹帷幄',
zhenfa:'阵法',
swd:'轩辕剑',
gujian:'古剑奇谭',
hearth:'炉石传说',
gwent:'昆特牌',
mtg:'万智牌',
huanlekapai:'欢乐卡牌',
card: {
standard: "标准",
extra: "军争",
guozhan: "国战",
yingbian: "应变篇",
yongjian: "用间篇",
sp: "忠胆英杰",
zhulu: "逐鹿天下",
yunchou: "运筹帷幄",
zhenfa: "阵法",
swd: "轩辕剑",
gujian: "古剑奇谭",
hearth: "炉石传说",
gwent: "昆特牌",
mtg: "万智牌",
huanlekapai: "欢乐卡牌",
},
play:{
boss:'诸神降临',
cardpile:'牌堆补充',
wuxing:'五行生克',
coin:'富甲天下',
play: {
boss: "诸神降临",
cardpile: "牌堆补充",
wuxing: "五行生克",
coin: "富甲天下",
},
mode:{
identity:'身份',
guozhan:'国战',
versus:'对决',
connect:'联机',
boss:'挑战',
doudizhu:'斗地主',
single:'单挑',
chess:'战棋',
tafang:'塔防',
stone:'炉石',
brawl:'乱斗',
mode: {
identity: "身份",
guozhan: "国战",
versus: "对决",
connect: "联机",
boss: "挑战",
doudizhu: "斗地主",
single: "单挑",
chess: "战棋",
tafang: "塔防",
stone: "炉石",
brawl: "乱斗",
},
submode:{
identity:{
normal:'身份模式',
zhong:'忠胆英杰',
purple:'3v3v2',
submode: {
identity: {
normal: "身份模式",
zhong: "忠胆英杰",
purple: "3v3v2",
},
guozhan:{
normal:'国战模式',
mingjiang:'明将国战'
guozhan: {
normal: "国战模式",
mingjiang: "明将国战",
},
versus:{
four:'四人对抗',
three:'统率三军',
two:'欢乐成双',
jiange:'守卫剑阁',
siguo:'四国争霸',
standard:'自由对决'
versus: {
four: "四人对抗",
three: "统率三军",
two: "欢乐成双",
jiange: "守卫剑阁",
siguo: "四国争霸",
standard: "自由对决",
},
chess:{
combat:'战棋模式',
three:'战棋统率',
leader:'战棋君主'
chess: {
combat: "战棋模式",
three: "战棋统率",
leader: "战棋君主",
},
single:{
normal:'新1v1',
single: {
normal: "新1v1",
},
},
background:{
ol_bg:'龙纹',
planetarian_bg:'星梦',
heaven_bg:'红烧',
kyoani_bg:'京都',
key_bg:'键社',
xiaowu_bg:'小无',
noname_bg:'璀璨',
wuming_bg:'无名',
zhulin_bg:'竹林',
shengshi_bg:'盛世',
taoyuan_bg:'桃园',
zhanhuo_bg:'战火',
huangtian_bg:'黄天',
september_bg:'九月',
yinxiang_bg:'印象',
zhanyun_bg:'战云',
beipan_bg:'背叛',
lanting_bg:'兰亭',
lingju_bg:'灵雎',
sanying_bg:'三英',
wangshi_bg:'往事',
xiongxin_bg:'雄心',
xinsha_bg:'新杀',
background: {
ol_bg: "龙纹",
planetarian_bg: "星梦",
heaven_bg: "红烧",
kyoani_bg: "京都",
key_bg: "键社",
xiaowu_bg: "小无",
noname_bg: "璀璨",
wuming_bg: "无名",
zhulin_bg: "竹林",
shengshi_bg: "盛世",
taoyuan_bg: "桃园",
zhanhuo_bg: "战火",
huangtian_bg: "黄天",
september_bg: "九月",
yinxiang_bg: "印象",
zhanyun_bg: "战云",
beipan_bg: "背叛",
lanting_bg: "兰亭",
lingju_bg: "灵雎",
sanying_bg: "三英",
wangshi_bg: "往事",
xiongxin_bg: "雄心",
xinsha_bg: "新杀",
},
music:{
music_phliosophy:'Philosophy of ours',
music_diaochan:'貂蝉',
music_shezhan:'舌战群儒',
music_danji:'千里走单骑',
music_jifeng:'祭风',
music_jilve:'极略',
music: {
music_phliosophy: "Philosophy of ours",
music_diaochan: "貂蝉",
music_shezhan: "舌战群儒",
music_danji: "千里走单骑",
music_jifeng: "祭风",
music_jilve: "极略",
},
font:{
xiaozhuan:'方正小篆体',
xinwei:'华文新魏_GBK',
huangcao:'方正黄草_GBK',
yuanli:'方正北魏楷书_GBK',
xingkai:'方正行楷_GBK',
shousha:'方正隶变_GBK',
font: {
xiaozhuan: "方正小篆体",
xinwei: "华文新魏_GBK",
huangcao: "方正黄草_GBK",
yuanli: "方正北魏楷书_GBK",
xingkai: "方正行楷_GBK",
shousha: "方正隶变_GBK",
},
theme: {
woodden: "木纹",
music: "音乐",
simple: "简约",
},
theme:{
woodden:'木纹',
music:'音乐',
simple:'简约'
}
};

View File

@ -1,29 +1,29 @@
var fs = require('fs');
var webpage = require('webpage')
var load = function(id){
var page = webpage.create();
page.settings.userAgent = 'NonameServer';
page.open('file://'+fs.workingDirectory+'/index.html?server='+id, function(status) {
if(status !== 'success') {
console.log(fs.workingDirectory);
console.log('Unable to access network');
}
setInterval(function(){
if(page.evaluate(function(){
if(!lib.node||!lib.node.clients||!lib.node.clients.length){
return true;
}
else{
return false;
}
})){
page.close();
load(id);
}
},600000);
});
}
load(1);
load(2);
load(3);
var fs = require('fs');
var webpage = require('webpage')
var load = function(id){
var page = webpage.create();
page.settings.userAgent = 'NonameServer';
page.open('file://'+fs.workingDirectory+'/index.html?server='+id, function(status) {
if(status !== 'success') {
console.log(fs.workingDirectory);
console.log('Unable to access network');
}
setInterval(function(){
if(page.evaluate(function(){
if(!lib.node||!lib.node.clients||!lib.node.clients.length){
return true;
}
else{
return false;
}
})){
page.close();
load(id);
}
},600000);
});
}
load(1);
load(2);
load(3);

View File

@ -41646,4 +41646,4 @@ var pinyin_dict_withtone = "yī,dīng zhēng,kǎo qiǎo yú,qī,shàng,xià,hǎn
pinyinUtilx.dict = dict;
window.pinyinUtilx = pinyinUtilx;
});
});

File diff suppressed because it is too large Load Diff

View File

@ -1,386 +1,402 @@
(function(){
var WebSocketServer=require('ws').Server;
var wss=new WebSocketServer({port:8080});
var bannedKeys=[];
var bannedIps=[];
(function () {
var WebSocketServer = require("ws").Server;
var wss = new WebSocketServer({ port: 8080 });
var bannedKeys = [];
var bannedIps = [];
var rooms=[];
var events=[];
var clients={};
var bannedKeyWords=[];
var messages={
create:function(key,nickname,avatar,config,mode){
if(this.onlineKey!=key) return;
this.nickname=util.getNickname(nickname);
this.avatar=avatar;
var room={};
var rooms = [];
var events = [];
var clients = {};
var bannedKeyWords = [];
var messages = {
create: function (key, nickname, avatar, config, mode) {
if (this.onlineKey != key) return;
this.nickname = util.getNickname(nickname);
this.avatar = avatar;
var room = {};
rooms.push(room);
this.room=room;
this.room = room;
delete this.status;
room.owner=this;
room.key=key;
this.sendl('createroom',key);
room.owner = this;
room.key = key;
this.sendl("createroom", key);
},
enter:function(key,nickname,avatar){
this.nickname=util.getNickname(nickname);
this.avatar=avatar;
var room=false;
for(var i of rooms){
if(i.key==key){
room=i;
enter: function (key, nickname, avatar) {
this.nickname = util.getNickname(nickname);
this.avatar = avatar;
var room = false;
for (var i of rooms) {
if (i.key == key) {
room = i;
break;
}
}
if(!room){
this.sendl('enterroomfailed');
if (!room) {
this.sendl("enterroomfailed");
return;
}
this.room=room;
this.room = room;
delete this.status;
if(room.owner){
if(room.servermode&&!room.owner._onconfig&&config&&mode){
room.owner.sendl('createroom',index,config,mode);
room.owner._onconfig=this;
room.owner.nickname=util.getNickname(nickname);
room.owner.avatar=avatar;
}
else if(!room.config||(room.config.gameStarted&&(!room.config.observe||!room.config.observeReady))){
this.sendl('enterroomfailed');
}
else{
this.owner=room.owner;
this.owner.sendl('onconnection',this.wsid);
if (room.owner) {
if (
room.servermode &&
!room.owner._onconfig &&
config &&
mode
) {
room.owner.sendl("createroom", index, config, mode);
room.owner._onconfig = this;
room.owner.nickname = util.getNickname(nickname);
room.owner.avatar = avatar;
} else if (
!room.config ||
(room.config.gameStarted &&
(!room.config.observe || !room.config.observeReady))
) {
this.sendl("enterroomfailed");
} else {
this.owner = room.owner;
this.owner.sendl("onconnection", this.wsid);
}
util.updaterooms();
}
},
changeAvatar:function(nickname,avatar){
this.nickname=util.getNickname(nickname);
this.avatar=avatar;
changeAvatar: function (nickname, avatar) {
this.nickname = util.getNickname(nickname);
this.avatar = avatar;
util.updateclients();
},
server:function(cfg){
if(cfg){
this.servermode=true;
var room=rooms[cfg[0]];
if(!room||room.owner){
this.sendl('reloadroom',true);
server: function (cfg) {
if (cfg) {
this.servermode = true;
var room = rooms[cfg[0]];
if (!room || room.owner) {
this.sendl("reloadroom", true);
} else {
room.owner = this;
this.room = room;
this.nickname = util.getNickname(cfg[1]);
this.avatar = cfg[2];
this.sendl("createroom", cfg[0], {}, "auto");
}
else{
room.owner=this;
this.room=room;
this.nickname=util.getNickname(cfg[1]);
this.avatar=cfg[2];
this.sendl('createroom',cfg[0],{},'auto')
}
}
else{
for(var i=0;i<rooms.length;i++){
if(!rooms[i].owner){
rooms[i].owner=this;
rooms[i].servermode=true;
this.room=rooms[i];
this.servermode=true;
} else {
for (var i = 0; i < rooms.length; i++) {
if (!rooms[i].owner) {
rooms[i].owner = this;
rooms[i].servermode = true;
this.room = rooms[i];
this.servermode = true;
break;
}
}
util.updaterooms();
}
},
key:function(id){
if(!id||typeof id!='object'){
this.sendl('denied','key');
key: function (id) {
if (!id || typeof id != "object") {
this.sendl("denied", "key");
this.close();
clearTimeout(this.keyCheck);
delete this.keyCheck;
return;
}
else if(bannedKeys.indexOf(id[0])!=-1){
} else if (bannedKeys.indexOf(id[0]) != -1) {
bannedIps.push(this._socket.remoteAddress);
this.close();
}
this.onlineKey=id[0];
this.onlineKey = id[0];
clearTimeout(this.keyCheck);
delete this.keyCheck;
},
events:function(cfg,id,type){
if(bannedKeys.indexOf(id)!=-1||typeof id!='string'||this.onlineKey!=id){
events: function (cfg, id, type) {
if (
bannedKeys.indexOf(id) != -1 ||
typeof id != "string" ||
this.onlineKey != id
) {
bannedIps.push(this._socket.remoteAddress);
console.log(id, this._socket.remoteAddress);
this.close();
return;
}
var changed=false;
var time=(new Date()).getTime();
if(cfg&&id){
if(typeof cfg=='string'){
for(var i=0;i<events.length;i++){
if(events[i].id==cfg){
if(type=='join'){
if(events[i].members.indexOf(id)==-1){
var changed = false;
var time = new Date().getTime();
if (cfg && id) {
if (typeof cfg == "string") {
for (var i = 0; i < events.length; i++) {
if (events[i].id == cfg) {
if (type == "join") {
if (events[i].members.indexOf(id) == -1) {
events[i].members.push(id);
}
changed=true;
}
else if(type=='leave'){
var index=events[i].members.indexOf(id);
if(index!=-1){
events[i].members.splice(index,1);
if(events[i].members.length==0){
events.splice(i--,1);
changed = true;
} else if (type == "leave") {
var index = events[i].members.indexOf(id);
if (index != -1) {
events[i].members.splice(index, 1);
if (events[i].members.length == 0) {
events.splice(i--, 1);
}
}
changed=true;
changed = true;
}
}
}
}
else if(cfg.hasOwnProperty('utc')&&
cfg.hasOwnProperty('day')&&
cfg.hasOwnProperty('hour')&&
cfg.hasOwnProperty('content')){
if(events.length>=20){
this.sendl('eventsdenied','total');
}
else if(cfg.utc<=time){
this.sendl('eventsdenied','time');
}
else if(util.isBanned(cfg.content)){
this.sendl('eventsdenied','ban');
}
else{
cfg.nickname=util.getNickname(cfg.nickname);
cfg.avatar=cfg.nickname||'caocao';
cfg.creator=id;
cfg.id=util.getid();
cfg.members=[id];
} else if (
cfg.hasOwnProperty("utc") &&
cfg.hasOwnProperty("day") &&
cfg.hasOwnProperty("hour") &&
cfg.hasOwnProperty("content")
) {
if (events.length >= 20) {
this.sendl("eventsdenied", "total");
} else if (cfg.utc <= time) {
this.sendl("eventsdenied", "time");
} else if (util.isBanned(cfg.content)) {
this.sendl("eventsdenied", "ban");
} else {
cfg.nickname = util.getNickname(cfg.nickname);
cfg.avatar = cfg.nickname || "caocao";
cfg.creator = id;
cfg.id = util.getid();
cfg.members = [id];
events.unshift(cfg);
changed=true;
changed = true;
}
}
}
if(changed){
if (changed) {
util.updateevents();
}
},
config:function(config){
var room=this.room;
if(room&&room.owner==this){
if(room.servermode){
room.servermode=false;
if(this._onconfig){
if(clients[this._onconfig.wsid]){
this._onconfig.owner=this;
this.sendl('onconnection',this._onconfig.wsid);
config: function (config) {
var room = this.room;
if (room && room.owner == this) {
if (room.servermode) {
room.servermode = false;
if (this._onconfig) {
if (clients[this._onconfig.wsid]) {
this._onconfig.owner = this;
this.sendl("onconnection", this._onconfig.wsid);
}
delete this._onconfig;
}
}
room.config=config;
room.config = config;
}
util.updaterooms();
},
status:function(str){
if(typeof str=='string'){
this.status=str;
}
else{
status: function (str) {
if (typeof str == "string") {
this.status = str;
} else {
delete this.status;
}
util.updateclients();
},
send:function(id,message){
if(clients[id]&&clients[id].owner==this){
try{
send: function (id, message) {
if (clients[id] && clients[id].owner == this) {
try {
clients[id].send(message);
}
catch(e){
} catch (e) {
clients[id].close();
}
}
},
close:function(id){
if(clients[id]&&clients[id].owner==this){
close: function (id) {
if (clients[id] && clients[id].owner == this) {
clients[id].close();
}
},
};
var util={
getNickname:function(str){
return typeof str=='string'?(str.slice(0,12)):'无名玩家';
var util = {
getNickname: function (str) {
return typeof str == "string" ? str.slice(0, 12) : "无名玩家";
},
isBanned:function(str){
for(var i of bannedKeyWords){
if(str.indexOf(i)!=-1) return true;
isBanned: function (str) {
for (var i of bannedKeyWords) {
if (str.indexOf(i) != -1) return true;
}
return false;
},
sendl:function(){
var args=[];
for(var i=0;i<arguments.length;i++){
sendl: function () {
var args = [];
for (var i = 0; i < arguments.length; i++) {
args.push(arguments[i]);
}
try{
try {
this.send(JSON.stringify(args));
}
catch(e){
} catch (e) {
this.close();
}
},
getid:function(){
return (Math.floor(1000000000+9000000000*Math.random())).toString();
getid: function () {
return Math.floor(
1000000000 + 9000000000 * Math.random()
).toString();
},
getroomlist:function(){
var roomlist=[];
for(var i=0;i<rooms.length;i++){
rooms[i]._num=0;
getroomlist: function () {
var roomlist = [];
for (var i = 0; i < rooms.length; i++) {
rooms[i]._num = 0;
}
for(var i in clients){
if(clients[i].room&&!clients[i].servermode){
for (var i in clients) {
if (clients[i].room && !clients[i].servermode) {
clients[i].room._num++;
}
}
for(var i=0;i<rooms.length;i++){
if(rooms[i].servermode){
roomlist[i]='server';
}
else if(rooms[i].owner&&rooms[i].config){
if(rooms[i]._num==0){
rooms[i].owner.sendl('reloadroom');
for (var i = 0; i < rooms.length; i++) {
if (rooms[i].servermode) {
roomlist[i] = "server";
} else if (rooms[i].owner && rooms[i].config) {
if (rooms[i]._num == 0) {
rooms[i].owner.sendl("reloadroom");
}
roomlist.push([rooms[i].owner.nickname,rooms[i].owner.avatar,
rooms[i].config,rooms[i]._num,rooms[i].key]);
roomlist.push([
rooms[i].owner.nickname,
rooms[i].owner.avatar,
rooms[i].config,
rooms[i]._num,
rooms[i].key,
]);
}
delete rooms[i]._num;
}
return roomlist;
},
getclientlist:function(){
var clientlist=[];
for(var i in clients){
clientlist.push([clients[i].nickname,clients[i].avatar,!clients[i].room,clients[i].status,clients[i].wsid,clients[i].onlineKey]);
getclientlist: function () {
var clientlist = [];
for (var i in clients) {
clientlist.push([
clients[i].nickname,
clients[i].avatar,
!clients[i].room,
clients[i].status,
clients[i].wsid,
clients[i].onlineKey,
]);
}
return clientlist;
},
updaterooms:function(){
var roomlist=util.getroomlist();
var clientlist=util.getclientlist();
for(var i in clients){
if(!clients[i].room){
clients[i].sendl('updaterooms',roomlist,clientlist);
updaterooms: function () {
var roomlist = util.getroomlist();
var clientlist = util.getclientlist();
for (var i in clients) {
if (!clients[i].room) {
clients[i].sendl("updaterooms", roomlist, clientlist);
}
}
},
updateclients:function(){
var clientlist=util.getclientlist();
for(var i in clients){
if(!clients[i].room){
clients[i].sendl('updateclients',clientlist);
updateclients: function () {
var clientlist = util.getclientlist();
for (var i in clients) {
if (!clients[i].room) {
clients[i].sendl("updateclients", clientlist);
}
}
},
checkevents:function(){
if(events.length){
var time=(new Date()).getTime();
for(var i=0;i<events.length;i++){
if(events[i].utc<=time){
events.splice(i--,1);
checkevents: function () {
if (events.length) {
var time = new Date().getTime();
for (var i = 0; i < events.length; i++) {
if (events[i].utc <= time) {
events.splice(i--, 1);
}
}
}
return events;
},
updateevents:function(){
updateevents: function () {
util.checkevents();
for(var i in clients){
if(!clients[i].room){
clients[i].sendl('updateevents',events);
for (var i in clients) {
if (!clients[i].room) {
clients[i].sendl("updateevents", events);
}
}
}
},
};
wss.on('connection',function(ws){
ws.sendl=util.sendl;
if(bannedIps.indexOf(ws._socket.remoteAddress)!=-1){
ws.sendl('denied','banned');
setTimeout(function(){
wss.on("connection", function (ws) {
ws.sendl = util.sendl;
if (bannedIps.indexOf(ws._socket.remoteAddress) != -1) {
ws.sendl("denied", "banned");
setTimeout(function () {
ws.close();
},500);
}, 500);
return;
}
ws.keyCheck=setTimeout(function(){
ws.sendl('denied','key');
setTimeout(function(){
ws.keyCheck = setTimeout(function () {
ws.sendl("denied", "key");
setTimeout(function () {
ws.close();
},500);
},2000);
ws.wsid=util.getid();
clients[ws.wsid]=ws;
ws.sendl('roomlist',util.getroomlist(),util.checkevents(),util.getclientlist(ws),ws.wsid);
ws.heartbeat=setInterval(function(){
if(ws.beat){
}, 500);
}, 2000);
ws.wsid = util.getid();
clients[ws.wsid] = ws;
ws.sendl(
"roomlist",
util.getroomlist(),
util.checkevents(),
util.getclientlist(ws),
ws.wsid
);
ws.heartbeat = setInterval(function () {
if (ws.beat) {
ws.close();
clearInterval(ws.heartbeat);
}
else{
ws.beat=true;
try{
ws.send('heartbeat');
}
catch(e){
} else {
ws.beat = true;
try {
ws.send("heartbeat");
} catch (e) {
ws.close();
}
}
},60000);
ws.on('message',function(message){
if(!clients[this.wsid]) return;
if(message=='heartbeat'){
this.beat=false;
}
else if(this.owner){
this.owner.sendl('onmessage',this.wsid,message);
}
else{
}, 60000);
ws.on("message", function (message) {
if (!clients[this.wsid]) return;
if (message == "heartbeat") {
this.beat = false;
} else if (this.owner) {
this.owner.sendl("onmessage", this.wsid, message);
} else {
var arr;
try{
arr=JSON.parse(message);
if(!Array.isArray(arr)){
throw('err');
try {
arr = JSON.parse(message);
if (!Array.isArray(arr)) {
throw "err";
}
}
catch(e){
this.sendl('denied','banned');
} catch (e) {
this.sendl("denied", "banned");
return;
}
if(arr.shift()=='server'){
var type=arr.shift();
if(messages[type]){
messages[type].apply(this,arr);
if (arr.shift() == "server") {
var type = arr.shift();
if (messages[type]) {
messages[type].apply(this, arr);
}
}
}
});
ws.on('close',function(){
for(var i=0;i<rooms.length;i++){
if(rooms[i].owner==this){
for(var j in clients){
if(clients[j].room==rooms[i]&&clients[j]!=this){
clients[j].sendl('selfclose');
ws.on("close", function () {
for (var i = 0; i < rooms.length; i++) {
if (rooms[i].owner == this) {
for (var j in clients) {
if (clients[j].room == rooms[i] && clients[j] != this) {
clients[j].sendl("selfclose");
// clients[j].close();
// delete clients[j];
}
}
rooms.splice(i--,1);
rooms.splice(i--, 1);
}
}
if(clients[this.wsid]){
if(this.owner){
this.owner.sendl('onclose',this.wsid);
if (clients[this.wsid]) {
if (this.owner) {
this.owner.sendl("onclose", this.wsid);
}
delete clients[this.wsid];
}
if(this.room) util.updaterooms();
if (this.room) util.updaterooms();
else util.updateclients();
});
});
}());
})();

View File

@ -1,305 +1,305 @@
window.noname_source_list=[
'LICENSE',
'noname.js',
'service-worker.js',
window.noname_source_list = [
"LICENSE",
"noname.js",
"service-worker.js",
'noname/ai/basic.js',
'noname/ai/index.js',
'noname/game/index.js',
'noname/game/promises.js',
'noname/game/dynamic-style/index.js',
'noname/get/index.js',
'noname/get/is.js',
'noname/gnc/index.js',
'noname/gnc/is.js',
'noname/init/cordova.js',
'noname/init/import.js',
'noname/init/index.js',
'noname/init/node.js',
'noname/init/onload.js',
'noname/init/polyfill.js',
'noname/library/index.js',
'noname/library/path.js',
'noname/library/update-urls.js',
'noname/library/announce/index.d.ts',
'noname/library/announce/index.js',
'noname/library/cache/cacheContext.js',
'noname/library/cache/childNodesWatcher.js',
'noname/library/channel/index.js',
'noname/library/crypt/md5.js',
'noname/library/element/button.js',
'noname/library/element/card.js',
'noname/library/element/client.js',
'noname/library/element/content.js',
'noname/library/element/contents.js',
'noname/library/element/control.js',
'noname/library/element/dialog.js',
'noname/library/element/gameEvent.js',
'noname/library/element/gameEventPromise.js',
'noname/library/element/index.js',
'noname/library/element/nodeWS.js',
'noname/library/element/player.js',
'noname/library/element/vcard.js',
'noname/library/experimental/index.js',
'noname/library/experimental/symbol.js',
'noname/library/init/index.js',
'noname/library/init/promises.js',
'noname/status/index.js',
'noname/ui/index.js',
'noname/ui/click/index.js',
'noname/ui/create/index.js',
'noname/ui/create/menu/index.js',
'noname/ui/create/menu/pages/cardPackMenu.js',
'noname/ui/create/menu/pages/characterPackMenu.js',
'noname/ui/create/menu/pages/exetensionMenu.js',
'noname/ui/create/menu/pages/optionsMenu.js',
'noname/ui/create/menu/pages/otherMenu.js',
'noname/ui/create/menu/pages/startMenu.js',
'noname/util/browser.js',
'noname/util/config.js',
'noname/util/index.js',
'noname/util/mutex.js',
'noname/util/struct/index.js',
'noname/util/struct/interface/index.d.ts',
'noname/util/struct/interface/promise-error-handler.d.ts',
'noname/util/struct/promise-error-handler/chrome.js',
'noname/util/struct/promise-error-handler/firefox.js',
'noname/util/struct/promise-error-handler/index.js',
'noname/util/struct/promise-error-handler/unknown.js',
"noname/ai/basic.js",
"noname/ai/index.js",
"noname/game/index.js",
"noname/game/promises.js",
"noname/game/dynamic-style/index.js",
"noname/get/index.js",
"noname/get/is.js",
"noname/gnc/index.js",
"noname/gnc/is.js",
"noname/init/cordova.js",
"noname/init/import.js",
"noname/init/index.js",
"noname/init/node.js",
"noname/init/onload.js",
"noname/init/polyfill.js",
"noname/library/index.js",
"noname/library/path.js",
"noname/library/update-urls.js",
"noname/library/announce/index.d.ts",
"noname/library/announce/index.js",
"noname/library/cache/cacheContext.js",
"noname/library/cache/childNodesWatcher.js",
"noname/library/channel/index.js",
"noname/library/crypt/md5.js",
"noname/library/element/button.js",
"noname/library/element/card.js",
"noname/library/element/client.js",
"noname/library/element/content.js",
"noname/library/element/contents.js",
"noname/library/element/control.js",
"noname/library/element/dialog.js",
"noname/library/element/gameEvent.js",
"noname/library/element/gameEventPromise.js",
"noname/library/element/index.js",
"noname/library/element/nodeWS.js",
"noname/library/element/player.js",
"noname/library/element/vcard.js",
"noname/library/experimental/index.js",
"noname/library/experimental/symbol.js",
"noname/library/init/index.js",
"noname/library/init/promises.js",
"noname/status/index.js",
"noname/ui/index.js",
"noname/ui/click/index.js",
"noname/ui/create/index.js",
"noname/ui/create/menu/index.js",
"noname/ui/create/menu/pages/cardPackMenu.js",
"noname/ui/create/menu/pages/characterPackMenu.js",
"noname/ui/create/menu/pages/exetensionMenu.js",
"noname/ui/create/menu/pages/optionsMenu.js",
"noname/ui/create/menu/pages/otherMenu.js",
"noname/ui/create/menu/pages/startMenu.js",
"noname/util/browser.js",
"noname/util/config.js",
"noname/util/index.js",
"noname/util/mutex.js",
"noname/util/struct/index.js",
"noname/util/struct/interface/index.d.ts",
"noname/util/struct/interface/promise-error-handler.d.ts",
"noname/util/struct/promise-error-handler/chrome.js",
"noname/util/struct/promise-error-handler/firefox.js",
"noname/util/struct/promise-error-handler/index.js",
"noname/util/struct/promise-error-handler/unknown.js",
'card/extra.js',
'card/gujian.js',
'card/guozhan.js',
'card/gwent.js',
'card/hearth.js',
'card/huanlekapai.js',
'card/mtg.js',
'card/sp.js',
'card/standard.js',
'card/swd.js',
'card/yingbian.js',
'card/yongjian.js',
'card/yunchou.js',
'card/zhenfa.js',
'card/zhulu.js',
'character/clan.js',
'character/collab.js',
'character/ddd.js',
'character/diy.js',
'character/extra.js',
'character/gujian.js',
'character/gwent.js',
'character/hearth.js',
'character/huicui.js',
'character/jiange.js',
'character/jsrg.js',
'character/mobile.js',
'character/mtg.js',
'character/offline.js',
'character/old.js',
'character/onlyOL.js',
'character/ow.js',
'character/rank.js',
'character/refresh.js',
'character/sb.js',
'character/shenhua.js',
'character/shiji.js',
'character/sp.js',
'character/sp2.js',
'character/standard.js',
'character/swd.js',
'character/tw.js',
'character/xiake.js',
'character/xianding.js',
'character/xianjian.js',
'character/xinghuoliaoyuan.js',
'character/yijiang.js',
'character/yingbian.js',
'character/yxs.js',
'character/zhuogui.js',
'font/motoyamaru.woff2',
'font/suits.woff2',
'game/asset.js',
'game/codemirror.js',
'game/compiler-sfc.browser.js',
'game/config.js',
'game/core-js-bundle.js',
'game/directory.js',
'game/entry.js',
'game/game.js',
'game/http.js',
'game/jszip.js',
'game/keyWords.js',
'game/NoSleep.js',
'game/package.js',
'game/phantom.js',
'game/pinyinjs.js',
'game/pressure.js',
'game/server.js',
'game/source.js',
'game/update.js',
'game/vue.esm-browser.js',
'image/card/cardtempname_bg.png',
'image/flappybird/BG.png',
'image/flappybird/botpipe.png',
'image/flappybird/gameclear.png',
'image/flappybird/gameover.png',
'image/flappybird/getready.png',
'image/flappybird/ground.png',
'image/flappybird/toppipe.png',
'image/flappybird/bird/b0.png',
'image/flappybird/bird/b1.png',
'image/flappybird/bird/b2.png',
'image/flappybird/ground/g0.png',
'image/flappybird/ground/g1.png',
'image/flappybird/tap/t0.png',
'image/flappybird/tap/t1.png',
'layout/default/codemirror.css',
'layout/default/layout.css',
'layout/default/menu.css',
'layout/default/phone.css',
'layout/long/layout.css',
'layout/long2/layout.css',
'layout/mobile/equip.css',
'layout/mobile/layout.css',
'layout/mode/boss.css',
'layout/mode/chess.css',
'layout/mode/stone.css',
'layout/mode/tafang.css',
'layout/newlayout/equip.css',
'layout/newlayout/global.css',
'layout/newlayout/layout.css',
'layout/nova/layout.css',
'mode/boss.js',
'mode/chess.js',
'mode/doudizhu.js',
'mode/guozhan.js',
'mode/identity.js',
'mode/tafang.js',
'mode/single.js',
'mode/stone.js',
'mode/brawl.js',
'mode/versus.js',
'mode/connect.js',
'extension/boss/extension.js',
'extension/cardpile/extension.js',
'extension/coin/extension.js',
'extension/wuxing/extension.js',
'theme/music/grid.png',
'theme/music/style.css',
'theme/music/wood.png',
'theme/music/wood3.png',
'theme/simple/card.png',
'theme/simple/grid.png',
'theme/simple/style.css',
'theme/simple/unknown.png',
'theme/simple/wood.png',
'theme/simple/wood3.png',
'theme/woodden/grid.png',
'theme/woodden/style.css',
'theme/woodden/wood.jpg',
'theme/woodden/wood.png',
'theme/woodden/wood2.jpg',
'theme/woodden/wood2.png',
'theme/style/card/custom.css',
'theme/style/card/default.css',
'theme/style/card/music.css',
'theme/style/card/simple.css',
'theme/style/card/wood.css',
'theme/style/card/new.css',
'theme/style/card/ol.css',
'theme/style/card/image/new.png',
'theme/style/card/image/ol.png',
'theme/style/cardback/custom.css',
'theme/style/cardback/default.css',
'theme/style/cardback/feicheng.css',
'theme/style/cardback/liusha.css',
'theme/style/cardback/music.css',
'theme/style/cardback/new.css',
'theme/style/cardback/ol.css',
'theme/style/cardback/official.css',
'theme/style/cardback/wood.css',
'theme/style/cardback/image/feicheng.png',
'theme/style/cardback/image/feicheng2.png',
'theme/style/cardback/image/liusha.png',
'theme/style/cardback/image/liusha2.png',
'theme/style/cardback/image/new.png',
'theme/style/cardback/image/new2.png',
'theme/style/cardback/image/official.png',
'theme/style/cardback/image/official2.png',
'theme/style/cardback/image/ol.png',
'theme/style/cardback/image/ol2.png',
'theme/style/hp/custom.css',
'theme/style/hp/default.css',
'theme/style/hp/emotion.css',
'theme/style/hp/glass.css',
'theme/style/hp/official.css',
'theme/style/hp/ol.css',
'theme/style/hp/round.css',
'theme/style/hp/xinglass.css',
'theme/style/hp/xinround.css',
'theme/style/hp/image/emotion1.png',
'theme/style/hp/image/emotion2.png',
'theme/style/hp/image/emotion3.png',
'theme/style/hp/image/emotion4.png',
'theme/style/hp/image/glass1.png',
'theme/style/hp/image/glass2.png',
'theme/style/hp/image/glass3.png',
'theme/style/hp/image/glass4.png',
'theme/style/hp/image/official1.png',
'theme/style/hp/image/official2.png',
'theme/style/hp/image/official3.png',
'theme/style/hp/image/official4.png',
'theme/style/hp/image/ol1.png',
'theme/style/hp/image/ol2.png',
'theme/style/hp/image/ol3.png',
'theme/style/hp/image/ol4.png',
'theme/style/hp/image/round1.png',
'theme/style/hp/image/round2.png',
'theme/style/hp/image/round3.png',
'theme/style/hp/image/round4.png',
'theme/style/hp/image/shield.png',
'theme/style/hp/image/xinglass1.png',
'theme/style/hp/image/xinglass2.png',
'theme/style/hp/image/xinglass3.png',
'theme/style/hp/image/xinglass4.png',
'theme/style/hp/image/xinround1.png',
'theme/style/hp/image/xinround2.png',
'theme/style/hp/image/xinround3.png',
'theme/style/hp/image/xinround4.png',
'node_modules/options/.npmignore',
'node_modules/options/lib/options.js',
'node_modules/options/package.json',
'node_modules/ultron/.npmignore',
'node_modules/ultron/.travis.yml',
'node_modules/ultron/index.js',
'node_modules/ultron/package.json',
'node_modules/ultron/test.js',
'node_modules/ws/.npmignore',
'node_modules/ws/.travis.yml',
'node_modules/ws/index.js',
'node_modules/ws/lib/BufferPool.js',
'node_modules/ws/lib/BufferUtil.fallback.js',
'node_modules/ws/lib/BufferUtil.js',
'node_modules/ws/lib/ErrorCodes.js',
'node_modules/ws/lib/Extensions.js',
'node_modules/ws/lib/PerMessageDeflate.js',
'node_modules/ws/lib/Receiver.hixie.js',
'node_modules/ws/lib/Receiver.js',
'node_modules/ws/lib/Sender.hixie.js',
'node_modules/ws/lib/Sender.js',
'node_modules/ws/lib/Validation.fallback.js',
'node_modules/ws/lib/Validation.js',
'node_modules/ws/lib/WebSocket.js',
'node_modules/ws/lib/WebSocketServer.js',
'node_modules/ws/package.json'
"card/extra.js",
"card/gujian.js",
"card/guozhan.js",
"card/gwent.js",
"card/hearth.js",
"card/huanlekapai.js",
"card/mtg.js",
"card/sp.js",
"card/standard.js",
"card/swd.js",
"card/yingbian.js",
"card/yongjian.js",
"card/yunchou.js",
"card/zhenfa.js",
"card/zhulu.js",
"character/clan.js",
"character/collab.js",
"character/ddd.js",
"character/diy.js",
"character/extra.js",
"character/gujian.js",
"character/gwent.js",
"character/hearth.js",
"character/huicui.js",
"character/jiange.js",
"character/jsrg.js",
"character/mobile.js",
"character/mtg.js",
"character/offline.js",
"character/old.js",
"character/onlyOL.js",
"character/ow.js",
"character/rank.js",
"character/refresh.js",
"character/sb.js",
"character/shenhua.js",
"character/shiji.js",
"character/sp.js",
"character/sp2.js",
"character/standard.js",
"character/swd.js",
"character/tw.js",
"character/xiake.js",
"character/xianding.js",
"character/xianjian.js",
"character/xinghuoliaoyuan.js",
"character/yijiang.js",
"character/yingbian.js",
"character/yxs.js",
"character/zhuogui.js",
"font/motoyamaru.woff2",
"font/suits.woff2",
"game/asset.js",
"game/codemirror.js",
"game/compiler-sfc.browser.js",
"game/config.js",
"game/core-js-bundle.js",
"game/directory.js",
"game/entry.js",
"game/game.js",
"game/http.js",
"game/jszip.js",
"game/keyWords.js",
"game/NoSleep.js",
"game/package.js",
"game/phantom.js",
"game/pinyinjs.js",
"game/pressure.js",
"game/server.js",
"game/source.js",
"game/update.js",
"game/vue.esm-browser.js",
"image/card/cardtempname_bg.png",
"image/flappybird/BG.png",
"image/flappybird/botpipe.png",
"image/flappybird/gameclear.png",
"image/flappybird/gameover.png",
"image/flappybird/getready.png",
"image/flappybird/ground.png",
"image/flappybird/toppipe.png",
"image/flappybird/bird/b0.png",
"image/flappybird/bird/b1.png",
"image/flappybird/bird/b2.png",
"image/flappybird/ground/g0.png",
"image/flappybird/ground/g1.png",
"image/flappybird/tap/t0.png",
"image/flappybird/tap/t1.png",
"layout/default/codemirror.css",
"layout/default/layout.css",
"layout/default/menu.css",
"layout/default/phone.css",
"layout/long/layout.css",
"layout/long2/layout.css",
"layout/mobile/equip.css",
"layout/mobile/layout.css",
"layout/mode/boss.css",
"layout/mode/chess.css",
"layout/mode/stone.css",
"layout/mode/tafang.css",
"layout/newlayout/equip.css",
"layout/newlayout/global.css",
"layout/newlayout/layout.css",
"layout/nova/layout.css",
"mode/boss.js",
"mode/chess.js",
"mode/doudizhu.js",
"mode/guozhan.js",
"mode/identity.js",
"mode/tafang.js",
"mode/single.js",
"mode/stone.js",
"mode/brawl.js",
"mode/versus.js",
"mode/connect.js",
"extension/boss/extension.js",
"extension/cardpile/extension.js",
"extension/coin/extension.js",
"extension/wuxing/extension.js",
"theme/music/grid.png",
"theme/music/style.css",
"theme/music/wood.png",
"theme/music/wood3.png",
"theme/simple/card.png",
"theme/simple/grid.png",
"theme/simple/style.css",
"theme/simple/unknown.png",
"theme/simple/wood.png",
"theme/simple/wood3.png",
"theme/woodden/grid.png",
"theme/woodden/style.css",
"theme/woodden/wood.jpg",
"theme/woodden/wood.png",
"theme/woodden/wood2.jpg",
"theme/woodden/wood2.png",
"theme/style/card/custom.css",
"theme/style/card/default.css",
"theme/style/card/music.css",
"theme/style/card/simple.css",
"theme/style/card/wood.css",
"theme/style/card/new.css",
"theme/style/card/ol.css",
"theme/style/card/image/new.png",
"theme/style/card/image/ol.png",
"theme/style/cardback/custom.css",
"theme/style/cardback/default.css",
"theme/style/cardback/feicheng.css",
"theme/style/cardback/liusha.css",
"theme/style/cardback/music.css",
"theme/style/cardback/new.css",
"theme/style/cardback/ol.css",
"theme/style/cardback/official.css",
"theme/style/cardback/wood.css",
"theme/style/cardback/image/feicheng.png",
"theme/style/cardback/image/feicheng2.png",
"theme/style/cardback/image/liusha.png",
"theme/style/cardback/image/liusha2.png",
"theme/style/cardback/image/new.png",
"theme/style/cardback/image/new2.png",
"theme/style/cardback/image/official.png",
"theme/style/cardback/image/official2.png",
"theme/style/cardback/image/ol.png",
"theme/style/cardback/image/ol2.png",
"theme/style/hp/custom.css",
"theme/style/hp/default.css",
"theme/style/hp/emotion.css",
"theme/style/hp/glass.css",
"theme/style/hp/official.css",
"theme/style/hp/ol.css",
"theme/style/hp/round.css",
"theme/style/hp/xinglass.css",
"theme/style/hp/xinround.css",
"theme/style/hp/image/emotion1.png",
"theme/style/hp/image/emotion2.png",
"theme/style/hp/image/emotion3.png",
"theme/style/hp/image/emotion4.png",
"theme/style/hp/image/glass1.png",
"theme/style/hp/image/glass2.png",
"theme/style/hp/image/glass3.png",
"theme/style/hp/image/glass4.png",
"theme/style/hp/image/official1.png",
"theme/style/hp/image/official2.png",
"theme/style/hp/image/official3.png",
"theme/style/hp/image/official4.png",
"theme/style/hp/image/ol1.png",
"theme/style/hp/image/ol2.png",
"theme/style/hp/image/ol3.png",
"theme/style/hp/image/ol4.png",
"theme/style/hp/image/round1.png",
"theme/style/hp/image/round2.png",
"theme/style/hp/image/round3.png",
"theme/style/hp/image/round4.png",
"theme/style/hp/image/shield.png",
"theme/style/hp/image/xinglass1.png",
"theme/style/hp/image/xinglass2.png",
"theme/style/hp/image/xinglass3.png",
"theme/style/hp/image/xinglass4.png",
"theme/style/hp/image/xinround1.png",
"theme/style/hp/image/xinround2.png",
"theme/style/hp/image/xinround3.png",
"theme/style/hp/image/xinround4.png",
"node_modules/options/.npmignore",
"node_modules/options/lib/options.js",
"node_modules/options/package.json",
"node_modules/ultron/.npmignore",
"node_modules/ultron/.travis.yml",
"node_modules/ultron/index.js",
"node_modules/ultron/package.json",
"node_modules/ultron/test.js",
"node_modules/ws/.npmignore",
"node_modules/ws/.travis.yml",
"node_modules/ws/index.js",
"node_modules/ws/lib/BufferPool.js",
"node_modules/ws/lib/BufferUtil.fallback.js",
"node_modules/ws/lib/BufferUtil.js",
"node_modules/ws/lib/ErrorCodes.js",
"node_modules/ws/lib/Extensions.js",
"node_modules/ws/lib/PerMessageDeflate.js",
"node_modules/ws/lib/Receiver.hixie.js",
"node_modules/ws/lib/Receiver.js",
"node_modules/ws/lib/Sender.hixie.js",
"node_modules/ws/lib/Sender.js",
"node_modules/ws/lib/Validation.fallback.js",
"node_modules/ws/lib/Validation.js",
"node_modules/ws/lib/WebSocket.js",
"node_modules/ws/lib/WebSocketServer.js",
"node_modules/ws/package.json",
];

View File

@ -1,63 +1,63 @@
window.noname_update={
version:'1.10.10',
update:'1.10.9',
changeLog:[
'整合@kuangshen04 @mengxinzxz @lieren2023 @nonameShijian @PZ157 @XboxSoldier @universe-st @copcap 的Pull Request',
'OL界程普、界虞翻',
'手杀杨奉、谋夏侯惇、谋高顺',
'引入Vue框架和新的换肤机制',
'其他AI优化与bug修复',
],
files:[
'service-worker.js',
'card/mtg.js',
'card/standard.js',
'character/diy.js',
'character/extra.js',
'character/gwent.js',
'character/huicui.js',
'character/mobile.js',
'character/offline.js',
'character/onlyOL.js',
'character/ow.js',
'character/rank.js',
'character/refresh.js',
'character/sb.js',
'character/shenhua.js',
'character/shiji.js',
'character/sp.js',
'character/sp2.js',
'character/standard.js',
'character/swd.js',
'character/tw.js',
'character/xianding.js',
'character/xinghuoliaoyuan.js',
'character/yijiang.js',
'character/yingbian.js',
'character/yxs.js',
'game/compiler-sfc.browser.js',
'game/game.js',
'game/pinyinjs.js',
'game/vue.esm-browser.js',
'layout/default/layout.css',
'mode/boss.js',
'mode/versus.js',
'noname/game/index.js',
'noname/get/index.js',
'noname/get/is.js',
'noname/library/index.js',
'noname/library/element/content.js',
'noname/library/element/player.js',
'noname/library/init/index.js',
]
};
window.noname_update = {
version: "1.10.10",
update: "1.10.9",
changeLog: [
"整合@kuangshen04 @mengxinzxz @lieren2023 @nonameShijian @PZ157 @XboxSoldier @universe-st @copcap 的Pull Request",
"OL界程普、界虞翻",
"手杀杨奉、谋夏侯惇、谋高顺",
"引入Vue框架和新的换肤机制",
"其他AI优化与bug修复",
],
files: [
"service-worker.js",
"card/mtg.js",
"card/standard.js",
"character/diy.js",
"character/extra.js",
"character/gwent.js",
"character/huicui.js",
"character/mobile.js",
"character/offline.js",
"character/onlyOL.js",
"character/ow.js",
"character/rank.js",
"character/refresh.js",
"character/sb.js",
"character/shenhua.js",
"character/shiji.js",
"character/sp.js",
"character/sp2.js",
"character/standard.js",
"character/swd.js",
"character/tw.js",
"character/xianding.js",
"character/xinghuoliaoyuan.js",
"character/yijiang.js",
"character/yingbian.js",
"character/yxs.js",
"game/compiler-sfc.browser.js",
"game/game.js",
"game/pinyinjs.js",
"game/vue.esm-browser.js",
"layout/default/layout.css",
"mode/boss.js",
"mode/versus.js",
"noname/game/index.js",
"noname/get/index.js",
"noname/get/is.js",
"noname/library/index.js",
"noname/library/element/content.js",
"noname/library/element/player.js",
"noname/library/init/index.js",
],
};

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,118 +1,120 @@
#arena{
height: calc(97% + 30px);
top:3%
}
#arena.mobile>#control{
top:calc(100% - 205px);
}
#arena.chess.mobile>#control{
top:calc(100% - 175px);
}
#control>div,#system>div>div{
height: 40px;
font-family: 'xinwei';
font-size: 30px;
line-height: 34px;
}
#historybar{
top:14px;
height: calc(100% - 150px);
}
#window.oblongcard #historybar{
height: calc(100% - 170px);
}
#time{
visibility: hidden;
}
#system{
z-index: 31 !important;
}
#window>.dialog.popped{
z-index: 21 !important;
}
#system>div{
position: absolute;
height: 60px;
}
#system>div:first-child{
left:5px;
}
#system>div:last-child{
right:5px;
}
#system>div>div{
line-height: 40px;
}
#system{
z-index: 5;
}
#system>div{
transition-duration: 0.3s;
}
#system>div:not(.shown){
transform: translateY(-80px);
}
.statusbar #system>div:not(.shown){
transform: translateY(-120px);
}
#system>#system1{
width: 140px;
}
#system>#system2{
width: calc(100% - 140px);
}
#system>div:not(.shown)>div{
pointer-events: none;
}
#pausebutton,#autobutton,#restartbutton{
display: none !important;
}
.menu-container>.menu.main,
.popup-container>.menu{
zoom:1.3;
}
.popup-container>.menu{
max-height: 307px;
}
.popup-container>.menu.visual.withbar{
max-height: 360px;
}
.menu-container>.menu.main:not(.center){
top: 12px !important;
left: 10px !important;
}
#system{
width: calc(100% - 12px) !important;
left: 0 !important;
}
#arena.phonetop{
top:80px !important;
}
.player>.identity{
transform: scale(1.3);
}
#window>.dialog.popped.hoverdialog{
transform: scale(1.3);
transform-origin: left top;
}
.player:not([data-position='0']).linked .identity,
#arena.chess .player.linked .identity{
transform:scale(1.3) rotate(90deg);
}
/*br.finish_game{
display: inline !important;
}*/
div:not(.shown)>div.finish_game{
opacity: 0 !important;
}
div.finish_game{
transition: all 0.2s !important;
}
@media screen and (orientation:portrait) {
}
#arena {
height: calc(97% + 30px);
top: 3%;
}
#arena.mobile > #control {
top: calc(100% - 205px);
}
#arena.chess.mobile > #control {
top: calc(100% - 175px);
}
#control > div,
#system > div > div {
height: 40px;
font-family: "xinwei";
font-size: 30px;
line-height: 34px;
}
#historybar {
top: 14px;
height: calc(100% - 150px);
}
#window.oblongcard #historybar {
height: calc(100% - 170px);
}
#time {
visibility: hidden;
}
#system {
z-index: 31 !important;
}
#window > .dialog.popped {
z-index: 21 !important;
}
#system > div {
position: absolute;
height: 60px;
}
#system > div:first-child {
left: 5px;
}
#system > div:last-child {
right: 5px;
}
#system > div > div {
line-height: 40px;
}
#system {
z-index: 5;
}
#system > div {
transition-duration: 0.3s;
}
#system > div:not(.shown) {
transform: translateY(-80px);
}
.statusbar #system > div:not(.shown) {
transform: translateY(-120px);
}
#system > #system1 {
width: 140px;
}
#system > #system2 {
width: calc(100% - 140px);
}
#system > div:not(.shown) > div {
pointer-events: none;
}
#pausebutton,
#autobutton,
#restartbutton {
display: none !important;
}
.menu-container > .menu.main,
.popup-container > .menu {
zoom: 1.3;
}
.popup-container > .menu {
max-height: 307px;
}
.popup-container > .menu.visual.withbar {
max-height: 360px;
}
.menu-container > .menu.main:not(.center) {
top: 12px !important;
left: 10px !important;
}
#system {
width: calc(100% - 12px) !important;
left: 0 !important;
}
#arena.phonetop {
top: 80px !important;
}
.player > .identity {
transform: scale(1.3);
}
#window > .dialog.popped.hoverdialog {
transform: scale(1.3);
transform-origin: left top;
}
.player:not([data-position="0"]).linked .identity,
#arena.chess .player.linked .identity {
transform: scale(1.3) rotate(90deg);
}
/*br.finish_game{
display: inline !important;
}*/
div:not(.shown) > div.finish_game {
opacity: 0 !important;
}
div.finish_game {
transition: all 0.2s !important;
}
@media screen and (orientation: portrait) {
}

View File

@ -1,257 +1,410 @@
@import "../mobile/layout.css";
#window.rightbar #system,
#window.leftbar #system{
width: calc(100% - 62px);
}
#window.leftbar #system{
left: 50px;
}
#window.rightbar #historybar{
left: calc(100% - 50px);
}
#window.leftbar #historybar{
left: 0;
}
#historybar{
left: calc(100% - 50px);
border-radius: 0;
top: 0;
height: calc(100% - 121px);
z-index: 1;
}
#window.oblongcard #historybar{
height: calc(100% - 141px);
}
#arena:not(.fewplayer)>.player:not(.minskin):not(*[data-position='0'])>.name.name2{
left: auto;
right: 13px;
}
#arena:not(.fewplayer)>.player:not(.minskin):not(*[data-position='0']){
width: 120px !important;
height: 220px !important;
}
#arena:not(.fewplayer)>.player:not(.minskin):not(*[data-position='0'])>.marks{
left: -15px;
}
#arena:not(.fewplayer)>.player:not(.minskin):not(*[data-position='0'])>.judges{
right: -27px;
}
#arena:not(.fewplayer)[data-player_height='default']>.player:not(.minskin):not(*[data-position='0']){
height: 200px !important;
}
#arena:not(.fewplayer)[data-player_height='short']>.player:not(.minskin):not(*[data-position='0']){
height: 180px !important;
}
#arena:not(.fewplayer)>.player:not(.minskin):not(*[data-position='0'])>.equips{
transform: scale(0.8);
transform-origin: bottom left;
}
#arena:not(.fewplayer).lslim_player .player .equips{
left: 5px;
}
#arena:not(.fewplayer)>.player:not(.minskin):not(*[data-position='0'])>.avatar,
#arena:not(.fewplayer)>.player:not(.minskin):not(*[data-position='0'])>.avatar2{
width: calc(100% - 14px) !important;
height: calc(100% - 14px) !important;
background-position: 50% !important;
}
#arena.uslim_player:not(.fewplayer)>.player:not(.minskin):not(*[data-position='0'])>.avatar,
#arena.uslim_player:not(.fewplayer)>.player:not(.minskin):not(*[data-position='0'])>.avatar2{
width: calc(100% - 6px) !important;
height: calc(100% - 6px) !important;
background-position: 50% !important;
}
#arena.lslim_player:not(.fewplayer)>.player:not(.minskin):not(*[data-position='0'])>.avatar,
#arena.lslim_player:not(.fewplayer)>.player:not(.minskin):not(*[data-position='0'])>.avatar2{
width: calc(100% - 10px) !important;
height: calc(100% - 10px) !important;
background-position: 50% !important;
}
#arena:not(.fewplayer)>.player.fullskin2:not(.minskin):not(*[data-position='0'])>.avatar,
#arena:not(.fewplayer)>.player.fullskin2:not(.minskin):not(*[data-position='0'])>.avatar2{
height: 50% !important;
background-position: 0 0 !important;
border-radius: 8px !important;
}
#arena.uslim_player:not(.fewplayer)>.player.fullskin2:not(.minskin):not(*[data-position='0'])>.avatar,
#arena.uslim_player:not(.fewplayer)>.player.fullskin2:not(.minskin):not(*[data-position='0'])>.avatar2{
height: calc(50% + 4px) !important;
}
#arena.lslim_player:not(.fewplayer)>.player.fullskin2:not(.minskin):not(*[data-position='0'])>.avatar,
#arena.lslim_player:not(.fewplayer)>.player.fullskin2:not(.minskin):not(*[data-position='0'])>.avatar2{
height: calc(50% + 2px) !important;
}
#window[data-radius_size='reduce'] #arena:not(.fewplayer)>.player.fullskin2:not(.minskin):not(*[data-position='0'])>.avatar,
#window[data-radius_size='reduce'] #arena:not(.fewplayer)>.player.fullskin2:not(.minskin):not(*[data-position='0'])>.avatar2{
border-radius: 4px !important;
}
#window[data-radius_size='off'] #arena:not(.fewplayer)>.player.fullskin2:not(.minskin):not(*[data-position='0'])>.avatar,
#window[data-radius_size='off'] #arena:not(.fewplayer)>.player.fullskin2:not(.minskin):not(*[data-position='0'])>.avatar2{
border-radius: 0px !important;
}
#window[data-radius_size='increase'] #arena:not(.fewplayer)>.player.fullskin2:not(.minskin):not(*[data-position='0'])>.avatar,
#window[data-radius_size='increase'] #arena:not(.fewplayer)>.player.fullskin2:not(.minskin):not(*[data-position='0'])>.avatar2{
border-radius: 16px !important;
}
#arena:not(.fewplayer)>.player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position='0'])>.avatar{
border-radius: 8px 8px 0 0 !important;
height: calc(50% + 14px) !important;
clip-path: polygon(-10px -10px, 116px -10px, 116px 92px, 106px 92px, 0px 114px, -10px 114px);
-webkit-clip-path: polygon(-10px -10px, 116px -10px, 116px 92px, 106px 92px, 0px 114px, -10px 114px);
}
#arena:not(.fewplayer)[data-player_height='default']>.player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position='0'])>.avatar{
clip-path: polygon(-10px -10px, 116px -10px, 116px 82px, 106px 82px, 0px 104px, -10px 104px);
-webkit-clip-path: polygon(-10px -10px, 116px -10px, 116px 82px, 106px 82px, 0px 104px, -10px 104px);
}
#arena:not(.fewplayer)[data-player_height='short']>.player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position='0'])>.avatar{
clip-path: polygon(-10px -10px, 116px -10px, 116px 72px, 106px 72px, 0px 94px, -10px 94px);
-webkit-clip-path: polygon(-10px -10px, 116px -10px, 116px 72px, 106px 72px, 0px 94px, -10px 94px);
}
#arena.uslim_player:not(.fewplayer)>.player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position='0'])>.avatar{
height: calc(50% + 18px) !important;
clip-path: polygon(-10px -10px, 124px -10px, 124px 96px, 114px 96px, 0px 118px, -10px 118px);
-webkit-clip-path: polygon(-10px -10px, 124px -10px, 124px 96px, 114px 96px, 0px 118px, -10px 118px);
}
#arena.uslim_player:not(.fewplayer)[data-player_height='default']>.player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position='0'])>.avatar{
clip-path: polygon(-10px -10px, 124px -10px, 124px 86px, 114px 86px, 0px 108px, -10px 108px);
-webkit-clip-path: polygon(-10px -10px, 124px -10px, 124px 86px, 114px 86px, 0px 108px, -10px 108px);
}
#arena.uslim_player:not(.fewplayer)[data-player_height='short']>.player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position='0'])>.avatar{
clip-path: polygon(-10px -10px, 124px -10px, 124px 76px, 114px 76px, 0px 98px, -10px 98px);
-webkit-clip-path: polygon(-10px -10px, 124px -10px, 124px 76px, 114px 76px, 0px 98px, -10px 98px);
}
#arena.lslim_player:not(.fewplayer)>.player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position='0'])>.avatar{
height: calc(50% + 18px) !important;
clip-path: polygon(-10px -10px, 120px -10px, 120px 94px, 110px 94px, 0px 116px, -10px 116px);
-webkit-clip-path: polygon(-10px -10px, 120px -10px, 120px 94px, 110px 94px, 0px 116px, -10px 116px);
}
#arena.lslim_player:not(.fewplayer)[data-player_height='default']>.player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position='0'])>.avatar{
clip-path: polygon(-10px -10px, 120px -10px, 120px 84px, 110px 84px, 0px 106px, -10px 106px);
-webkit-clip-path: polygon(-10px -10px, 120px -10px, 120px 84px, 110px 84px, 0px 106px, -10px 106px);
}
#arena.lslim_player:not(.fewplayer)[data-player_height='short']>.player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position='0'])>.avatar{
clip-path: polygon(-10px -10px, 120px -10px, 120px 74px, 110px 74px, 0px 96px, -10px 96px);
-webkit-clip-path: polygon(-10px -10px, 120px -10px, 120px 74px, 110px 74px, 0px 96px, -10px 96px);
}
#window[data-radius_size='reduce'] #arena:not(.fewplayer)>.player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position='0'])>.avatar{
border-radius: 4px 4px 0 0 !important;
}
#window[data-radius_size='off'] #arena:not(.fewplayer)>.player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position='0'])>.avatar{
border-radius: 0 0 0 0 !important;
}
#window[data-radius_size='increase'] #arena:not(.fewplayer)>.player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position='0'])>.avatar{
border-radius: 16px 16px 0 0 !important;
}
#arena:not(.fewplayer)>.player.fullskin2:not(.minskin):not(.unseen):not(*[data-position='0'])>.avatar2{
border-radius: 0 0 8px 8px !important;
top: calc(50% - 21px) !important;
height: calc(50% + 14px) !important;
background-position: 0 10px !important;
clip-path: polygon(-10px 32px, 0 32px, 106px 10px, 116px 10px, 116px 134px, -10px 134px);
-webkit-clip-path: polygon(-10px 32px, 0 32px, 106px 10px, 116px 10px, 116px 134px, -10px 134px);
}
#arena.uslim_player:not(.fewplayer)>.player.fullskin2:not(.minskin):not(.unseen):not(*[data-position='0'])>.avatar2{
top: calc(50% - 21px) !important;
height: calc(50% + 18px) !important;
clip-path: polygon(-10px 32px, 0 32px, 114px 10px, 124px 10px, 124px 138px, -10px 138px);
-webkit-clip-path: polygon(-10px 32px, 0 32px, 114px 10px, 124px 10px, 124px 138px, -10px 138px);
}
#arena.lslim_player:not(.fewplayer)>.player.fullskin2:not(.minskin):not(.unseen):not(*[data-position='0'])>.avatar2{
top: calc(50% - 21px) !important;
height: calc(50% + 16px) !important;
clip-path: polygon(-10px 32px, 0 32px, 110px 10px, 120px 10px, 120px 136px, -10px 136px);
-webkit-clip-path: polygon(-10px 32px, 0 32px, 110px 10px, 120px 10px, 120px 136px, -10px 136px);
}
#window[data-radius_size='reduce'] #arena:not(.fewplayer)>.player.fullskin2:not(.minskin):not(.unseen):not(*[data-position='0'])>.avatar2{
border-radius: 0 0 4px 4px !important;
}
#window[data-radius_size='off'] #arena:not(.fewplayer)>.player.fullskin2:not(.minskin):not(.unseen):not(*[data-position='0'])>.avatar2{
border-radius: 0 0 0 0 !important;
}
#window[data-radius_size='increase'] #arena:not(.fewplayer)>.player.fullskin2:not(.minskin):not(.unseen):not(*[data-position='0'])>.avatar2{
border-radius: 0 0 16px 16px !important;
}
#arena:not(.fewplayer)>.player.fullskin2:not(.minskin):not(*[data-position='0'])>.avatar2{
top: calc(50% - 7px) !important;
}
#arena:not(.fewplayer)>.player:not(.minskin):not(*[data-position='0'])>.identity{
left: 102px;
}
#arena:not(.fewplayer)>.player:not(.minskin):not(*[data-position='0'])>.hp:not(.actcount){
left: 93px;
}
/*#arena:not(.fewplayer)>.player:not(.minskin):not(*[data-position='0'])>.hp:not(.actcount).text{
left: 89px;
}*/
#arena:not(.fewplayer)>.player.fullskin2 .avatar2{
z-index: 2;
}
#arena:not(.fewplayer)>.player.unseen:not(.unseen2) .count{
text-align: left;
border-radius:3px 0 0 3px;
}
#arena:not(.fewplayer)>.player.unseen2 .count{
border-radius: 3px;
text-align: center;
}
#arena:not(.fewplayer) .timerbar>div{
top: 205px;
width: 96px;
left: 12px;
}
#arena:not(.fewplayer)[data-player_height='default'] .timerbar>div{
top: 185px;
}
#arena:not(.fewplayer)[data-player_height='short'] .timerbar>div{
top: 165px;
}
/*--------位置(8人)------*/
#arena:not(.fewplayer)[data-number='8']>.player[data-position='1']{top:calc(30% - 120px);left:calc(-300% / 94 + 4375% / 47 - 735px + 720px);}
#arena:not(.fewplayer)[data-number='8']>.player[data-position='2']{top:calc(8% - 32px);left:calc(-300% / 94 + 3750% / 47 - 630px + 600px);}
#arena:not(.fewplayer)[data-number='8']>.player[data-position='3']{top:0;left:calc(-300% / 94 + 3125% / 47 - 525px + 480px);}
#arena:not(.fewplayer)[data-number='8']>.player[data-position='4']{top:0;left:calc(-300% / 94 + 2500% / 47 - 420px + 360px);}
#arena:not(.fewplayer)[data-number='8']>.player[data-position='5']{top:0;left:calc(-300% / 94 + 1875% / 47 - 315px + 240px);}
#arena:not(.fewplayer)[data-number='8']>.player[data-position='6']{top:calc(8% - 32px);left:calc(-300% / 94 + 1250% / 47 - 210px + 120px);}
#arena:not(.fewplayer)[data-number='8']>.player[data-position='7']{top:calc(30% - 120px);left:calc(-300% / 94 + 625% / 47 - 105px);}
@media screen and (min-width: 1105px){
#arena:not(.fewplayer)[data-number='8']>.player[data-position='1']{left:calc(100% - 120px);}
#arena:not(.fewplayer)[data-number='8']>.player[data-position='2']{left:calc(500% / 6 - 100px);}
#arena:not(.fewplayer)[data-number='8']>.player[data-position='3']{left:calc(400% / 6 - 80px);}
#arena:not(.fewplayer)[data-number='8']>.player[data-position='4']{left:calc(300% / 6 - 60px);}
#arena:not(.fewplayer)[data-number='8']>.player[data-position='5']{left:calc(200% / 6 - 40px);}
#arena:not(.fewplayer)[data-number='8']>.player[data-position='6']{left:calc(100% / 6 - 20px);}
#arena:not(.fewplayer)[data-number='8']>.player[data-position='7']{left:0;}
}
/*--------位置(7人)------*/
#arena:not(.fewplayer)[data-number='7']>.player[data-position='1']{top:calc(30% - 120px);left:calc(100% - 120px);}
#arena:not(.fewplayer)[data-number='7']>.player[data-position='2']{top:calc(8% - 32px);left:calc(80% - 96px);}
#arena:not(.fewplayer)[data-number='7']>.player[data-position='3']{top:0;left:calc(60% - 72px);}
#arena:not(.fewplayer)[data-number='7']>.player[data-position='4']{top:0;left:calc(40% - 48px);}
#arena:not(.fewplayer)[data-number='7']>.player[data-position='5']{top:calc(8% - 32px);left:calc(20% - 24px);}
#arena:not(.fewplayer)[data-number='7']>.player[data-position='6']{top:calc(30% - 120px);left:0;}
/*--------位置(6人)------*/
#arena:not(.fewplayer)[data-number='6']>.player[data-position='1']{top:calc(30% - 120px);left:calc(100% - 120px);}
#arena:not(.fewplayer)[data-number='6']>.player[data-position='2']{top:0px;left:calc(75% - 90px);}
#arena:not(.fewplayer)[data-number='6']>.player[data-position='3']{top:0;left:calc(50% - 60px);}
#arena:not(.fewplayer)[data-number='6']>.player[data-position='4']{top:0px;left:calc(25% - 30px);}
#arena:not(.fewplayer)[data-number='6']>.player[data-position='5']{top:calc(30% - 120px);left:0;}
/*--------位置(5人)------*/
#arena:not(.fewplayer)[data-number='5']>.player[data-position='1']{top:calc(30% - 120px);left:calc(100% - 120px);}
#arena:not(.fewplayer)[data-number='5']>.player[data-position='2']{top:0;left:calc(200% / 3 - 80px);}
#arena:not(.fewplayer)[data-number='5']>.player[data-position='3']{top:0;left:calc(100% / 3 - 40px);}
#arena:not(.fewplayer)[data-number='5']>.player[data-position='4']{top:calc(30% - 120px);left:0;}
/*--------位置(4人)------*/
#arena:not(.fewplayer)[data-number='4']>.player[data-position='1']{top:calc(30% - 120px);left:calc(100% - 120px);}
#arena:not(.fewplayer)[data-number='4']>.player[data-position='2']{top:0;left:calc(50% - 60px);}
#arena:not(.fewplayer)[data-number='4']>.player[data-position='3']{top:calc(30% - 120px);left:0;}
/*--------位置(3人)------*/
#arena:not(.fewplayer)[data-number='3']>.player[data-position='1']{top:calc(60% / 3 - 88px);left:calc(75% + 80px);}
#arena:not(.fewplayer)[data-number='3']>.player[data-position='2']{top:calc(60% / 3 - 88px);left:calc(25% - 200px);}
/*--------位置(2人)------*/
#arena:not(.fewplayer)[data-number='2']>.player[data-position='1']{top:0;left:calc(50% - 60px);}
@import "../mobile/layout.css";
#window.rightbar #system,
#window.leftbar #system {
width: calc(100% - 62px);
}
#window.leftbar #system {
left: 50px;
}
#window.rightbar #historybar {
left: calc(100% - 50px);
}
#window.leftbar #historybar {
left: 0;
}
#historybar {
left: calc(100% - 50px);
border-radius: 0;
top: 0;
height: calc(100% - 121px);
z-index: 1;
}
#window.oblongcard #historybar {
height: calc(100% - 141px);
}
#arena:not(.fewplayer) > .player:not(.minskin):not(*[data-position="0"]) > .name.name2 {
left: auto;
right: 13px;
}
#arena:not(.fewplayer) > .player:not(.minskin):not(*[data-position="0"]) {
width: 120px !important;
height: 220px !important;
}
#arena:not(.fewplayer) > .player:not(.minskin):not(*[data-position="0"]) > .marks {
left: -15px;
}
#arena:not(.fewplayer) > .player:not(.minskin):not(*[data-position="0"]) > .judges {
right: -27px;
}
#arena:not(.fewplayer)[data-player_height="default"] > .player:not(.minskin):not(*[data-position="0"]) {
height: 200px !important;
}
#arena:not(.fewplayer)[data-player_height="short"] > .player:not(.minskin):not(*[data-position="0"]) {
height: 180px !important;
}
#arena:not(.fewplayer) > .player:not(.minskin):not(*[data-position="0"]) > .equips {
transform: scale(0.8);
transform-origin: bottom left;
}
#arena:not(.fewplayer).lslim_player .player .equips {
left: 5px;
}
#arena:not(.fewplayer) > .player:not(.minskin):not(*[data-position="0"]) > .avatar,
#arena:not(.fewplayer) > .player:not(.minskin):not(*[data-position="0"]) > .avatar2 {
width: calc(100% - 14px) !important;
height: calc(100% - 14px) !important;
background-position: 50% !important;
}
#arena.uslim_player:not(.fewplayer) > .player:not(.minskin):not(*[data-position="0"]) > .avatar,
#arena.uslim_player:not(.fewplayer) > .player:not(.minskin):not(*[data-position="0"]) > .avatar2 {
width: calc(100% - 6px) !important;
height: calc(100% - 6px) !important;
background-position: 50% !important;
}
#arena.lslim_player:not(.fewplayer) > .player:not(.minskin):not(*[data-position="0"]) > .avatar,
#arena.lslim_player:not(.fewplayer) > .player:not(.minskin):not(*[data-position="0"]) > .avatar2 {
width: calc(100% - 10px) !important;
height: calc(100% - 10px) !important;
background-position: 50% !important;
}
#arena:not(.fewplayer) > .player.fullskin2:not(.minskin):not(*[data-position="0"]) > .avatar,
#arena:not(.fewplayer) > .player.fullskin2:not(.minskin):not(*[data-position="0"]) > .avatar2 {
height: 50% !important;
background-position: 0 0 !important;
border-radius: 8px !important;
}
#arena.uslim_player:not(.fewplayer) > .player.fullskin2:not(.minskin):not(*[data-position="0"]) > .avatar,
#arena.uslim_player:not(.fewplayer) > .player.fullskin2:not(.minskin):not(*[data-position="0"]) > .avatar2 {
height: calc(50% + 4px) !important;
}
#arena.lslim_player:not(.fewplayer) > .player.fullskin2:not(.minskin):not(*[data-position="0"]) > .avatar,
#arena.lslim_player:not(.fewplayer) > .player.fullskin2:not(.minskin):not(*[data-position="0"]) > .avatar2 {
height: calc(50% + 2px) !important;
}
#window[data-radius_size="reduce"]
#arena:not(.fewplayer)
> .player.fullskin2:not(.minskin):not(*[data-position="0"])
> .avatar,
#window[data-radius_size="reduce"]
#arena:not(.fewplayer)
> .player.fullskin2:not(.minskin):not(*[data-position="0"])
> .avatar2 {
border-radius: 4px !important;
}
#window[data-radius_size="off"]
#arena:not(.fewplayer)
> .player.fullskin2:not(.minskin):not(*[data-position="0"])
> .avatar,
#window[data-radius_size="off"]
#arena:not(.fewplayer)
> .player.fullskin2:not(.minskin):not(*[data-position="0"])
> .avatar2 {
border-radius: 0px !important;
}
#window[data-radius_size="increase"]
#arena:not(.fewplayer)
> .player.fullskin2:not(.minskin):not(*[data-position="0"])
> .avatar,
#window[data-radius_size="increase"]
#arena:not(.fewplayer)
> .player.fullskin2:not(.minskin):not(*[data-position="0"])
> .avatar2 {
border-radius: 16px !important;
}
#arena:not(.fewplayer) > .player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position="0"]) > .avatar {
border-radius: 8px 8px 0 0 !important;
height: calc(50% + 14px) !important;
clip-path: polygon(-10px -10px, 116px -10px, 116px 92px, 106px 92px, 0px 114px, -10px 114px);
-webkit-clip-path: polygon(-10px -10px, 116px -10px, 116px 92px, 106px 92px, 0px 114px, -10px 114px);
}
#arena:not(.fewplayer)[data-player_height="default"]
> .player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position="0"])
> .avatar {
clip-path: polygon(-10px -10px, 116px -10px, 116px 82px, 106px 82px, 0px 104px, -10px 104px);
-webkit-clip-path: polygon(-10px -10px, 116px -10px, 116px 82px, 106px 82px, 0px 104px, -10px 104px);
}
#arena:not(.fewplayer)[data-player_height="short"]
> .player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position="0"])
> .avatar {
clip-path: polygon(-10px -10px, 116px -10px, 116px 72px, 106px 72px, 0px 94px, -10px 94px);
-webkit-clip-path: polygon(-10px -10px, 116px -10px, 116px 72px, 106px 72px, 0px 94px, -10px 94px);
}
#arena.uslim_player:not(.fewplayer)
> .player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position="0"])
> .avatar {
height: calc(50% + 18px) !important;
clip-path: polygon(-10px -10px, 124px -10px, 124px 96px, 114px 96px, 0px 118px, -10px 118px);
-webkit-clip-path: polygon(-10px -10px, 124px -10px, 124px 96px, 114px 96px, 0px 118px, -10px 118px);
}
#arena.uslim_player:not(.fewplayer)[data-player_height="default"]
> .player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position="0"])
> .avatar {
clip-path: polygon(-10px -10px, 124px -10px, 124px 86px, 114px 86px, 0px 108px, -10px 108px);
-webkit-clip-path: polygon(-10px -10px, 124px -10px, 124px 86px, 114px 86px, 0px 108px, -10px 108px);
}
#arena.uslim_player:not(.fewplayer)[data-player_height="short"]
> .player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position="0"])
> .avatar {
clip-path: polygon(-10px -10px, 124px -10px, 124px 76px, 114px 76px, 0px 98px, -10px 98px);
-webkit-clip-path: polygon(-10px -10px, 124px -10px, 124px 76px, 114px 76px, 0px 98px, -10px 98px);
}
#arena.lslim_player:not(.fewplayer)
> .player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position="0"])
> .avatar {
height: calc(50% + 18px) !important;
clip-path: polygon(-10px -10px, 120px -10px, 120px 94px, 110px 94px, 0px 116px, -10px 116px);
-webkit-clip-path: polygon(-10px -10px, 120px -10px, 120px 94px, 110px 94px, 0px 116px, -10px 116px);
}
#arena.lslim_player:not(.fewplayer)[data-player_height="default"]
> .player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position="0"])
> .avatar {
clip-path: polygon(-10px -10px, 120px -10px, 120px 84px, 110px 84px, 0px 106px, -10px 106px);
-webkit-clip-path: polygon(-10px -10px, 120px -10px, 120px 84px, 110px 84px, 0px 106px, -10px 106px);
}
#arena.lslim_player:not(.fewplayer)[data-player_height="short"]
> .player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position="0"])
> .avatar {
clip-path: polygon(-10px -10px, 120px -10px, 120px 74px, 110px 74px, 0px 96px, -10px 96px);
-webkit-clip-path: polygon(-10px -10px, 120px -10px, 120px 74px, 110px 74px, 0px 96px, -10px 96px);
}
#window[data-radius_size="reduce"]
#arena:not(.fewplayer)
> .player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position="0"])
> .avatar {
border-radius: 4px 4px 0 0 !important;
}
#window[data-radius_size="off"]
#arena:not(.fewplayer)
> .player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position="0"])
> .avatar {
border-radius: 0 0 0 0 !important;
}
#window[data-radius_size="increase"]
#arena:not(.fewplayer)
> .player.fullskin2:not(.minskin):not(.unseen2):not(*[data-position="0"])
> .avatar {
border-radius: 16px 16px 0 0 !important;
}
#arena:not(.fewplayer) > .player.fullskin2:not(.minskin):not(.unseen):not(*[data-position="0"]) > .avatar2 {
border-radius: 0 0 8px 8px !important;
top: calc(50% - 21px) !important;
height: calc(50% + 14px) !important;
background-position: 0 10px !important;
clip-path: polygon(-10px 32px, 0 32px, 106px 10px, 116px 10px, 116px 134px, -10px 134px);
-webkit-clip-path: polygon(-10px 32px, 0 32px, 106px 10px, 116px 10px, 116px 134px, -10px 134px);
}
#arena.uslim_player:not(.fewplayer)
> .player.fullskin2:not(.minskin):not(.unseen):not(*[data-position="0"])
> .avatar2 {
top: calc(50% - 21px) !important;
height: calc(50% + 18px) !important;
clip-path: polygon(-10px 32px, 0 32px, 114px 10px, 124px 10px, 124px 138px, -10px 138px);
-webkit-clip-path: polygon(-10px 32px, 0 32px, 114px 10px, 124px 10px, 124px 138px, -10px 138px);
}
#arena.lslim_player:not(.fewplayer)
> .player.fullskin2:not(.minskin):not(.unseen):not(*[data-position="0"])
> .avatar2 {
top: calc(50% - 21px) !important;
height: calc(50% + 16px) !important;
clip-path: polygon(-10px 32px, 0 32px, 110px 10px, 120px 10px, 120px 136px, -10px 136px);
-webkit-clip-path: polygon(-10px 32px, 0 32px, 110px 10px, 120px 10px, 120px 136px, -10px 136px);
}
#window[data-radius_size="reduce"]
#arena:not(.fewplayer)
> .player.fullskin2:not(.minskin):not(.unseen):not(*[data-position="0"])
> .avatar2 {
border-radius: 0 0 4px 4px !important;
}
#window[data-radius_size="off"]
#arena:not(.fewplayer)
> .player.fullskin2:not(.minskin):not(.unseen):not(*[data-position="0"])
> .avatar2 {
border-radius: 0 0 0 0 !important;
}
#window[data-radius_size="increase"]
#arena:not(.fewplayer)
> .player.fullskin2:not(.minskin):not(.unseen):not(*[data-position="0"])
> .avatar2 {
border-radius: 0 0 16px 16px !important;
}
#arena:not(.fewplayer) > .player.fullskin2:not(.minskin):not(*[data-position="0"]) > .avatar2 {
top: calc(50% - 7px) !important;
}
#arena:not(.fewplayer) > .player:not(.minskin):not(*[data-position="0"]) > .identity {
left: 102px;
}
#arena:not(.fewplayer) > .player:not(.minskin):not(*[data-position="0"]) > .hp:not(.actcount) {
left: 93px;
}
/*#arena:not(.fewplayer)>.player:not(.minskin):not(*[data-position='0'])>.hp:not(.actcount).text{
left: 89px;
}*/
#arena:not(.fewplayer) > .player.fullskin2 .avatar2 {
z-index: 2;
}
#arena:not(.fewplayer) > .player.unseen:not(.unseen2) .count {
text-align: left;
border-radius: 3px 0 0 3px;
}
#arena:not(.fewplayer) > .player.unseen2 .count {
border-radius: 3px;
text-align: center;
}
#arena:not(.fewplayer) .timerbar > div {
top: 205px;
width: 96px;
left: 12px;
}
#arena:not(.fewplayer)[data-player_height="default"] .timerbar > div {
top: 185px;
}
#arena:not(.fewplayer)[data-player_height="short"] .timerbar > div {
top: 165px;
}
/*--------位置(8人)------*/
#arena:not(.fewplayer)[data-number="8"] > .player[data-position="1"] {
top: calc(30% - 120px);
left: calc(-300% / 94 + 4375% / 47 - 735px + 720px);
}
#arena:not(.fewplayer)[data-number="8"] > .player[data-position="2"] {
top: calc(8% - 32px);
left: calc(-300% / 94 + 3750% / 47 - 630px + 600px);
}
#arena:not(.fewplayer)[data-number="8"] > .player[data-position="3"] {
top: 0;
left: calc(-300% / 94 + 3125% / 47 - 525px + 480px);
}
#arena:not(.fewplayer)[data-number="8"] > .player[data-position="4"] {
top: 0;
left: calc(-300% / 94 + 2500% / 47 - 420px + 360px);
}
#arena:not(.fewplayer)[data-number="8"] > .player[data-position="5"] {
top: 0;
left: calc(-300% / 94 + 1875% / 47 - 315px + 240px);
}
#arena:not(.fewplayer)[data-number="8"] > .player[data-position="6"] {
top: calc(8% - 32px);
left: calc(-300% / 94 + 1250% / 47 - 210px + 120px);
}
#arena:not(.fewplayer)[data-number="8"] > .player[data-position="7"] {
top: calc(30% - 120px);
left: calc(-300% / 94 + 625% / 47 - 105px);
}
@media screen and (min-width: 1105px) {
#arena:not(.fewplayer)[data-number="8"] > .player[data-position="1"] {
left: calc(100% - 120px);
}
#arena:not(.fewplayer)[data-number="8"] > .player[data-position="2"] {
left: calc(500% / 6 - 100px);
}
#arena:not(.fewplayer)[data-number="8"] > .player[data-position="3"] {
left: calc(400% / 6 - 80px);
}
#arena:not(.fewplayer)[data-number="8"] > .player[data-position="4"] {
left: calc(300% / 6 - 60px);
}
#arena:not(.fewplayer)[data-number="8"] > .player[data-position="5"] {
left: calc(200% / 6 - 40px);
}
#arena:not(.fewplayer)[data-number="8"] > .player[data-position="6"] {
left: calc(100% / 6 - 20px);
}
#arena:not(.fewplayer)[data-number="8"] > .player[data-position="7"] {
left: 0;
}
}
/*--------位置(7人)------*/
#arena:not(.fewplayer)[data-number="7"] > .player[data-position="1"] {
top: calc(30% - 120px);
left: calc(100% - 120px);
}
#arena:not(.fewplayer)[data-number="7"] > .player[data-position="2"] {
top: calc(8% - 32px);
left: calc(80% - 96px);
}
#arena:not(.fewplayer)[data-number="7"] > .player[data-position="3"] {
top: 0;
left: calc(60% - 72px);
}
#arena:not(.fewplayer)[data-number="7"] > .player[data-position="4"] {
top: 0;
left: calc(40% - 48px);
}
#arena:not(.fewplayer)[data-number="7"] > .player[data-position="5"] {
top: calc(8% - 32px);
left: calc(20% - 24px);
}
#arena:not(.fewplayer)[data-number="7"] > .player[data-position="6"] {
top: calc(30% - 120px);
left: 0;
}
/*--------位置(6人)------*/
#arena:not(.fewplayer)[data-number="6"] > .player[data-position="1"] {
top: calc(30% - 120px);
left: calc(100% - 120px);
}
#arena:not(.fewplayer)[data-number="6"] > .player[data-position="2"] {
top: 0px;
left: calc(75% - 90px);
}
#arena:not(.fewplayer)[data-number="6"] > .player[data-position="3"] {
top: 0;
left: calc(50% - 60px);
}
#arena:not(.fewplayer)[data-number="6"] > .player[data-position="4"] {
top: 0px;
left: calc(25% - 30px);
}
#arena:not(.fewplayer)[data-number="6"] > .player[data-position="5"] {
top: calc(30% - 120px);
left: 0;
}
/*--------位置(5人)------*/
#arena:not(.fewplayer)[data-number="5"] > .player[data-position="1"] {
top: calc(30% - 120px);
left: calc(100% - 120px);
}
#arena:not(.fewplayer)[data-number="5"] > .player[data-position="2"] {
top: 0;
left: calc(200% / 3 - 80px);
}
#arena:not(.fewplayer)[data-number="5"] > .player[data-position="3"] {
top: 0;
left: calc(100% / 3 - 40px);
}
#arena:not(.fewplayer)[data-number="5"] > .player[data-position="4"] {
top: calc(30% - 120px);
left: 0;
}
/*--------位置(4人)------*/
#arena:not(.fewplayer)[data-number="4"] > .player[data-position="1"] {
top: calc(30% - 120px);
left: calc(100% - 120px);
}
#arena:not(.fewplayer)[data-number="4"] > .player[data-position="2"] {
top: 0;
left: calc(50% - 60px);
}
#arena:not(.fewplayer)[data-number="4"] > .player[data-position="3"] {
top: calc(30% - 120px);
left: 0;
}
/*--------位置(3人)------*/
#arena:not(.fewplayer)[data-number="3"] > .player[data-position="1"] {
top: calc(60% / 3 - 88px);
left: calc(75% + 80px);
}
#arena:not(.fewplayer)[data-number="3"] > .player[data-position="2"] {
top: calc(60% / 3 - 88px);
left: calc(25% - 200px);
}
/*--------位置(2人)------*/
#arena:not(.fewplayer)[data-number="2"] > .player[data-position="1"] {
top: 0;
left: calc(50% - 60px);
}

File diff suppressed because it is too large Load Diff

View File

@ -1,227 +1,225 @@
#arena:not(.chess).textequip .player[data-position='0'] .equips,
.player:not([data-position='0']) .equips,
#arena.chess .player .equips{
width:120px;
height:auto;
top:auto;
right:auto;
bottom:18px;
left:10px;
text-align:left;
}
#arena.slim_player .player:not([data-position='0']) .equips,
#arena.chess.slim_player .player .equips{
left:7px;
}
#arena.chess.lslim_player.slim_player .player .equips{
left:5px;
bottom: 17px;
}
#arena.chess.lslim_player.slim_player .player.minskin.linked .equips{
transform: rotate(90deg) translate(-98px,-5px) scale(0.73)
}
#arena.uslim_player .player:not([data-position='0']) .equips,
#arena.chess.uslim_player .player .equips{
left:3px;
}
#arena.mslim_player .player:not([data-position='0']) .equips,
#arena.chess.mslim_player .player .equips{
left:5px;
}
.player:not([data-position='0']).minskin .equips,
#arena.chess .player.minskin .equips{
transform:scale(0.73);
transform-origin:bottom left;
}
#arena:not(.chess).textequip .player[data-position='0'] .equips>.card::after,
#arena:not(.chess).textequip .player[data-position='0'] .equips>.card::before,
.player:not([data-position='0']) .equips>.card::after,
.player:not([data-position='0']) .equips>.card::before,
#arena.chess .player .equips>.card::after,
#arena.chess .player .equips>.card::before{
visibility: hidden;
}
#arena:not(.chess).textequip .player[data-position='0'] .equips>.card,
.player:not([data-position='0']) .equips>.card,
#arena.chess .player .equips>.card{
position:relative;
width:100%;
height:22px;
line-height:22px;
margin-top:0;
margin-bottom:0;
animation: card_start2x 0.5s;
-webkit-animation: card_start2x 0.5s;
display:block;
left:0;
top:0;
transition:all 0.5s;
color:white;
border-radius:0;
text-shadow:black 0 0 2px;
}
.player:not([data-position='0']) .equips>.card,
#arena.chess .player .equips>.card{
border-width: 1px 0 0;
border-style:solid;
border-image:linear-gradient(to right, rgba(0, 0, 0,0.4) 70%,transparent) 100% 0 0;
background:linear-gradient(to right,rgba(0,0,0,0.3),transparent),
linear-gradient(135deg,rgba(0,0,0,0.5) ,transparent 80%,transparent) !important;
box-shadow:none;
}
#arena:not(.chess).textequip .player[data-position='0'] .equips>.card>.image,
.player:not([data-position='0']) .equips>.card>.image,
#arena.chess .player .equips>.card>.image{
display:none;
}
/*#arena:not(.chess).textequip .player[data-position='0'].unseen .equips>.card,
.player:not([data-position='0']).unseen .equips>.card,
#arena.chess .player.unseen .equips>.card{
background:none;
border-image:linear-gradient(to right, transparent,rgba(0,0,0,0.4) 10%,rgba(0, 0, 0,0.4) 70%,transparent) 100% 0 0;
}
#arena:not(.chess).textequip .player[data-position='0'].unseen .equips>.card,
.player:not([data-position='0']).unseen .equips>.card,
#arena.chess .player.unseen .equips>.card{
border-image:linear-gradient(to right, transparent,rgba(0,0,0,0.4) 10%,rgba(0, 0, 0,0.4) 70%,transparent) 100% 0 0;
}
#arena:not(.chess).textequip .player[data-position='0'].unseen .equips>.card:first-child,
.player:not([data-position='0']).unseen .equips>.card:first-child,
#arena.chess .player.unseen .equips>.card:first-child{
border-image:linear-gradient(transparent,transparent);
}*/
.player:not([data-position='0']) .equips>.card.selected,
#arena.chess .player .equips>.card.selected{
background:linear-gradient(to right,rgba(0, 133, 255,0.3),transparent),
linear-gradient(135deg,rgba(0, 133, 255,0.5) ,transparent 80%,transparent) !important;
box-shadow:none !important;
border-width: 1px 0 0;
border-style:solid;
border-image:linear-gradient(to right, rgba(0, 103, 205,0.4) 70%,transparent) 100% 0 0;
}
#arena:not(.chess).textequip .player[data-position='0'] .equips>.card.selected{
background:linear-gradient(rgba(0, 133, 255,0.6),rgba(0, 133, 255,0.5)) !important;
box-shadow: rgba(0,0,0,0.4) 0 1px 0 0 !important;
}
#arena:not(.chess).textequip .player[data-position='0'] .equips>.card.fire,
.player:not([data-position='0']) .equips>.card.fire,
#arena.chess .player .equips>.card.fire{
color: rgb(255,119,63);
}
#arena:not(.chess).textequip .player[data-position='0'] .equips>.card.thunder,
.player:not([data-position='0']) .equips>.card.thunder,
#arena.chess .player .equips>.card.thunder{
color: rgb(117,186,255);
}
#arena:not(.chess).textequip .player[data-position='0'] .equips>.card.poison,
.player:not([data-position='0']) .equips>.card.poison,
#arena.chess .player .equips>.card.poison{
color: rgb(104,221,127);
}
#arena:not(.chess).textequip .player[data-position='0'] .equips>.card.brown,
.player:not([data-position='0']) .equips>.card.brown,
#arena.chess .player .equips>.card.brown{
color: rgb(195,161,223);
}
#arena:not(.chess).textequip .player[data-position='0'] .equips>.card>.background,
.player:not([data-position='0']) .equips>.card>.background,
#arena.chess .player .equips>.card>.background{
display:none !important;
}
#arena:not(.chess).textequip .player[data-position='0'] .equips>.card>.name2,
.player:not([data-position='0']) .equips>.card>.name2,
#arena.chess .player .equips>.card>.name2{
display:block;
margin-left:5px;
white-space: nowrap;
}
#arena.oblongcard:not(.chess).textequip .player[data-position='0'] .equips>.card>.name2{
line-height: 29px;
}
#arena:not(.chess).textequip .player[data-position='0'] .equips>.card>div,
.player:not([data-position='0']) .equips>.card>div,
#arena.chess .player .equips>.card>div{
animation:none !important;
-webkit-animation:none !important;
}
#arena:not(.chess).textequip .player[data-position='0'] .equips>.card>.name,
#arena:not(.chess).textequip .player[data-position='0'] .equips>.card>.info,
.player:not([data-position='0']) .equips>.card>.name,
.player:not([data-position='0']) .equips>.card>.info,
#arena.chess .player .equips>.card>.name,
#arena.chess .player .equips>.card>.info{
display:none !important;
}
#arena:not(.chess).textequip .player[data-position='0'] .equips>.removing,
.player:not([data-position='0']) .equips>.removing,
#arena.chess .player .equips>.removing{
margin-top:-12px !important;
margin-bottom:-11px !important;
transform:scale(1);
}
#arena:not(.chess).textequip .player[data-position='0'] .equips>.removing+.removing,
.player:not([data-position='0']) .equips>.removing+.removing,
#arena.chess .player .equips>.removing+.removing{
margin-top:-23px !important;
}
#arena:not(.textequip):not(.chess).textequip .player[data-position='0'].linked .equips,
.player:not([data-position='0']).linked .equips,
#arena.chess .player.linked .equips{
transform:rotate(90deg) translate(-152px,-6px);
transform-origin:bottom left;
}
#arena.slim_player .player:not([data-position='0']).linked .equips,
#arena.chess.slim_player .player.linked .equips{
transform:rotate(90deg) translate(-155px,-6px);
}
#arena.uslim_player .player:not([data-position='0']).linked .equips,
#arena.chess.uslim_player .player.linked .equips{
transform:rotate(90deg) translate(-159px,-6px);
}
#arena.mslim_player .player:not([data-position='0']).linked .equips,
#arena.chess.mslim_player .player.linked .equips{
transform:rotate(90deg) translate(-157px,-6px);
}
.player:not([data-position='0']).minskin.linked .equips,
#arena.chess .player.minskin.linked .equips{
transform:rotate(90deg) translate(-92px,-6px) scale(0.73);
}
#arena.slim_player .player:not([data-position='0']).minskin.linked .equips,
#arena.chess.slim_player .player.minskin.linked .equips{
transform:rotate(90deg) translate(-95px,-6px) scale(0.73);
}
#arena.uslim_player .player:not([data-position='0']).minskin.linked .equips,
#arena.chess.uslim_player .player.minskin.linked .equips{
transform:rotate(90deg) translate(-99px,-6px) scale(0.73);
}
#arena.mslim_player .player:not([data-position='0']).minskin.linked .equips,
#arena.chess.mslim_player .player.minskin.linked .equips{
transform:rotate(90deg) translate(-97px,-6px) scale(0.73);
}
.player:not([data-position='0']).linked .identity,
#arena.chess .player.linked .identity{
transform:rotate(90deg);
}
#arena:not(.chess).textequip .player[data-position='0'] .equips>.card{
border-radius: 0px !important;
left:0 !important;
right: auto !important;
top:0 !important;
bottom: auto !important;
position: relative !important;
height: 20% !important;
background:none !important;
box-shadow: rgba(0,0,0,0.4) 0 1px 0 0;
}
#arena:not(.chess).textequip .player[data-position="0"] .equips,
.player:not([data-position="0"]) .equips,
#arena.chess .player .equips {
width: 120px;
height: auto;
top: auto;
right: auto;
bottom: 18px;
left: 10px;
text-align: left;
}
#arena.slim_player .player:not([data-position="0"]) .equips,
#arena.chess.slim_player .player .equips {
left: 7px;
}
#arena.chess.lslim_player.slim_player .player .equips {
left: 5px;
bottom: 17px;
}
#arena.chess.lslim_player.slim_player .player.minskin.linked .equips {
transform: rotate(90deg) translate(-98px, -5px) scale(0.73);
}
#arena.uslim_player .player:not([data-position="0"]) .equips,
#arena.chess.uslim_player .player .equips {
left: 3px;
}
#arena.mslim_player .player:not([data-position="0"]) .equips,
#arena.chess.mslim_player .player .equips {
left: 5px;
}
.player:not([data-position="0"]).minskin .equips,
#arena.chess .player.minskin .equips {
transform: scale(0.73);
transform-origin: bottom left;
}
#arena:not(.chess).textequip .player[data-position="0"] .equips > .card::after,
#arena:not(.chess).textequip .player[data-position="0"] .equips > .card::before,
.player:not([data-position="0"]) .equips > .card::after,
.player:not([data-position="0"]) .equips > .card::before,
#arena.chess .player .equips > .card::after,
#arena.chess .player .equips > .card::before {
visibility: hidden;
}
#arena:not(.chess).textequip .player[data-position="0"] .equips > .card,
.player:not([data-position="0"]) .equips > .card,
#arena.chess .player .equips > .card {
position: relative;
width: 100%;
height: 22px;
line-height: 22px;
margin-top: 0;
margin-bottom: 0;
animation: card_start2x 0.5s;
-webkit-animation: card_start2x 0.5s;
display: block;
left: 0;
top: 0;
transition: all 0.5s;
color: white;
border-radius: 0;
text-shadow: black 0 0 2px;
}
.player:not([data-position="0"]) .equips > .card,
#arena.chess .player .equips > .card {
border-width: 1px 0 0;
border-style: solid;
border-image: linear-gradient(to right, rgba(0, 0, 0, 0.4) 70%, transparent) 100% 0 0;
background: linear-gradient(to right, rgba(0, 0, 0, 0.3), transparent),
linear-gradient(135deg, rgba(0, 0, 0, 0.5), transparent 80%, transparent) !important;
box-shadow: none;
}
#arena:not(.chess).textequip .player[data-position="0"] .equips > .card > .image,
.player:not([data-position="0"]) .equips > .card > .image,
#arena.chess .player .equips > .card > .image {
display: none;
}
/*#arena:not(.chess).textequip .player[data-position='0'].unseen .equips>.card,
.player:not([data-position='0']).unseen .equips>.card,
#arena.chess .player.unseen .equips>.card{
background:none;
border-image:linear-gradient(to right, transparent,rgba(0,0,0,0.4) 10%,rgba(0, 0, 0,0.4) 70%,transparent) 100% 0 0;
}
#arena:not(.chess).textequip .player[data-position='0'].unseen .equips>.card,
.player:not([data-position='0']).unseen .equips>.card,
#arena.chess .player.unseen .equips>.card{
border-image:linear-gradient(to right, transparent,rgba(0,0,0,0.4) 10%,rgba(0, 0, 0,0.4) 70%,transparent) 100% 0 0;
}
#arena:not(.chess).textequip .player[data-position='0'].unseen .equips>.card:first-child,
.player:not([data-position='0']).unseen .equips>.card:first-child,
#arena.chess .player.unseen .equips>.card:first-child{
border-image:linear-gradient(transparent,transparent);
}*/
.player:not([data-position="0"]) .equips > .card.selected,
#arena.chess .player .equips > .card.selected {
background: linear-gradient(to right, rgba(0, 133, 255, 0.3), transparent),
linear-gradient(135deg, rgba(0, 133, 255, 0.5), transparent 80%, transparent) !important;
box-shadow: none !important;
border-width: 1px 0 0;
border-style: solid;
border-image: linear-gradient(to right, rgba(0, 103, 205, 0.4) 70%, transparent) 100% 0 0;
}
#arena:not(.chess).textequip .player[data-position="0"] .equips > .card.selected {
background: linear-gradient(rgba(0, 133, 255, 0.6), rgba(0, 133, 255, 0.5)) !important;
box-shadow: rgba(0, 0, 0, 0.4) 0 1px 0 0 !important;
}
#arena:not(.chess).textequip .player[data-position="0"] .equips > .card.fire,
.player:not([data-position="0"]) .equips > .card.fire,
#arena.chess .player .equips > .card.fire {
color: rgb(255, 119, 63);
}
#arena:not(.chess).textequip .player[data-position="0"] .equips > .card.thunder,
.player:not([data-position="0"]) .equips > .card.thunder,
#arena.chess .player .equips > .card.thunder {
color: rgb(117, 186, 255);
}
#arena:not(.chess).textequip .player[data-position="0"] .equips > .card.poison,
.player:not([data-position="0"]) .equips > .card.poison,
#arena.chess .player .equips > .card.poison {
color: rgb(104, 221, 127);
}
#arena:not(.chess).textequip .player[data-position="0"] .equips > .card.brown,
.player:not([data-position="0"]) .equips > .card.brown,
#arena.chess .player .equips > .card.brown {
color: rgb(195, 161, 223);
}
#arena:not(.chess).textequip .player[data-position="0"] .equips > .card > .background,
.player:not([data-position="0"]) .equips > .card > .background,
#arena.chess .player .equips > .card > .background {
display: none !important;
}
#arena:not(.chess).textequip .player[data-position="0"] .equips > .card > .name2,
.player:not([data-position="0"]) .equips > .card > .name2,
#arena.chess .player .equips > .card > .name2 {
display: block;
margin-left: 5px;
white-space: nowrap;
}
#arena.oblongcard:not(.chess).textequip .player[data-position="0"] .equips > .card > .name2 {
line-height: 29px;
}
#arena:not(.chess).textequip .player[data-position="0"] .equips > .card > div,
.player:not([data-position="0"]) .equips > .card > div,
#arena.chess .player .equips > .card > div {
animation: none !important;
-webkit-animation: none !important;
}
#arena:not(.chess).textequip .player[data-position="0"] .equips > .card > .name,
#arena:not(.chess).textequip .player[data-position="0"] .equips > .card > .info,
.player:not([data-position="0"]) .equips > .card > .name,
.player:not([data-position="0"]) .equips > .card > .info,
#arena.chess .player .equips > .card > .name,
#arena.chess .player .equips > .card > .info {
display: none !important;
}
#arena:not(.chess).textequip .player[data-position="0"] .equips > .removing,
.player:not([data-position="0"]) .equips > .removing,
#arena.chess .player .equips > .removing {
margin-top: -12px !important;
margin-bottom: -11px !important;
transform: scale(1);
}
#arena:not(.chess).textequip .player[data-position="0"] .equips > .removing + .removing,
.player:not([data-position="0"]) .equips > .removing + .removing,
#arena.chess .player .equips > .removing + .removing {
margin-top: -23px !important;
}
#arena:not(.textequip):not(.chess).textequip .player[data-position="0"].linked .equips,
.player:not([data-position="0"]).linked .equips,
#arena.chess .player.linked .equips {
transform: rotate(90deg) translate(-152px, -6px);
transform-origin: bottom left;
}
#arena.slim_player .player:not([data-position="0"]).linked .equips,
#arena.chess.slim_player .player.linked .equips {
transform: rotate(90deg) translate(-155px, -6px);
}
#arena.uslim_player .player:not([data-position="0"]).linked .equips,
#arena.chess.uslim_player .player.linked .equips {
transform: rotate(90deg) translate(-159px, -6px);
}
#arena.mslim_player .player:not([data-position="0"]).linked .equips,
#arena.chess.mslim_player .player.linked .equips {
transform: rotate(90deg) translate(-157px, -6px);
}
.player:not([data-position="0"]).minskin.linked .equips,
#arena.chess .player.minskin.linked .equips {
transform: rotate(90deg) translate(-92px, -6px) scale(0.73);
}
#arena.slim_player .player:not([data-position="0"]).minskin.linked .equips,
#arena.chess.slim_player .player.minskin.linked .equips {
transform: rotate(90deg) translate(-95px, -6px) scale(0.73);
}
#arena.uslim_player .player:not([data-position="0"]).minskin.linked .equips,
#arena.chess.uslim_player .player.minskin.linked .equips {
transform: rotate(90deg) translate(-99px, -6px) scale(0.73);
}
#arena.mslim_player .player:not([data-position="0"]).minskin.linked .equips,
#arena.chess.mslim_player .player.minskin.linked .equips {
transform: rotate(90deg) translate(-97px, -6px) scale(0.73);
}
.player:not([data-position="0"]).linked .identity,
#arena.chess .player.linked .identity {
transform: rotate(90deg);
}
#arena:not(.chess).textequip .player[data-position="0"] .equips > .card {
border-radius: 0px !important;
left: 0 !important;
right: auto !important;
top: 0 !important;
bottom: auto !important;
position: relative !important;
height: 20% !important;
background: none !important;
box-shadow: rgba(0, 0, 0, 0.4) 0 1px 0 0;
}

View File

@ -1,362 +1,373 @@
@import "../newlayout/global.css";
@import "equip.css";
#arena{
height: calc(95% + 20px);
}
#arena.oblongcard:not(.chess):not(.nome){
height: 95%;
}
#arena.oblongcard:not(.chess):not(.nome) #me,
#arena.oblongcard:not(.chess):not(.nome) #mebg{
height: 140px;
bottom: 10px;
}
#historybar{
height: calc(95% - 160px);
}
#window.oblongcard #historybar{
height: calc(95% - 180px);
}
#control{
width: calc(5000% / 47 - 240px);
left:calc(-150% / 47 + 120px);
bottom:150px;
height: 40px;
}
#arena.choose-to-move>#control,
#arena.discard-player-card>#control,
#arena.gain-player-card>#control,
#arena.choose-player-card>#control{
bottom: 30px;
transition: all 0s;
}
#arena.phone.discard-player-card>#control,
#arena.phone.gain-player-card>#control,
#arena.phone.choose-player-card>#control,
#arena.phone.choose-to-move>#control{
bottom: 43px;
}
#arena.ipad.discard-player-card>#control,
#arena.ipad.gain-player-card>#control,
#arena.ipad.choose-player-card>#control,
#arena.ipad.choose-to-move>#control{
bottom: 45px;
}
#arena:not(.chess)>#me,
#arena:not(.chess)>#mebg,
#arena:not(.chess)>#autonode{
bottom:30px;
width: calc(5000% / 47);
left:calc(-150% / 47);
top:auto;
border-radius:0 !important;
height:120px;
}
#arena:not(.chess)>#autonode{
width: calc(5000% / 47 - 240px);
left:calc(-150% / 47 + 120px);
}
#window.leftbar #arena:not(.chess)>#me,
#window.leftbar #arena:not(.chess)>#mebg,
#window.leftbar #arena:not(.chess)>#autonode,
#window.leftbar #arena:not(.chess) .player[data-position='0']{
width: calc(5000% / 47 + 2500px / 47);
left:calc(-150% / 47 - 50px - 75px / 47);
}
#window.leftbar #arena:not(.chess)>#autonode{
width: calc(5000% / 47 + 2500px / 47 - 240px);
left:calc(-150% / 47 - 50px - 75px / 47 + 120px);
}
#window.rightbar #arena:not(.chess)>#me,
#window.rightbar #arena:not(.chess)>#mebg,
#window.rightbar #arena:not(.chess)>#autonode,
#window.rightbar #arena:not(.chess) .player[data-position='0']{
width: calc(5000% / 47 + 2500px / 47);
left:calc(-150% / 47 - 75px / 47);
}
#window.rightbar #arena:not(.chess)>#autonode{
width: calc(5000% / 47 + 2500px / 47 - 240px);
left:calc(-150% / 47 - 75px / 47 + 120px);
}
#arena:not(.chess) #handcards1{
height:120px;
padding:0;
top:calc(100% - 120px);
}
#arena:not(.chess):not(.single-handcard) #handcards1{
width:calc(100% - 240px);
left:120px;
}
#handcards2{
display:none;
}
/*#arena:not(.chess) .player[data-position='0']>.playerjiu{
width: 120px;
border-radius: 0px;
}*/
#arena:not(.chess) .player[data-position='0'].playerfocus{
transform: scale(1);
}
#arena:not(.chess) .player[data-position='0']>.equips>div:not(.equip5){
width: 45px;
height: 45px;
margin: 0;
border-radius: 4px;
position: absolute;
}
#arena:not(.chess) .player[data-position='0']>.equips>div:not(.equip5)>.image{
width: 100%;
height: 100%;
left: 0;
top: 0;
}
#arena:not(.chess) .player[data-position='0']>.equips>div:not(.equip5)>.name{
display: block;
transform: scale(0.43) !important;
transform-origin: left top;
left: 2px;
top: 3px;
}
#arena:not(.chess) .player[data-position='0']>.equips>div:not(.equip5)>.name.long{
top: 2px;
}
#arena:not(.chess) .player[data-position='0']>.equips>div:not(.equip5)>.info{
display: block;
transform: scale(0.43) !important;
transform-origin: right top;
right: 3px;
top: 3px;
}
/*#arena.oblongcard:not(.chess) .player[data-position='0']>.equips>div:not(.equip5){
height: 54px;
}
#arena.oblongcard:not(.chess) .player[data-position='0']>.equips>div:not(.equip5)>.image{
width: 120%;
height: 100%;
left: -20%;
top: 0%;
}*/
#arena:not(.chess):not(.textequip) .player[data-position='0']>.equips>div.legend{
border: 1px solid rgb(192, 90, 255);
}
#arena:not(.chess):not(.textequip) .player[data-position='0']>.equips>div.epic{
border: 1px solid rgb(90, 171, 255);
}
#arena.mobile:not(.chess) .player[data-position='0']>.equips>.equip5{
border-radius: 100%;
}
#arena:not(.chess) .player[data-position='0']{
width: calc(5000% / 47);
left:calc(-150% / 47);
height: 120px;
top: calc(100% - 150px);
background: none !important;
border:none !important;
border-radius: 0 !important;
pointer-events: none;
}
#arena:not(.chess) .player[data-position='0']>.turned{
width: 120px;
}
#arena:not(.chess) .player[data-position='0']>.chain{
width: 120px
}
#arena.oblongcard:not(.chess) .player[data-position='0']{
height: 140px;
}
#arena:not(.chess) .player[data-position='0'].linked>.damage{
transform:scale(0.7) rotate(0);
}
#arena:not(.chess) .player[data-position='0'].linked>.damage.damageadded{
transform:scale(1) rotate(0);
}
#arena:not(.chess) .player[data-position='0']:not(.selected):not(.selectedx):not(.selectable):not(.glow){
box-shadow: none !important;
}
#arena:not(.chess) .player[data-position='0']:not(.minskin)>.avatar,
#arena:not(.chess) .player[data-position='0']:not(.minskin)>.avatar2,
#arena:not(.chess) .player[data-position='0']:not(.minskin)>.equips{
width:120px;
height:100%;
border-radius:0px !important;
top:0;
left:0;
transition-property: opacity,transform;
transition-duration: 0.5s;
pointer-events: auto;
/*-webkit-clip-path: polygon(-10px 0, 130px 0, 130px 180px, -10px 180px);*/
}
/*#window.compatiblemode #arena:not(.chess) .player[data-position='0']:not(.minskin)>.avatar,
#window.compatiblemode #arena:not(.chess) .player[data-position='0']:not(.minskin)>.avatar2,
#window.compatiblemode #arena:not(.chess) .player[data-position='0']:not(.minskin)>.equips{
-webkit-clip-path: none;
}*/
#arena:not(.chess) .player[data-position='0']:not(.minskin)>.identity{
pointer-events: auto;
}
#arena:not(.chess) .player[data-position='0']:not(.minskin)>.judges,
#arena:not(.chess) .player[data-position='0']:not(.minskin)>.marks{
pointer-events: auto;
}
#arena:not(.chess) .player[data-position='0']:not(.minskin)>.equips{
left:calc(100% - 120px);
}
#arena:not(.chess) .player[data-position='0']>.equips>.equip1{top: 10px;left: 10px;}
#arena:not(.chess) .player[data-position='0']>.equips>.equip2{top: 10px;right: 10px;}
#arena:not(.chess) .player[data-position='0']>.equips>.equip3{bottom: 10px;left: 10px;}
#arena:not(.chess) .player[data-position='0']>.equips>.equip4{bottom: 10px;right: 10px;}
#arena:not(.chess) .player[data-position='0']>.equips>.equip6{bottom: 10px;right: 10px;}
#arena:not(.chess) .player[data-position='0']>.name,
#arena:not(.chess) .player[data-position='0'].linked>.name{
left:4px;
top:10px;
transform: none;
}
#arena:not(.chess) .player[data-position='0']>.nameol{
display: none;
}
#arena:not(.chess) .player[data-position='0']>.name.name2,
#arena:not(.chess) .player[data-position='0'].linked>.name.name2{
left:69px;
}
#arena:not(.chess):not(.stone) .player[data-position='0']>.identity{
left: 0;
width: 130px;
}
#arena:not(.chess) .player[data-position='0']>.damage{
width: 120px;
}
#arena:not(.chess) .player[data-position='0'].target{
transform:none !important;
}
#arena:not(.chess) .player[data-position='0']>.hp:not(.actcount){
bottom: 5px;
left: 100px;
}
#arena:not(.chess) .player[data-position='0']:not(.minskin)>.count{
bottom:10px;
border-radius: 0 2px 2px 0;
left:-1px;
z-index: 3;
text-align: right;
}
#arena:not(.chess).slim_player .player[data-position='0']:not(.minskin)>.count{
border-radius: 0 2px 2px 0;
left:-1px;
z-index: 3;
text-align: right;
}
#arena:not(.chess) .player[data-position='0']>.hp.actcount{
top:10px;
left:2px;
}
#arena:not(.chess) .player.fullskin2[data-position='0']:not(.minskin)>.avatar,
#arena:not(.chess) .player.fullskin2[data-position='0']:not(.minskin)>.avatar2{
width:60px;
background-position:50%;
}
#arena:not(.chess) .player.fullskin2[data-position='0']:not(.minskin)>.avatar2{
left:60px;
top:0;
z-index:1;
}
.popup[data-position='0']{
top:calc(100% - 187px);
left:calc(-150% / 47 + 15px);
}
#arena:not(.chess) .player[data-position='0']>.judges{
left: 6px;
top: -16px;
transform: none;
}
#arena:not(.chess) .player[data-position='0']>.marks {
right: -6px;
left:auto;
top: -16px;
transform: none;
}
#arena:not(.chess) .player[data-position='0'].linked{
transform: none;
}
#arena:not(.chess) .player[data-position='0'].linked .avatar,
#arena:not(.chess) .player[data-position='0'].linked .avatar2{
transform: rotate(-90deg);
}
#arena:not(.chess) .player[data-position='0'].fullskin2 .avatar{
transform-origin: right center;
}
#arena:not(.chess) .player[data-position='0'].fullskin2 .avatar2{
transform-origin: left center;
}
.dialog{
height:calc(100% - 370px);
bottom:170px;
}
.dialog.fullheight {
height: calc(100% - 123px) !important;
top: 40px !important;
}
#me>.fakeme.avatar{
width:120px;
height:100%;
border-radius:0px;
top:0;
left:0;
background-size:cover;
clip-path: polygon(-10px 0, 130px 0, 130px 150px, -10px 150px);
-webkit-clip-path: polygon(-10px 0, 130px 0, 130px 150px, -10px 150px);
}
#window[data-radius_size='increase'] #me>.fakeme.avatar,
#window[data-radius_size='reduce'] #me>.fakeme.avatar{
border-radius:0px;
}
#arena.mobile.oblongcard:not(.chess):not(.textequip) .player[data-position='0']>.equips>.equip1,
#arena.mobile.oblongcard:not(.chess):not(.textequip) .player[data-position='0']>.equips>.equip2{
top:20px;
}
#arena.mobile.oblongcard:not(.chess):not(.textequip) .player[data-position='0']>.equips>.equip3,
#arena.mobile.oblongcard:not(.chess):not(.textequip) .player[data-position='0']>.equips>.equip4,
#arena.mobile.oblongcard:not(.chess):not(.textequip) .player[data-position='0']>.equips>.equip6{
bottom:20px;
}
#arena.mobile.oblongcard.textequip:not(.chess) .player[data-position='0'] .equips>.removing{
margin-top:-14px !important;
margin-bottom:-14px !important;
transform:scale(1);
}
#arena.mobile.oblongcard:not(.chess) #handcards1{
height: 100%;
top: 2px;
}
#arena.mobile.oblongcard:not(.chess)>.card,
#arena.mobile.oblongcard:not(.chess) .handcards>.card{
height: 120px;
}
#arena.mobile.oblongcard:not(.chess)>.card>.image,
#arena.mobile.oblongcard:not(.chess) .handcards>.card>.image{
height: 110px;
top: 8px;
background-position-x: -3px;
}
#arena.phone.oblongcard:not(.chess):not(.nome){
height: calc(97% + 10px);
}
@import "../newlayout/global.css";
@import "equip.css";
#arena {
height: calc(95% + 20px);
}
#arena.oblongcard:not(.chess):not(.nome) {
height: 95%;
}
#arena.oblongcard:not(.chess):not(.nome) #me,
#arena.oblongcard:not(.chess):not(.nome) #mebg {
height: 140px;
bottom: 10px;
}
#historybar {
height: calc(95% - 160px);
}
#window.oblongcard #historybar {
height: calc(95% - 180px);
}
#control {
width: calc(5000% / 47 - 240px);
left: calc(-150% / 47 + 120px);
bottom: 150px;
height: 40px;
}
#arena.choose-to-move > #control,
#arena.discard-player-card > #control,
#arena.gain-player-card > #control,
#arena.choose-player-card > #control {
bottom: 30px;
transition: all 0s;
}
#arena.phone.discard-player-card > #control,
#arena.phone.gain-player-card > #control,
#arena.phone.choose-player-card > #control,
#arena.phone.choose-to-move > #control {
bottom: 43px;
}
#arena.ipad.discard-player-card > #control,
#arena.ipad.gain-player-card > #control,
#arena.ipad.choose-player-card > #control,
#arena.ipad.choose-to-move > #control {
bottom: 45px;
}
#arena:not(.chess) > #me,
#arena:not(.chess) > #mebg,
#arena:not(.chess) > #autonode {
bottom: 30px;
width: calc(5000% / 47);
left: calc(-150% / 47);
top: auto;
border-radius: 0 !important;
height: 120px;
}
#arena:not(.chess) > #autonode {
width: calc(5000% / 47 - 240px);
left: calc(-150% / 47 + 120px);
}
#window.leftbar #arena:not(.chess) > #me,
#window.leftbar #arena:not(.chess) > #mebg,
#window.leftbar #arena:not(.chess) > #autonode,
#window.leftbar #arena:not(.chess) .player[data-position="0"] {
width: calc(5000% / 47 + 2500px / 47);
left: calc(-150% / 47 - 50px - 75px / 47);
}
#window.leftbar #arena:not(.chess) > #autonode {
width: calc(5000% / 47 + 2500px / 47 - 240px);
left: calc(-150% / 47 - 50px - 75px / 47 + 120px);
}
#window.rightbar #arena:not(.chess) > #me,
#window.rightbar #arena:not(.chess) > #mebg,
#window.rightbar #arena:not(.chess) > #autonode,
#window.rightbar #arena:not(.chess) .player[data-position="0"] {
width: calc(5000% / 47 + 2500px / 47);
left: calc(-150% / 47 - 75px / 47);
}
#window.rightbar #arena:not(.chess) > #autonode {
width: calc(5000% / 47 + 2500px / 47 - 240px);
left: calc(-150% / 47 - 75px / 47 + 120px);
}
#arena:not(.chess) #handcards1 {
height: 120px;
padding: 0;
top: calc(100% - 120px);
}
#arena:not(.chess):not(.single-handcard) #handcards1 {
width: calc(100% - 240px);
left: 120px;
}
#handcards2 {
display: none;
}
/*#arena:not(.chess) .player[data-position='0']>.playerjiu{
width: 120px;
border-radius: 0px;
}*/
#arena:not(.chess) .player[data-position="0"].playerfocus {
transform: scale(1);
}
#arena:not(.chess) .player[data-position="0"] > .equips > div:not(.equip5) {
width: 45px;
height: 45px;
margin: 0;
border-radius: 4px;
position: absolute;
}
#arena:not(.chess) .player[data-position="0"] > .equips > div:not(.equip5) > .image {
width: 100%;
height: 100%;
left: 0;
top: 0;
}
#arena:not(.chess) .player[data-position="0"] > .equips > div:not(.equip5) > .name {
display: block;
transform: scale(0.43) !important;
transform-origin: left top;
left: 2px;
top: 3px;
}
#arena:not(.chess) .player[data-position="0"] > .equips > div:not(.equip5) > .name.long {
top: 2px;
}
#arena:not(.chess) .player[data-position="0"] > .equips > div:not(.equip5) > .info {
display: block;
transform: scale(0.43) !important;
transform-origin: right top;
right: 3px;
top: 3px;
}
/*#arena.oblongcard:not(.chess) .player[data-position='0']>.equips>div:not(.equip5){
height: 54px;
}
#arena.oblongcard:not(.chess) .player[data-position='0']>.equips>div:not(.equip5)>.image{
width: 120%;
height: 100%;
left: -20%;
top: 0%;
}*/
#arena:not(.chess):not(.textequip) .player[data-position="0"] > .equips > div.legend {
border: 1px solid rgb(192, 90, 255);
}
#arena:not(.chess):not(.textequip) .player[data-position="0"] > .equips > div.epic {
border: 1px solid rgb(90, 171, 255);
}
#arena.mobile:not(.chess) .player[data-position="0"] > .equips > .equip5 {
border-radius: 100%;
}
#arena:not(.chess) .player[data-position="0"] {
width: calc(5000% / 47);
left: calc(-150% / 47);
height: 120px;
top: calc(100% - 150px);
background: none !important;
border: none !important;
border-radius: 0 !important;
pointer-events: none;
}
#arena:not(.chess) .player[data-position="0"] > .turned {
width: 120px;
}
#arena:not(.chess) .player[data-position="0"] > .chain {
width: 120px;
}
#arena.oblongcard:not(.chess) .player[data-position="0"] {
height: 140px;
}
#arena:not(.chess) .player[data-position="0"].linked > .damage {
transform: scale(0.7) rotate(0);
}
#arena:not(.chess) .player[data-position="0"].linked > .damage.damageadded {
transform: scale(1) rotate(0);
}
#arena:not(.chess) .player[data-position="0"]:not(.selected):not(.selectedx):not(.selectable):not(.glow) {
box-shadow: none !important;
}
#arena:not(.chess) .player[data-position="0"]:not(.minskin) > .avatar,
#arena:not(.chess) .player[data-position="0"]:not(.minskin) > .avatar2,
#arena:not(.chess) .player[data-position="0"]:not(.minskin) > .equips {
width: 120px;
height: 100%;
border-radius: 0px !important;
top: 0;
left: 0;
transition-property: opacity, transform;
transition-duration: 0.5s;
pointer-events: auto;
/*-webkit-clip-path: polygon(-10px 0, 130px 0, 130px 180px, -10px 180px);*/
}
/*#window.compatiblemode #arena:not(.chess) .player[data-position='0']:not(.minskin)>.avatar,
#window.compatiblemode #arena:not(.chess) .player[data-position='0']:not(.minskin)>.avatar2,
#window.compatiblemode #arena:not(.chess) .player[data-position='0']:not(.minskin)>.equips{
-webkit-clip-path: none;
}*/
#arena:not(.chess) .player[data-position="0"]:not(.minskin) > .identity {
pointer-events: auto;
}
#arena:not(.chess) .player[data-position="0"]:not(.minskin) > .judges,
#arena:not(.chess) .player[data-position="0"]:not(.minskin) > .marks {
pointer-events: auto;
}
#arena:not(.chess) .player[data-position="0"]:not(.minskin) > .equips {
left: calc(100% - 120px);
}
#arena:not(.chess) .player[data-position="0"] > .equips > .equip1 {
top: 10px;
left: 10px;
}
#arena:not(.chess) .player[data-position="0"] > .equips > .equip2 {
top: 10px;
right: 10px;
}
#arena:not(.chess) .player[data-position="0"] > .equips > .equip3 {
bottom: 10px;
left: 10px;
}
#arena:not(.chess) .player[data-position="0"] > .equips > .equip4 {
bottom: 10px;
right: 10px;
}
#arena:not(.chess) .player[data-position="0"] > .equips > .equip6 {
bottom: 10px;
right: 10px;
}
#arena:not(.chess) .player[data-position="0"] > .name,
#arena:not(.chess) .player[data-position="0"].linked > .name {
left: 4px;
top: 10px;
transform: none;
}
#arena:not(.chess) .player[data-position="0"] > .nameol {
display: none;
}
#arena:not(.chess) .player[data-position="0"] > .name.name2,
#arena:not(.chess) .player[data-position="0"].linked > .name.name2 {
left: 69px;
}
#arena:not(.chess):not(.stone) .player[data-position="0"] > .identity {
left: 0;
width: 130px;
}
#arena:not(.chess) .player[data-position="0"] > .damage {
width: 120px;
}
#arena:not(.chess) .player[data-position="0"].target {
transform: none !important;
}
#arena:not(.chess) .player[data-position="0"] > .hp:not(.actcount) {
bottom: 5px;
left: 100px;
}
#arena:not(.chess) .player[data-position="0"]:not(.minskin) > .count {
bottom: 10px;
border-radius: 0 2px 2px 0;
left: -1px;
z-index: 3;
text-align: right;
}
#arena:not(.chess).slim_player .player[data-position="0"]:not(.minskin) > .count {
border-radius: 0 2px 2px 0;
left: -1px;
z-index: 3;
text-align: right;
}
#arena:not(.chess) .player[data-position="0"] > .hp.actcount {
top: 10px;
left: 2px;
}
#arena:not(.chess) .player.fullskin2[data-position="0"]:not(.minskin) > .avatar,
#arena:not(.chess) .player.fullskin2[data-position="0"]:not(.minskin) > .avatar2 {
width: 60px;
background-position: 50%;
}
#arena:not(.chess) .player.fullskin2[data-position="0"]:not(.minskin) > .avatar2 {
left: 60px;
top: 0;
z-index: 1;
}
.popup[data-position="0"] {
top: calc(100% - 187px);
left: calc(-150% / 47 + 15px);
}
#arena:not(.chess) .player[data-position="0"] > .judges {
left: 6px;
top: -16px;
transform: none;
}
#arena:not(.chess) .player[data-position="0"] > .marks {
right: -6px;
left: auto;
top: -16px;
transform: none;
}
#arena:not(.chess) .player[data-position="0"].linked {
transform: none;
}
#arena:not(.chess) .player[data-position="0"].linked .avatar,
#arena:not(.chess) .player[data-position="0"].linked .avatar2 {
transform: rotate(-90deg);
}
#arena:not(.chess) .player[data-position="0"].fullskin2 .avatar {
transform-origin: right center;
}
#arena:not(.chess) .player[data-position="0"].fullskin2 .avatar2 {
transform-origin: left center;
}
.dialog {
height: calc(100% - 370px);
bottom: 170px;
}
.dialog.fullheight {
height: calc(100% - 123px) !important;
top: 40px !important;
}
#me > .fakeme.avatar {
width: 120px;
height: 100%;
border-radius: 0px;
top: 0;
left: 0;
background-size: cover;
clip-path: polygon(-10px 0, 130px 0, 130px 150px, -10px 150px);
-webkit-clip-path: polygon(-10px 0, 130px 0, 130px 150px, -10px 150px);
}
#window[data-radius_size="increase"] #me > .fakeme.avatar,
#window[data-radius_size="reduce"] #me > .fakeme.avatar {
border-radius: 0px;
}
#arena.mobile.oblongcard:not(.chess):not(.textequip) .player[data-position="0"] > .equips > .equip1,
#arena.mobile.oblongcard:not(.chess):not(.textequip) .player[data-position="0"] > .equips > .equip2 {
top: 20px;
}
#arena.mobile.oblongcard:not(.chess):not(.textequip) .player[data-position="0"] > .equips > .equip3,
#arena.mobile.oblongcard:not(.chess):not(.textequip) .player[data-position="0"] > .equips > .equip4,
#arena.mobile.oblongcard:not(.chess):not(.textequip) .player[data-position="0"] > .equips > .equip6 {
bottom: 20px;
}
#arena.mobile.oblongcard.textequip:not(.chess) .player[data-position="0"] .equips > .removing {
margin-top: -14px !important;
margin-bottom: -14px !important;
transform: scale(1);
}
#arena.mobile.oblongcard:not(.chess) #handcards1 {
height: 100%;
top: 2px;
}
#arena.mobile.oblongcard:not(.chess) > .card,
#arena.mobile.oblongcard:not(.chess) .handcards > .card {
height: 120px;
}
#arena.mobile.oblongcard:not(.chess) > .card > .image,
#arena.mobile.oblongcard:not(.chess) .handcards > .card > .image {
height: 110px;
top: 8px;
background-position-x: -3px;
}
#arena.phone.oblongcard:not(.chess):not(.nome) {
height: calc(97% + 10px);
}

View File

@ -1,184 +1,184 @@
#bosslist {
width: 100%;
height: 260px;
text-align: center;
top: calc(50% - 200px);
top: 60px;
white-space: nowrap;
z-index: 1;
overflow-x: scroll;
}
#window[data-radius_size='reduce'] #bosslist>.player {
border-radius: 4px;
}
#window[data-radius_size='off'] #bosslist>.player {
border-radius: 0px;
}
#window[data-radius_size='increase'] #bosslist>.player {
border-radius: 20px;
}
#window #bosslist>.player {
border-radius: 10px;
}
#window[data-player_border='normal'] #bosslist>.player>.avatar {
left: 8px;
top: 8px;
width: 164px;
height: 200px;
}
#window[data-player_border='slim'] #bosslist>.player>.avatar {
left: 4px;
top: 4px;
width: 172px;
height: 208px;
}
.bosspaused>#bosslist,
.bosspaused>#control,
.bosspaused>.dialog.bosscharacter {
opacity: 0.2 !important;
}
#bosslist.hidden>.player {
transition: all 0s;
}
#bosslist>div:first-child,
#bosslist>div:last-child {
width: 20px;
position: relative;
}
#bosslist>.player .identity {
align-items: flex-start;
width: min-content;
}
#bosslist>.player .identity>div {
writing-mode: vertical-rl;
-webkit-writing-mode: vertical-rl;
}
#window:not(.nopointer) #bosslist>.player {
cursor: pointer;
}
.dialog.bosscharacter .buttons .button.selectable {
cursor: pointer;
}
.dialog.bosscharacter .buttons .button:not(.selectable) {
opacity: 0.6
}
.player.bossplayer.bossing {
position: absolute;
}
.player.bossing .avatar {
transition: all 0.5s;
}
.player.bossplayer.highlight {
transform: scale(1.1);
opacity: 1;
}
#bosslist.removing>.player.bossplayer.highlight {
transition: all 0s;
opacity: 0;
}
.player.bossplayer {
position: relative;
margin: 10px;
left: 0;
top: 4px;
width: 180px;
height: 216px;
transition: all 0.3s;
opacity: 0.6;
animation: game_start 0.5s;
-webkit-animation: game_start 0.5s;
}
.player.bossplayer>div:not(.hp):not(.identity):not(.avatar):not(.framebg) {
display: none !important;
}
.player.bossplayer>.identity {
left: 16px;
top: 18px;
line-height: 24px;
white-space: normal;
}
.player.bossplayer>.hp {
top: 22px;
left: 144px;
}
.player.bossplayer>.avatar {
width: 160px;
height: 196px;
}
#control.bosslist {
top: calc(100% - 50px) !important;
position: fixed;
}
.dialog.bosscharacter {
top: auto;
bottom: 65px;
height: calc(100% - 383px);
animation: dialog_start2 0.5s;
-webkit-animation: dialog_start2 0.5s;
}
.bosschongzheng {
width: calc(100% - 20px);
white-space: nowrap;
position: relative;
}
.bosschongzheng div {
position: relative;
}
.bosschongzheng>div {
width: 100%;
display: block;
margin-bottom: 5px;
}
.bosschongzheng>div>div:first-child {
text-align: left;
width: 30%;
}
.bosschongzheng>div>div:last-child {
text-align: right;
width: 70%;
}
@media screen and (min-height: 800px) {
.dialog.bosscharacter {
height: 417px;
bottom: calc(50% - 335px);
}
#control.bosslist {
top: calc(50% + 350px) !important;
}
#bosslist {
top: calc(40% - 260px);
}
}
#bosslist {
width: 100%;
height: 260px;
text-align: center;
top: calc(50% - 200px);
top: 60px;
white-space: nowrap;
z-index: 1;
overflow-x: scroll;
}
#window[data-radius_size="reduce"] #bosslist > .player {
border-radius: 4px;
}
#window[data-radius_size="off"] #bosslist > .player {
border-radius: 0px;
}
#window[data-radius_size="increase"] #bosslist > .player {
border-radius: 20px;
}
#window #bosslist > .player {
border-radius: 10px;
}
#window[data-player_border="normal"] #bosslist > .player > .avatar {
left: 8px;
top: 8px;
width: 164px;
height: 200px;
}
#window[data-player_border="slim"] #bosslist > .player > .avatar {
left: 4px;
top: 4px;
width: 172px;
height: 208px;
}
.bosspaused > #bosslist,
.bosspaused > #control,
.bosspaused > .dialog.bosscharacter {
opacity: 0.2 !important;
}
#bosslist.hidden > .player {
transition: all 0s;
}
#bosslist > div:first-child,
#bosslist > div:last-child {
width: 20px;
position: relative;
}
#bosslist > .player .identity {
align-items: flex-start;
width: min-content;
}
#bosslist > .player .identity > div {
writing-mode: vertical-rl;
-webkit-writing-mode: vertical-rl;
}
#window:not(.nopointer) #bosslist > .player {
cursor: pointer;
}
.dialog.bosscharacter .buttons .button.selectable {
cursor: pointer;
}
.dialog.bosscharacter .buttons .button:not(.selectable) {
opacity: 0.6;
}
.player.bossplayer.bossing {
position: absolute;
}
.player.bossing .avatar {
transition: all 0.5s;
}
.player.bossplayer.highlight {
transform: scale(1.1);
opacity: 1;
}
#bosslist.removing > .player.bossplayer.highlight {
transition: all 0s;
opacity: 0;
}
.player.bossplayer {
position: relative;
margin: 10px;
left: 0;
top: 4px;
width: 180px;
height: 216px;
transition: all 0.3s;
opacity: 0.6;
animation: game_start 0.5s;
-webkit-animation: game_start 0.5s;
}
.player.bossplayer > div:not(.hp):not(.identity):not(.avatar):not(.framebg) {
display: none !important;
}
.player.bossplayer > .identity {
left: 16px;
top: 18px;
line-height: 24px;
white-space: normal;
}
.player.bossplayer > .hp {
top: 22px;
left: 144px;
}
.player.bossplayer > .avatar {
width: 160px;
height: 196px;
}
#control.bosslist {
top: calc(100% - 50px) !important;
position: fixed;
}
.dialog.bosscharacter {
top: auto;
bottom: 65px;
height: calc(100% - 383px);
animation: dialog_start2 0.5s;
-webkit-animation: dialog_start2 0.5s;
}
.bosschongzheng {
width: calc(100% - 20px);
white-space: nowrap;
position: relative;
}
.bosschongzheng div {
position: relative;
}
.bosschongzheng > div {
width: 100%;
display: block;
margin-bottom: 5px;
}
.bosschongzheng > div > div:first-child {
text-align: left;
width: 30%;
}
.bosschongzheng > div > div:last-child {
text-align: right;
width: 70%;
}
@media screen and (min-height: 800px) {
.dialog.bosscharacter {
height: 417px;
bottom: calc(50% - 335px);
}
#control.bosslist {
top: calc(50% + 350px) !important;
}
#bosslist {
top: calc(40% - 260px);
}
}

View File

@ -1,345 +1,346 @@
#arena.chess{
width:100% !important;
height:100% !important;
left:0 !important;
top:0 !important;
transition:all 0s !important;
}
#arena.chess>#me,
#arena.chess>#mebg,
#arena.chess>#autonode{
bottom:0;
top:auto;
border-radius:0;
}
#arena.chess>#autonode{
width: calc(100% - 240px);
left: 120px;
}
#me>.fakeme.avatar {
width: 120px;
height: 120px;
border-radius: 0px;
top: 0;
left: 0;
background-size: cover;
clip-path: polygon(-10px 0, 130px 0, 130px 130px, -10px 130px);
-webkit-clip-path: polygon(-10px 0, 130px 0, 130px 130px, -10px 130px);
}
#window:not(.nopointer) .dialog.fullheight .buttons .button.character:not(.squarebutton):not(.selectable){
cursor: default;
}
#window:not(.nopointer) .obstacle.glow,
#window:not(.nopointer) .player.playerblank.glow{
cursor: pointer;
}
#chess-container{
width:100%;
height :calc(100% - 121px);
left:0;
top:0;
overflow:hidden;
text-align:center;
position: absolute;
}
#chess{
margin-top:36px;
margin-bottom:36px;
position: absolute;
left: 0;
top: 0;
transition: all 0s;
}
#arena .card.thrown{
z-index:4;
}
#canvas2{
position: absolute;
z-index: 10;
pointer-events: none;
}
#handcards1{
height:120px;
padding:0;
top:calc(100% - 120px);
width:calc(100% - 240px);
left:120px;
}
#handcards2{
display:none;
}
#mebg,#me,#autonode{
height:120px;
}
#window:not(.nopointer) .dialog.pointerbutton .buttons .button:not(.unselectable){
cursor: pointer !important;
}
#system{
z-index:5;
}
#arena>.dialog{
width:400px;
height:240px;
left:calc(50% - 200px);
top:calc(50% - 120px);
background: rgba(0,0,0,0.2);
box-shadow: rgba(0, 0, 0, 0.3) 0 0 0 1px;
border-radius:8px;
}
#arena.chess>.dialog{
height: calc(50% - 20px);
max-height: 240px;
}
#window[data-radius_size='reduce']>.dialog{
border-radius:4px;
}
#window[data-radius_size='off']>.dialog{
border-radius:0px;
}
#window[data-radius_size='increase']>.dialog{
border-radius:16px;
}
#arena>.dialog.slim:not(.center){
top:40px;
pointer-events: none;
}
#control{
top:calc(100% - 155px);
}
#arena.ipad #control{
top:calc(100% - 165px);
}
.fakeme{
width:120px;
height:120px;
border-radius:0px !important;
top:0;
}
#window[data-radius_size='increase'] .fakeme,
#window[data-radius_size='reduce'] .fakeme{
border-radius:0px;
}
.fakeme.avatar{
left:0;
background-size:cover;
}
.fakeme.player{
left:calc(100% - 120px);
text-align:center;
transition: all 0s;
clip-path: polygon(-10px 0, 130px 0, 130px 130px, -10px 130px);
-webkit-clip-path: polygon(-10px 0, 130px 0, 130px 130px, -10px 130px);
}
.fakeme.player.zoomed{
width: 240px;
height: 240px;
left:calc(100% - 240px);
top:calc(100% - 240px);
background-size:200%;
}
.fakeme.player>div{
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: scroll;
left: 0;
top: 0;
}
.fakeme.player.zoomed>div>div{
width: 90px;
height: 90px;
left: 0;
top: 16px;
margin-left: 8px;
margin-right: 8px;
margin-bottom: 16px;
}
.fakeme.player>div>div{
width:45px;
height:45px;
background-size:cover;
border-radius:4px;
position:relative;
left:0;
top:8px;
margin-left: 4px;
margin-right: 4px;
margin-bottom: 8px;
transition:box-shadow 0.5s;
}
#window:not(.nopointer) .fakeme.player>div>div{
cursor: pointer;
}
.fakeme.player>div>.selectable{
box-shadow: rgba(0, 0, 0, 0.3) 0 0 0 1px, rgba(0, 133, 255, 1) 0 0 5px, rgba(0, 133, 255, 1) 0 0 10px;
}
.fakeme.player>div>.selected{
box-shadow: rgba(0, 0, 0, 0.3) 0 0 0 1px, rgba(255, 0, 0, 1) 0 0 5px, rgba(255, 0, 0, 1) 0 0 10px !important;
}
.fakeme.player>div>.dead{
filter:grayscale(1);
-webkit-filter:grayscale(1);
opacity:0.5;
}
.card.drawing{
animation: drawing2 1s;
animation-fill-mode: forwards;
-webkit-animation: drawing2 1s;
-webkit-animation-fill-mode: forwards;
}
.player.playergrid,.player.obstacle{
background: rgba(0,0,0,0.2);
box-shadow: rgba(0, 0, 0, 0.3) 0 0 0 1px;
border-radius:8px;
}
#window[data-radius_size='reduce'] .player.playergrid,
#window[data-radius_size='reduce'] .player.obstacle{
border-radius:4px;
}
#window[data-radius_size='off'] .player.playergrid,
#window[data-radius_size='off'] .player.obstacle{
border-radius:0px;
}
#window[data-radius_size='increase'] .player.playergrid,
#window[data-radius_size='increase'] .player.obstacle{
border-radius:16px;
}
.player.playerblank{
background: none;
}
#window .player.obstacle{
background: repeating-linear-gradient(
135deg,
rgba(0,0,0,0.2),
rgba(0,0,0,0.2) 10px,
rgba(0,0,0,0.1) 10px,
rgba(0,0,0,0.1) 20px
);
}
#window .player.obstacle[data-obscolor='blue']{
background: repeating-linear-gradient(
135deg,
rgba(0, 64, 162, 0.4),
rgba(0, 64, 162, 0.4) 10px,
rgba(0, 0, 0, 0) 10px,
rgba(0, 0, 0, 0) 20px
);
box-shadow: rgba(0, 64, 162, 0.6) 0 0 0 1px;
}
.playergrid.temp{
opacity:0.3;
}
.chessscroll{
height:calc(100% - 162px);
width:20px;
top:42px;
z-index:1;
position:fixed;
}
.chessscroll.left{
left:0;
}
.chessscroll.right{
right:0;
}
.button.forbidden{
opacity:0.6
}
#arena.leaderhide>*:not(canvas){
opacity:0 !important;
transition: all 0.5s !important;
pointer-events: none;
}
#arena.leadercontrol>#control{
transition: all 0.5s !important;
}
/* .player.treasure{ */
/*box-shadow: none;*/
/* } */
.player.treasure .count,
.player.treasure .identity{
display: none;
}
.player.treasure .avatar{
width: 120px;
height: 120px;
left: 0;
top: 0;
}
.player.minskin .action{
text-shadow: black 0 0 1px !important;
font-size: 16px !important;
left:0;
}
.player .action.thunder{
color: rgb(117,186,255);
}
#arena.selecting .player .action:not(.hidden){
opacity: 1 !important;
}
.button .intro.showintro.tafang{
font-family: 'xinwei';
font-size: 20px;
top: 66px;
right: 5px;
left:auto;
}
.button.newstyle .intro.showintro.tafang{
top: 6px;
}
.dialog .buttons>.button.character.squarebutton{
height:90px;
}
.dialog .buttons>.button.character.squarebutton>.hp.text{
/*left:22px;*/
right: 4px;
text-align: right;
bottom: 4px;
top: auto;
left: auto;
}
.dialog .buttons>.button.character.squarebutton>.name{
top:8px;
}
br.finish_game{
display: none;
}
#arena.chess.slim_player.lslim_player .player.minskin:not(.fakeme)>.avatar:not(.fakeme){
left: 5px;
top: 5px;
width: calc(100% - 10px);
height: calc(100% - 10px);
}
#arena.chess #chess>.player{
left: 14px;
top: 14px;
}
#window.rightbar #system,
#window.leftbar #system{
width: calc(100% - 62px);
}
#window.leftbar #system{
left: 50px;
}
#historybar {
border-radius: 0;
top: 0;
height: calc(100% - 121px);
}
#window.rightbar #historybar{
left: calc(100% - 50px);
}
#window.leftbar #historybar{
left: 0;
}
#arena.chess {
width: 100% !important;
height: 100% !important;
left: 0 !important;
top: 0 !important;
transition: all 0s !important;
}
#arena.chess > #me,
#arena.chess > #mebg,
#arena.chess > #autonode {
bottom: 0;
top: auto;
border-radius: 0;
}
#arena.chess > #autonode {
width: calc(100% - 240px);
left: 120px;
}
#me > .fakeme.avatar {
width: 120px;
height: 120px;
border-radius: 0px;
top: 0;
left: 0;
background-size: cover;
clip-path: polygon(-10px 0, 130px 0, 130px 130px, -10px 130px);
-webkit-clip-path: polygon(-10px 0, 130px 0, 130px 130px, -10px 130px);
}
#window:not(.nopointer) .dialog.fullheight .buttons .button.character:not(.squarebutton):not(.selectable) {
cursor: default;
}
#window:not(.nopointer) .obstacle.glow,
#window:not(.nopointer) .player.playerblank.glow {
cursor: pointer;
}
#chess-container {
width: 100%;
height: calc(100% - 121px);
left: 0;
top: 0;
overflow: hidden;
text-align: center;
position: absolute;
}
#chess {
margin-top: 36px;
margin-bottom: 36px;
position: absolute;
left: 0;
top: 0;
transition: all 0s;
}
#arena .card.thrown {
z-index: 4;
}
#canvas2 {
position: absolute;
z-index: 10;
pointer-events: none;
}
#handcards1 {
height: 120px;
padding: 0;
top: calc(100% - 120px);
width: calc(100% - 240px);
left: 120px;
}
#handcards2 {
display: none;
}
#mebg,
#me,
#autonode {
height: 120px;
}
#window:not(.nopointer) .dialog.pointerbutton .buttons .button:not(.unselectable) {
cursor: pointer !important;
}
#system {
z-index: 5;
}
#arena > .dialog {
width: 400px;
height: 240px;
left: calc(50% - 200px);
top: calc(50% - 120px);
background: rgba(0, 0, 0, 0.2);
box-shadow: rgba(0, 0, 0, 0.3) 0 0 0 1px;
border-radius: 8px;
}
#arena.chess > .dialog {
height: calc(50% - 20px);
max-height: 240px;
}
#window[data-radius_size="reduce"] > .dialog {
border-radius: 4px;
}
#window[data-radius_size="off"] > .dialog {
border-radius: 0px;
}
#window[data-radius_size="increase"] > .dialog {
border-radius: 16px;
}
#arena > .dialog.slim:not(.center) {
top: 40px;
pointer-events: none;
}
#control {
top: calc(100% - 155px);
}
#arena.ipad #control {
top: calc(100% - 165px);
}
.fakeme {
width: 120px;
height: 120px;
border-radius: 0px !important;
top: 0;
}
#window[data-radius_size="increase"] .fakeme,
#window[data-radius_size="reduce"] .fakeme {
border-radius: 0px;
}
.fakeme.avatar {
left: 0;
background-size: cover;
}
.fakeme.player {
left: calc(100% - 120px);
text-align: center;
transition: all 0s;
clip-path: polygon(-10px 0, 130px 0, 130px 130px, -10px 130px);
-webkit-clip-path: polygon(-10px 0, 130px 0, 130px 130px, -10px 130px);
}
.fakeme.player.zoomed {
width: 240px;
height: 240px;
left: calc(100% - 240px);
top: calc(100% - 240px);
background-size: 200%;
}
.fakeme.player > div {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: scroll;
left: 0;
top: 0;
}
.fakeme.player.zoomed > div > div {
width: 90px;
height: 90px;
left: 0;
top: 16px;
margin-left: 8px;
margin-right: 8px;
margin-bottom: 16px;
}
.fakeme.player > div > div {
width: 45px;
height: 45px;
background-size: cover;
border-radius: 4px;
position: relative;
left: 0;
top: 8px;
margin-left: 4px;
margin-right: 4px;
margin-bottom: 8px;
transition: box-shadow 0.5s;
}
#window:not(.nopointer) .fakeme.player > div > div {
cursor: pointer;
}
.fakeme.player > div > .selectable {
box-shadow: rgba(0, 0, 0, 0.3) 0 0 0 1px, rgba(0, 133, 255, 1) 0 0 5px, rgba(0, 133, 255, 1) 0 0 10px;
}
.fakeme.player > div > .selected {
box-shadow: rgba(0, 0, 0, 0.3) 0 0 0 1px, rgba(255, 0, 0, 1) 0 0 5px, rgba(255, 0, 0, 1) 0 0 10px !important;
}
.fakeme.player > div > .dead {
filter: grayscale(1);
-webkit-filter: grayscale(1);
opacity: 0.5;
}
.card.drawing {
animation: drawing2 1s;
animation-fill-mode: forwards;
-webkit-animation: drawing2 1s;
-webkit-animation-fill-mode: forwards;
}
.player.playergrid,
.player.obstacle {
background: rgba(0, 0, 0, 0.2);
box-shadow: rgba(0, 0, 0, 0.3) 0 0 0 1px;
border-radius: 8px;
}
#window[data-radius_size="reduce"] .player.playergrid,
#window[data-radius_size="reduce"] .player.obstacle {
border-radius: 4px;
}
#window[data-radius_size="off"] .player.playergrid,
#window[data-radius_size="off"] .player.obstacle {
border-radius: 0px;
}
#window[data-radius_size="increase"] .player.playergrid,
#window[data-radius_size="increase"] .player.obstacle {
border-radius: 16px;
}
.player.playerblank {
background: none;
}
#window .player.obstacle {
background: repeating-linear-gradient(
135deg,
rgba(0, 0, 0, 0.2),
rgba(0, 0, 0, 0.2) 10px,
rgba(0, 0, 0, 0.1) 10px,
rgba(0, 0, 0, 0.1) 20px
);
}
#window .player.obstacle[data-obscolor="blue"] {
background: repeating-linear-gradient(
135deg,
rgba(0, 64, 162, 0.4),
rgba(0, 64, 162, 0.4) 10px,
rgba(0, 0, 0, 0) 10px,
rgba(0, 0, 0, 0) 20px
);
box-shadow: rgba(0, 64, 162, 0.6) 0 0 0 1px;
}
.playergrid.temp {
opacity: 0.3;
}
.chessscroll {
height: calc(100% - 162px);
width: 20px;
top: 42px;
z-index: 1;
position: fixed;
}
.chessscroll.left {
left: 0;
}
.chessscroll.right {
right: 0;
}
.button.forbidden {
opacity: 0.6;
}
#arena.leaderhide > *:not(canvas) {
opacity: 0 !important;
transition: all 0.5s !important;
pointer-events: none;
}
#arena.leadercontrol > #control {
transition: all 0.5s !important;
}
/* .player.treasure{ */
/*box-shadow: none;*/
/* } */
.player.treasure .count,
.player.treasure .identity {
display: none;
}
.player.treasure .avatar {
width: 120px;
height: 120px;
left: 0;
top: 0;
}
.player.minskin .action {
text-shadow: black 0 0 1px !important;
font-size: 16px !important;
left: 0;
}
.player .action.thunder {
color: rgb(117, 186, 255);
}
#arena.selecting .player .action:not(.hidden) {
opacity: 1 !important;
}
.button .intro.showintro.tafang {
font-family: "xinwei";
font-size: 20px;
top: 66px;
right: 5px;
left: auto;
}
.button.newstyle .intro.showintro.tafang {
top: 6px;
}
.dialog .buttons > .button.character.squarebutton {
height: 90px;
}
.dialog .buttons > .button.character.squarebutton > .hp.text {
/*left:22px;*/
right: 4px;
text-align: right;
bottom: 4px;
top: auto;
left: auto;
}
.dialog .buttons > .button.character.squarebutton > .name {
top: 8px;
}
br.finish_game {
display: none;
}
#arena.chess.slim_player.lslim_player .player.minskin:not(.fakeme) > .avatar:not(.fakeme) {
left: 5px;
top: 5px;
width: calc(100% - 10px);
height: calc(100% - 10px);
}
#arena.chess #chess > .player {
left: 14px;
top: 14px;
}
#window.rightbar #system,
#window.leftbar #system {
width: calc(100% - 62px);
}
#window.leftbar #system {
left: 50px;
}
#historybar {
border-radius: 0;
top: 0;
height: calc(100% - 121px);
}
#window.rightbar #historybar {
left: calc(100% - 50px);
}
#window.leftbar #historybar {
left: 0;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,229 +1,230 @@
.storyscene{
height: 500px;
top:calc(50% - 250px);
width: 100%;
position: absolute;
left: 0;
overflow-x: scroll;
overflow-y: hidden;
text-align: center;
white-space: nowrap;
}
.storyscene.removing{
pointer-events: none;
transform: translateY(500px);
}
.storyscene.lockscroll{
overflow-x: hidden;
}
.storyscene>.scene{
width: 350px;
height: 420px;
position: relative;
left: 0;
top:40px;
margin-left: -40px;
margin-right: -40px;
z-index: 1;
border-radius: 16px !important;
overflow: hidden;
box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px, rgba(0, 0, 0, 0.45) 0 3px 10px;
}
.storyscene>.scene>.background.player{
border-radius: 0 !important;
box-shadow: none !important;
width: 100%;
height: 100%;
left: 0;
top: 0;
z-index: 1;
}
.storyscene>.scene.unselectable{
opacity: 1 !important;
box-shadow: rgba(0, 0, 0, 0.1) 0 0 0 1px, rgba(0, 0, 0, 0.225) 0 3px 10px;
}
.storyscene>.scene.unselectable>.background{
opacity: 0.3;
}
.storyscene>.scene.unselectable>.name{
opacity: 0.6;
}
.storyscene>.scene.unselectable>div:not(.mask).background{
/*opacity: 0.25;*/
}
.storyscene>.scene>.mask{
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
z-index: 3;
}
.storyscene>.scene>.mask>div{
width: 100%;
height: 240px;
top:calc(50% - 120px);
position: absolute;
left: 0;
text-align: center;
font-size: 80px;
line-height: 80px;
font-family: 'xinwei';
opacity: 0.8;
}
.storyscene>.scene:not(.unselectable)>.mask{
display: none;
}.storyscene>.scene.unselectable>.name{
/*display: none;*/
}
.storyscene>.scene.flipped{
z-index: 2;
border-radius: 12px !important;
}
.storyscene>.scene.flipped>div:not(.menu){
display: none !important;
}
.storyscene>.scene:not(.flipped)>.menu{
display: none;
}
.storyscene>.scene:first-child{
margin-left: 50px;
}
.storyscene>.scene:last-child{
margin-right: 50px;
}
.storyscene>.scene>.name{
font-size: 48px;
left: 25px;
top: auto;
bottom: 28px;
/*transform: rotateY(-180deg);*/
border-radius: 16px !important;
z-index: 2;
font-family: 'xinwei'
}
.storyscene>.scene>.menu{
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
box-shadow: none;
overflow: scroll;
}
.storyscene>.scene>.background>.avatar{
width: calc(100% - 26px);
height: calc(100% - 26px);
left: 13px;
top: 13px;
z-index: 2;
}
.storyscene>.scene>.menu{
transform: rotateY(-180deg);
}
.storyscene>.scene.startscene{
-webkit-animation: scene_start 0.5s;
}
.scene>.menu>.menubutton.enter{
position: absolute;
top:auto;
bottom: 10px;
width: 70px;
left: calc(50% - 35px);
}
.scene>.menu>.conversation{
display: table;
position: absolute;
left: 16px;
top: 0;
width: calc(100% - 32px);
height: 100%;
font-size: 24px;
font-family: 'xinwei';
white-space: normal;
text-align: left;
}
.scene>.menu>.conversation.center{
text-align: center;
font-size: 30px;
}
.scene>.menu>.avatarconversation{
position: relative;
display: block;
width: 100%;
height: 100px;
left: 0;
margin-top: 10px;
}
.scene>.menu>.avatarconversation:last-child{
margin-bottom: 10px;
}
.scene>.menu>.avatarconversation>div{
height: 100%;
top:0;
}
.scene>.menu>.avatarconversation>.avatar{
width: 100px;
height: 100px;
left: 10px;
background-size: cover;
}
.scene>.menu>.avatarconversation.swap>.avatar{
left: auto;
right: 10px;
}
.scene>.menu>.avatarconversation>div:not(.avatar){
width: calc(100% - 120px);
left: 120px;
top: 5px;
height: calc(100% - 5px);
text-align: left;
white-space: normal;
line-height: 18px;
}
.scene>.menu>.avatarconversation.swap>div:not(.avatar){
left: auto;
right: 120px;
text-align: right;
}
.scene>.menu>.conversation>div{
display: table-cell;
vertical-align: middle;
position: relative;
}
#create-player{
width: 400px;
height: 300px;
left: calc(50% - 200px);
top: calc(50% - 150px);
position: absolute;
-webkit-animation:dialog_start2 0.5s;
}
#create-player>div{
position: absolute;
}
#create-player>.caption{
width: 100%;
height: 24px;
line-height: 24px;
left: 0;
top: 0;
font-family: 'xinwei';
font-size: 24px;
text-align: center;
}
@-webkit-keyframes scene_start{
from{
opacity: 0;
transform:scale(0.5);
margin-left: -175px;
margin-right: -175px;
}
to{
opacity: 1;
transform: scale(1);
margin-left: 16px;
margin-right: 16px;
}
}
.storyscene {
height: 500px;
top: calc(50% - 250px);
width: 100%;
position: absolute;
left: 0;
overflow-x: scroll;
overflow-y: hidden;
text-align: center;
white-space: nowrap;
}
.storyscene.removing {
pointer-events: none;
transform: translateY(500px);
}
.storyscene.lockscroll {
overflow-x: hidden;
}
.storyscene > .scene {
width: 350px;
height: 420px;
position: relative;
left: 0;
top: 40px;
margin-left: -40px;
margin-right: -40px;
z-index: 1;
border-radius: 16px !important;
overflow: hidden;
box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px, rgba(0, 0, 0, 0.45) 0 3px 10px;
}
.storyscene > .scene > .background.player {
border-radius: 0 !important;
box-shadow: none !important;
width: 100%;
height: 100%;
left: 0;
top: 0;
z-index: 1;
}
.storyscene > .scene.unselectable {
opacity: 1 !important;
box-shadow: rgba(0, 0, 0, 0.1) 0 0 0 1px, rgba(0, 0, 0, 0.225) 0 3px 10px;
}
.storyscene > .scene.unselectable > .background {
opacity: 0.3;
}
.storyscene > .scene.unselectable > .name {
opacity: 0.6;
}
.storyscene > .scene.unselectable > div:not(.mask).background {
/*opacity: 0.25;*/
}
.storyscene > .scene > .mask {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
z-index: 3;
}
.storyscene > .scene > .mask > div {
width: 100%;
height: 240px;
top: calc(50% - 120px);
position: absolute;
left: 0;
text-align: center;
font-size: 80px;
line-height: 80px;
font-family: "xinwei";
opacity: 0.8;
}
.storyscene > .scene:not(.unselectable) > .mask {
display: none;
}
.storyscene > .scene.unselectable > .name {
/*display: none;*/
}
.storyscene > .scene.flipped {
z-index: 2;
border-radius: 12px !important;
}
.storyscene > .scene.flipped > div:not(.menu) {
display: none !important;
}
.storyscene > .scene:not(.flipped) > .menu {
display: none;
}
.storyscene > .scene:first-child {
margin-left: 50px;
}
.storyscene > .scene:last-child {
margin-right: 50px;
}
.storyscene > .scene > .name {
font-size: 48px;
left: 25px;
top: auto;
bottom: 28px;
/*transform: rotateY(-180deg);*/
border-radius: 16px !important;
z-index: 2;
font-family: "xinwei";
}
.storyscene > .scene > .menu {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
box-shadow: none;
overflow: scroll;
}
.storyscene > .scene > .background > .avatar {
width: calc(100% - 26px);
height: calc(100% - 26px);
left: 13px;
top: 13px;
z-index: 2;
}
.storyscene > .scene > .menu {
transform: rotateY(-180deg);
}
.storyscene > .scene.startscene {
-webkit-animation: scene_start 0.5s;
}
.scene > .menu > .menubutton.enter {
position: absolute;
top: auto;
bottom: 10px;
width: 70px;
left: calc(50% - 35px);
}
.scene > .menu > .conversation {
display: table;
position: absolute;
left: 16px;
top: 0;
width: calc(100% - 32px);
height: 100%;
font-size: 24px;
font-family: "xinwei";
white-space: normal;
text-align: left;
}
.scene > .menu > .conversation.center {
text-align: center;
font-size: 30px;
}
.scene > .menu > .avatarconversation {
position: relative;
display: block;
width: 100%;
height: 100px;
left: 0;
margin-top: 10px;
}
.scene > .menu > .avatarconversation:last-child {
margin-bottom: 10px;
}
.scene > .menu > .avatarconversation > div {
height: 100%;
top: 0;
}
.scene > .menu > .avatarconversation > .avatar {
width: 100px;
height: 100px;
left: 10px;
background-size: cover;
}
.scene > .menu > .avatarconversation.swap > .avatar {
left: auto;
right: 10px;
}
.scene > .menu > .avatarconversation > div:not(.avatar) {
width: calc(100% - 120px);
left: 120px;
top: 5px;
height: calc(100% - 5px);
text-align: left;
white-space: normal;
line-height: 18px;
}
.scene > .menu > .avatarconversation.swap > div:not(.avatar) {
left: auto;
right: 120px;
text-align: right;
}
.scene > .menu > .conversation > div {
display: table-cell;
vertical-align: middle;
position: relative;
}
#create-player {
width: 400px;
height: 300px;
left: calc(50% - 200px);
top: calc(50% - 150px);
position: absolute;
-webkit-animation: dialog_start2 0.5s;
}
#create-player > div {
position: absolute;
}
#create-player > .caption {
width: 100%;
height: 24px;
line-height: 24px;
left: 0;
top: 0;
font-family: "xinwei";
font-size: 24px;
text-align: center;
}
@-webkit-keyframes scene_start {
from {
opacity: 0;
transform: scale(0.5);
margin-left: -175px;
margin-right: -175px;
}
to {
opacity: 1;
transform: scale(1);
margin-left: 16px;
margin-right: 16px;
}
}

View File

@ -1,247 +1,247 @@
.storyscene{
height: 500px;
top:calc(50% - 250px);
width: 100%;
position: absolute;
left: 0;
overflow-x: scroll;
overflow-y: hidden;
text-align: center;
white-space: nowrap;
}
.storyscene.removing{
pointer-events: none;
transform: translateY(500px);
}
.storyscene.lockscroll{
overflow-x: hidden;
}
.storyscene>.scene{
width: 350px;
height: 420px;
position: relative;
left: 0;
top:40px;
margin-left: -40px;
margin-right: -40px;
z-index: 1;
border-radius: 16px !important;
overflow: hidden;
box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px, rgba(0, 0, 0, 0.45) 0 3px 10px;
}
.storyscene>.scene>.background.player{
border-radius: 0 !important;
box-shadow: none !important;
width: 100%;
height: 100%;
left: 0;
top: 0;
z-index: 1;
}
.storyscene>.scene.unselectable{
opacity: 1 !important;
box-shadow: rgba(0, 0, 0, 0.1) 0 0 0 1px, rgba(0, 0, 0, 0.225) 0 3px 10px;
}
.storyscene>.scene.unselectable>.background{
opacity: 0.3;
}
.storyscene>.scene.unselectable>.name{
opacity: 0.6;
}
/* .storyscene>.scene.unselectable>div:not(.mask).background{ */
/*opacity: 0.25;*/
/* } */
.storyscene>.scene>.mask{
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
z-index: 3;
}
.storyscene>.scene>.mask>div{
width: 100%;
height: 240px;
top:calc(50% - 120px);
position: absolute;
left: 0;
text-align: center;
font-size: 80px;
line-height: 80px;
font-family: 'xinwei';
opacity: 0.8;
}
.storyscene>.scene:not(.unselectable)>.mask{
display: none;
}
/* .storyscene>.scene.unselectable>.name{ */
/*display: none;*/
/* } */
.storyscene>.scene.flipped{
z-index: 2;
border-radius: 12px !important;
}
.storyscene>.scene.flipped>div:not(.menu){
display: none !important;
}
.storyscene>.scene:not(.flipped)>.menu{
display: none;
}
.storyscene>.scene:first-child{
margin-left: 50px;
}
.storyscene>.scene:last-child{
margin-right: 50px;
}
.storyscene>.scene>.name{
font-size: 48px;
left: 25px;
/*top: auto;*/
top: 28px;
/*transform: rotateY(-180deg);*/
border-radius: 16px !important;
z-index: 2;
font-family: 'xinwei'
}
.storyscene>.scene>.menu{
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
box-shadow: none;
overflow: scroll;
}
.storyscene>.scene>.background>.avatar{
width: calc(100% - 26px);
height: calc(100% - 26px);
left: 13px;
top: 13px;
z-index: 2;
}
.storyscene>.scene>.menu{
transform: rotateY(-180deg);
}
.storyscene>.scene.startscene{
animation: scene_start 0.5s;
-webkit-animation: scene_start 0.5s;
}
.scene>.menu>.menubutton.enter{
position: absolute;
top:auto;
bottom: 10px;
width: 70px;
left: calc(50% - 35px);
}
.scene>.menu>.conversation{
display: table;
position: absolute;
left: 16px;
top: 0;
width: calc(100% - 32px);
height: 100%;
font-size: 24px;
font-family: 'xinwei';
white-space: normal;
text-align: left;
}
.scene>.menu>.conversation.center{
text-align: center;
font-size: 30px;
}
.scene>.menu>.avatarconversation{
position: relative;
display: block;
width: 100%;
height: 100px;
left: 0;
margin-top: 10px;
}
.scene>.menu>.avatarconversation:last-child{
margin-bottom: 10px;
}
.scene>.menu>.avatarconversation>div{
height: 100%;
top:0;
}
.scene>.menu>.avatarconversation>.avatar{
width: 100px;
height: 100px;
left: 10px;
background-size: cover;
}
.scene>.menu>.avatarconversation.swap>.avatar{
left: auto;
right: 10px;
}
.scene>.menu>.avatarconversation>div:not(.avatar){
width: calc(100% - 120px);
left: 120px;
top: 5px;
height: calc(100% - 5px);
text-align: left;
white-space: normal;
line-height: 18px;
}
.scene>.menu>.avatarconversation.swap>div:not(.avatar){
left: auto;
right: 120px;
text-align: right;
}
.scene>.menu>.conversation>div{
display: table-cell;
vertical-align: middle;
position: relative;
}
#create-player{
width: 400px;
height: 300px;
left: calc(50% - 200px);
top: calc(50% - 150px);
position: absolute;
animation:dialog_start2 0.5s;
-webkit-animation:dialog_start2 0.5s;
}
#create-player>div{
position: absolute;
}
#create-player>.caption{
width: 100%;
height: 24px;
line-height: 24px;
left: 0;
top: 0;
font-family: 'xinwei';
font-size: 24px;
text-align: center;
}
@keyframes scene_start{
from{
opacity: 0;
transform:scale(0.5);
margin-left: -175px;
margin-right: -175px;
}
to{
opacity: 1;
transform: scale(1);
margin-left: 16px;
margin-right: 16px;
}
}
@-webkit-keyframes scene_start{
from{
opacity: 0;
transform:scale(0.5);
margin-left: -175px;
margin-right: -175px;
}
to{
opacity: 1;
transform: scale(1);
margin-left: 16px;
margin-right: 16px;
}
}
.storyscene {
height: 500px;
top: calc(50% - 250px);
width: 100%;
position: absolute;
left: 0;
overflow-x: scroll;
overflow-y: hidden;
text-align: center;
white-space: nowrap;
}
.storyscene.removing {
pointer-events: none;
transform: translateY(500px);
}
.storyscene.lockscroll {
overflow-x: hidden;
}
.storyscene > .scene {
width: 350px;
height: 420px;
position: relative;
left: 0;
top: 40px;
margin-left: -40px;
margin-right: -40px;
z-index: 1;
border-radius: 16px !important;
overflow: hidden;
box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px, rgba(0, 0, 0, 0.45) 0 3px 10px;
}
.storyscene > .scene > .background.player {
border-radius: 0 !important;
box-shadow: none !important;
width: 100%;
height: 100%;
left: 0;
top: 0;
z-index: 1;
}
.storyscene > .scene.unselectable {
opacity: 1 !important;
box-shadow: rgba(0, 0, 0, 0.1) 0 0 0 1px, rgba(0, 0, 0, 0.225) 0 3px 10px;
}
.storyscene > .scene.unselectable > .background {
opacity: 0.3;
}
.storyscene > .scene.unselectable > .name {
opacity: 0.6;
}
/* .storyscene>.scene.unselectable>div:not(.mask).background{ */
/*opacity: 0.25;*/
/* } */
.storyscene > .scene > .mask {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
z-index: 3;
}
.storyscene > .scene > .mask > div {
width: 100%;
height: 240px;
top: calc(50% - 120px);
position: absolute;
left: 0;
text-align: center;
font-size: 80px;
line-height: 80px;
font-family: "xinwei";
opacity: 0.8;
}
.storyscene > .scene:not(.unselectable) > .mask {
display: none;
}
/* .storyscene>.scene.unselectable>.name{ */
/*display: none;*/
/* } */
.storyscene > .scene.flipped {
z-index: 2;
border-radius: 12px !important;
}
.storyscene > .scene.flipped > div:not(.menu) {
display: none !important;
}
.storyscene > .scene:not(.flipped) > .menu {
display: none;
}
.storyscene > .scene:first-child {
margin-left: 50px;
}
.storyscene > .scene:last-child {
margin-right: 50px;
}
.storyscene > .scene > .name {
font-size: 48px;
left: 25px;
/*top: auto;*/
top: 28px;
/*transform: rotateY(-180deg);*/
border-radius: 16px !important;
z-index: 2;
font-family: "xinwei";
}
.storyscene > .scene > .menu {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
box-shadow: none;
overflow: scroll;
}
.storyscene > .scene > .background > .avatar {
width: calc(100% - 26px);
height: calc(100% - 26px);
left: 13px;
top: 13px;
z-index: 2;
}
.storyscene > .scene > .menu {
transform: rotateY(-180deg);
}
.storyscene > .scene.startscene {
animation: scene_start 0.5s;
-webkit-animation: scene_start 0.5s;
}
.scene > .menu > .menubutton.enter {
position: absolute;
top: auto;
bottom: 10px;
width: 70px;
left: calc(50% - 35px);
}
.scene > .menu > .conversation {
display: table;
position: absolute;
left: 16px;
top: 0;
width: calc(100% - 32px);
height: 100%;
font-size: 24px;
font-family: "xinwei";
white-space: normal;
text-align: left;
}
.scene > .menu > .conversation.center {
text-align: center;
font-size: 30px;
}
.scene > .menu > .avatarconversation {
position: relative;
display: block;
width: 100%;
height: 100px;
left: 0;
margin-top: 10px;
}
.scene > .menu > .avatarconversation:last-child {
margin-bottom: 10px;
}
.scene > .menu > .avatarconversation > div {
height: 100%;
top: 0;
}
.scene > .menu > .avatarconversation > .avatar {
width: 100px;
height: 100px;
left: 10px;
background-size: cover;
}
.scene > .menu > .avatarconversation.swap > .avatar {
left: auto;
right: 10px;
}
.scene > .menu > .avatarconversation > div:not(.avatar) {
width: calc(100% - 120px);
left: 120px;
top: 5px;
height: calc(100% - 5px);
text-align: left;
white-space: normal;
line-height: 18px;
}
.scene > .menu > .avatarconversation.swap > div:not(.avatar) {
left: auto;
right: 120px;
text-align: right;
}
.scene > .menu > .conversation > div {
display: table-cell;
vertical-align: middle;
position: relative;
}
#create-player {
width: 400px;
height: 300px;
left: calc(50% - 200px);
top: calc(50% - 150px);
position: absolute;
animation: dialog_start2 0.5s;
-webkit-animation: dialog_start2 0.5s;
}
#create-player > div {
position: absolute;
}
#create-player > .caption {
width: 100%;
height: 24px;
line-height: 24px;
left: 0;
top: 0;
font-family: "xinwei";
font-size: 24px;
text-align: center;
}
@keyframes scene_start {
from {
opacity: 0;
transform: scale(0.5);
margin-left: -175px;
margin-right: -175px;
}
to {
opacity: 1;
transform: scale(1);
margin-left: 16px;
margin-right: 16px;
}
}
@-webkit-keyframes scene_start {
from {
opacity: 0;
transform: scale(0.5);
margin-left: -175px;
margin-right: -175px;
}
to {
opacity: 1;
transform: scale(1);
margin-left: 16px;
margin-right: 16px;
}
}

View File

@ -1,143 +1,146 @@
.player .equips{
width:120px;
height:auto;
top:auto;
right:auto;
bottom:18px;
left:10px;
text-align:left;
}
#arena.slim_player .player .equips{
left: 7px;
}
#arena.uslim_player .player .equips{
left: 3px;
}
#arena.mslim_player .player .equips{
left: 3px;
}
.player.minskin .equips{
transform:scale(0.73);
transform-origin:bottom left;
}
.player .equips>.card::after,
.player .equips>.card::before{
visibility: hidden;
}
.player .equips>.card{
position:relative;
width:100%;
height:22px;
line-height:22px;
margin-top:0;
margin-bottom:0;
background:linear-gradient(to right,rgba(0,0,0,0.3),transparent),
linear-gradient(135deg,rgba(0,0,0,0.5) ,transparent 80%,transparent) !important;
box-shadow:none;
color:white;
text-shadow:black 0 0 2px;
animation: card_start2x 0.5s;
-webkit-animation: card_start2x 0.5s;
display:block;
left:0;
top:0;
transition:all 0.5s;
border-radius:0;
border-width: 1px 0 0;
border-style:solid;
border-image:linear-gradient(to right, rgba(0, 0, 0,0.4) 70%,transparent) 100% 0 0;
}
.player .equips>.card>.image{
display:none;
}
.player.unseen .equips>.card{
background:none;
/*border-image:linear-gradient(to right, transparent,rgba(0,0,0,0.4) 10%,rgba(0, 0, 0,0.4) 70%,transparent) 100% 0 0;*/
}
.player.unseen .equips>.card{
border-image:linear-gradient(to right, transparent,rgba(0,0,0,0.4) 10%,rgba(0, 0, 0,0.4) 70%,transparent) 100% 0 0;
}
.player.unseen .equips>.card:first-child{
border-image:linear-gradient(transparent,transparent);
}
.player .equips>.card.selected{
background:linear-gradient(to right,rgba(0, 133, 255,0.3),transparent),
linear-gradient(135deg,rgba(0, 133, 255,0.5) ,transparent 80%,transparent) !important;
box-shadow:none !important;
border-width: 1px 0 0;
border-style:solid;
border-image:linear-gradient(to right, rgba(0, 103, 205,0.4) 70%,transparent) 100% 0 0;
}
.player .equips>.card.fire{
color: rgb(255,119,63);
}
.player .equips>.card.thunder{
color: rgb(117,186,255);
}
.player .equips>.card.poison{
color: rgb(104,221,127);
}
.player .equips>.card.brown{
color: rgb(195,161,223);
}
.equips>.card>.background{
display:none !important;
}
.equips>.card>.name2{
display:block;
margin-left:5px;
white-space: nowrap;
}
.equips>.card>div{
animation:none !important;
-webkit-animation:none !important;
}
.equips>.card>.name,
.equips>.card>.info{
display:none !important;
}
.equips>.removing{
margin-top:-12px !important;
margin-bottom:-11px !important;
transform:scale(1);
}
.equips>.removing+.removing{
margin-top:-23px !important;
}
.player.linked .equips{
transform:rotate(90deg) translate(-152px,-6px);
transform-origin:bottom left;
}
#arena.slim_player .player.linked .equips{
transform:rotate(90deg) translate(-155px,-6px);
}
#arena.uslim_player .player.linked .equips{
transform:rotate(90deg) translate(-159px,-6px);
}
#arena.mslim_player .player.linked .equips{
transform:rotate(90deg) translate(-157px,-6px);
}
.player.minskin.linked .equips{
transform:rotate(90deg) translate(-92px,-6px) scale(0.73);
}
#arena.slim_player .player.minskin.linked .equips{
transform:rotate(90deg) translate(-95px,-6px) scale(0.73);
}
#arena.uslim_player .player.minskin.linked .equips{
transform:rotate(90deg) translate(-99px,-6px) scale(0.73);
}
#arena.mslim_player .player.minskin.linked .equips{
transform:rotate(90deg) translate(-97px,-6px) scale(0.73);
}
.player.linked .identity{
transform:rotate(90deg);
}
.player .equips {
width: 120px;
height: auto;
top: auto;
right: auto;
bottom: 18px;
left: 10px;
text-align: left;
}
#arena.slim_player .player .equips {
left: 7px;
}
#arena.uslim_player .player .equips {
left: 3px;
}
#arena.mslim_player .player .equips {
left: 3px;
}
.player.minskin .equips {
transform: scale(0.73);
transform-origin: bottom left;
}
.player .equips > .card::after,
.player .equips > .card::before {
visibility: hidden;
}
.player .equips > .card {
position: relative;
width: 100%;
height: 22px;
line-height: 22px;
margin-top: 0;
margin-bottom: 0;
background: linear-gradient(to right, rgba(0, 0, 0, 0.3), transparent),
linear-gradient(135deg, rgba(0, 0, 0, 0.5), transparent 80%, transparent) !important;
box-shadow: none;
color: white;
text-shadow: black 0 0 2px;
animation: card_start2x 0.5s;
-webkit-animation: card_start2x 0.5s;
display: block;
left: 0;
top: 0;
transition: all 0.5s;
border-radius: 0;
border-width: 1px 0 0;
border-style: solid;
border-image: linear-gradient(to right, rgba(0, 0, 0, 0.4) 70%, transparent) 100% 0 0;
}
.player .equips > .card > .image {
display: none;
}
.player.unseen .equips > .card {
background: none;
/*border-image:linear-gradient(to right, transparent,rgba(0,0,0,0.4) 10%,rgba(0, 0, 0,0.4) 70%,transparent) 100% 0 0;*/
}
.player.unseen .equips > .card {
border-image: linear-gradient(
to right,
transparent,
rgba(0, 0, 0, 0.4) 10%,
rgba(0, 0, 0, 0.4) 70%,
transparent
)
100% 0 0;
}
.player.unseen .equips > .card:first-child {
border-image: linear-gradient(transparent, transparent);
}
.player .equips > .card.selected {
background: linear-gradient(to right, rgba(0, 133, 255, 0.3), transparent),
linear-gradient(135deg, rgba(0, 133, 255, 0.5), transparent 80%, transparent) !important;
box-shadow: none !important;
border-width: 1px 0 0;
border-style: solid;
border-image: linear-gradient(to right, rgba(0, 103, 205, 0.4) 70%, transparent) 100% 0 0;
}
.player .equips > .card.fire {
color: rgb(255, 119, 63);
}
.player .equips > .card.thunder {
color: rgb(117, 186, 255);
}
.player .equips > .card.poison {
color: rgb(104, 221, 127);
}
.player .equips > .card.brown {
color: rgb(195, 161, 223);
}
.equips > .card > .background {
display: none !important;
}
.equips > .card > .name2 {
display: block;
margin-left: 5px;
white-space: nowrap;
}
.equips > .card > div {
animation: none !important;
-webkit-animation: none !important;
}
.equips > .card > .name,
.equips > .card > .info {
display: none !important;
}
.equips > .removing {
margin-top: -12px !important;
margin-bottom: -11px !important;
transform: scale(1);
}
.equips > .removing + .removing {
margin-top: -23px !important;
}
.player.linked .equips {
transform: rotate(90deg) translate(-152px, -6px);
transform-origin: bottom left;
}
#arena.slim_player .player.linked .equips {
transform: rotate(90deg) translate(-155px, -6px);
}
#arena.uslim_player .player.linked .equips {
transform: rotate(90deg) translate(-159px, -6px);
}
#arena.mslim_player .player.linked .equips {
transform: rotate(90deg) translate(-157px, -6px);
}
.player.minskin.linked .equips {
transform: rotate(90deg) translate(-92px, -6px) scale(0.73);
}
#arena.slim_player .player.minskin.linked .equips {
transform: rotate(90deg) translate(-95px, -6px) scale(0.73);
}
#arena.uslim_player .player.minskin.linked .equips {
transform: rotate(90deg) translate(-99px, -6px) scale(0.73);
}
#arena.mslim_player .player.minskin.linked .equips {
transform: rotate(90deg) translate(-97px, -6px) scale(0.73);
}
.player.linked .identity {
transform: rotate(90deg);
}

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +1,2 @@
@import 'global.css';
@import 'equip.css';
@import "global.css";
@import "equip.css";

View File

@ -1,363 +1,448 @@
@import "../newlayout/layout.css";
#arena{
height: calc(95% + 20px);
}
#control{
width: calc(5000% / 47 - 240px);
left:calc(-150% / 47 + 120px);
bottom:150px;
height: 40px;
}
#arena.phone #control{
bottom:160px;
}
#arena.ipad #control{
bottom:155px;
}
#arena:not(.chess)>#me,
#arena:not(.chess)>#mebg,
#arena:not(.chess)>#autonode{
bottom:30px;
width: calc(5000% / 47);
left:calc(-150% / 47);
top:auto;
border-radius:0 !important;
height:120px;
}
#arena.oblongcard:not(.chess)>#me,
#arena.oblongcard:not(.chess)>#mebg,
#arena.oblongcard:not(.chess)>#autonode{
height: 140px;
}
#arena.oblongcard:not(.chess)>.card,
#arena.oblongcard:not(.chess) .handcards>.card{
height: 120px;
}
#arena.oblongcard:not(.chess)>.card>.image,
#arena.oblongcard:not(.chess) .handcards>.card>.image{
height: 110px;
top: 8px;
background-position-x: -3px;
}
#arena.oblongcard:not(.chess) #handcards1{
height: 100%;
top: 2px;
}
#arena.oblongcard:not(.chess):not(.choose-character) #control{
bottom:165px;
}
#arena.phone.oblongcard:not(.chess):not(.choose-character) #control{
bottom:180px;
}
#arena:not(.chess)>#autonode{
width: calc(5000% / 47 - 240px);
left:calc(-150% / 47 + 120px);
}
#arena:not(.mobile).single-handcard #handcards1{
width: calc(100% - 120px);
}
#window.rightbar #system,
#window.leftbar #system{
width: calc(100% - 62px);
}
#window.leftbar #system{
left: 50px;
}
#window.rightbar #historybar{
left: calc(100% - 50px);
border-radius: 0;
top: 0;
height: 100%;
}
#window.leftbar #historybar{
left: 0;
border-radius: 0;
top: 0;
height: 100%;
}
#window.single-handcard #historybar{
height: calc(100% - 121px);
}
#window.oblongcard.single-handcard #historybar{
height: calc(100% - 141px);
}
#window.leftbar #arena:not(.chess)>#me,
#window.leftbar #arena:not(.chess)>#mebg,
#window.leftbar #arena:not(.chess)>#autonode{
width: calc(5000% / 47 + 2500px / 47);
left:calc(-150% / 47 - 50px - 75px / 47);
}
#window.leftbar #arena:not(.chess)>#autonode{
width: calc(5000% / 47 + 2500px / 47 - 240px);
left:calc(-150% / 47 - 50px - 75px / 47 + 120px);
}
#window.rightbar #arena:not(.chess)>#me,
#window.rightbar #arena:not(.chess)>#mebg,
#window.rightbar #arena:not(.chess)>#autonode{
width: calc(5000% / 47 + 2500px / 47);
left:calc(-150% / 47 - 75px / 47);
}
#window.rightbar #arena:not(.chess)>#autonode{
width: calc(5000% / 47 + 2500px / 47 - 240px);
left:calc(-150% / 47 - 75px / 47 + 120px);
}
#arena:not(.chess) #handcards1{
height:120px;
padding:0;
top:calc(100% - 120px);
}
#arena:not(.chess) #handcards1.scrollh{
top: calc(100% - 180px);
height: 180px;
}
#arena:not(.chess).oblongcard #handcards1.scrollh{
top: calc(100% - 200px);
height: 200px;
}
#arena:not(.chess) #handcards1.scrollh>div{
height: 120px;
top: 60px;
}
#arena:not(.chess).oblongcard #handcards1.scrollh>div{
top: 62px;
}
#arena:not(.chess):not(.single-handcard) #handcards1{
width:calc(100% - 240px);
left:calc(150% / 47 - 300% / 94 + 625% / 47 - 105px + 120px);
}
#arena:not(.single-handcard):not(.chess)>#me,
#arena:not(.single-handcard):not(.chess)>#mebg,
#arena:not(.single-handcard):not(.chess)>#autonode{
left: 0 !important;
bottom: 38px !important;
width: calc(9700% / 94) !important;
}
#arena:not(.single-handcard):not(.chess)>#mebg{
visibility: hidden;
}
#arena:not(.single-handcard):not(.chess)>#me #handcards1{
left: 150px !important;
width: calc(100% - 150px) !important;
}
#arena:not(.single-handcard):not(.chess)>#me #handcards1>.handcards{
left: 0 !important;
}
#autonode{
display: table !important;
}
@media screen and (max-width: 1105px){
#arena[data-number='8']:not(.single-handcard):not(.chess)>#me,
#arena[data-number='8']:not(.single-handcard):not(.chess)>#mebg,
#arena[data-number='8']:not(.single-handcard):not(.chess)>#autonode{
left: calc(-300% / 94 + 625% / 47 - 105px) !important;
width: calc(9700% / 94 + 300% / 94 - 625% / 47 + 105px) !important;
}
}
#handcards2{
display:none;
}
.dialog{
height:calc(100% - 370px);
bottom:170px;
}
#arena.choose-character>.dialog .placeholder+.placeholder{
display: none;
}
#arena.choose-character>.dialog .placeholder{
margin-bottom: 4px;
height: 0px;
}
#arena.choose-character>.dialog.noupdate .placeholder{
margin-bottom: 0;
height: 0;
}
#arena.choose-character>.dialog{
height:calc(100% - 280px);
bottom:80px;
}
#arena.choose-character>.dialog.scroll3{
height:calc(100% - 240px);
}
#arena.phone.choose-character>.dialog{
bottom:93px;
}
#arena.ipad.choose-character>.dialog{
bottom:96px;
}
#arena.discard-player-card>#control,
#arena.gain-player-card>#control,
#arena.choose-player-card>#control,
#arena.choose-to-move>#control,
#arena.choose-character>#control{
bottom: 30px;
transition: all 0s;
}
#arena.phone.discard-player-card>#control,
#arena.phone.gain-player-card>#control,
#arena.phone.choose-player-card>#control,
#arena.phone.choose-to-move>#control,
#arena.phone.choose-character>#control{
bottom: 43px;
}
#arena.ipad.discard-player-card>#control,
#arena.ipad.gain-player-card>#control,
#arena.ipad.choose-player-card>#control,
#arena.ipad.choose-to-move>#control,
#arena.ipad.choose-character>#control{
bottom: 45px;
}
.dialog.fullheight {
height: calc(100% - 123px) !important;
top: 40px !important;
}
#me>.fakeme.avatar{
width:120px;
height:100%;
border-radius:0px;
top:0;
left:0;
background-size:cover;
clip-path: polygon(-10px 0, 130px 0, 130px 130px, -10px 130px);
-webkit-clip-path: polygon(-10px 0, 130px 0, 130px 130px, -10px 130px);
}
#window[data-radius_size='increase'] #me>.fakeme.avatar,
#window[data-radius_size='reduce'] #me>.fakeme.avatar{
border-radius:0px;
}
/*--------位置(8人)------*/
[data-number='8']>.player[data-position='1']{top:calc(55% - 135px);left:calc(100% - 150px);}
[data-number='8']>.player[data-position='2']{top:calc(10% - 50px);left:calc(100% - 150px);}
[data-number='8']>.player[data-position='3']{top:0;left:calc(75% - 112.5px);}
[data-number='8']>.player[data-position='4']{top:0;left:calc(50% - 75px);}
[data-number='8']>.player[data-position='5']{top:0;left:calc(25% - 37.5px);}
[data-number='8']>.player[data-position='6']{top:calc(10% - 50px);left:0;}
[data-number='8']>.player[data-position='7']{top:calc(55% - 135px);left:0;}
/*--------位置(7人)------*/
[data-number='7']>.player[data-position='1']{top:calc(55% - 135px);left:calc(100% - 150px);}
[data-number='7']>.player[data-position='2']{top:calc(10% - 50px);left:calc(100% - 150px);}
[data-number='7']>.player[data-position='3']{top:0;left:calc(62.5% - 75px);}
[data-number='7']>.player[data-position='4']{top:0;left:calc(37.5% - 75px);}
[data-number='7']>.player[data-position='5']{top:calc(10% - 50px);left:0;}
[data-number='7']>.player[data-position='6']{top:calc(55% - 135px);left:0;}
/*--------位置(6人)------*/
#arena[data-number='6']>.player[data-position='1']{top:calc(30% - 128px);left:calc(100% - 120px);}
#arena[data-number='6']>.player[data-position='2']{top:0px;left:calc(75% - 90px);}
#arena[data-number='6']>.player[data-position='3']{top:0;left:calc(50% - 60px);}
#arena[data-number='6']>.player[data-position='4']{top:0px;left:calc(25% - 30px);}
#arena[data-number='6']>.player[data-position='5']{top:calc(30% - 128px);left:0;}
/*--------位置(5人)------*/
#arena[data-number='5']>.player[data-position='1']{top:calc(30% - 128px);left:calc(100% - 120px);}
#arena[data-number='5']>.player[data-position='2']{top:0;left:calc(200% / 3 - 80px);}
#arena[data-number='5']>.player[data-position='3']{top:0;left:calc(100% / 3 - 40px);}
#arena[data-number='5']>.player[data-position='4']{top:calc(30% - 128px);left:0;}
/*--------位置(4人)------*/
#arena[data-number='4']>.player[data-position='1']{top:calc(30% - 128px);left:calc(100% - 120px);}
#arena[data-number='4']>.player[data-position='2']{top:0;left:calc(50% - 60px);}
#arena[data-number='4']>.player[data-position='3']{top:calc(30% - 128px);left:0;}
/*--------位置(3人)------*/
#arena[data-number='3']>.player[data-position='1']{top:calc(60% / 3 - 88px);left:calc(75% + 80px);}
#arena[data-number='3']>.player[data-position='2']{top:calc(60% / 3 - 88px);left:calc(25% - 200px);}
/*--------位置(2人)------*/
#arena[data-number='2']>.player[data-position='1']{top:0;left:calc(50% - 60px);}
/*--------位置(1人)------*/
.player[data-position='0']{top:calc(100% - 220px);left:0;}
#arena[data-player_height_nova="default"]>.player[data-position='0']:not(.minskin){
top: calc(100% - 236px);
}
[data-number='8'][data-player_height_nova="default"]>.player[data-position='1'],
[data-number='8'][data-player_height_nova="default"]>.player[data-position='7'],
[data-number='7'][data-player_height_nova="default"]>.player[data-position='1'],
[data-number='7'][data-player_height_nova="default"]>.player[data-position='6']{
top:calc(55% - 143px);
}
#arena[data-player_height_nova="default"]>.player:not(.minskin){
height: 196px !important;
}
#arena[data-player_height_nova="default"] .timerbar>div{
top: 181px;
}
#arena[data-player_height_nova="default"]>.player .avatar{
height:176px;
}
#arena.slim_player[data-player_height_nova="default"] .player:not(.minskin):not(.fakeme) .avatar{
height: 182px;
}
#arena.uslim_player[data-player_height_nova="default"] .player:not(.minskin):not(.fakeme) .avatar{
height: 190px;
}
#arena.mslim_player[data-player_height_nova="default"] .player:not(.minskin):not(.fakeme) .avatar{
height: 186px;
}
#arena[data-player_height_nova="default"]>.player.fullskin2 .avatar2{
height:176px;
}
#arena.slim_player[data-player_height_nova="default"]> .player.fullskin2:not(.minskin) .avatar2{
height: 182px;
}
#arena.uslim_player[data-player_height_nova="default"]> .player.fullskin2:not(.minskin) .avatar2{
height: 190px;
}
#arena.mslim_player[data-player_height_nova="default"]> .player.fullskin2:not(.minskin) .avatar2{
height: 186px;
}
#arena[data-player_height_nova="long"]>.player[data-position='0']:not(.minskin){
top: calc(100% - 250px);
}
[data-number='8'][data-player_height_nova="long"]>.player[data-position='1'],
[data-number='8'][data-player_height_nova="long"]>.player[data-position='7'],
[data-number='7'][data-player_height_nova="long"]>.player[data-position='1'],
[data-number='7'][data-player_height_nova="long"]>.player[data-position='6']{
top:calc(55% - 150px);
}
#arena[data-player_height_nova="long"]>.player:not(.minskin){
height: 210px !important;
}
#arena[data-player_height_nova="long"] .timerbar>div{
top: 195px;
}
#arena[data-player_height_nova="long"]>.player .avatar{
height:190px;
}
#arena.slim_player[data-player_height_nova="long"] .player:not(.minskin):not(.fakeme) .avatar{
height: 196px;
}
#arena.uslim_player[data-player_height_nova="long"] .player:not(.minskin):not(.fakeme) .avatar{
height: 204px;
}
#arena.mslim_player[data-player_height_nova="long"] .player:not(.minskin):not(.fakeme) .avatar{
height: 200px;
}
#arena[data-player_height_nova="long"]>.player.fullskin2 .avatar2{
height:190px;
}
#arena.slim_player[data-player_height_nova="long"]> .player.fullskin2:not(.minskin) .avatar2{
height: 196px;
}
#arena.uslim_player[data-player_height_nova="long"]> .player.fullskin2:not(.minskin) .avatar2{
height: 204px;
}
#arena.mslim_player[data-player_height_nova="long"]> .player.fullskin2:not(.minskin) .avatar2{
height: 200px;
}
#arena>.player:not(.minskin)>.avatar,
#arena>.player:not(.minskin)>.avatar2{
background-position: 50% 0 !important;
}
@import "../newlayout/layout.css";
#arena {
height: calc(95% + 20px);
}
#control {
width: calc(5000% / 47 - 240px);
left: calc(-150% / 47 + 120px);
bottom: 150px;
height: 40px;
}
#arena.phone #control {
bottom: 160px;
}
#arena.ipad #control {
bottom: 155px;
}
#arena:not(.chess) > #me,
#arena:not(.chess) > #mebg,
#arena:not(.chess) > #autonode {
bottom: 30px;
width: calc(5000% / 47);
left: calc(-150% / 47);
top: auto;
border-radius: 0 !important;
height: 120px;
}
#arena.oblongcard:not(.chess) > #me,
#arena.oblongcard:not(.chess) > #mebg,
#arena.oblongcard:not(.chess) > #autonode {
height: 140px;
}
#arena.oblongcard:not(.chess) > .card,
#arena.oblongcard:not(.chess) .handcards > .card {
height: 120px;
}
#arena.oblongcard:not(.chess) > .card > .image,
#arena.oblongcard:not(.chess) .handcards > .card > .image {
height: 110px;
top: 8px;
background-position-x: -3px;
}
#arena.oblongcard:not(.chess) #handcards1 {
height: 100%;
top: 2px;
}
#arena.oblongcard:not(.chess):not(.choose-character) #control {
bottom: 165px;
}
#arena.phone.oblongcard:not(.chess):not(.choose-character) #control {
bottom: 180px;
}
#arena:not(.chess) > #autonode {
width: calc(5000% / 47 - 240px);
left: calc(-150% / 47 + 120px);
}
#arena:not(.mobile).single-handcard #handcards1 {
width: calc(100% - 120px);
}
#window.rightbar #system,
#window.leftbar #system {
width: calc(100% - 62px);
}
#window.leftbar #system {
left: 50px;
}
#window.rightbar #historybar {
left: calc(100% - 50px);
border-radius: 0;
top: 0;
height: 100%;
}
#window.leftbar #historybar {
left: 0;
border-radius: 0;
top: 0;
height: 100%;
}
#window.single-handcard #historybar {
height: calc(100% - 121px);
}
#window.oblongcard.single-handcard #historybar {
height: calc(100% - 141px);
}
#window.leftbar #arena:not(.chess) > #me,
#window.leftbar #arena:not(.chess) > #mebg,
#window.leftbar #arena:not(.chess) > #autonode {
width: calc(5000% / 47 + 2500px / 47);
left: calc(-150% / 47 - 50px - 75px / 47);
}
#window.leftbar #arena:not(.chess) > #autonode {
width: calc(5000% / 47 + 2500px / 47 - 240px);
left: calc(-150% / 47 - 50px - 75px / 47 + 120px);
}
#window.rightbar #arena:not(.chess) > #me,
#window.rightbar #arena:not(.chess) > #mebg,
#window.rightbar #arena:not(.chess) > #autonode {
width: calc(5000% / 47 + 2500px / 47);
left: calc(-150% / 47 - 75px / 47);
}
#window.rightbar #arena:not(.chess) > #autonode {
width: calc(5000% / 47 + 2500px / 47 - 240px);
left: calc(-150% / 47 - 75px / 47 + 120px);
}
#arena:not(.chess) #handcards1 {
height: 120px;
padding: 0;
top: calc(100% - 120px);
}
#arena:not(.chess) #handcards1.scrollh {
top: calc(100% - 180px);
height: 180px;
}
#arena:not(.chess).oblongcard #handcards1.scrollh {
top: calc(100% - 200px);
height: 200px;
}
#arena:not(.chess) #handcards1.scrollh > div {
height: 120px;
top: 60px;
}
#arena:not(.chess).oblongcard #handcards1.scrollh > div {
top: 62px;
}
#arena:not(.chess):not(.single-handcard) #handcards1 {
width: calc(100% - 240px);
left: calc(150% / 47 - 300% / 94 + 625% / 47 - 105px + 120px);
}
#arena:not(.single-handcard):not(.chess) > #me,
#arena:not(.single-handcard):not(.chess) > #mebg,
#arena:not(.single-handcard):not(.chess) > #autonode {
left: 0 !important;
bottom: 38px !important;
width: calc(9700% / 94) !important;
}
#arena:not(.single-handcard):not(.chess) > #mebg {
visibility: hidden;
}
#arena:not(.single-handcard):not(.chess) > #me #handcards1 {
left: 150px !important;
width: calc(100% - 150px) !important;
}
#arena:not(.single-handcard):not(.chess) > #me #handcards1 > .handcards {
left: 0 !important;
}
#autonode {
display: table !important;
}
@media screen and (max-width: 1105px) {
#arena[data-number="8"]:not(.single-handcard):not(.chess) > #me,
#arena[data-number="8"]:not(.single-handcard):not(.chess) > #mebg,
#arena[data-number="8"]:not(.single-handcard):not(.chess) > #autonode {
left: calc(-300% / 94 + 625% / 47 - 105px) !important;
width: calc(9700% / 94 + 300% / 94 - 625% / 47 + 105px) !important;
}
}
#handcards2 {
display: none;
}
.dialog {
height: calc(100% - 370px);
bottom: 170px;
}
#arena.choose-character > .dialog .placeholder + .placeholder {
display: none;
}
#arena.choose-character > .dialog .placeholder {
margin-bottom: 4px;
height: 0px;
}
#arena.choose-character > .dialog.noupdate .placeholder {
margin-bottom: 0;
height: 0;
}
#arena.choose-character > .dialog {
height: calc(100% - 280px);
bottom: 80px;
}
#arena.choose-character > .dialog.scroll3 {
height: calc(100% - 240px);
}
#arena.phone.choose-character > .dialog {
bottom: 93px;
}
#arena.ipad.choose-character > .dialog {
bottom: 96px;
}
#arena.discard-player-card > #control,
#arena.gain-player-card > #control,
#arena.choose-player-card > #control,
#arena.choose-to-move > #control,
#arena.choose-character > #control {
bottom: 30px;
transition: all 0s;
}
#arena.phone.discard-player-card > #control,
#arena.phone.gain-player-card > #control,
#arena.phone.choose-player-card > #control,
#arena.phone.choose-to-move > #control,
#arena.phone.choose-character > #control {
bottom: 43px;
}
#arena.ipad.discard-player-card > #control,
#arena.ipad.gain-player-card > #control,
#arena.ipad.choose-player-card > #control,
#arena.ipad.choose-to-move > #control,
#arena.ipad.choose-character > #control {
bottom: 45px;
}
.dialog.fullheight {
height: calc(100% - 123px) !important;
top: 40px !important;
}
#me > .fakeme.avatar {
width: 120px;
height: 100%;
border-radius: 0px;
top: 0;
left: 0;
background-size: cover;
clip-path: polygon(-10px 0, 130px 0, 130px 130px, -10px 130px);
-webkit-clip-path: polygon(-10px 0, 130px 0, 130px 130px, -10px 130px);
}
#window[data-radius_size="increase"] #me > .fakeme.avatar,
#window[data-radius_size="reduce"] #me > .fakeme.avatar {
border-radius: 0px;
}
/*--------位置(8人)------*/
[data-number="8"] > .player[data-position="1"] {
top: calc(55% - 135px);
left: calc(100% - 150px);
}
[data-number="8"] > .player[data-position="2"] {
top: calc(10% - 50px);
left: calc(100% - 150px);
}
[data-number="8"] > .player[data-position="3"] {
top: 0;
left: calc(75% - 112.5px);
}
[data-number="8"] > .player[data-position="4"] {
top: 0;
left: calc(50% - 75px);
}
[data-number="8"] > .player[data-position="5"] {
top: 0;
left: calc(25% - 37.5px);
}
[data-number="8"] > .player[data-position="6"] {
top: calc(10% - 50px);
left: 0;
}
[data-number="8"] > .player[data-position="7"] {
top: calc(55% - 135px);
left: 0;
}
/*--------位置(7人)------*/
[data-number="7"] > .player[data-position="1"] {
top: calc(55% - 135px);
left: calc(100% - 150px);
}
[data-number="7"] > .player[data-position="2"] {
top: calc(10% - 50px);
left: calc(100% - 150px);
}
[data-number="7"] > .player[data-position="3"] {
top: 0;
left: calc(62.5% - 75px);
}
[data-number="7"] > .player[data-position="4"] {
top: 0;
left: calc(37.5% - 75px);
}
[data-number="7"] > .player[data-position="5"] {
top: calc(10% - 50px);
left: 0;
}
[data-number="7"] > .player[data-position="6"] {
top: calc(55% - 135px);
left: 0;
}
/*--------位置(6人)------*/
#arena[data-number="6"] > .player[data-position="1"] {
top: calc(30% - 128px);
left: calc(100% - 120px);
}
#arena[data-number="6"] > .player[data-position="2"] {
top: 0px;
left: calc(75% - 90px);
}
#arena[data-number="6"] > .player[data-position="3"] {
top: 0;
left: calc(50% - 60px);
}
#arena[data-number="6"] > .player[data-position="4"] {
top: 0px;
left: calc(25% - 30px);
}
#arena[data-number="6"] > .player[data-position="5"] {
top: calc(30% - 128px);
left: 0;
}
/*--------位置(5人)------*/
#arena[data-number="5"] > .player[data-position="1"] {
top: calc(30% - 128px);
left: calc(100% - 120px);
}
#arena[data-number="5"] > .player[data-position="2"] {
top: 0;
left: calc(200% / 3 - 80px);
}
#arena[data-number="5"] > .player[data-position="3"] {
top: 0;
left: calc(100% / 3 - 40px);
}
#arena[data-number="5"] > .player[data-position="4"] {
top: calc(30% - 128px);
left: 0;
}
/*--------位置(4人)------*/
#arena[data-number="4"] > .player[data-position="1"] {
top: calc(30% - 128px);
left: calc(100% - 120px);
}
#arena[data-number="4"] > .player[data-position="2"] {
top: 0;
left: calc(50% - 60px);
}
#arena[data-number="4"] > .player[data-position="3"] {
top: calc(30% - 128px);
left: 0;
}
/*--------位置(3人)------*/
#arena[data-number="3"] > .player[data-position="1"] {
top: calc(60% / 3 - 88px);
left: calc(75% + 80px);
}
#arena[data-number="3"] > .player[data-position="2"] {
top: calc(60% / 3 - 88px);
left: calc(25% - 200px);
}
/*--------位置(2人)------*/
#arena[data-number="2"] > .player[data-position="1"] {
top: 0;
left: calc(50% - 60px);
}
/*--------位置(1人)------*/
.player[data-position="0"] {
top: calc(100% - 220px);
left: 0;
}
#arena[data-player_height_nova="default"] > .player[data-position="0"]:not(.minskin) {
top: calc(100% - 236px);
}
[data-number="8"][data-player_height_nova="default"] > .player[data-position="1"],
[data-number="8"][data-player_height_nova="default"] > .player[data-position="7"],
[data-number="7"][data-player_height_nova="default"] > .player[data-position="1"],
[data-number="7"][data-player_height_nova="default"] > .player[data-position="6"] {
top: calc(55% - 143px);
}
#arena[data-player_height_nova="default"] > .player:not(.minskin) {
height: 196px !important;
}
#arena[data-player_height_nova="default"] .timerbar > div {
top: 181px;
}
#arena[data-player_height_nova="default"] > .player .avatar {
height: 176px;
}
#arena.slim_player[data-player_height_nova="default"] .player:not(.minskin):not(.fakeme) .avatar {
height: 182px;
}
#arena.uslim_player[data-player_height_nova="default"] .player:not(.minskin):not(.fakeme) .avatar {
height: 190px;
}
#arena.mslim_player[data-player_height_nova="default"] .player:not(.minskin):not(.fakeme) .avatar {
height: 186px;
}
#arena[data-player_height_nova="default"] > .player.fullskin2 .avatar2 {
height: 176px;
}
#arena.slim_player[data-player_height_nova="default"] > .player.fullskin2:not(.minskin) .avatar2 {
height: 182px;
}
#arena.uslim_player[data-player_height_nova="default"] > .player.fullskin2:not(.minskin) .avatar2 {
height: 190px;
}
#arena.mslim_player[data-player_height_nova="default"] > .player.fullskin2:not(.minskin) .avatar2 {
height: 186px;
}
#arena[data-player_height_nova="long"] > .player[data-position="0"]:not(.minskin) {
top: calc(100% - 250px);
}
[data-number="8"][data-player_height_nova="long"] > .player[data-position="1"],
[data-number="8"][data-player_height_nova="long"] > .player[data-position="7"],
[data-number="7"][data-player_height_nova="long"] > .player[data-position="1"],
[data-number="7"][data-player_height_nova="long"] > .player[data-position="6"] {
top: calc(55% - 150px);
}
#arena[data-player_height_nova="long"] > .player:not(.minskin) {
height: 210px !important;
}
#arena[data-player_height_nova="long"] .timerbar > div {
top: 195px;
}
#arena[data-player_height_nova="long"] > .player .avatar {
height: 190px;
}
#arena.slim_player[data-player_height_nova="long"] .player:not(.minskin):not(.fakeme) .avatar {
height: 196px;
}
#arena.uslim_player[data-player_height_nova="long"] .player:not(.minskin):not(.fakeme) .avatar {
height: 204px;
}
#arena.mslim_player[data-player_height_nova="long"] .player:not(.minskin):not(.fakeme) .avatar {
height: 200px;
}
#arena[data-player_height_nova="long"] > .player.fullskin2 .avatar2 {
height: 190px;
}
#arena.slim_player[data-player_height_nova="long"] > .player.fullskin2:not(.minskin) .avatar2 {
height: 196px;
}
#arena.uslim_player[data-player_height_nova="long"] > .player.fullskin2:not(.minskin) .avatar2 {
height: 204px;
}
#arena.mslim_player[data-player_height_nova="long"] > .player.fullskin2:not(.minskin) .avatar2 {
height: 200px;
}
#arena > .player:not(.minskin) > .avatar,
#arena > .player:not(.minskin) > .avatar2 {
background-position: 50% 0 !important;
}

15065
mode/boss.js

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,182 +1,208 @@
'use strict';
game.import('mode',function(lib,game,ui,get,ai,_status){
return {
name:'connect',
start:function(){
var directstartmode=lib.config.directstartmode;
ui.create.menu(true);
event.textnode=ui.create.div('','输入联机地址');
var createNode=function(){
if(event.created) return;
if(directstartmode&&lib.node){
ui.exitroom=ui.create.system('退出房间',function(){
game.saveConfig('directstartmode');
game.reload();
},true);
game.switchMode(directstartmode);
return;
}
if(lib.node&&window.require){
ui.startServer=ui.create.system('启动服务器',function(e){
ui.click.shortcut(false);
e.stopPropagation();
ui.click.connectMenu();
},true);
}
event.created=true;
var node=ui.create.div('.shadowed');
node.style.width='400px';
node.style.height='30px';
node.style.lineHeight='30px';
node.style.fontFamily='xinwei';
node.style.fontSize='30px';
node.style.padding='10px';
node.style.left='calc(50% - 210px)';
node.style.top='calc(50% - 20px)';
node.style.whiteSpace='nowrap';
node.textContent=lib.config.last_ip||lib.hallURL;
node.contentEditable=true;
node.style.webkitUserSelect='text';
node.style.textAlign='center';
node.style.overflow='hidden';
var connect=function(e){
event.textnode.textContent='正在连接...';
clearTimeout(event.timeout);
if(e) e.preventDefault();
game.saveConfig('last_ip',node.textContent);
game.connect(node.textContent,function(success){
if(success){
var info=lib.config.reconnect_info;
if(info&&info[0]==_status.ip){
game.onlineID=info[1];
if(typeof (game.roomId=info[2])=='string') game.roomIdServer=true;
}
return;
}
if(event.textnode){
alert('连接失败');
event.textnode.textContent='输入联机地址';
}
});
};
node.addEventListener('keydown',function(e){
if(e.keyCode==13){
connect(e);
}
});
ui.window.appendChild(node);
ui.ipnode=node;
var text=event.textnode;
text.style.width='400px';
text.style.height='30px';
text.style.lineHeight='30px';
text.style.fontFamily='xinwei';
text.style.fontSize='30px';
text.style.padding='10px';
text.style.left='calc(50% - 200px)';
text.style.top='calc(50% - 80px)';
text.style.textAlign='center';
ui.window.appendChild(text);
ui.iptext=text;
var button=ui.create.div('.menubutton.highlight.large.pointerdiv','连接',connect);
button.style.width='70px';
button.style.left='calc(50% - 35px)';
button.style.top='calc(50% + 60px)';
ui.window.appendChild(button);
ui.ipbutton=button;
ui.hall_button=ui.create.system('联机大厅',function(){
node.textContent=get.config('hall_ip')||lib.hallURL;
connect();
},true);
if(!get.config('hall_button')){
ui.hall_button.style.display='none';
}
ui.recentIP=ui.create.system('最近连接',null,true);
var clickLink=function(){
node.textContent=this.textContent;
connect();
};
lib.setPopped(ui.recentIP,function(){
if(!lib.config.recentIP.length) return;
var uiintro=ui.create.dialog('hidden');
uiintro.listen(function(e){
e.stopPropagation();
});
var list=ui.create.div('.caption');
for(var i=0;i<lib.config.recentIP.length;i++){
ui.create.div('.text.textlink',list,clickLink).textContent=get.trimip(lib.config.recentIP[i]);
}
uiintro.add(list);
var clear=uiintro.add('<div class="text center">清除</div>');
clear.style.paddingTop=0;
clear.style.paddingBottom='3px';
clear.listen(function(){
lib.config.recentIP.length=0;
game.saveConfig('recentIP',[]);
uiintro.delete();
});
return uiintro;
},220);
if (get.config('read_clipboard','connect')){
var ced=false;
var read=text=>{
try{
var text2=text.split('\n')[2];
var ip=text2.slice(5);
if(ip.length>0&&text2.startsWith("联机地址:")&&(ced||confirm('是否根据剪贴板的邀请链接以进入联机地址和房间?'))){
node.innerHTML=ip;
event.textnode.innerHTML='正在连接...';
clearTimeout(event.timeout);
game.saveConfig('last_ip',node.innerHTML);
game.connect(node.innerHTML,function(success){
if(!success&&event.textnode){
alert('邀请链接解析失败');
event.textnode.innerHTML='输入联机地址';
}
if (success) _status.read_clipboard_text=text;
});
}
}catch(e){console.log(e);}
}
window.focus();
if (navigator.clipboard&&lib.node){
navigator.clipboard.readText().then(read).catch(_=>{});
}else{
var input=ui.create.node('textarea',ui.window,{opacity:'0'});
input.select();
var result=document.execCommand('paste');
input.blur();
ui.window.removeChild(input);
if(result||input.value.length>0) read(input.value);
else if(confirm('是否输入邀请链接以进入联机地址和房间?')){
ced=true;
var text=prompt('请输入邀请链接');
if(typeof text=='string'&&text.length>0) read(text);
}
}
}
lib.init.onfree();
}
if(window.isNonameServer){
game.connect(window.isNonameServerIp||'localhost');
}
else{
createNode();
}
if(!game.onlineKey){
game.onlineKey=localStorage.getItem(lib.configprefix+'key');
if(!game.onlineKey){
game.onlineKey=get.id();
localStorage.setItem(lib.configprefix+'key',game.onlineKey);
}
}
_status.connectDenied=createNode;
setTimeout(lib.init.onfree,1000);
}
};
});
"use strict";
game.import("mode", function (lib, game, ui, get, ai, _status) {
return {
name: "connect",
start: function () {
var directstartmode = lib.config.directstartmode;
ui.create.menu(true);
event.textnode = ui.create.div("", "输入联机地址");
var createNode = function () {
if (event.created) return;
if (directstartmode && lib.node) {
ui.exitroom = ui.create.system(
"退出房间",
function () {
game.saveConfig("directstartmode");
game.reload();
},
true
);
game.switchMode(directstartmode);
return;
}
if (lib.node && window.require) {
ui.startServer = ui.create.system(
"启动服务器",
function (e) {
ui.click.shortcut(false);
e.stopPropagation();
ui.click.connectMenu();
},
true
);
}
event.created = true;
var node = ui.create.div(".shadowed");
node.style.width = "400px";
node.style.height = "30px";
node.style.lineHeight = "30px";
node.style.fontFamily = "xinwei";
node.style.fontSize = "30px";
node.style.padding = "10px";
node.style.left = "calc(50% - 210px)";
node.style.top = "calc(50% - 20px)";
node.style.whiteSpace = "nowrap";
node.textContent = lib.config.last_ip || lib.hallURL;
node.contentEditable = true;
node.style.webkitUserSelect = "text";
node.style.textAlign = "center";
node.style.overflow = "hidden";
var connect = function (e) {
event.textnode.textContent = "正在连接...";
clearTimeout(event.timeout);
if (e) e.preventDefault();
game.saveConfig("last_ip", node.textContent);
game.connect(node.textContent, function (success) {
if (success) {
var info = lib.config.reconnect_info;
if (info && info[0] == _status.ip) {
game.onlineID = info[1];
if (typeof (game.roomId = info[2]) == "string") game.roomIdServer = true;
}
return;
}
if (event.textnode) {
alert("连接失败");
event.textnode.textContent = "输入联机地址";
}
});
};
node.addEventListener("keydown", function (e) {
if (e.keyCode == 13) {
connect(e);
}
});
ui.window.appendChild(node);
ui.ipnode = node;
var text = event.textnode;
text.style.width = "400px";
text.style.height = "30px";
text.style.lineHeight = "30px";
text.style.fontFamily = "xinwei";
text.style.fontSize = "30px";
text.style.padding = "10px";
text.style.left = "calc(50% - 200px)";
text.style.top = "calc(50% - 80px)";
text.style.textAlign = "center";
ui.window.appendChild(text);
ui.iptext = text;
var button = ui.create.div(".menubutton.highlight.large.pointerdiv", "连接", connect);
button.style.width = "70px";
button.style.left = "calc(50% - 35px)";
button.style.top = "calc(50% + 60px)";
ui.window.appendChild(button);
ui.ipbutton = button;
ui.hall_button = ui.create.system(
"联机大厅",
function () {
node.textContent = get.config("hall_ip") || lib.hallURL;
connect();
},
true
);
if (!get.config("hall_button")) {
ui.hall_button.style.display = "none";
}
ui.recentIP = ui.create.system("最近连接", null, true);
var clickLink = function () {
node.textContent = this.textContent;
connect();
};
lib.setPopped(
ui.recentIP,
function () {
if (!lib.config.recentIP.length) return;
var uiintro = ui.create.dialog("hidden");
uiintro.listen(function (e) {
e.stopPropagation();
});
var list = ui.create.div(".caption");
for (var i = 0; i < lib.config.recentIP.length; i++) {
ui.create.div(".text.textlink", list, clickLink).textContent = get.trimip(
lib.config.recentIP[i]
);
}
uiintro.add(list);
var clear = uiintro.add('<div class="text center">清除</div>');
clear.style.paddingTop = 0;
clear.style.paddingBottom = "3px";
clear.listen(function () {
lib.config.recentIP.length = 0;
game.saveConfig("recentIP", []);
uiintro.delete();
});
return uiintro;
},
220
);
if (get.config("read_clipboard", "connect")) {
var ced = false;
var read = (text) => {
try {
var text2 = text.split("\n")[2];
var ip = text2.slice(5);
if (
ip.length > 0 &&
text2.startsWith("联机地址:") &&
(ced || confirm("是否根据剪贴板的邀请链接以进入联机地址和房间?"))
) {
node.innerHTML = ip;
event.textnode.innerHTML = "正在连接...";
clearTimeout(event.timeout);
game.saveConfig("last_ip", node.innerHTML);
game.connect(node.innerHTML, function (success) {
if (!success && event.textnode) {
alert("邀请链接解析失败");
event.textnode.innerHTML = "输入联机地址";
}
if (success) _status.read_clipboard_text = text;
});
}
} catch (e) {
console.log(e);
}
};
window.focus();
if (navigator.clipboard && lib.node) {
navigator.clipboard
.readText()
.then(read)
.catch((_) => {});
} else {
var input = ui.create.node("textarea", ui.window, { opacity: "0" });
input.select();
var result = document.execCommand("paste");
input.blur();
ui.window.removeChild(input);
if (result || input.value.length > 0) read(input.value);
else if (confirm("是否输入邀请链接以进入联机地址和房间?")) {
ced = true;
var text = prompt("请输入邀请链接");
if (typeof text == "string" && text.length > 0) read(text);
}
}
}
lib.init.onfree();
};
if (window.isNonameServer) {
game.connect(window.isNonameServerIp || "localhost");
} else {
createNode();
}
if (!game.onlineKey) {
game.onlineKey = localStorage.getItem(lib.configprefix + "key");
if (!game.onlineKey) {
game.onlineKey = get.id();
localStorage.setItem(lib.configprefix + "key", game.onlineKey);
}
}
_status.connectDenied = createNode;
setTimeout(lib.init.onfree, 1000);
},
};
});

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,8 @@
'use strict';
game.import('mode',function(lib,game,ui,get,ai,_status){
return {
name:'realtime',
start:function(){
},
game:{
}
};
});
"use strict";
game.import("mode", function (lib, game, ui, get, ai, _status) {
return {
name: "realtime",
start: function () {},
game: {},
};
});

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More