noname/mode/brawl.js

5034 lines
163 KiB
JavaScript
Raw Normal View History

2016-08-15 14:19:58 +00:00
'use strict';
2017-04-17 05:18:46 +00:00
game.import('mode',function(lib,game,ui,get,ai,_status){
2017-04-15 00:25:50 +00:00
return {
name:'brawl',
2018-04-17 07:32:43 +00:00
game:{
syncMenu:true,
},
start:function(){
ui.auto.hide();
if(!lib.storage.scene){
lib.storage.scene={};
}
if(!lib.storage.stage){
lib.storage.stage={};
}
if(!_status.extensionmade){
_status.extensionmade=[];
}
if(_status.extensionscene){
game.save('scene',lib.storage.scene);
}
if(_status.extensionstage){
game.save('stage',lib.storage.stage);
}
var dialog=ui.create.dialog('hidden');
dialog.classList.add('fixed');
dialog.classList.add('scroll1');
dialog.classList.add('scroll2');
dialog.classList.add('fullwidth');
dialog.classList.add('fullheight');
dialog.classList.add('noupdate');
dialog.classList.add('character');
dialog.contentContainer.style.overflow='visible';
dialog.style.overflow='hidden';
dialog.content.style.height='100%';
dialog.contentContainer.style.transition='all 0s';
if(!lib.storage.directStage) dialog.open();
var packnode=ui.create.div('.packnode',dialog);
lib.setScroll(packnode);
var clickCapt=function(){
var active=this.parentNode.querySelector('.active');
if(this.link=='stage'){
if(get.is.empty(lib.storage.scene)){
alert('请创建至少1个场景');
return;
}
}
if(active){
if(active==this) return;
for(var i=0;i<active.nodes.length;i++){
active.nodes[i].remove();
if(active.nodes[i].showcaseinterval){
clearInterval(active.nodes[i].showcaseinterval);
delete active.nodes[i].showcaseinterval;
}
}
active.classList.remove('active');
}
this.classList.add('active');
for(var i=0;i<this.nodes.length;i++){
dialog.content.appendChild(this.nodes[i]);
}
var showcase=this.nodes[this.nodes.length-1];
showcase.style.height=(dialog.content.offsetHeight-showcase.offsetTop)+'px';
if(typeof showcase.action=='function'){
if(showcase.action(showcase._showcased?false:true)!==false){
showcase._showcased=true;
}
}
if(this._nostart) start.style.display='none';
else start.style.display='';
game.save('currentBrawl',this.link);
}
var createNode=function(name){
var info=lib.brawl[name];
var node=ui.create.div('.dialogbutton.menubutton.large',info.name,packnode,clickCapt);
node.style.transition='all 0s';
var caption=info.name;
var modeinfo='';
if(info.mode){
modeinfo=get.translation(info.mode)+'模式';
}
if(info.submode){
if(modeinfo){
modeinfo+=' - ';
}
modeinfo+=info.submode;
}
var intro;
if(Array.isArray(info.intro)){
intro='<ul style="text-align:left;margin-top:0;width:450px">';
if(modeinfo){
intro+='<li>'+modeinfo;
}
for(var i=0;i<info.intro.length;i++){
intro+='<li>'+info.intro[i];
}
}
else{
intro='';
if(modeinfo){
intro+=''+modeinfo+'';
}
intro+=info.intro;
}
var showcase=ui.create.div();
showcase.style.margin='0px';
showcase.style.padding='0px';
showcase.style.width='100%';
showcase.style.display='block'
showcase.action=info.showcase;
showcase.link=name;
if(info.fullshow){
node.nodes=[showcase];
showcase.style.height='100%';
}
else{
node.nodes=[
ui.create.div('.caption',caption),
ui.create.div('.text center',intro),
showcase
];
}
node.link=name;
node._nostart=info.nostart;
if(lib.storage.currentBrawl==name){
clickCapt.call(node);
}
return node;
}
var clickStart=function(){
var active=packnode.querySelector('.active');
if(active){
for(var i=0;i<active.nodes.length;i++){
if(active.nodes[i].showcaseinterval){
clearInterval(active.nodes[i].showcaseinterval);
delete active.nodes[i].showcaseinterval;
}
}
var info;
if(active.link.indexOf('stage_')==0){
var level;
if(Array.isArray(arguments[0])){
level={index:arguments[0][1]};
}
else{
level=dialog.content.querySelector('.menubutton.large.active');
}
if(level){
var stagesave=lib.storage.stage;
var stage=stagesave[active.link.slice(6)];
game.save('lastStage',level.index);
lib.onover.push(function(bool){
_status.createControl=ui.controls[0];
if(bool&&level.index+1<stage.scenes.length){
ui.create.control('下一关',function(){
game.save('directStage',[stage.name,level.index+1],'brawl');
localStorage.setItem(lib.configprefix+'directstart',true);
game.reload();
});
if(level.index+1>stage.level){
stage.level=level.index+1;
game.save('stage',stagesave,'brawl');
}
if(stage.mode!='sequal'){
game.save('lastStage',level.index+1,'brawl');
}
}
else{
ui.create.control('重新开始',function(){
if(stage.mode=='sequal'&&bool&&level.index==stage.scenes.length-1){
game.save('directStage',[stage.name,0],'brawl');
}
else{
game.save('directStage',[stage.name,level.index],'brawl');
}
localStorage.setItem(lib.configprefix+'directstart',true);
game.reload();
});
if(stage.mode=='sequal'&&level.index==stage.scenes.length-1){
stage.level=0;
game.save('stage',stagesave,'brawl');
}
if(stage.mode!='sequal'){
game.save('lastStage',level.index,'brawl');
}
}
delete _status.createControl;
});
var scene=stage.scenes[level.index];
info={
name:scene.name,
intro:scene.intro,
};
for(var i in lib.brawl.scene.template){
info[i]=get.copy(lib.brawl.scene.template[i]);
}
if(!scene.gameDraw){
info.content.noGameDraw=true;
}
info.content.scene=scene;
}
else{
return;
}
}
else{
info=lib.brawl[active.link];
}
lib.translate.restart='返回';
dialog.delete();
ui.brawlinfo=ui.create.system('乱斗',null,true);
lib.setPopped(ui.brawlinfo,function(){
var uiintro=ui.create.dialog('hidden');
uiintro.add(info.name);
var intro;
if(Array.isArray(info.intro)){
intro='<ul style="text-align:left;margin-top:0;width:450px">';
for(var i=0;i<info.intro.length;i++){
intro+='<li>'+info.intro[i];
}
intro+='</ul>'
}
else{
intro=info.intro;
}
uiintro.add('<div class="text center">'+intro+'</div>');
var ul=uiintro.querySelector('ul');
if(ul){
ul.style.width='180px';
}
uiintro.add(ui.create.div('.placeholder'));
return uiintro;
},250);
ui.auto.show();
_status.brawl=info.content;
game.switchMode(info.mode);
if(info.init){
info.init();
}
}
};
var start=ui.create.div('.menubutton.round.highlight','斗',dialog.content,clickStart);
start.style.position='absolute';
start.style.left='auto';
start.style.right='10px';
start.style.top='auto';
start.style.bottom='10px';
start.style.width='80px';
start.style.height='80px';
start.style.lineHeight='80px';
start.style.margin='0';
start.style.padding='5px';
start.style.fontSize='72px';
start.style.zIndex=3;
start.style.transition='all 0s';
game.addScene=function(name,clear){
var scene=lib.storage.scene[name];
var brawl={
name:name,
intro:scene.intro,
};
for(var i in lib.brawl.scene.template){
brawl[i]=get.copy(lib.brawl.scene.template[i]);
}
if(!scene.gameDraw){
brawl.content.noGameDraw=true;
}
brawl.content.scene=scene;
lib.brawl['scene_'+name]=brawl;
var node=createNode('scene_'+name);
if(clear){
game.addSceneClear();
clickCapt.call(node);
_status.sceneChanged=true;
}
};
game.addStage=function(name,clear){
var stage=lib.storage.stage[name];
var brawl={
name:name,
intro:stage.intro,
content:{}
};
for(var i in lib.brawl.stage.template){
brawl[i]=get.copy(lib.brawl.stage.template[i]);
}
brawl.content.stage=stage;
lib.brawl['stage_'+name]=brawl;
var node=createNode('stage_'+name);
if(clear){
game.addStageClear();
clickCapt.call(node);
}
}
game.removeScene=function(name){
delete lib.storage.scene[name];
game.save('scene',lib.storage.scene);
_status.sceneChanged=true;
for(var i=0;i<packnode.childElementCount;i++){
if(packnode.childNodes[i].link=='scene_'+name){
if(packnode.childNodes[i].classList.contains('active')){
for(var j=0;j<packnode.childElementCount;j++){
if(packnode.childNodes[j].link=='scene'){
clickCapt.call(packnode.childNodes[j]);
}
}
}
packnode.childNodes[i].remove();
break;
}
}
}
game.removeStage=function(name){
delete lib.storage.stage[name];
game.save('stage',lib.storage.stage);
for(var i=0;i<packnode.childElementCount;i++){
if(packnode.childNodes[i].link=='stage_'+name){
if(packnode.childNodes[i].classList.contains('active')){
for(var j=0;j<packnode.childElementCount;j++){
if(get.is.empty(lib.storage.scene)){
if(packnode.childNodes[j].link=='scene'){
clickCapt.call(packnode.childNodes[j]);
}
}
else{
if(packnode.childNodes[j].link=='stage'){
clickCapt.call(packnode.childNodes[j]);
}
}
}
}
packnode.childNodes[i].remove();
break;
}
}
}
var sceneNode;
for(var i in lib.brawl){
if(get.config(i)===false) continue;
if(i=='scene'){
sceneNode=createNode(i);
}
else{
createNode(i);
}
}
if(sceneNode){
game.switchScene=function(){
clickCapt.call(sceneNode);
}
}
for(var i in lib.storage.scene){
game.addScene(i);
}
for(var i in lib.storage.stage){
game.addStage(i);
}
if(!lib.storage.currentBrawl){
clickCapt.call(packnode.firstChild);
}
game.save('lastStage');
if(lib.storage.directStage){
var directStage=lib.storage.directStage;
game.save('directStage');
clickStart(directStage);
}
lib.init.onfree();
},
brawl:{
2020-01-11 12:17:57 +00:00
huanhuazhizhan:{
name:'幻化之战',
mode:'identity',
intro:[
2020-01-13 15:22:52 +00:00
'杀死所有其他角色,成为最后的存活者',
'所有角色改为四血白板,依靠灵力值获得技能。灵力值可以通过各种方式获得',
2020-01-11 12:17:57 +00:00
],
showcase:function(init){
if(init){
this.nodes=[];
}
else{
while(this.nodes.length){
this.nodes.shift().remove();
}
}
var lx=this.offsetWidth/2-120;
var ly=Math.min(lx,this.offsetHeight/2-60);
var setPos=function(node){
var i=node.index;
var deg=Math.PI/4*i;
var dx=Math.round(lx*Math.cos(deg));
var dy=Math.round(ly*Math.sin(deg));
node.style.transform='translate('+dx+'px,'+dy+'px)';
}
var characterz=['guyong','litong','mazhong','fuwan','chengpu','liaohua','xinxianying','liuyu'];
for(var i=0;i<8;i++){
var node=ui.create.player(null,true);
this.nodes.push(node);
node.init(characterz[i]);
node.classList.add('minskin');
node.node.marks.remove();
node.node.hp.remove();
node.node.count.remove();
node.style.left='calc(50% - 60px)';
node.style.top='calc(50% - 60px)';
node.index=i;
node.style.borderRadius='100%';
node.node.avatar.style.borderRadius='100%';
node.node.name.remove();
setPos(node);
this.appendChild(node);
}
var nodes=this.nodes;
this.showcaseinterval=setInterval(function(){
for(var i=0;i<nodes.length;i++){
nodes[i].index++;
if(nodes[i].index>7){
nodes[i].index=0;
}
setPos(nodes[i]);
}
},1000);
},
init:function(){},
content:{
2020-08-11 13:05:00 +00:00
submode:'normal',
2020-01-11 12:17:57 +00:00
chooseCharacterBefore:function(){
2020-04-03 12:09:26 +00:00
game.identityVideoName='幻化之战';
2020-01-11 12:17:57 +00:00
var skills=[];
2020-01-13 15:22:52 +00:00
var banned=[
'xinfu_guhuo','reguhuo','jixi','duanchang','huashen','xinsheng','rehuashen','rexinsheng',
'jinqu','nzry_binglve','nzry_huaiju','nzry_yili','nzry_zhenglun','nzry_mingren','nzry_zhenliang','drlt_qingce',
'new_wuhun','qixing','kuangfeng','dawu','baonu','wumou','ol_wuqian','ol_shenfen','renjie','jilue','nzry_junlve','nzry_dinghuo','drlt_duorui',
'chuanxin','cunsi',
'jueqing','huilei','paiyi','fuhun','zhuiyi','olddanshou','yanzhu','juexiang','jiexun','bizhuan','tongbo',
'xinfu_zhanji','xinfu_jijun','xinfu_fangtong',
'xinfu_qianchong','pdgyinshi','shuliang',
'zongkui','guju','bmcanshi','dingpan','xinfu_lingren','new_luoyan','junwei','gxlianhua',
'qizhou','fenyue','dianhu','linglong','fenxin','mouduan',
'cuorui','xinmanjuan','xinfu_jianjie','jianjie_faq','new_meibu','xinfu_xingzhao','jici',
'xianfu','fenyong','xuehen','yingbin','midao','yishe','yinbing','juedi',
'bushi','xinfu_dianhua','xinfu_falu','xinfu_zhenyi','lskuizhu','pingjian','xjshijian','fentian','zhiri','xindan',
2020-01-15 15:30:03 +00:00
'xinzhengnan','xinfu_xiaode',
2020-02-06 11:51:46 +00:00
'komari_xueshang','qiaosi_map',
2020-01-13 15:22:52 +00:00
];
2020-01-11 12:17:57 +00:00
var characters=[];
for(var name in lib.character){
if(!lib.character[name]) continue;
if(lib.filter.characterDisabled(name)) continue;
2020-01-13 15:22:52 +00:00
if(name.indexOf('old_')==0) continue;
2020-01-11 12:17:57 +00:00
var skillsx=lib.character[name][3].slice(0);
2020-01-13 15:22:52 +00:00
lib.character[name][2]=4;
2020-01-11 12:17:57 +00:00
lib.character[name][3]=[];
2021-03-20 13:29:25 +00:00
if(lib.character[name][4]) lib.character[name][4].remove('hiddenSkill');
2020-01-11 12:17:57 +00:00
characters.push(name);
var list=skillsx.slice(0);
for(var j=0;j<skillsx.length;j++){
var info=get.info(skillsx[j]);
if(!info){
skillsx.splice(j,1);
list.splice(j--,1);
continue;
}
if(typeof info.derivation=='string') list.push(info.derivation);
else if(Array.isArray(info.derivation)) list.addArray(info.derivation);
}
for(var j=0;j<list.length;j++){
if(skills.contains(list[j])||banned.contains(list[j])) continue;
var info=get.info(list[j]);
2021-11-07 05:45:48 +00:00
if(!info||info.zhuSkill||info.juexingji||info.charlotte||info.limited||info.hiddenSkill||info.dutySkill||info.groupSkill||(info.ai&&info.ai.combo)) continue;
2020-01-11 12:17:57 +00:00
skills.push(list[j]);
}
}
_status.characterlist=characters;
var pack={
skills:skills,
pack:{
2020-01-13 15:22:52 +00:00
card:{
hhzz_toulianghuanzhu:{
enable:true,
cardimage:"toulianghuanzhu",
chongzhu:true,
type:'trick',
filterTarget:function(card,player,target){
return target.skillH.length>0;
},
content:function(){
target.removeSkillH(target.skillH.randomGet());
var skills=lib.huanhuazhizhan.skills;
skills.randomSort();
for(var i=0;i<skills.length;i++){
if(!target.skillH.contains(skills[i])){
target.addSkillH(skills[i]);
break;
}
}
},
ai:{
order:10,
result:{
target:function(){
return 0.5-Math.random();
},
},
},
},
hhzz_fudichouxin:{
enable:true,
cardimage:"fudichouxin",
type:'trick',
filterTarget:function(card,player,target){
return target.skillH.length>0;
},
content:function(){
target.removeSkillH(target.skillH.randomGet());
},
ai:{
order:10,
result:{target:-1},
},
},
},
2020-01-11 12:17:57 +00:00
character:{
2020-01-13 15:22:52 +00:00
hhzz_shiona:['female','key',1,['hhzz_huilei']],
hhzz_kanade:['female','key',2,['hhzz_youlian']],
hhzz_takaramono1:['male','qun',5,['hhzz_jubao','hhzz_huizhen']],
2020-01-15 15:30:03 +00:00
hhzz_takaramono2:['male','qun',3,['hhzz_jubao','hhzz_zhencang']],
2020-01-11 12:17:57 +00:00
},
skill:{
2020-01-13 15:22:52 +00:00
_lingli_damage:{
trigger:{source:'damage'},
forced:true,
popup:false,
filter:function(event,player){
2020-01-15 15:30:03 +00:00
return event.player==player._toKill;
2020-01-13 15:22:52 +00:00
},
content:function(){
2020-01-15 15:30:03 +00:00
game.log(player,'对击杀目标造成了伤害');
2020-02-06 11:51:46 +00:00
player.changeLingli(trigger.num);
2020-01-13 15:22:52 +00:00
},
},
2020-01-11 12:17:57 +00:00
_lingli:{
mark:true,
2020-01-15 15:30:03 +00:00
marktext:'灵',
popup:'聚灵',
2020-01-11 12:17:57 +00:00
intro:{
2020-01-15 15:30:03 +00:00
name:'灵力',
content:'当前灵力点数:# / 5',
2020-01-11 12:17:57 +00:00
},
trigger:{
player:'phaseBeginStart',
},
2020-01-15 15:30:03 +00:00
prompt:'是否消耗2点灵力获得一个技能',
2020-01-11 12:17:57 +00:00
filter:function(event,player){
return player.storage._lingli>1;
},
2020-01-15 15:30:03 +00:00
check:function(event,player){
return player.skillH.length<3;
},
2020-01-11 12:17:57 +00:00
content:function(){
'step 0'
2020-01-15 15:30:03 +00:00
player.changeLingli(-2);
'step 1'
2020-01-11 12:17:57 +00:00
event.skills=lib.huanhuazhizhan.skills;
var skills=event.skills;
skills.randomSort();
var list=[];
for(var i=0;i<skills[i].length;i++){
if(!player.skillH.contains(skills[i])) list.push(skills[i]);
if(list.length==3) break;
}
if(!list.length){event.finish();return;}
2020-01-15 15:30:03 +00:00
if(player.storage._lingli>0) list.push('刷新');
2020-01-13 15:22:52 +00:00
event.list=list;
var dialog=game.getSkillDialog(event.list,'选择获得一个技能');
player.chooseControl(event.list).set('ai',function(){
2020-01-11 12:17:57 +00:00
return 0;
}).dialog=dialog;
'step 2'
2020-01-15 15:30:03 +00:00
if(result.control=='刷新'){
player.changeLingli(-1);
event.goto(1);
return;
}
2020-01-13 15:22:52 +00:00
event.skill=result.control;
if(player.skillH.length==3){
event.lose=true;
player.chooseControl(player.skillH).prompt='选择失去1个已有技能';
}
'step 3'
2020-01-11 12:17:57 +00:00
if(event.lose) player.removeSkillH(result.control);
player.addSkillH(event.skill);
},
},
_lingli_round:{
trigger:{global:'roundStart'},
forced:true,
popup:false,
filter:function(event,player){
2020-01-13 15:22:52 +00:00
return _status._aozhan!=true&&game.roundNumber>1;
2020-01-11 12:17:57 +00:00
},
content:function(){
player.changeLingli(1);
},
},
_lingli_draw:{
enable:'phaseUse',
filter:function(event,player){
return player.storage._lingli>0;
},
content:function(){
player.changeLingli(-1);
player.draw();
},
2020-02-23 05:45:11 +00:00
delay:0,
2020-01-22 06:04:55 +00:00
ai:{
order:10,
result:{
player:function(player){
return (player.storage._lingli-2*(3-player.skillH.length))>0?1:0;
},
2020-01-11 12:17:57 +00:00
},
},
},
_lingli_save:{
trigger:{target:'useCardToTargeted'},
forced:true,
popup:false,
filter:function(event,player){
2020-01-15 15:30:03 +00:00
return event.card.name=='tao'&&player==event.player._toSave;
2020-01-11 12:17:57 +00:00
},
content:function(){
2020-01-15 15:30:03 +00:00
game.log(trigger.player,'帮助了保护目标');
2020-01-11 12:17:57 +00:00
trigger.player.changeLingli(1);
},
},
_hhzz_qiankunbagua:{
trigger:{player:'phaseAfter'},
forced:true,
forceDie:true,
popup:false,
filter:function(event,player){
2020-01-13 15:22:52 +00:00
return _status._aozhan&&!player.getStat('damage')&&player.isAlive()||event._lastDead!=undefined;
2020-01-11 12:17:57 +00:00
},
content:function(){
2020-01-13 15:22:52 +00:00
'step 0'
2020-01-15 15:30:03 +00:00
if(_status._aozhan&&!player.getStat('damage')){
player.loseHp();
2020-02-06 11:51:46 +00:00
player.changeLingli(1);
2020-01-15 15:30:03 +00:00
game.log(player,'本回合内未造成伤害,触发死战模式惩罚');
}
if(trigger._lastDead==undefined) event.goto(2);
2020-01-13 15:22:52 +00:00
'step 1'
2020-01-11 12:17:57 +00:00
var type=get.rand(1,8);
2020-01-13 15:22:52 +00:00
event.type=type;
2020-01-15 15:30:03 +00:00
trigger._lastDead.playerfocus(1200);
player.$fullscreenpop('乾坤八卦·'+['离','坎','乾','震','兑','艮','巽','坤'][type-1],get.groupnature(trigger._lastDead.group,'raw'));
2020-01-13 15:22:52 +00:00
game.delay(1.5);
'step 2'
var type=event.type;
2020-01-11 12:17:57 +00:00
switch(type){
case 1:{
game.countPlayer(function(current){
current.loseHp();
});
break;
}
case 2:{
game.countPlayer(function(current){
2020-01-13 15:22:52 +00:00
current.draw(2,'nodelay');
2020-01-11 12:17:57 +00:00
});
break;
}
case 3:{
trigger._lastDead.revive(3);
trigger._lastDead.draw(3);
break;
}
case 4:{
game.countPlayer(function(current){
var he=current.getCards('he');
2020-01-13 15:22:52 +00:00
if(he.length) current.discard(he.randomGet()).delay=false;
2020-01-11 12:17:57 +00:00
});
break;
}
case 5:{
game.countPlayer(function(current){
current.changeLingli(1);
});
break;
}
case 6:{
var cards=[];
game.countPlayer(function(current){
var card=get.cardPile(function(card){
return !cards.contains(card)&&get.type(card)=='equip';
});
if(card){
cards.push(card);
current.$gain(card,'gain2')
current.gain(card);
}
});
break;
}
case 7:{
game.countPlayer(function(current){
if(current.skillH.length<3){
var skills=lib.huanhuazhizhan.skills;
skills.randomSort();
for(var i=0;i<skills.length;i++){
if(!current.skillH.contains(skills[i])){
current.addSkillH(skills[i]);
break;
}
}
}
});
break;
}
case 8:{
2020-01-13 15:22:52 +00:00
trigger._lastDead.revive(null,false);
trigger._lastDead.uninit();
trigger._lastDead.init(['hhzz_shiona','hhzz_kanade','hhzz_takaramono1','hhzz_takaramono2'].randomGet());
2020-01-15 15:30:03 +00:00
trigger._lastDead.skillH=lib.character[trigger._lastDead.name][3].slice(0);
2020-01-22 06:04:55 +00:00
trigger._lastDead.addSkill('hhzz_noCard');
2020-01-11 12:17:57 +00:00
break;
}
}
2020-01-15 15:30:03 +00:00
'step 3'
if(game.playerx().length<=4&&!_status._aozhan){
2020-01-26 11:35:17 +00:00
game.countPlayer2(function(current){
2020-01-15 15:30:03 +00:00
delete current._toKill;
delete current._toSave;
});
ui.huanhuazhizhan.innerHTML='死战模式';
_status._aozhan=true;
game.playBackgroundMusic();
trigger._lastDead.$fullscreenpop('死战模式',get.groupnature(trigger._lastDead.group,'raw')||'fire');
}
else game.randomMission();
2020-01-11 12:17:57 +00:00
},
},
2020-01-15 15:30:03 +00:00
hhzz_noCard:{
2020-01-13 15:22:52 +00:00
mod:{
cardEnabled:function(){return false},
cardSavable:function(){return false},
cardRespondable:function(){return false},
},
2020-01-15 15:30:03 +00:00
},
hhzz_huilei:{
trigger:{player:'die'},
forced:true,
forceDie:true,
skillAnimation:true,
logTarget:'source',
filter:function(event,player){
return event.source!=undefined;
},
content:function(){
var source=trigger.source;
var cards=source.getCards('he');
if(cards.length) source.discard(cards);
},
2020-01-13 15:22:52 +00:00
ai:{
effect:{
target:function(card,player,target){
if(get.tag(card,'damage')) return [-5,0];
}
}
}
},
hhzz_youlian:{
2020-01-15 15:30:03 +00:00
trigger:{player:'die'},
forced:true,
forceDie:true,
skillAnimation:true,
logTarget:'source',
filter:function(event,player){
return event.source!=undefined;
},
content:function(){
var source=trigger.source;
var cards=source.getCards('he');
if(cards.length) source.discard(cards);
var skills=source.skillH;
if(skills.length) source.removeSkillH(skills.randomGet());
2020-01-13 15:22:52 +00:00
},
ai:{
effect:{
target:function(card,player,target){
if(get.tag(card,'damage')) return [-5,0];
}
}
}
},
hhzz_zhencang:{
2020-01-15 15:30:03 +00:00
trigger:{player:'die'},
forced:true,
filter:function(event,player){
return event.source!=undefined;
},
forceDie:true,
logTarget:'source',
content:function(){
var source=trigger.source;
2020-01-26 11:35:17 +00:00
source.draw();
if(source.skillH.length==3) source.removeSkillH(source.skillH.randomGet());
var skills=lib.huanhuazhizhan.skills;
skills.randomSort();
for(var i=0;i<skills.length;i++){
if(!source.skillH.contains(skills[i])){
source.addSkillH(skills[i]);
break;
}
}
2020-01-13 15:22:52 +00:00
},
},
hhzz_huizhen:{
2020-01-15 15:30:03 +00:00
trigger:{player:'die'},
forced:true,
forceDie:true,
logTarget:'source',
filter:function(event,player){
return event.source!=undefined;
},
content:function(){
var source=trigger.source;
source.draw(3);
if(source.skillH.length==3) source.removeSkillH(source.skillH.randomGet());
var skills=lib.huanhuazhizhan.skills;
skills.randomSort();
for(var i=0;i<skills.length;i++){
if(!source.skillH.contains(skills[i])){
source.addSkillH(skills[i]);
break;
}
}
2020-01-13 15:22:52 +00:00
},
},
hhzz_jubao:{
trigger:{player:'damage'},
forced:true,
logTarget:'source',
filter:function(event,player){
return event.source!=undefined&&player.countCards('he')>0;
},
content:function(){
var cards=player.getCards('he');
cards.randomSort();
cards=cards.slice(0,trigger.num);
2020-01-15 15:30:03 +00:00
trigger.source.gain('give',cards,player);
2020-01-13 15:22:52 +00:00
},
ai:{
effect:{
target:function(card,player,target){
if(get.tag(card,'damage')) return [15,0];
}
}
}
},
2020-01-11 12:17:57 +00:00
},
translate:{
2020-01-15 15:30:03 +00:00
_lingli:'聚灵',
_lingli_bg:'灵',
_lingli_draw:'聚灵',
2020-01-13 15:22:52 +00:00
hhzz_huilei:'挥泪',
hhzz_youlian:'犹怜',
hhzz_zhencang:'珍藏',
hhzz_huizhen:'汇珍',
hhzz_jubao:'聚宝',
hhzz_huilei_info:'锁定技,杀死你的角色弃置所有的牌。',
hhzz_youlian_info:'锁定技,杀死你的角色弃置所有牌并随机失去一个技能。',
hhzz_zhencang_info:'锁定技,杀死你的角色摸一张牌并随机获得一个技能(已满则先随机移除一个)。',
hhzz_huizhen_info:'锁定技,杀死你的角色摸三张牌并随机获得一个技能(已满则先随机移除一个)。',
hhzz_jubao_info:'锁定技当你受到伤害的点数确定时伤害来源随机获得你区域内的X张牌X为伤害点数。',
hhzz_shiona:'汐奈',
hhzz_kanade:'立华奏',
hhzz_takaramono1:'坚实宝箱',
hhzz_takaramono2:'普通宝箱',
hhzz_toulianghuanzhu:'偷梁换柱',
hhzz_fudichouxin:'釜底抽薪',
hhzz_toulianghuanzhu_info:'出牌阶段,对一名角色使用,随机更换其一个技能。可重铸。',
hhzz_fudichouxin_info:'出牌阶段,对一名角色使用,随机弃置其一个技能。',
2020-01-15 15:30:03 +00:00
nei:' ',
nei2:' ',
刷新_info:'消耗1点灵力值刷新上述技能',
2020-01-11 12:17:57 +00:00
},
},
get:{
rawAttitude:function(from,to){
2020-01-15 15:30:03 +00:00
if(from==to||to==from._toSave) return 10;
if(to==from._toKill) return -30;
2020-01-11 12:17:57 +00:00
return -10;
}
},
eltc:{
gameDraw:function(){
var end=player;
var numx;
var num=function(player){
return player._hSeat>5?5:4;
};
do{
if(typeof num=='function'){
numx=num(player);
}
if(player._hSeat>6) player.changeLingli(1);
player.directgain(get.cards(numx));
player=player.next;
}
while(player!=end);
},
},
eltp:{
addSkillH:function(skill){
this.skillH.add(skill);
this.addSkillLog.apply(this,arguments);
},
removeSkillH:function(skill){
this.skillH.remove(skill);
game.log(this,'失去了技能','#g【'+get.translation(skill)+'】');
this.removeSkill(skill);
},
dieAfter:function(){
var evt=_status.event.getParent('phase');
if(evt) evt._lastDead=this;
if(game.playerx().length==1) game.over(game.me.isAlive());
},
$dieAfter:function(){},
2020-01-15 15:30:03 +00:00
hasUnknown:function(){return false},
isUnknown:function(){return false},
getEnemies:function(){
var list=game.playerx();
list.remove(this);
return list;
},
2020-01-11 12:17:57 +00:00
dieAfter2:function(source){
2020-01-15 15:30:03 +00:00
if(source&&this.name.indexOf('hhzz_')!=0){
if(source._toKill==this) game.log(source,'击杀目标成功');
2020-02-06 11:51:46 +00:00
source.draw(this==source._toKill?2:1);
source.changeLingli(this==source._toKill?3:2);
2020-01-11 12:17:57 +00:00
}
2020-01-15 15:30:03 +00:00
if(!_status._aozhan){
var that=this;
game.countPlayer(function(current){
if(current._toSave==that){
game.log(current,'保护失败');
var cards=current.getCards('he');
if(cards.length) current.discard(cards.randomGets(4));
}
});
2020-01-11 12:17:57 +00:00
}
},
logAi:function(){},
hasZhuSkill:function(){return false},
changeLingli:function(num){
if(typeof num!='number') num=1;
2020-01-13 15:22:52 +00:00
if(typeof this.storage._lingli!='number') this.storage._lingli=0;
2020-01-11 12:17:57 +00:00
if(num>0){
2020-01-15 15:30:03 +00:00
num=Math.min(num,5-this.storage._lingli);
if(num<1) return;
2020-01-11 12:17:57 +00:00
game.log(this,'获得了','#y'+get.cnNumber(num)+'点','灵力');
}
else{
if(-num>this.storage._lingli) num=-this.storage._lingli;
if(num==0) return;
game.log(this,'失去了','#y'+get.cnNumber(-num)+'点','灵力');
}
this.storage._lingli+=num;
this.markSkill('_lingli');
},
},
game:{
playerx:function(){
return game.filterPlayer(function(current){
2020-01-13 15:22:52 +00:00
if(current.name.indexOf('hhzz_')==0) return;
2020-01-11 12:17:57 +00:00
return true;
});
},
randomMission:function(){
if(_status._aozhan) return;
if(!ui.huanhuazhizhan){
ui.huanhuazhizhan=ui.create.div('.touchinfo.left',ui.window);
if(ui.time3) ui.time3.style.display='none';
}
2020-01-15 15:30:03 +00:00
var players=game.playerx();
for(var i=0;i<players.length;i++){
var player=players[i];
var list=players.slice(0).randomSort();
list.remove(player);
player._toKill=list[0];
player._toSave=list[1];
}
ui.huanhuazhizhan.innerHTML='击杀'+get.translation(game.me._toKill)+',保护'+get.translation(game.me._toSave);
2020-01-11 12:17:57 +00:00
},
getSkillDialog:function(skills,prompt){
var dialog=ui.create.dialog('hidden','forcebutton');
if(prompt) dialog.addText(prompt);
for(var i=0;i<skills.length;i++){
dialog.add('<div class="popup pointerdiv" style="width:80%;display:inline-block"><div class="skill">【'+get.translation(skills[i])+'】</div><div>'+lib.translate[skills[i]+'_info']+'</div></div>');
}
dialog.addText(' <br> ');
return dialog;
},
chooseCharacter:function(){
var next=game.createEvent('chooseCharacter',false);
next.showConfig=true;
next.setContent(function(){
'step 0'
game.zhu=game.players.randomGet();
var i=1;
var current=game.zhu;
while(true){
current.skillH=[];
current._hSeat=i;
2020-01-15 15:30:03 +00:00
current.identity='nei';
2020-01-11 12:17:57 +00:00
current.setNickname(get.cnNumber(i,true)+'号位');
for(var ii in lib.huanhuazhizhan.eltp) current[ii]=lib.huanhuazhizhan.eltp[ii];
current=current.next;
i++;
if(current==game.zhu) break;
}
ui.arena.classList.add('choose-character');
game.me.chooseButton(['请选择角色形象',[_status.characterlist.randomRemove(5),'character']],true).onfree=true;
'step 1'
game.me.init(result.links[0]);
2020-01-13 15:22:52 +00:00
var list=['xiandeng','shulv','xisheng'];
2020-01-11 12:17:57 +00:00
game.me.chooseControl(list).dialog=game.getSkillDialog(list,'选择要获得的初始技能');
'step 2'
2020-01-13 15:22:52 +00:00
var list=['_lingli','_lingli_round','_lingli_draw','_lingli_save','_hhzz_qiankunbagua','_lingli_damage'];
2020-01-11 12:17:57 +00:00
for(var i=0;i<list.length;i++){
game.addGlobalSkill(list[i]);
}
game.me.addSkillH(result.control);
game.countPlayer(function(current){
if(!current.name){
current.init(_status.characterlist.randomRemove(1)[0]);
2020-01-13 15:22:52 +00:00
current.addSkillH(['xiandeng','shulv','xisheng'].randomGet());
2020-01-11 12:17:57 +00:00
}
2020-01-26 11:35:17 +00:00
current.storage._lingli=0;
current.markSkill('_lingli');
2020-01-11 12:17:57 +00:00
});
2020-01-13 15:22:52 +00:00
game.showIdentity(true);
2020-01-11 12:17:57 +00:00
'step 3'
game.randomMission();
2020-01-13 15:22:52 +00:00
var list=[
game.createCard('hhzz_fudichouxin'),
game.createCard('hhzz_toulianghuanzhu'),
game.createCard('hhzz_toulianghuanzhu'),
game.createCard('hhzz_toulianghuanzhu'),
];
for(var i=0;i<list.length;i++){
ui.cardPile.insertBefore(list[i],ui.cardPile.childNodes[get.rand(ui.cardPile.childElementCount)]);
}
game.updateRoundNumber();
2020-01-11 12:17:57 +00:00
'step 4'
setTimeout(function(){
ui.arena.classList.remove('choose-character');
},500);
2020-03-19 13:24:54 +00:00
_status.videoInited=true;
game.addVideo('arrangeLib',null,{
2020-04-03 12:09:26 +00:00
skill:{
_lingli_damage:{},
_lingli:{
mark:true,
marktext:'灵',
popup:'聚灵',
intro:{
name:'灵力',
content:'当前灵力点数:# / 5',
},
},
_lingli_round:{},
_lingli_draw:{},
_lingli_save:{},
hhzz_noCard:{},
hhzz_huilei:{
skillAnimation:true,
},
hhzz_youlian:{
skillAnimation:true,
},
hhzz_zhencang:{},
hhzz_huizhen:{},
hhzz_jubao:{},
},
2020-03-19 13:24:54 +00:00
card:{
hhzz_toulianghuanzhu:{
cardimage:"toulianghuanzhu",
},
hhzz_fudichouxin:{
cardimage:"fudichouxin",
},
},
character:{
hhzz_shiona:['female','key',1,['hhzz_huilei']],
hhzz_kanade:['female','key',2,['hhzz_youlian']],
hhzz_takaramono1:['male','qun',5,['hhzz_jubao','hhzz_huizhen']],
hhzz_takaramono2:['male','qun',3,['hhzz_jubao','hhzz_zhencang']],
},
translate:{
2020-04-03 12:09:26 +00:00
_lingli:'聚灵',
_lingli_bg:'灵',
_lingli_draw:'聚灵',
hhzz_huilei:'挥泪',
hhzz_youlian:'犹怜',
hhzz_zhencang:'珍藏',
hhzz_huizhen:'汇珍',
hhzz_jubao:'聚宝',
hhzz_huilei_info:'锁定技,杀死你的角色弃置所有的牌。',
hhzz_youlian_info:'锁定技,杀死你的角色弃置所有牌并随机失去一个技能。',
hhzz_zhencang_info:'锁定技,杀死你的角色摸一张牌并随机获得一个技能(已满则先随机移除一个)。',
hhzz_huizhen_info:'锁定技,杀死你的角色摸三张牌并随机获得一个技能(已满则先随机移除一个)。',
hhzz_jubao_info:'锁定技当你受到伤害的点数确定时伤害来源随机获得你区域内的X张牌X为伤害点数。',
2020-03-19 13:24:54 +00:00
nei:' ',
nei2:' ',
hhzz_shiona:'汐奈',
hhzz_kanade:'立华奏',
hhzz_takaramono1:'坚实宝箱',
hhzz_takaramono2:'普通宝箱',
hhzz_toulianghuanzhu:'偷梁换柱',
hhzz_fudichouxin:'釜底抽薪',
hhzz_toulianghuanzhu_info:'出牌阶段,对一名角色使用,随机更换其一个技能。可重铸。',
hhzz_fudichouxin_info:'出牌阶段,对一名角色使用,随机弃置其一个技能。',
},
});
2020-01-11 12:17:57 +00:00
});
},
},
};
2020-03-19 13:24:54 +00:00
var func=function(pack){
for(var i in pack.pack){
for(var j in pack.pack[i]) lib[i][j]=pack.pack[i][j];
}
for(var i in pack.eltc) lib.element.content[i]=pack.eltc[i];
for(var i in pack.eltp) lib.element.player[i]=pack.eltp[i];
for(var i in pack.game) game[i]=pack.game[i];
for(var i in pack.get) get[i]=pack.get[i];
lib.huanhuazhizhan=pack;
2020-01-11 12:17:57 +00:00
}
2020-03-19 13:24:54 +00:00
func(pack);
2020-01-11 12:17:57 +00:00
},
},
},
2021-04-28 12:41:23 +00:00
qunxionggeju:{
name:'群雄割据',
mode:'guozhan',
intro:[
'开放不同势力组合,以优先亮出的武将牌作为自己的势力,双势力武将则使用列表的第一个势力',
],
showcase:function(init){
var node=this;
var list=[
['re_yuanshao','re_lidian'],
['zhangliao','sunquan'],
2022-04-18 02:27:32 +00:00
['xin_fazheng','sp_lvfan'],
2021-04-28 12:41:23 +00:00
['sunjian','lvbu'],
['jin_simashi','re_weiyan'],
['guanyu','sunce'],
['zhenji','sp_zhangjiao'],
['guojia','sp_zhugeliang'],
];
list.randomSort();
var func=function(){
var card=ui.create.player(null,true);
var name=list.shift();
card.init(name[0],name[1]);
card.node.marks.remove();
card.node.count.remove();
card.node.hp.remove();
card.classList.remove('unseen');
node.nodes.push(card);
card.style.position='absolute';
card.style.zIndex=2;
card.style.transition='all 2s';
var rand1=Math.round(Math.random()*100);
var rand2=Math.round(Math.random()*100);
var rand3=Math.round(Math.random()*40)-20;
card.style.left='calc('+rand1+'% - '+(rand1*1.5)+'px)';
card.style.top='calc('+rand2+'% - '+(rand2*1.8)+'px)';
card.style.transform='scale(0.8) rotate('+rand3+'deg)';
node.appendChild(card);
ui.refresh(card);
};
var list2=['feilongduofeng','taipingyaoshu','dinglanyemingzhu'];
var func2=function(){
var card=game.createCard(list2.shift(),'noclick');
node.nodes.push(card);
card.style.position='absolute';
card.style.zIndex=2;
card.style.transition='all 2s';
var rand1=Math.round(Math.random()*100);
var rand2=Math.round(Math.random()*100);
var rand3=Math.round(Math.random()*40)-20;
card.style.left='calc('+rand1+'% - '+rand1+'px)';
card.style.top='calc('+rand2+'% - '+rand2+'px)';
card.style.transform='rotate('+rand3+'deg)';
node.appendChild(card);
ui.refresh(card);
};
if(init){
node.nodes=[];
}
else{
while(node.nodes.length){
node.nodes.shift().remove();
}
}
for(var i=0;i<5;i++){
func();
}
for(var i=0;i<3;i++){
func2();
func();
}
},
init:function(){},
content:{
chooseCharacterBefore:function(){
game.chooseCharacter=function(){
var next=game.createEvent('chooseCharacter',false);
next.showConfig=true;
next.addPlayer=true;
next.ai=function(player,list,back){
var mainx=list[0];
var vicex=list[1];
if(get.guozhanReverse(mainx,vicex)){
mainx=list[1];
vicex=list[0];
}
player.init(mainx,vicex,false);
if(back){
list.remove(player.name1);
list.remove(player.name2);
for(var i=0;i<list.length;i++){
back.push(list[i]);
}
}
return;
}
next.setContent(function(){
"step 0"
var eltp={
getGuozhanGroup:function(num){
if(num==1) return lib.character[this.name2][1];
return lib.character[this.name1][1];
},
wontYe:function(group){
if(!group) group=lib.character[this.name1][1];
if(_status.yeidentity&&_status.yeidentity.contains(group)) return false;
if(get.zhu(this,null,true)) return true;
var num=3,total=get.population();
if(total<6) num=1;
else if(total<8) num=2;
return get.totalPopulation(group)+1<=num;
},
}
for(var i of game.players){
for(var j in eltp) i[j]=eltp[j];
}
for(var j in eltp) lib.element.player[j]=eltp[j];
ui.arena.classList.add('choose-character');
var addSetting=function(dialog){
dialog.add('选择座位').classList.add('add-setting');
var seats=document.createElement('table');
seats.classList.add('add-setting');
seats.style.margin='0';
seats.style.width='100%';
seats.style.position='relative';
for(var i=1;i<=game.players.length;i++){
var td=ui.create.div('.shadowed.reduce_radius.pointerdiv.tdnode');
td.innerHTML='<span>'+get.cnNumber(i,true)+'</span>';
td.link=i-1;
seats.appendChild(td);
td.addEventListener(lib.config.touchscreen?'touchend':'click',function(){
if(_status.dragged) return;
if(_status.justdragged) return;
if(_status.cheat_seat){
_status.cheat_seat.classList.remove('bluebg');
if(_status.cheat_seat==this){
delete _status.cheat_seat;
return;
}
}
this.classList.add('bluebg');
_status.cheat_seat=this;
});
}
dialog.content.appendChild(seats);
if(game.me==game.zhu){
seats.previousSibling.style.display='none';
seats.style.display='none';
}
dialog.add(ui.create.div('.placeholder.add-setting'));
dialog.add(ui.create.div('.placeholder.add-setting'));
if(get.is.phoneLayout()) dialog.add(ui.create.div('.placeholder.add-setting'));
};
var removeSetting=function(){
var dialog=_status.event.dialog;
if(dialog){
dialog.style.height='';
delete dialog._scrollset;
var list=Array.from(dialog.querySelectorAll('.add-setting'));
while(list.length){
list.shift().remove();
}
ui.update();
}
};
event.addSetting=addSetting;
event.removeSetting=removeSetting;
var chosen=lib.config.continue_name||[];
game.saveConfig('continue_name');
event.chosen=chosen;
var i;
event.list=[];
for(i in lib.character){
if(i.indexOf('gz_shibing')==0) continue;
if(chosen.contains(i)) continue;
if(lib.filter.characterDisabled(i)) continue;
if(get.config('onlyguozhan')){
if(!lib.characterPack.mode_guozhan[i]) continue;
if(get.is.jun(i)) continue;
}
if(lib.character[i][4].contains('hiddenSkill')) continue;
if(lib.character[i][2]==3||lib.character[i][2]==4||lib.character[i][2]==5)
event.list.push(i);
}
_status.characterlist=event.list.slice(0);
_status.yeidentity=[];
event.list.randomSort();
// var list=event.list.splice(0,parseInt(get.config('choice_num')));
var list=event.list.randomRemove(parseInt(get.config('choice_num')));
if(_status.auto){
event.ai(game.me,list);
lib.init.onfree();
}
else if(chosen.length){
game.me.init(chosen[0],chosen[1],false);
lib.init.onfree();
}
else{
var dialog=ui.create.dialog('选择角色','hidden',[list,'character']);
if(get.config('change_identity')){
addSetting(dialog);
}
var next=game.me.chooseButton(dialog,true,2).set('onfree',true);
next.filterButton=function(button){
if(ui.dialog.buttons.length<=10){
for(var i=0;i<ui.dialog.buttons.length;i++){
if(ui.dialog.buttons[i]!=button){
if(lib.element.player.perfectPair.call({
name1:button.link,name2:ui.dialog.buttons[i].link
})){
button.classList.add('glow2');
}
}
}
}
return true;
};
next.switchToAuto=function(){
event.ai(game.me,list);
ui.arena.classList.remove('selecting');
};
var createCharacterDialog=function(){
event.dialogxx=ui.create.characterDialog('heightset',function(i){
if(i.indexOf('gz_shibing')==0) return true;
if(get.config('onlyguozhan')){
if(!lib.characterPack.mode_guozhan[i]) return true;
if(get.is.jun(i)) return true;
}
},get.config('onlyguozhanexpand')?'expandall':undefined,get.config('onlyguozhan')?'onlypack:mode_guozhan':undefined);
if(ui.cheat2){
ui.cheat2.animate('controlpressdownx',500);
ui.cheat2.classList.remove('disabled');
}
};
if(lib.onfree){
lib.onfree.push(createCharacterDialog);
}
else{
createCharacterDialog();
}
ui.create.cheat2=function(){
ui.cheat2=ui.create.control('自由选将',function(){
if(this.dialog==_status.event.dialog){
if(game.changeCoin){
game.changeCoin(50);
}
this.dialog.close();
_status.event.dialog=this.backup;
this.backup.open();
delete this.backup;
game.uncheck();
game.check();
if(ui.cheat){
ui.cheat.animate('controlpressdownx',500);
ui.cheat.classList.remove('disabled');
}
}
else{
if(game.changeCoin){
game.changeCoin(-10);
}
this.backup=_status.event.dialog;
_status.event.dialog.close();
_status.event.dialog=_status.event.parent.dialogxx;
this.dialog=_status.event.dialog;
this.dialog.open();
game.uncheck();
game.check();
if(ui.cheat){
ui.cheat.classList.add('disabled');
}
}
});
if(lib.onfree){
ui.cheat2.classList.add('disabled');
}
}
ui.create.cheat=function(){
_status.createControl=ui.cheat2;
ui.cheat=ui.create.control('更换',function(){
if(ui.cheat2&&ui.cheat2.dialog==_status.event.dialog){
return;
}
if(game.changeCoin){
game.changeCoin(-3);
}
event.list=event.list.concat(list);
event.list.randomSort();
// list=event.list.splice(0,parseInt(get.config('choice_num')));
list=event.list.randomRemove(parseInt(get.config('choice_num')));
var buttons=ui.create.div('.buttons');
var node=_status.event.dialog.buttons[0].parentNode;
_status.event.dialog.buttons=ui.create.buttons(list,'character',buttons);
_status.event.dialog.content.insertBefore(buttons,node);
buttons.animate('start');
node.remove();
game.uncheck();
game.check();
});
delete _status.createControl;
}
if(!ui.cheat&&get.config('change_choice'))
ui.create.cheat();
if(!ui.cheat2&&get.config('free_choose'))
ui.create.cheat2();
}
"step 1"
if(ui.cheat){
ui.cheat.close();
delete ui.cheat;
}
if(ui.cheat2){
ui.cheat2.close();
delete ui.cheat2;
}
if(result.buttons){
game.me.init(result.buttons[0].link,result.buttons[1].link,false);
game.addRecentCharacter(result.buttons[0].link,result.buttons[1].link);
}
// game.me.setIdentity(game.me.group);
event.list.remove(game.me.name1);
event.list.remove(game.me.name2);
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=game.me){
event.ai(game.players[i],event.list.randomRemove(parseInt(get.config('choice_num'))),event.list);
}
}
for(var i=0;i<game.players.length;i++){
game.players[i].classList.add('unseen');
game.players[i].classList.add('unseen2');
_status.characterlist.remove(game.players[i].name);
_status.characterlist.remove(game.players[i].name2);
if(game.players[i]!=game.me){
game.players[i].node.identity.firstChild.innerHTML='猜';
game.players[i].node.identity.dataset.color='unknown';
game.players[i].node.identity.classList.add('guessing');
}
game.players[i].hiddenSkills=lib.character[game.players[i].name1][3].slice(0);
var hiddenSkills2=lib.character[game.players[i].name2][3];
for(var j=0;j<hiddenSkills2.length;j++){
game.players[i].hiddenSkills.add(hiddenSkills2[j]);
}
for(var j=0;j<game.players[i].hiddenSkills.length;j++){
if(!lib.skill[game.players[i].hiddenSkills[j]]){
game.players[i].hiddenSkills.splice(j--,1);
}
}
game.players[i].group='unknown';
game.players[i].sex='unknown';
game.players[i].name1=game.players[i].name;
game.players[i].name='unknown';
game.players[i].identity='unknown';
game.players[i].node.name.show();
game.players[i].node.name2.show();
game.players[i]._group=lib.character[game.players[i].name1][1];
for(var j=0;j<game.players[i].hiddenSkills.length;j++){
game.players[i].addSkillTrigger(game.players[i].hiddenSkills[j],true);
}
}
setTimeout(function(){
ui.arena.classList.remove('choose-character');
},500);
});
}
},
},
},
2018-04-17 07:32:43 +00:00
duzhansanguo:{
name:'毒战三国',
mode:'identity',
intro:'牌堆中额外添加10%的毒',
showcase:function(init){
var node=this;
var func=function(){
var card=game.createCard('du','noclick');
node.nodes.push(card);
card.style.position='absolute';
var rand1=Math.round(Math.random()*100);
var rand2=Math.round(Math.random()*100);
var rand3=Math.round(Math.random()*40)-20;
card.style.left='calc('+rand1+'% - '+rand1+'px)';
card.style.top='calc('+rand2+'% - '+rand2+'px)';
card.style.transform='scale(0.8) rotate('+rand3+'deg)';
card.style.opacity=0;
node.appendChild(card);
ui.refresh(card);
card.style.opacity=1;
card.style.transform='scale(1) rotate('+rand3+'deg)';
if(node.nodes.length>7){
setTimeout(function(){
while(node.nodes.length>5){
node.nodes.shift().delete();
}
},500);
}
};
if(init){
node.nodes=[];
for(var i=0;i<5;i++){
func();
}
}
node.showcaseinterval=setInterval(func,1000);
},
content:{
cardPile:function(list){
2020-04-03 12:09:26 +00:00
game.identityVideoName='毒战三国杀';
2020-02-14 05:33:43 +00:00
lib.config.bannedcards.remove('du');
if(game.bannedcards) game.bannedcards.remove('du');
2018-04-17 07:32:43 +00:00
var num=Math.ceil(list.length/10);
while(num--){
list.push([['heart','diamond','club','spade'].randomGet(),Math.ceil(Math.random()*13),'du']);
}
return list;
}
},
},
daozhiyueying:{
name:'导师月英',
mode:'identity',
intro:'牌堆中所有普通锦囊牌数量翻倍;移除拥有集智技能的角色',
showcase:function(init){
var node=this;
var player1,player2;
if(init){
player1=ui.create.player(null,true).init('huangyueying');
player2=ui.create.player(null,true);
2017-04-17 06:33:52 +00:00
if(lib.character.jsp_huangyueying){
player2.init('jsp_huangyueying');
}
else if(lib.character.re_huangyueying){
2018-04-17 07:32:43 +00:00
player2.init('re_huangyueying');
}
else{
player2.init('huangyueying');
}
player1.style.left='20px';
player1.style.top='20px';
player1.style.transform='scale(0.9)';
player1.node.count.innerHTML='2';
player1.node.count.dataset.condition='mid';
player2.style.left='auto';
player2.style.right='20px';
player2.style.top='20px';
player2.style.transform='scale(0.9)';
player2.node.count.innerHTML='2';
player2.node.count.dataset.condition='mid';
this.appendChild(player1);
this.appendChild(player2);
this.player1=player1;
this.player2=player2;
}
else{
player1=this.player1;
player2=this.player2;
}
2016-08-16 11:58:30 +00:00
2018-04-17 07:32:43 +00:00
var createCard=function(wuxie){
var card;
if(wuxie){
card=game.createCard('wuxie','noclick');
card.style.transform='scale(0.9)';
}
else{
card=ui.create.card(null,'noclick',true);
}
card.style.opacity=0;
card.style.position='absolute';
card.style.zIndex=2;
card.style.margin=0;
return card;
}
2016-08-16 11:58:30 +00:00
2018-04-17 07:32:43 +00:00
var func=function(){
2021-11-26 14:55:37 +00:00
game.linexy([
player1.getLeft()+player1.offsetWidth/2,
player1.getTop()+player1.offsetHeight/2,
player2.getLeft()+player2.offsetWidth/2,
player2.getTop()+player2.offsetHeight/2,
],node);
2018-04-17 07:32:43 +00:00
var card=createCard(true);
card.style.left='43px';
card.style.top='58px';
node.appendChild(card);
ui.refresh(card);
card.style.opacity=1;
card.style.transform='scale(0.9) translate(137px,152px)';
setTimeout(function(){
card.delete();
},1000);
player1.node.count.innerHTML='1';
2016-08-16 11:58:30 +00:00
2018-04-17 07:32:43 +00:00
setTimeout(function(){
if(!node.showcaseinterval) return;
player1.node.count.innerHTML='2';
var card=createCard();
card.style.left='43px';
card.style.top='58px';
card.style.transform='scale(0.9) translate(137px,152px)';
node.appendChild(card);
ui.refresh(card);
card.style.opacity=1;
card.style.transform='scale(0.9)';
setTimeout(function(){
card.delete();
},1000);
},300);
2016-08-16 11:58:30 +00:00
2018-04-17 07:32:43 +00:00
setTimeout(function(){
if(!node.showcaseinterval) return;
player2.node.count.innerHTML='1';
2021-11-26 14:55:37 +00:00
game.linexy([
player2.getLeft()+player2.offsetWidth/2,
player2.getTop()+player2.offsetHeight/2,
player1.getLeft()+player1.offsetWidth/2,
player1.getTop()+player1.offsetHeight/2,
],node);
2018-04-17 07:32:43 +00:00
var card=createCard(true);
card.style.left='auto';
card.style.right='43px';
card.style.top='58px';
node.appendChild(card);
ui.refresh(card);
card.style.opacity=1;
card.style.transform='scale(0.9) translate(-137px,152px)';
setTimeout(function(){
card.delete();
},700);
2016-08-16 11:58:30 +00:00
2018-04-17 07:32:43 +00:00
setTimeout(function(){
if(!node.showcaseinterval) return;
player2.node.count.innerHTML='2';
var card=createCard();
card.style.left='auto';
card.style.right='43px';
card.style.top='58px';
card.style.transform='scale(0.9) translate(-137px,152px)';
node.appendChild(card);
ui.refresh(card);
card.style.opacity=1;
card.style.transform='scale(0.9)';
setTimeout(function(){
card.delete();
},700);
},300);
},1000);
};
node.showcaseinterval=setInterval(func,2200);
func();
},
init:function(){
for(var i in lib.character){
var skills=lib.character[i][3]
2020-01-11 12:17:57 +00:00
if(skills.contains('jizhi')||skills.contains('rejizhi')||skills.contains('lingzhou')||skills.contains('sbaiyin')){
2018-04-17 07:32:43 +00:00
delete lib.character[i];
}
}
},
content:{
cardPile:function(list){
2020-04-03 12:09:26 +00:00
game.identityVideoName='导师月英';
2018-04-17 07:32:43 +00:00
var list2=[];
for(var i=0;i<list.length;i++){
list2.push(list[i]);
if(get.type(list[i][2])=='trick'){
list2.push(list[i]);
}
}
return list2;
}
}
},
weiwoduzun:{
name:'唯我独尊',
mode:'identity',
intro:[
'牌堆中杀的数量增加30%',
'游戏开始时,主公获得一枚战神标记',
'拥有战神标记的角色杀造成的伤害+1',
'受到杀造成的伤害后战神印记将移到伤害来源的武将牌上'
],
showcase:function(init){
var node=this;
var player;
if(init){
player=ui.create.player(null,true);
player.node.avatar.style.backgroundSize='cover';
player.node.avatar.setBackgroundImage('image/mode/boss/character/boss_lvbu2.jpg');
player.node.avatar.show();
player.style.left='calc(50% - 75px)';
player.style.top='20px';
player.node.count.remove();
player.node.hp.remove();
player.style.transition='all 0.5s';
node.appendChild(player);
node.playernode=player;
}
else{
player=node.playernode;
}
var num=0;
var num2=0;
this.showcaseinterval=setInterval(function(){
var dx,dy
if(num2%5==0){
// player.animate('target');
// player.animate('zoomin');
player.classList.add('zoomin3');
player.hide();
2017-11-22 08:28:59 +00:00
player.style.transitionDuration='0.7s'
2018-04-17 07:32:43 +00:00
setTimeout(function(){
player.style.transitionProperty='none';
player.classList.remove('zoomin3');
player.classList.add('zoomout2');
setTimeout(function(){
player.style.transitionProperty='';
player.classList.remove('zoomout2');
player.show();
},500);
},700);
2017-04-17 06:33:52 +00:00
for(var i=0;i<5;i++){
switch(i){
2018-04-17 07:32:43 +00:00
case 0:dx=-180;dy=0;break;
case 1:dx=-140;dy=100;break;
case 2:dx=0;dy=155;break;
case 3:dx=140;dy=100;break;
case 4:dx=180;dy=0;break;
}
2017-04-17 06:33:52 +00:00
var card=game.createCard('sha','noclick');
2018-04-17 07:32:43 +00:00
card.style.left='calc(50% - 52px)';
card.style.top='68px';
card.style.position='absolute';
card.style.margin=0;
card.style.zIndex=2;
card.style.opacity=0;
node.appendChild(card);
ui.refresh(card);
card.style.opacity=1;
card.style.transform='translate('+dx+'px,'+dy+'px)';
setTimeout((function(card){
return function(){
2017-04-17 06:33:52 +00:00
card.delete();
};
2018-04-17 07:32:43 +00:00
})(card),700);
}
}
num2++;
if(num>=5){
num=0;
}
},700);
},
init:function(){
2020-04-03 12:09:26 +00:00
game.identityVideoName='唯我独尊';
2018-04-17 07:32:43 +00:00
lib.skill.weiwoduzun={
mark:true,
intro:{
content:'杀造成的伤害+1'
},
group:['weiwoduzun_damage','weiwoduzun_lose'],
subSkill:{
damage:{
trigger:{source:'damageBegin'},
forced:true,
filter:function(event){
return event.card&&event.card.name=='sha'&&event.notLink();
},
content:function(){
trigger.num++;
}
},
lose:{
trigger:{player:'damageEnd'},
forced:true,
filter:function(event){
return event.source&&event.source.isAlive();
},
content:function(){
player.removeSkill('weiwoduzun');
trigger.source.addSkill('weiwoduzun');
}
}
}
};
lib.translate.weiwoduzun='战神';
lib.translate.weiwoduzun_bg='尊';
},
content:{
cardPile:function(list){
var num=0;
for(var i=0;i<list.length;i++){
if(list[i][2]=='sha') num++;
}
num=Math.round(num*0.3);
if(num<=0) return list;
while(num--){
var nature='';
var rand=Math.random();
if(rand<0.15){
nature='fire';
}
else if(rand<0.3){
nature='thunder';
}
var suit=['heart','spade','club','diamond'].randomGet();
var number=Math.ceil(Math.random()*13);
if(nature){
list.push([suit,number,'sha',nature]);
}
else{
list.push([suit,number,'sha']);
}
}
return list;
},
gameStart:function(){
if(_status.mode=='zhong'){
game.zhong.addSkill('weiwoduzun');
}
else{
game.zhu.addSkill('weiwoduzun');
}
}
}
},
tongxingzhizheng:{
name:'同姓之争',
mode:'versus',
submode:'2v2',
intro:'姓氏相同的武将组合一队',
showcase:function(init){
var node=this;
var getList=function(){
var list=[['guanyu','guanping','guansuo','guanyinping'],
['caocao','caopi','caozhi','caorui'],['liubei','liushan','liuchen'],
Our Song. 马上就要高考了,这次的版本更新应该是考前的最后一次更新了。 真的很感谢这段时间以来身边的大家。身边的老师和同学也好,Key圈的各位键子们也好,无名杀玩家们也好,正是有了你们的陪伴和支持,我才能够坚持下来,走到今天的这一步。 祝愿包括我自己在内的所有考生高考顺利,金榜题名吧! 最后,在这里复制粘贴一下《Angel Beats!》TV版的ED,某种意义上也是仲村ゆり的角色歌的《Brave Song》的歌词: ``` いつもひとりで歩いてた 振り返るとみんなは遠く 一路走来形单影只 转身回首望去 大家已经远去 それでもあたしは歩いた それが強さだった 即使如此我依然前行 这正是我的坚强 もう何も恐くない そう呟いてみせる 经历 使我无所畏惧 再多冷漠也是一句叹息 いつか人は一人になって 思い出の中に生きてくだけ 总有一天人将学会独立 在回忆中寻找自己的影子 孤独さえ愛し笑ってられるように あたしは戦うんだ 为了那笑容下与孤独作伴的勇气 我决定战斗到底 涙なんて見せないんだ 我已不再哭泣 いつもひとりで歩いてた 行く先には崖が待ってた 一路走来形单影只 而前方等着的却是山崖 それでもあたしは歩いた 強さの証明のため 即使如此我依然前行 为了证明这份坚强 吹き付ける強い風 汗でシャツが張りつく 强风吹过 汗水将衣服粘湿 いつか忘れてしまえるなら 生きることそれはたやすいもの 若有一天将一切尽数忘掉的话 生存其实并不困难 忘却の彼方へと落ちていくなら それは逃げることだろう 而若坠落在那忘却的彼端的话 那便成了逃避吧 生きた意味すら消えるだろう 就连生存的意义也会消失殆尽吧 風はやがて凪いでた 汗も乾いて 风终于停息 汗也干了 お腹が空いてきたな 何かあったっけ 肚子也饿了啊 有什么可吃的吗 賑やかな声と共にいい匂いがやってきた 同熙攘的声音一道 喷香的味道也传了过来 いつもひとりで歩いてた みんなが待っていた 一路走来形单影只 大家在前方等着我 いつか人は一人になって 思い出の中に生きてくだけ 总有一天人将学会独立 在回忆中寻找自己的影子 それでもいい 安らかなこの気持ちは それを仲間と呼ぶんだ 这倒也没什么 这种安宁的感情 称之为伙伴 いつかみんなと過ごした日々も忘れてどこかで生きてるよ 有一天我会忘掉和大家在一起度过的日子而生活在他乡 その時はもう強くなんかないよ 到了那时 我不会再坚强了 普通の女の子の弱さで涙を零すよ 像普通的女孩一样流下柔弱的泪水 ```
2020-07-03 05:22:31 +00:00
['re_xiahouyuan','xiahouba','xiahoushi'],['sunjian','sunquan','sunce'],
2018-04-17 07:32:43 +00:00
['sp_zhangjiao','zhangliang','zhangbao'],['zhugeliang','zhugeguo','zhugejin','zhugeke'],
['mateng','machao','madai','mayunlu']];
list.randomSort();
var list2=[];
for(var i=0;i<list.length;i++){
list2=list2.concat(list[i]);
}
node.list=list2;
};
var func=function(){
if(!node.list.length){
getList();
}
var card=ui.create.player(null,true);
card.init(node.list.shift());
card.node.marks.remove();
card.node.count.remove();
card.node.hp.remove();
node.nodes.push(card);
card.style.position='absolute';
var rand1=Math.round(Math.random()*100);
var rand2=Math.round(Math.random()*100);
var rand3=Math.round(Math.random()*40)-20;
card.style.left='calc('+rand1+'% - '+(rand1*1.5)+'px)';
card.style.top='calc('+rand2+'% - '+(rand2*1.8)+'px)';
card.style.transform='scale(1.2) rotate('+rand3+'deg)';
card.style.opacity=0;
ui.refresh(card);
node.appendChild(card);
ui.refresh(card);
card.style.transform='scale(0.9) rotate('+rand3+'deg)';
card.style.opacity=1;
if(node.nodes.length>4){
setTimeout(function(){
while(node.nodes.length>3){
node.nodes.shift().delete();
}
},500);
}
};
node.list=[];
if(init){
node.nodes=[];
for(var i=0;i<3;i++){
func();
}
}
node.showcaseinterval=setInterval(func,1000);
},
init:function(){
var map={};
var map3=[];
2019-08-30 15:10:11 +00:00
var list1=['司','夏','诸','皇'];
var list2=['马','侯','葛','甫'];
2023-01-24 13:26:41 +00:00
var exclude=['界','新','大','旧','☆','神','晋','族','谋'];
2018-04-17 07:32:43 +00:00
for(var i in lib.character){
if(lib.filter.characterDisabled(i)) continue;
2020-06-06 04:40:45 +00:00
if(lib.character[i][1]=='key') continue;
2018-04-17 07:32:43 +00:00
var surname=lib.translate[i];
for(var j=0;j<surname.length;j++){
Our Song. 马上就要高考了,这次的版本更新应该是考前的最后一次更新了。 真的很感谢这段时间以来身边的大家。身边的老师和同学也好,Key圈的各位键子们也好,无名杀玩家们也好,正是有了你们的陪伴和支持,我才能够坚持下来,走到今天的这一步。 祝愿包括我自己在内的所有考生高考顺利,金榜题名吧! 最后,在这里复制粘贴一下《Angel Beats!》TV版的ED,某种意义上也是仲村ゆり的角色歌的《Brave Song》的歌词: ``` いつもひとりで歩いてた 振り返るとみんなは遠く 一路走来形单影只 转身回首望去 大家已经远去 それでもあたしは歩いた それが強さだった 即使如此我依然前行 这正是我的坚强 もう何も恐くない そう呟いてみせる 经历 使我无所畏惧 再多冷漠也是一句叹息 いつか人は一人になって 思い出の中に生きてくだけ 总有一天人将学会独立 在回忆中寻找自己的影子 孤独さえ愛し笑ってられるように あたしは戦うんだ 为了那笑容下与孤独作伴的勇气 我决定战斗到底 涙なんて見せないんだ 我已不再哭泣 いつもひとりで歩いてた 行く先には崖が待ってた 一路走来形单影只 而前方等着的却是山崖 それでもあたしは歩いた 強さの証明のため 即使如此我依然前行 为了证明这份坚强 吹き付ける強い風 汗でシャツが張りつく 强风吹过 汗水将衣服粘湿 いつか忘れてしまえるなら 生きることそれはたやすいもの 若有一天将一切尽数忘掉的话 生存其实并不困难 忘却の彼方へと落ちていくなら それは逃げることだろう 而若坠落在那忘却的彼端的话 那便成了逃避吧 生きた意味すら消えるだろう 就连生存的意义也会消失殆尽吧 風はやがて凪いでた 汗も乾いて 风终于停息 汗也干了 お腹が空いてきたな 何かあったっけ 肚子也饿了啊 有什么可吃的吗 賑やかな声と共にいい匂いがやってきた 同熙攘的声音一道 喷香的味道也传了过来 いつもひとりで歩いてた みんなが待っていた 一路走来形单影只 大家在前方等着我 いつか人は一人になって 思い出の中に生きてくだけ 总有一天人将学会独立 在回忆中寻找自己的影子 それでもいい 安らかなこの気持ちは それを仲間と呼ぶんだ 这倒也没什么 这种安宁的感情 称之为伙伴 いつかみんなと過ごした日々も忘れてどこかで生きてるよ 有一天我会忘掉和大家在一起度过的日子而生活在他乡 その時はもう強くなんかないよ 到了那时 我不会再坚强了 普通の女の子の弱さで涙を零すよ 像普通的女孩一样流下柔弱的泪水 ```
2020-07-03 05:22:31 +00:00
if((surname[j]+surname[j+1])=='手杀'){j++;continue}
2018-04-17 07:32:43 +00:00
if(exclude.contains(surname[j])) continue;
if(!/[a-z]/i.test(surname[j])){
var index=list1.indexOf(surname[j]);
if(index!=-1&&surname[j+1]==list2[index]){
surname=surname[j]+surname[j+1];
}
else{
surname=surname[j];
}
break;
}
}
if(!map[surname]){
map[surname]=[];
}
map[surname].push(i);
}
for(var i in map){
if(map[i].length<4){
delete map[i];
}
else{
map3.push(i);
}
}
_status.brawl.map=map;
_status.brawl.map3=map3;
},
content:{
submode:'two',
chooseCharacterFixed:true,
chooseCharacter:function(list,player){
2020-04-03 12:09:26 +00:00
game.versusVideoName='同姓之争';
2020-12-09 13:40:44 +00:00
_status.noReplaceCharacter=true;
2018-04-17 07:32:43 +00:00
if(player.side==game.me.side){
if(_status.brawl.mylist){
return _status.brawl.mylist.randomGets(2);
}
}
else{
if(_status.brawl.enemylist){
return _status.brawl.enemylist.randomGets(2);
}
}
var surname=_status.brawl.map3.randomRemove();
var list=_status.brawl.map[surname];
if(player==game.me){
_status.brawl.mylist=list;
}
else{
_status.brawl.enemylist=list;
}
return list.randomRemove(2);
}
}
},
tongqueduopao:{
name:'铜雀夺袍',
mode:'identity',
intro:[
'主公必选曹操',
'其余玩家从曹休、文聘、曹洪、张郃、夏侯渊、徐晃、许褚这些武将中随机选中一个',
'游戏开始时将麒麟弓和爪黄飞电各置于每名角色的装备区内,大宛马洗入牌堆,移除其他的武器牌和坐骑牌'
],
init:function(){
game.saveConfig('player_number','8','identity');
game.saveConfig('double_character',false,'identity');
},
showcase:function(init){
var node=this;
2020-01-11 12:17:57 +00:00
var list=['caoxiu','wenpin','caohong','zhanghe','re_xiahouyuan','re_xuhuang','re_xuzhu'];
2018-04-17 07:32:43 +00:00
list.randomSort();
list.push('re_caocao');
var func=function(){
var card=ui.create.player(null,true);
card.init(list.shift());
card.node.marks.remove();
card.node.count.remove();
card.node.hp.remove();
node.nodes.push(card);
card.style.position='absolute';
card.style.zIndex=2;
card.style.transition='all 2s';
var rand1=Math.round(Math.random()*100);
var rand2=Math.round(Math.random()*100);
var rand3=Math.round(Math.random()*40)-20;
card.style.left='calc('+rand1+'% - '+(rand1*1.5)+'px)';
card.style.top='calc('+rand2+'% - '+(rand2*1.8)+'px)';
card.style.transform='scale(0.8) rotate('+rand3+'deg)';
node.appendChild(card);
ui.refresh(card);
};
2016-08-18 10:51:06 +00:00
2018-04-17 07:32:43 +00:00
var list2=['qilin','dawan','zhuahuang'];
var func2=function(){
var card=game.createCard(list2.shift(),'noclick');
node.nodes.push(card);
card.style.position='absolute';
card.style.zIndex=2;
card.style.transition='all 2s';
var rand1=Math.round(Math.random()*100);
var rand2=Math.round(Math.random()*100);
var rand3=Math.round(Math.random()*40)-20;
card.style.left='calc('+rand1+'% - '+rand1+'px)';
card.style.top='calc('+rand2+'% - '+rand2+'px)';
card.style.transform='rotate('+rand3+'deg)';
node.appendChild(card);
ui.refresh(card);
};
2016-08-18 10:51:06 +00:00
2018-04-17 07:32:43 +00:00
if(init){
node.nodes=[];
}
else{
while(node.nodes.length){
node.nodes.shift().remove();
}
}
for(var i=0;i<5;i++){
func();
}
for(var i=0;i<3;i++){
func2();
func();
}
var func3=function(){
for(var i=0;i<node.nodes.length;i++){
var card=node.nodes[i];
if(card.classList.contains('player')){
var rand1=Math.round(Math.random()*100);
var rand2=Math.round(Math.random()*100);
var rand3=Math.round(Math.random()*40)-20;
card.style.left='calc('+rand1+'% - '+(rand1*1.5)+'px)';
card.style.top='calc('+rand2+'% - '+(rand2*1.8)+'px)';
card.style.transform='scale(0.8) rotate('+rand3+'deg)';
}
else{
var rand1=Math.round(Math.random()*100);
var rand2=Math.round(Math.random()*100);
var rand3=Math.round(Math.random()*40)-20;
card.style.left='calc('+rand1+'% - '+rand1+'px)';
card.style.top='calc('+rand2+'% - '+rand2+'px)';
card.style.transform='rotate('+rand3+'deg)';
}
}
}
// func3();
// node.showcaseinterval=setInterval(func3,5000);
},
content:{
cardPile:function(list){
for(var i=0;i<list.length;i++){
var subtype=get.subtype(list[i][2]);
if(subtype=='equip1'||subtype=='equip3'||subtype=='equip4'){
list.splice(i--,1);
}
}
for(var i=0;i<8;i++){
list.push([['heart','diamond','club','spade'].randomGet(),Math.ceil(Math.random()*13),'dawan']);
}
return list;
},
gameStart:function(){
2020-04-03 12:09:26 +00:00
game.identityVideoName='铜雀夺袍';
2018-04-17 07:32:43 +00:00
for(var i=0;i<game.players.length;i++){
game.players[i].$equip(game.createCard('qilin'));
game.players[i].$equip(game.createCard('zhuahuang'));
}
},
submode:'normal',
2020-01-11 12:17:57 +00:00
list:['caoxiu','wenpin','caohong','zhanghe','re_xiahouyuan','re_xuhuang','re_xuzhu'],
2018-04-17 07:32:43 +00:00
chooseCharacterFixed:true,
chooseCharacterAi:function(player){
if(player==game.zhu){
player.init('re_caocao');
}
else{
_status.brawl.list.remove(game.me.name);
player.init(_status.brawl.list.randomRemove());
}
},
chooseCharacter:function(){
2020-12-09 13:40:44 +00:00
_status.noReplaceCharacter=true;
2018-04-17 07:32:43 +00:00
if(game.me==game.zhu){
return ['re_caocao'];
}
else{
_status.brawl.list.randomSort();
return _status.brawl.list;
// return _status.brawl.list.randomGets(1);
}
}
}
},
// shenrudihou:{
2020-02-14 05:33:43 +00:00
// name:'深入敌后',
// mode:'versus',
// submode:'1v1',
// intro:'选将阶段选择武将和对战阶段选择上场的武将都由对手替你选择,而且你不知道对手为你选择了什么武将'
2018-04-17 07:32:43 +00:00
// },
tongjiangmoshi:{
name:'同将模式',
mode:'identity',
intro:'玩家选择一个武将,所有角色均使用此武将',
showcase:function(init){
if(init){
this.nodes=[];
}
else{
while(this.nodes.length){
this.nodes.shift().remove();
}
}
var lx=this.offsetWidth/2-120;
var ly=Math.min(lx,this.offsetHeight/2-60);
var setPos=function(node){
var i=node.index;
var deg=Math.PI/4*i;
var dx=Math.round(lx*Math.cos(deg));
var dy=Math.round(ly*Math.sin(deg));
node.style.transform='translate('+dx+'px,'+dy+'px)';
}
for(var i=0;i<8;i++){
var node=ui.create.player(null,true);
this.nodes.push(node);
node.init('zuoci');
node.classList.add('minskin');
node.node.marks.remove();
node.node.hp.remove();
node.node.count.remove();
node.style.left='calc(50% - 60px)';
node.style.top='calc(50% - 60px)';
node.index=i;
2017-11-07 10:41:45 +00:00
node.style.borderRadius='100%';
node.node.avatar.style.borderRadius='100%';
node.node.name.remove();
2018-04-17 07:32:43 +00:00
setPos(node);
this.appendChild(node);
}
var nodes=this.nodes;
this.showcaseinterval=setInterval(function(){
for(var i=0;i<nodes.length;i++){
nodes[i].index++;
if(nodes[i].index>7){
nodes[i].index=0;
}
setPos(nodes[i]);
}
},1000);
},
content:{
gameStart:function(){
2020-04-03 12:09:26 +00:00
game.identityVideoName='同将模式';
2018-04-17 07:32:43 +00:00
var target=(_status.mode=='zhong')?game.zhong:game.zhu;
if(get.config('double_character')){
2021-01-27 12:48:29 +00:00
target.init(game.me.name1,game.me.name2);
2018-04-17 07:32:43 +00:00
}
else{
2021-01-27 12:48:29 +00:00
target.init(game.me.name1);
2018-04-17 07:32:43 +00:00
}
target.hp++;
target.maxHp++;
target.update();
},
chooseCharacterAi:function(player,list,list2,back){
if(player==game.zhu){
return;
}
else{
if(get.config('double_character')){
2021-01-27 12:48:29 +00:00
player.init(game.me.name1,game.me.name2);
2018-04-17 07:32:43 +00:00
}
else{
2021-01-27 12:48:29 +00:00
player.init(game.me.name1);
2018-04-17 07:32:43 +00:00
}
}
},
chooseCharacter:function(list,list2,num){
if(game.me!=game.zhu){
return list.slice(0,list2);
}
else{
if(_status.event.zhongmode){
return list.slice(0,6);
}
else{
return list.concat(list2.slice(0,num));
}
}
2021-01-27 12:48:29 +00:00
},
chooseCharacterBefore:function(){
if(_status.mode=='purple') _status.mode='normal';
},
2018-04-17 07:32:43 +00:00
}
},
2020-02-16 04:25:41 +00:00
jiazuzhizheng:{
name:'家族之争',
mode:'versus',
submode:'2v2',
intro:'势力相同的武将组合一队,获得专属势力技能',
showcase:function(init){
var node=this;
var getList=function(){
var list=[
2021-06-10 15:27:23 +00:00
['liubei','guanyu','zhangfei'],
['caocao','guojia','xunyu'],
['sunquan','zhangzhang','zhouyu'],
['re_yuanshao','guotufengji','yj_jushou'],
['jin_simayi','jin_simazhao','jin_wangyuanji'],
2020-02-16 04:25:41 +00:00
];
2020-07-31 02:16:01 +00:00
if(_status.keyVerified) list.push(['key_yuri','key_yuzuru','sp_key_kanade'])
2020-02-16 04:25:41 +00:00
list.randomSort();
var list2=[];
for(var i=0;i<list.length;i++){
list2=list2.concat(list[i]);
}
node.list=list2;
};
var func=function(){
if(!node.list.length){
getList();
}
var card=ui.create.player(null,true);
card.init(node.list.shift());
card.node.marks.remove();
card.node.count.remove();
card.node.hp.remove();
node.nodes.push(card);
card.style.position='absolute';
var rand1=Math.round(Math.random()*100);
var rand2=Math.round(Math.random()*100);
var rand3=Math.round(Math.random()*40)-20;
card.style.left='calc('+rand1+'% - '+(rand1*1.5)+'px)';
card.style.top='calc('+rand2+'% - '+(rand2*1.8)+'px)';
card.style.transform='scale(1.2) rotate('+rand3+'deg)';
card.style.opacity=0;
ui.refresh(card);
node.appendChild(card);
ui.refresh(card);
card.style.transform='scale(0.9) rotate('+rand3+'deg)';
card.style.opacity=1;
if(node.nodes.length>4){
setTimeout(function(){
while(node.nodes.length>3){
node.nodes.shift().delete();
}
},500);
}
};
node.list=[];
if(init){
node.nodes=[];
for(var i=0;i<3;i++){
func();
}
}
node.showcaseinterval=setInterval(func,1000);
},
init:function(){},
content:{
submode:'two',
chooseCharacterFixed:true,
chooseCharacterBefore:function(){
2020-12-09 13:40:44 +00:00
_status.noReplaceCharacter=true;
2020-04-03 12:09:26 +00:00
game.versusVideoName='家族之争';
2020-02-16 04:25:41 +00:00
var map={
wei:[],
shu:[],
wu:[],
qun:[],
2021-06-10 15:27:23 +00:00
jin:[],
2020-02-16 04:25:41 +00:00
key:[],
};
var map3=[];
var banned=['zuoci','re_zuoci','tw_xiahouba'];
for(var i in lib.character){
if(lib.filter.characterDisabled2(i)||lib.filter.characterDisabled(i)||banned.contains(i)) continue;
var group=lib.character[i][1];
if(group&&map[group]) map[group].push(i);
}
for(var i in map){
2020-07-31 02:16:01 +00:00
if(map[i].length<8||(i=='key'&&!_status.keyVerified)){
2020-02-16 04:25:41 +00:00
delete map[i];
}
else{
map3.push(i);
}
}
_status.brawl.map=map;
_status.brawl.map3=map3;
var skill={
_jiazu_wei:{
trigger:{player:'phaseBegin'},
direct:true,
popup:'魏业',
prompt2:'回合开始时,你可以弃置一张牌并指定一名敌方角色,该角色须弃置一张牌,否则你摸一张牌。',
filter:function(event,player){
return player.group=='wei'&&player.countCards('he')>0;
},
content:function(){
'step 0'
player.chooseCardTarget({
prompt:get.prompt2(event.name),
filterCard:lib.filter.cardDiscardable,
filterTarget:function(card,player,target){
return player.side!=target.side;
},
position:'he',
ai1:function(card){
return 6-get.value(card);
},
ai2:function(target){
return 1/(1+target.countCards('he'));
},
});
'step 1'
if(result.bool){
player.logSkill(event.name,result.targets);
player.discard(result.cards);
result.targets[0].chooseToDiscard('弃置一张牌,或令'+get.translation(player)+'摸一张牌','he').ai=lib.skill.zhiheng.check;
}
else event.finish();
'step 2'
if(!result.bool) player.draw();
},
},
_jiazu_shu:{
popup:'蜀义',
prompt2:'你使用【杀】上限+1出牌阶段结束时若你于此阶段使用【杀】次数不少于2摸一张牌。',
mod:{
cardUsable:function(card,player,num){
if(card.name=='sha'&&player.group=='shu') return num+1;
},
},
trigger:{player:'phaseUseEnd'},
forced:true,
filter:function(event,player){
return player.group=='shu'&&player.getHistory('useCard',function(evt){
return evt.card&&evt.card.name=='sha'&&evt.getParent('phaseUse')==event;
}).length>1;
},
content:function(){player.draw()},
},
_jiazu_wu:{
trigger:{player:'phaseEnd'},
forced:true,
popup:'吴耀',
prompt2:'回合结束时,若你的手牌数不等于你的体力值,则你摸一张牌。',
filter:function(event,player){
return player.group=='wu'&&player.countCards('h')!=player.hp;
},
content:function(){player.draw()},
},
_jiazu_qun:{
popup:'群心',
prompt2:'锁定技弃牌阶段开始时若你的手牌数比体力值多2或更多你本回合手牌上限+1若你已损失体力值大于1你手牌上限+1',
trigger:{player:'phaseDiscardBegin'},
forced:true,
filter:function(event,player){
return player.group=='qun'&&(player.isDamaged()||player.countCards('h')-player.hp>1);
},
content:function(){
var num=0;
if(player.isDamaged()) num++;
if(player.countCards('h')-player.hp>1) num++;
player.addMark('qunxin_temp',num,false);
player.addTempSkill('qunxin_temp','phaseDiscardEnd');
},
},
2021-06-10 15:27:23 +00:00
_jiazu_jin:{
trigger:{player:'phaseDrawEnd'},
popup:'晋势',
prompt2:'摸牌阶段结束时,你可以展示你于此阶段内因摸牌而获得的牌。若这些牌的花色均不同,则你摸一张牌。',
filter:function(event,player){
var hs=player.getCards('h');
return player.group=='jin'&&hs.length>0&&player.getHistory('gain',function(evt){
if(evt.getParent().name!='draw'||evt.getParent('phaseDraw')!=event) return false;
for(var i of evt.cards){
if(hs.contains(i)) return true;
}
return false;
}).length>0;
},
check:function(event,player){
var hs=player.getCards('h'),cards=[],suits=[];
player.getHistory('gain',function(evt){
if(evt.getParent().name!='draw'||evt.getParent('phaseDraw')!=event) return false;
for(var i of evt.cards){
if(hs.contains(i)){
cards.add(i);
suits.add(get.suit(i,player));
}
}
});
return cards.length==suits.length;
},
content:function(){
var hs=player.getCards('h'),cards=[],suits=[];
player.getHistory('gain',function(evt){
if(evt.getParent().name!='draw'||evt.getParent('phaseDraw')!=trigger) return false;
for(var i of evt.cards){
if(hs.contains(i)){
cards.add(i);
suits.add(get.suit(i,player));
}
}
});
player.showCards(cards,get.translation(player)+'发动了【晋势】');
if(cards.length==suits.length) player.draw();
},
},
2020-02-16 04:25:41 +00:00
_jiazu_key:{
enable:'phaseUse',
usable:1,
popup:'键魂',
filter:function(event,player){
return player.group=='key';
},
prompt2:'出牌阶段限一次你可以摸一张牌并获得1点护甲。若如此做你于当前回合结束时失去1点体力。',
content:function(){
"step 0"
player.draw();
"step 1"
player.changeHujia(1);
"step 2"
var evt=event.getParent('phase');
if(evt&&evt.after){
var next=player.loseHp();
event.next.remove(next);
evt.after.push(next);
}
},
ai:{
order:10,
result:{
player:function(player){
return player.hp-1;
},
},
},
},
qunxin_temp:{
noGlobal:true,
onremove:true,
mod:{
maxHandcard:function(player,num){
return num+player.countMark('qunxin_temp');
},
},
},
_jiazu_awaken_wei:{
popup:'许昌',
intro:{
content:'锁定技,当你受到伤害后,你摸一张牌。',
},
trigger:{player:'damageEnd'},
forced:true,
filter:function(event,player){
return player._jiazuAwaken&&player.group=='wei';
},
content:function(){player.draw()},
},
_jiazu_awaken_shu:{
popup:'成都',
intro:{
content:'锁定技,当你使用【杀】造成伤害后,你摸一张牌。',
},
trigger:{source:'damageEnd'},
forced:true,
filter:function(event,player){
return player._jiazuAwaken&&player.group=='shu'&&event.card&&event.card.name=='sha';
},
content:function(){player.draw()},
},
_jiazu_awaken_wu:{
popup:'武昌',
intro:{
content:'锁定技,当你使用装备牌时,你摸一张牌。',
},
trigger:{player:'useCard'},
forced:true,
filter:function(event,player){
return player._jiazuAwaken&&player.group=='wu'&&get.type(event.card)=='equip';
},
content:function(){player.draw()},
},
_jiazu_awaken_qun:{
popup:'邺城',
intro:{
content:'锁定技,当你使用锦囊牌指定其他角色为目标后,你摸一张牌。',
},
trigger:{player:'useCardToPlayered'},
forced:true,
filter:function(event,player){
if(!player._jiazuAwaken||player.group!='qun'||!event.isFirstTarget||get.type(event.card,'trick')!='trick') return false;
for(var i=0;i<event.targets.length;i++){
if(event.targets[i]!=player) return true;
}
return false;
},
content:function(){player.draw()},
},
_jiazu_awaken_key:{
popup:'光坂',
intro:{
content:'锁定技,当你回复/失去体力后,你摸一张牌。',
},
trigger:{player:['loseHpEnd','recoverEnd']},
forced:true,
filter:function(event,player){
return player._jiazuAwaken&&player.group=='key';
},
content:function(){
player.draw();
},
},
2021-06-10 15:27:23 +00:00
_jiazu_awaken_jin:{
popup:'洛阳',
intro:{
content:'锁定技结束阶段若你手牌中的花色数小于3则你摸一张牌。',
},
trigger:{player:'phaseJieshuBegin'},
forced:true,
filter:function(event,player){
if(!player._jiazuAwaken||player.group!='jin') return false;
var hs=player.getCards('h'),suits=[];
if(hs.length<3) return true;
for(var i of hs){
suits.add(get.suit(i,player));
if(suits.length>2) return false;
}
return true;
},
content:function(){
player.draw();
},
},
2020-02-16 04:25:41 +00:00
_jiazu_awaken:{
trigger:{global:'die'},
forced:true,
filter:function(event,player){
return !player._jiazuAwaken&&event.player.side==player.side;
},
content:function(){
player._jiazuAwaken=true;
var name='_jiazu_awaken_'+player.group;
if(lib.skill[name]) player.markSkill(name);
},
},
};
2020-04-03 12:09:26 +00:00
var translate={};
2020-02-16 04:25:41 +00:00
for(var i in skill){
lib.skill[i]=skill[i];
2020-04-03 12:09:26 +00:00
if(skill[i].popup){
lib.translate[i]=skill[i].popup;
translate[i]=skill[i].popup;
}
if(skill[i].prompt2){
lib.translate[i+'_info']=skill[i].prompt2;
translate[i+'_info']=skill[i].prompt2;
}
2020-02-16 04:25:41 +00:00
if(!skill[i].noGlobal) game.addGlobalSkill(i);
2020-04-03 12:09:26 +00:00
};
game.addVideo('arrangeLib',null,{
skill:{
_jiazu_wei:{
popup:'魏业',
prompt2:'回合开始时,你可以弃置一张牌并指定一名敌方角色,该角色须弃置一张牌,否则你摸一张牌。',
},
_jiazu_shu:{
popup:'蜀义',
prompt2:'你使用【杀】上限+1出牌阶段结束时若你于此阶段使用【杀】次数不少于2摸一张牌。',
},
_jiazu_wu:{
popup:'吴耀',
prompt2:'回合结束时,若你的手牌数不等于你的体力值,则你摸一张牌。',
},
_jiazu_qun:{
popup:'群心',
prompt2:'锁定技弃牌阶段开始时若你的手牌数比体力值多2或更多你本回合手牌上限+1若你已损失体力值大于1你手牌上限+1',
},
2021-06-10 15:27:23 +00:00
_jiazu_jin:{
popup:'晋势',
prompt2:'摸牌阶段结束时,你可以展示你于此阶段内因摸牌而获得的牌。若这些牌的花色均不同,则你摸一张牌。',
},
2020-04-03 12:09:26 +00:00
_jiazu_key:{
popup:'键魂',
prompt2:'出牌阶段限一次你可以摸一张牌并获得1点护甲。若如此做你于当前回合结束时失去1点体力。',
},
_jiazu_awaken_wei:{
popup:'许昌',
intro:{
content:'锁定技,当你受到伤害后,你摸一张牌。',
},
},
_jiazu_awaken_shu:{
popup:'成都',
intro:{
content:'锁定技,当你使用【杀】造成伤害后,你摸一张牌。',
},
},
_jiazu_awaken_wu:{
popup:'武昌',
intro:{
content:'锁定技,当你使用装备牌时,你摸一张牌。',
},
},
_jiazu_awaken_qun:{
popup:'邺城',
intro:{
content:'锁定技,当你使用锦囊牌指定其他角色为目标后,你摸一张牌。',
},
},
2021-06-10 15:27:23 +00:00
_jiazu_awaken_jin:{
popup:'洛阳',
intro:{
content:'锁定技结束阶段若你手牌中的花色数小于3则你摸一张牌。',
},
},
2020-04-03 12:09:26 +00:00
_jiazu_awaken_key:{
popup:'光坂',
intro:{
content:'锁定技,当你回复/失去体力后,你摸一张牌。',
},
},
_jiazu_awaken:{},
},
translate:translate,
});
2020-02-16 04:25:41 +00:00
},
chooseCharacter:function(list,player){
if(player.side==game.me.side){
if(_status.brawl.mylist){
return _status.brawl.mylist.randomGets(player==game.me?5:3);
}
}
else{
if(_status.brawl.enemylist){
return _status.brawl.enemylist.randomGets(player==game.me?5:3);
}
}
var surname=_status.brawl.map3.randomRemove();
var list=_status.brawl.map[surname];
if(player==game.me){
_status.brawl.mylist=list;
}
else{
_status.brawl.enemylist=list;
}
return list.randomRemove(player==game.me?5:3);
}
}
},
2020-02-14 05:33:43 +00:00
baiyidujiang:{
name:'白衣渡江',
mode:'versus',
submode:'2v2',
showcase:function(init){
var node=this;
var player1,player2;
if(init){
2022-04-30 12:32:57 +00:00
player1=ui.create.player(null,true);
player1.classList.add('fullskin');
player1.node.avatar.show();
player1.node.avatar.setBackground('lvmeng','character');
player2=ui.create.player(null,true)
player2.classList.add('fullskin');
player2.node.avatar.show();
player2.node.avatar.setBackground('guanyu','character');
2020-02-14 05:33:43 +00:00
player1.node.marks.remove();
player1.node.hp.remove();
player2.node.marks.remove();
player2.node.hp.remove();
player1.style.left='20px';
player1.style.top='20px';
player1.style.transform='scale(0.9)';
2020-03-05 13:10:37 +00:00
player1.node.count.remove();
2020-02-14 05:33:43 +00:00
player2.style.left='auto';
player2.style.right='20px';
player2.style.top='20px';
player2.style.transform='scale(0.9)';
2020-03-05 13:10:37 +00:00
player2.node.count.remove();
2020-02-14 05:33:43 +00:00
this.appendChild(player1);
this.appendChild(player2);
this.player1=player1;
this.player2=player2;
}
else{
player1=this.player1;
player2=this.player2;
}
var func=function(){
setTimeout(function(){
2022-04-30 12:32:57 +00:00
player1.smoothAvatar();
player2.smoothAvatar();
player1.node.avatar.setBackground('re_lvmeng','character');
player2.node.avatar.setBackground('re_guanyu','character');
2020-02-14 05:33:43 +00:00
},1500);
setTimeout(function(){
2022-04-30 12:32:57 +00:00
player1.smoothAvatar();
player2.smoothAvatar();
player1.node.avatar.setBackground('sp_lvmeng','character');
player2.node.avatar.setBackground('jsp_guanyu','character');
2020-02-14 05:33:43 +00:00
},3000);
setTimeout(function(){
2022-04-30 12:32:57 +00:00
player1.smoothAvatar();
player2.smoothAvatar();
player1.node.avatar.setBackground('shen_lvmeng','character');
player2.node.avatar.setBackground('shen_guanyu','character');
2020-02-14 05:33:43 +00:00
},4500);
setTimeout(function(){
2022-04-30 12:32:57 +00:00
player1.smoothAvatar();
player2.smoothAvatar();
player1.node.avatar.setBackground('lvmeng','character');
player2.node.avatar.setBackground('guanyu','character');
2020-02-14 05:33:43 +00:00
},6000);
};
node.showcaseinterval=setInterval(func,6000);
func();
},
intro:[
'玩家在选将时可从8张武将牌里选择两张武将牌一张面向大家可见加入游戏另一张是隐藏面孔暗置',
'选择的两张武将牌需满足以下至少两个条件1.性别相同2.体力上限相同3.技能数量相同',
'每名玩家在其回合开始或回合结束时,可以选择将自己的武将牌弃置,然后使用暗置的武将牌进行剩余的游戏'
],
content:{
submode:'two',
chooseCharacterBefore:function(){
2020-04-03 12:09:26 +00:00
game.versusVideoName='白衣渡江';
2020-02-14 05:33:43 +00:00
lib.skill._changeCharacter={
trigger:{player:['phaseBefore','phaseAfter']},
forced:true,
silent:true,
popup:false,
filter:function(event,player){
return player._backupCharacter!=undefined;
},
content:function(){
"step 0"
player.chooseControl('确定','取消').set('dialog',['是否替换自己的武将牌?',[[player._backupCharacter],'character']]).set('ai',function(){
return Math.random()<0.15?'确定':'取消';
});
"step 1"
if(result.control=='确定'){
game.log(player,'将',player.name,'替换为了',player._backupCharacter);
player.reinit(player.name,player._backupCharacter);
player.changeGroup(lib.character[player._backupCharacter][1],false);
delete player._backupCharacter;
}
},
},
game.addGlobalSkill('_changeCharacter');
game.chooseCharacterTwo=function(){
var next=game.createEvent('chooseCharacter',false);
next.setContent(function(){
'step 0'
ui.arena.classList.add('choose-character');
for(var i in lib.skill){
if(lib.skill[i].changeSeat){
lib.skill[i]={};
if(lib.translate[i+'_info']){
lib.translate[i+'_info']='此模式下不可用';
}
}
}
var bool=Math.random()<0.5;
var bool2=Math.random()<0.5;
var ref=game.players[0];
ref.side=bool;
ref.next.side=bool2;
ref.next.next.side=!bool;
ref.previous.side=!bool2;
var firstChoose=game.players.randomGet();
if(firstChoose.next.side==firstChoose.side){
firstChoose=firstChoose.next;
}
_status.firstAct=firstChoose;
for(var i=0;i<4;i++){
firstChoose.node.name.innerHTML=get.verticalStr(get.cnNumber(i+1,true)+'号位');
firstChoose=firstChoose.next;
}
for(var i=0;i<game.players.length;i++){
if(game.players[i].side==game.me.side){
game.players[i].node.identity.firstChild.innerHTML='友';
}
else{
game.players[i].node.identity.firstChild.innerHTML='敌';
}
game.players[i].node.identity.dataset.color=game.players[i].side+'zhu';
}
var list=[];
for(i in lib.character){
if(!lib.filter.characterDisabled(i)){
list.push(i);
}
}
var choose=[];
_status.characterlist=list;
event.filterChoice=function(name1,name2){
var info1=lib.character[name1];
var info2=lib.character[name2];
if(!info1||!info2) return;
2020-03-05 13:10:37 +00:00
var num=0;
if(info1[0]==info2[0]) num++;
if(get.infoMaxHp(info1[2])==get.infoMaxHp(info2[2])) num++;
if(info1[3].length==info2[3].length) num++;
return num>1;
2020-02-14 05:33:43 +00:00
};
var list2=list.randomGets(8);
var next=game.me.chooseButton(2,true,['请选择您的武将牌',[list2,'character']]);
next.set('onfree',true);
next.set('filterButton',function(button){
if(!ui.selected.buttons.length){
for(var i=0;i<list2.length;i++){
if(list2[i]!=button.link&&event.filterChoice(button.link,list2[i])) return true;
}
return false;
}
return event.filterChoice(button.link,ui.selected.buttons[0].link)
});
'step 1'
game.me.init(result.links[0]);
game.me._backupCharacter=result.links[1];
_status.characterlist.removeArray(result.links);
var list=_status.characterlist;
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=game.me){
list.randomSort();
var bool=false;
for(var k=0;k<list.length;k++){
for(var j=i+1;j<list.length;j++){
if(event.filterChoice(list[k],list[j])){
bool=true;
game.players[i].init(list[k]);
game.players[i]._backupCharacter=list[j];
break;
}
}
if(bool) break;
}
}
}
setTimeout(function(){
ui.arena.classList.remove('choose-character');
},500);
2020-07-31 03:00:16 +00:00
if(get.config('two_phaseswap')){
game.addGlobalSkill('autoswap');
if(lib.config.show_handcardbutton){
ui.versushs=ui.create.system('手牌',null,true);
lib.setPopped(ui.versushs,game.versusHoverHandcards,220);
}
}
2020-02-14 05:33:43 +00:00
});
};
}
}
},
2020-08-11 13:05:00 +00:00
qianlidanji:{
name:'千里单骑',
mode:'identity',
showcase:function(init){
var node=this;
var player1;
if(init){
player1=ui.create.player(null,true).init('jsp_guanyu');
player1.node.marks.remove();
player1.node.hp.remove();
player1.style.left='20px';
player1.style.top='20px';
player1.style.transform='scale(0.9)';
player1.node.count.remove();
this.appendChild(player1);
this.player1=player1;
}
else{
player1=this.player1;
}
var func=function(){
var player2=ui.create.player(null,true).init('caiyang');
player2.node.marks.remove();
player2.node.hp.remove();
player2.style.left='auto';
player2.style.right='20px';
player2.style.top='20px';
player2.node.count.remove();
player2.style.transform='scale(0.7)';
player2.style.opacity=0;
node.appendChild(player2);
ui.refresh(player2);
player2.style.opacity=1;
player2.style.transform='scale(0.9)';
setTimeout(function(){
if(!player2) return;
2021-11-26 14:55:37 +00:00
game.linexy([
player1.getLeft()+player1.offsetWidth/2,
player1.getTop()+player1.offsetHeight/2,
player2.getLeft()+player2.offsetWidth/2,
player2.getTop()+player2.offsetHeight/2,
],node);
setTimeout(function(){
var popup=ui.create.div('.damage');
popup.innerHTML='-1';
popup.dataset.nature='soil';
player2.appendChild(popup);
ui.refresh(popup);
popup.classList.add('damageadded');
popup.listenTransition(function(){
setTimeout(function(){
popup.delete();
},300);
});
},250)
2020-08-11 13:05:00 +00:00
},600);
setTimeout(function(){
if(!player2) return;
player2.style.transition='all 0.5s';
player2.style.transform='scale(1.2)';
player2.delete();
2021-11-26 14:55:37 +00:00
},1200);
2020-08-11 13:05:00 +00:00
};
node.showcaseinterval=setInterval(func,2600);
func();
},
intro:[
'无尽而漫长的单挑试炼',
(lib.config.qianlidanji_level?('你的最高纪录是连续通过'+lib.config.qianlidanji_level+'关,是否能够突破这一记录呢?'):'你能否过五关斩六将,击败古城战神蔡阳呢?'),
],
init:function(){
if(!_status.qianlidanji) _status.qianlidanji={
completeNumber:0,
used:['pujing','huban','caiyang'],
addFellow:function(name){
game.fan.dataset.position=2;
ui.arena.setNumber(3);
game.fellow=game.addFellow(1,name);
game.fellow.gain(get.cards(4));
game.fellow.identity='zhong';
game.fellow.setIdentity();
game.fellow.identityShown=true;
game.fellow.node.identity.classList.remove('guessing');
_status.event.getParent('phaseLoop').player=game.fellow;
},
completeReward:[
['回复1点体力并摸一张牌',function(){
game.zhu.recover();
game.zhu.draw();
}],
['摸三张牌',function(){
2020-08-15 00:50:57 +00:00
game.zhu.draw(3);
2020-08-11 13:05:00 +00:00
}],
['将一张防具牌置入装备区并摸一张牌',function(){
var card=get.cardPile(function(card){
return get.subtype(card)=='equip2'&&!get.cardtag(card,'gifts');
});
if(card) game.zhu.equip(card);
game.zhu.draw();
}],
['将一张武器牌置入装备区并摸一张牌',function(){
var card=get.cardPile(function(card){
return get.subtype(card)=='equip1'&&!get.cardtag(card,'gifts');
});
if(card) game.zhu.equip(card);
game.zhu.draw();
}],
['回复2点体力并弃置一张牌',function(){
game.zhu.recover(2);
game.zhu.chooseToDiscard('he',true);
}],
['摸五张牌,然后弃置三张牌',function(){
game.zhu.draw(5);
game.zhu.chooseToDiscard(3,'he',true);
}],
['摸五张牌,然后对手摸两张牌',function(){
game.zhu.draw(5);
game.fan.draw(2);
}],
['将一张武器牌和一张防具牌置入装备区',function(){
var card=get.cardPile(function(card){
return get.subtype(card)=='equip1'&&!get.cardtag(card,'gifts');
});
if(card) game.zhu.equip(card);
var card2=get.cardPile(function(card){
return get.subtype(card)=='equip2'&&!get.cardtag(card,'gifts');
});
if(card2) game.zhu.equip(card2);
}],
['将一张武器牌和一张防御坐骑牌置入装备区',function(){
var card=get.cardPile(function(card){
return get.subtype(card)=='equip1'&&!get.cardtag(card,'gifts');
});
if(card) game.zhu.equip(card);
var card2=get.cardPile(function(card){
return get.subtype(card)=='equip3'&&!get.cardtag(card,'gifts');
});
if(card2) game.zhu.equip(card2);
}],
['弃置所有手牌并于下一关获得【涅槃】(标)',function(){
var hs=game.zhu.getCards('h');
if(hs.length) game.zhu.discard(hs);
2020-08-15 00:50:57 +00:00
game.zhu.addSkill('oldniepan');
2020-08-11 13:05:00 +00:00
game.zhu.restoreSkill('oldniepan');
2020-08-15 00:50:57 +00:00
game.zhu._oldniepan=true;
2020-08-11 13:05:00 +00:00
}],
['获得两张锦囊牌',function(){
var list=[];
while(list.length<2){
var card=get.cardPile(function(card){
return !list.contains(card)&&get.type(card,'trick')=='trick';
});
if(!card) break;
list.push(card);
}
if(list.length) game.zhu.gain(list,'gain2','log');
}],
['将体力回复至体力上限,然后弃置一张牌',function(){
var num=game.zhu.maxHp-game.zhu.hp;
if(num) game.zhu.recover(num);
game.zhu.chooseToDiscard('he',true);
}],
['弃置两张牌,在下一关的第一个回合后进行一个额外的回合',function(){
game.zhu.chooseToDiscard(2,true,'he');
game.zhu.addSkill('qianlidanji_phase');
}],
['摸一张牌,然后将对手翻面',function(){
game.zhu.draw();
game.fan.turnOver(true);
}],
['摸一张牌然后令对手受到1点伤害',function(){
game.zhu.draw();
game.fan.damage(game.zhu);
}],
['获得五张基本牌',function(){
var list=[];
while(list.length<5){
var card=get.cardPile(function(card){
return !list.contains(card)&&get.type(card)=='basic';
});
if(!card) break;
list.push(card);
}
if(list.length) game.zhu.gain(list,'gain2','log');
}],
['失去1点体力然后摸五张牌',function(){
game.zhu.loseHp();
game.zhu.draw(5);
}],
['失去体力至1点然后摸七张牌',function(){
var num=game.zhu.hp-1;
if(num) game.zhu.loseHp(num);
game.zhu.draw(7)
}],
['弃置一张牌然后令对手受到2点伤害',function(){
game.zhu.chooseToDiscard('he',true);
game.fan.damage(game.zhu,2);
}],
['在下一关中召唤普净一同战斗',function(){
_status.qianlidanji.addFellow('pujing');
}],
['在下一关中召唤胡班一同战斗',function(){
_status.qianlidanji.addFellow('huban');
}],
['将一张宝物牌置入装备区并摸一张牌',function(){
var card=get.cardPile(function(card){
return get.subtype(card)=='equip5'&&!get.cardtag(card,'gifts');
});
if(card) game.zhu.equip(card);
game.zhu.draw();
}],
['摸五张牌,然后将自己翻面',function(){
game.zhu.draw(5);
game.zhu.turnOver(true);
}],
['获得一张【酒】和一张【杀】',function(){
var list=[];
var card=get.cardPile(function(card){
return card.name=='sha';
});
if(card) list.push(card);
var card=get.cardPile(function(card){
return card.name=='jiu';
});
if(card) list.push(card);
if(list.length) game.zhu.gain(list,'gain2','log');
}],
2020-08-11 13:05:00 +00:00
],
replace_character:function(){
'step 0'
2020-08-15 00:50:57 +00:00
if(game.zhu._oldniepan){
game.zhu.removeSkill('oldniepan');
delete game.zhu._oldniepan;
}
2020-08-11 13:05:00 +00:00
_status.qianlidanji.completeNumber++;
if(!lib.config.qianlidanji_level||lib.config.qianlidanji_level<_status.qianlidanji.completeNumber){
lib.config.qianlidanji_level=_status.qianlidanji.completeNumber;
game.saveConfig('qianlidanji_level',lib.config.qianlidanji_level);
}
if(game.fellow&&game.fellow.isAlive()){
if(ui.land&&ui.land.player==game.fellow){
game.addVideo('destroyLand');
ui.land.destroy();
}
game.zhu.next=game.fan;
game.fan.next=game.zhu;
game.zhu.nextSeat=game.fan;
game.fan.nextSeat=game.zhu;
game.players.remove(game.fellow);
_status.dying.remove(game.fellow);
game.fellow.out();
for(var mark in game.fellow.marks){
game.fellow.unmarkSkill(mark);
}
while(game.fellow.node.marks.childNodes.length>1){
game.fellow.node.marks.lastChild.remove();
}
for(var i in game.fellow.tempSkills){
game.fellow.removeSkill(i);
}
var skills=game.fellow.getSkills();
for(var i=0;i<skills.length;i++){
if(lib.skill[skills[i]].temp){
game.fellow.removeSkill(skills[i]);
}
}
var cards=game.fellow.getCards('hej');
while(cards.length){
ui.discardPile.appendChild(cards.shift());
}
}
'step 1'
if(game.fellow){
game.dead.remove(game.fellow);
game.fellow.remove();
game.fan.dataset.position=1;
ui.arena.setNumber(2);
game.zhu.next=game.fan;
game.fan.next=game.zhu;
game.zhu.nextSeat=game.fan;
game.fan.nextSeat=game.zhu;
}
if(_status.qianlidanji.completeNumber!=5){
var list=_status.qianlidanji.completeReward.randomGets(3);
var list2=[];
for(var i=0;i<list.length;i++){
list2.push(list[i][1]);
list[i]=list[i][0];
}
if(_status.qianlidanji.completeNumber>=6){
list.push('我不想再打了,直接在这里结束吧!');
list2.push(function(){
game.over(true);
});
}
event.list=list2;
game.zhu.chooseControl().set('choiceList',list).set('prompt','请选择一项奖励(当前已通过'+_status.qianlidanji.completeNumber+'关)');
}
'step 2'
if(_status.qianlidanji.completeNumber!=5){
if(result.index==3){
game.over(true);
return;
}
event.reward=event.list[result.index];
}
_status.characterlist.removeArray(_status.qianlidanji.used);
if(_status.qianlidanji.completeNumber==5) event._result={links:['caiyang']};
else game.zhu.chooseButton(['选择下一关出战的对手',[_status.characterlist.randomGets(3),'character']],true);
'step 3'
_status.event.getParent('phaseLoop').player=game.zhu;
var source=game.fan;
var name=result.links[0];
source.revive(null,false);
_status.characterlist.remove(name);
_status.qianlidanji.used.push(name);
source.uninit();
source.init(name);
game.addVideo('reinit',source,[name]);
source.lose(source.getCards('hej'))._triggered=null;
var gain=4;
var add=0;
switch(_status.qianlidanji.completeNumber){
case 5:break;
case 1:gain=5;break;
case 2:gain=5;add=1;break;
case 3:gain=6;add=1;break;
default:gain=6;add=2;break;
};
source.hp+=add;
source.maxHp+=add;
source.update();
source.gain(get.cards(gain))._triggered=null;
game.triggerEnter(source);
if(event.reward) event.reward();
'step 4'
var cards=Array.from(ui.ordering.childNodes);
while(cards.length){
cards.shift().discard();
}
var evt=_status.event.getParent('phase');
if(evt){
game.resetSkills();
_status.event=evt;
_status.event.finish();
_status.event.untrigger(true);
}
},
};
_status.qianlidanji.player_number=get.config('player_number');
game.saveConfig('player_number','2','identity');
},
content:{
submode:'normal',
chooseCharacterBefore:function(){
game.identityVideoName='千里单骑';
game.saveConfig('player_number',_status.qianlidanji.player_number,'identity');
game.chooseCharacter=function(){
var next=game.createEvent('chooseCharacter',false);
next.showConfig=true;
next.setContent(function(){
"step 0"
ui.arena.classList.add('choose-character');
game.me.identity='zhu';
game.zhu=game.me;
game.fan=game.me.next;
game.fan.identity='fan';
game.zhu.setIdentity();
game.zhu.identityShown=true;
game.zhu.node.identity.classList.remove('guessing');
game.fan.setIdentity();
game.fan.identityShown=true;
game.fan.node.identity.classList.remove('guessing');
event.list=[];
for(var i in lib.character){
if(lib.filter.characterDisabled(i)) continue;
event.list.push(i);
}
event.list.randomSort();
_status.characterlist=event.list.slice(0);
var list=event.list.slice(0,5);
delete event.swapnochoose;
var dialog;
if(event.swapnodialog){
dialog=ui.dialog;
event.swapnodialog(dialog,list);
delete event.swapnodialog;
}
else{
var str='选择角色';
dialog=ui.create.dialog(str,'hidden',[list,'character']);
}
dialog.setCaption('选择角色');
game.me.chooseButton(dialog,true).set('onfree',true);
ui.create.cheat=function(){
_status.createControl=ui.cheat2;
ui.cheat=ui.create.control('更换',function(){
if(ui.cheat2&&ui.cheat2.dialog==_status.event.dialog){
return;
}
if(game.changeCoin){
game.changeCoin(-3);
}
event.list.randomSort();
list=event.list.slice(0,5);
var buttons=ui.create.div('.buttons');
var node=_status.event.dialog.buttons[0].parentNode;
_status.event.dialog.buttons=ui.create.buttons(list,'character',buttons);
_status.event.dialog.content.insertBefore(buttons,node);
buttons.animate('start');
node.remove();
game.uncheck();
game.check();
});
delete _status.createControl;
};
if(lib.onfree){
lib.onfree.push(function(){
event.dialogxx=ui.create.characterDialog('heightset');
if(ui.cheat2){
ui.cheat2.animate('controlpressdownx',500);
ui.cheat2.classList.remove('disabled');
}
});
}
else{
event.dialogxx=ui.create.characterDialog('heightset');
}
ui.create.cheat2=function(){
ui.cheat2=ui.create.control('自由选将',function(){
if(this.dialog==_status.event.dialog){
if(game.changeCoin){
game.changeCoin(50);
}
this.dialog.close();
_status.event.dialog=this.backup;
this.backup.open();
delete this.backup;
game.uncheck();
game.check();
if(ui.cheat){
ui.cheat.animate('controlpressdownx',500);
ui.cheat.classList.remove('disabled');
}
}
else{
if(game.changeCoin){
game.changeCoin(-10);
}
this.backup=_status.event.dialog;
_status.event.dialog.close();
_status.event.dialog=_status.event.parent.dialogxx;
this.dialog=_status.event.dialog;
this.dialog.open();
game.uncheck();
game.check();
if(ui.cheat){
ui.cheat.classList.add('disabled');
}
}
});
if(lib.onfree){
ui.cheat2.classList.add('disabled');
}
}
if(!_status.brawl||!_status.brawl.chooseCharacterFixed){
if(!ui.cheat&&get.config('change_choice'))
ui.create.cheat();
if(!ui.cheat2&&get.config('free_choose'))
ui.create.cheat2();
}
"step 1"
if(ui.cheat){
ui.cheat.close();
delete ui.cheat;
}
if(ui.cheat2){
ui.cheat2.close();
delete ui.cheat2;
}
game.addRecentCharacter(result.buttons[0].link);
game.zhu.init(result.buttons[0].link);
_status.characterlist.remove(result.buttons[0].link);
_status.qianlidanji.used.add(result.buttons[0].link);
game.zhu.chooseControl('地狱','困难','普通','简单','无双').set('prompt','请选择游戏难度');
"step 2"
var hp=Math.floor(result.index/2);
event.draw=Math.floor((result.index+1)/2);
if(hp){
game.zhu.hp+=hp;
game.zhu.maxHp+=hp;
game.zhu.update();
}
game.zhu.chooseButton(['请选择对手的登场武将',[_status.characterlist.randomGets(3),'character']],true);
"step 3"
game.fan.init(result.links[0]);
_status.characterlist.remove(result.links[0]);
_status.qianlidanji.used.add(result.links[0]);
if(event.draw){
game.zhu.directgain(get.cards(event.draw));
}
setTimeout(function(){
ui.arena.classList.remove('choose-character');
},500);
var pack={
character:{
pujing:['male','qun',1,[],[]],
huban:['male','qun',2,[],[]],
caiyang:['male','qun',1,['zhuixi'],[]],
2020-08-11 13:05:00 +00:00
},
translate:{
pujing:'普净',
huban:'胡班',
},
skill:{
qianlidanji_phase:{
trigger:{global:'phaseBefore'},
forced:true,
silent:true,
firstDo:true,
content:function(){
player.removeSkill('qianlidanji_phase');
player.insertPhase();
},
},
},
};
for(var i in pack){
for(var j in pack[i]){
lib[i][j]=pack[i][j];
}
}
delete pack.skill;
game.addVideo('arrangeLib',null,pack);
game.addOverDialog=function(dialog){
dialog.addText('共计通过'+_status.qianlidanji.completeNumber+'关');
};
lib.element.player.dieAfter=function(){
if(this==game.fellow) return;
_status.characterlist.removeArray(_status.qianlidanji.used);
if(game.zhu==this||!_status.characterlist.length){
var bool=false;
if(_status.qianlidanji.completeNumber>5) bool=true;
game.over(bool);
}
else{
var next=game.createEvent('qianlidanji_replace',false);
next.setContent(_status.qianlidanji.replace_character);
}
};
lib.element.player.dieAfter2=function(){
_status.characterlist.removeArray(_status.qianlidanji.used);
};
game.zhu.dieAfter=lib.element.player.dieAfter;
game.fan.dieAfter=lib.element.player.dieAfter;
game.zhu.dieAfter2=lib.element.player.dieAfter2;
game.fan.dieAfter2=lib.element.player.dieAfter2;
});
};
}
}
},
2020-07-31 02:16:01 +00:00
liangjunduilei:{
name:'两军对垒',
mode:'versus',
submode:'2v2',
showcase:function(init){
var node=this;
var player1,player2;
var list=[
['re_sp_zhugeliang','yujin_yujin','re_zhangliao','re_lusu'],
['re_huangzhong','re_xiahouyuan','zhanghe','xin_fazheng'],
['re_caocao','xin_yuanshao','guotufengji','re_guojia'],
['chunyuqiong','sp_xuyou','re_xuhuang','gaolan'],
['re_sp_zhugeliang','re_zhangzhang','guyong','re_lusu'],
['yj_jushou','re_caocao','jsp_guanyu','re_yanwen'],
['re_lingtong','re_lidian','re_zhangliao','re_ganning'],
['re_guanyu','caoren','re_lvmeng','guanping'],
].randomGet();
if(_status.keyVerified){
list=[
['caozhen','key_hisako','key_iwasawa','sp_key_kanade'],
].randomGet();
}
if(init){
2021-11-26 14:55:37 +00:00
player1=ui.create.player(null,true);
player2=ui.create.player(null,true);
2020-07-31 02:16:01 +00:00
player1.node.marks.remove();
player1.node.hp.remove();
player2.node.marks.remove();
player2.node.hp.remove();
player1.style.left='20px';
player1.style.top='20px';
player1.style.transform='scale(0.9)';
player1.node.count.remove();
player2.style.left='auto';
player2.style.right='20px';
player2.style.top='20px';
player2.style.transform='scale(0.9)';
player2.node.count.remove();
this.appendChild(player1);
this.appendChild(player2);
this.player1=player1;
this.player2=player2;
}
else{
player1=this.player1;
player2=this.player2;
}
var player3,player4;
if(init){
2021-11-26 14:55:37 +00:00
player3=ui.create.player(null,true);
player4=ui.create.player(null,true);
2020-07-31 02:16:01 +00:00
player3.node.marks.remove();
player3.node.hp.remove();
player4.node.marks.remove();
player4.node.hp.remove();
player3.style.left='60px';
player3.style.top='120px';
player3.style.transform='scale(0.9)';
player3.node.count.remove();
player4.style.left='auto';
player4.style.right='60px';
player4.style.top='120px';
player4.style.transform='scale(0.9)';
player4.node.count.remove();
this.appendChild(player3);
this.appendChild(player4);
this.player3=player3;
this.player4=player4;
}
else{
player3=this.player3;
player4=this.player4;
}
2021-11-26 14:55:37 +00:00
player1.init(list[0]);
player2.init(list[1]);
player3.init(list[3]);
player4.init(list[2]);
2020-07-31 02:16:01 +00:00
},
intro:['双方使用特定的武将,搭配特定的技能,还原特定的经典场景'],
content:{
submode:'two',
chooseCharacterBefore:function(){
var list=[
{
name:'草船借箭',
place:[true,false,false,true],
character:['re_sp_zhugeliang','yujin_yujin','re_zhangliao','re_lusu'],
lib:{
character:{
re_sp_zhugeliang:['male','shu',3,['tiaoxin','bazhen','feiying'],[]],
yujin_yujin:['male','wei',4,['jiangchi','danshou'],[]],
re_zhangliao:['male','wei',4,['benxi','tuifeng','qingxi'],[]],
re_lusu:['male','wu',3,['kaikang','shenxian'],[]],
},
translate:{
re_sp_zhugeliang:'诸葛卧龙',
yujin_yujin:'于文则',
re_zhangliao:'张文远',
re_lusu:'鲁子敬',
},
},
},
{
name:'定军山之战',
place:[true,false,false,true],
character:['re_huangzhong','re_xiahouyuan','zhanghe','xin_fazheng'],
lib:{
character:{
re_huangzhong:['male','shu',4,['yingjian','weikui','gzyinghun'],[]],
re_xiahouyuan:['male','wei',4,['benxi','yaowu','dujin','juesi'],[]],
zhanghe:['male','wei',4,['kaikang','xingshang','zhiheng'],[]],
2020-08-07 05:24:17 +00:00
xin_fazheng:['male','shu',4,['xinfu_zhanji','nzry_chenglve','yiji'],[]],
2020-07-31 02:16:01 +00:00
},
translate:{
re_huangzhong:'定军黄忠',
re_xiahouyuan:'定军妙才',
zhanghe:'定军张郃',
xin_fazheng:'定军法正',
},
},
},
{
name:'官渡追击战',
place:[false,true,true,false],
character:['re_caocao','xin_yuanshao','guotufengji','re_guojia'],
lib:{
character:{
re_caocao:['male','wei',4,['fankui','zhuiji','duanbing'],[]],
xin_yuanshao:['male','qun','3/6',['reluanji','kuanggu','benghuai','weizhong'],[]],
guotufengji:['male','qun',2,['sijian','jigong','shifei','jianying'],[]],
re_guojia:['male','wei',3,['yiji','sanyao','gongxin'],[]],
},
translate:{
re_caocao:'官渡曹操',
xin_yuanshao:'官渡袁绍',
guotufengji:'袁军智囊',
re_guojia:'官渡郭嘉',
},
},
},
{
name:'奇袭乌巢',
place:[true,false,false,true],
character:['chunyuqiong','sp_xuyou','re_xuhuang','gaolan'],
lib:{
character:{
chunyuqiong:['male','qun',8,['ranshang','duliang','jiuchi'],[]],
sp_xuyou:['male','qun',3,['qice','lianying','nzry_jianxiang'],[]],
re_xuhuang:['male','wei',4,['shenduan','xiaoguo','nzry_juzhan'],[]],
gaolan:['male','qun',4,['yuanhu','shensu','benyu','suishi'],[]],
},
translate:{
chunyuqiong:'乌巢淳于琼',
sp_xuyou:'乌巢许攸',
re_xuhuang:'乌巢徐晃',
gaolan:'乌巢高览',
},
},
},
{
name:'舌战群儒',
place:[false,true,false,true],
character:['re_zhangzhang','re_sp_zhugeliang','guyong','re_lusu'],
lib:{
character:{
re_sp_zhugeliang:['male','shu',3,['tianbian','jyzongshi','xinfu_guolun'],[]],
re_zhangzhang:['male','wu',3,['zhuandui','tiaoxin','guzheng'],[]],
guyong:['male','wu',3,['qiaoshui','qicai','bingyi'],[]],
re_lusu:['male','wu',3,['qingzhongx','shuimeng'],[]],
},
translate:{
re_sp_zhugeliang:'诸葛卧龙',
re_zhangzhang:'张子布',
guyong:'顾元叹',
re_lusu:'鲁子敬',
},
},
},
{
name:'武圣战双雄',
place:[true,false,false,true],
character:['yj_jushou','re_caocao','jsp_guanyu','re_yanwen'],
lib:{
character:{
yj_jushou:['male','qun',3,['mingce','jianyan','shibei'],[]],
re_caocao:['male','wei',4,['miji','beige','feiying'],[]],
jsp_guanyu:['male','wei',4,['nuzhan','jianchu','new_rewusheng'],[]],
re_yanwen:['male','qun',4,['shuangxiong','zhanyi','zhichi'],[]],
},
translate:{
yj_jushou:'白马沮授',
re_caocao:'白马曹操',
jsp_guanyu:'武圣关羽',
re_yanwen:'颜文双雄',
},
},
},
{
name:'合肥之战',
place:[true,false,false,true],
character:['re_lingtong','re_lidian','re_zhangliao','re_ganning'],
lib:{
character:{
re_lingtong:['male','wu',4,['xuanfeng','zishou','tiaoxin'],[]],
re_lidian:['male','wei',3,['weijing','wangxi','zhuandui'],[]],
re_zhangliao:['male','wei',3,['retuxi','mashu','reyingzi','xinpojun'],[]],
re_ganning:['male','wu',5,['lizhan','jiang','zhenwei'],[]],
},
translate:{
re_lingtong:'合肥凌统',
re_lidian:'合肥李典',
re_zhangliao:'合肥张辽',
re_ganning:'合肥甘宁',
},
},
},
{
name:'荆州之战',
place:[true,false,false,true],
character:['re_guanyu','caoren','re_lvmeng','guanping'],
lib:{
character:{
re_guanyu:['male','shu',5,['wusheng','zishou','zhongyong'],[]],
caoren:['male','wei',1,['xinjiewei','qiuyuan','gzbuqu','xinjushou'],[]],
re_lvmeng:['male','wu',4,['gongxin','duodao','dujin','huituo'],[]],
guanping:['male','shu',5,['longyin','suishi'],[]],
},
translate:{
re_guanyu:'荆州关羽',
caoren:'樊城曹仁',
re_lvmeng:'江东吕蒙',
guanping:'荆州关平',
},
},
},
2022-03-04 06:13:00 +00:00
{
name:'雒城之战',
place:[true,false,false,true],
character:['liubei','re_wuyi','zhangren','pangtong'],
lib:{
character:{
liubei:['male','shu',4,['rezhijian','jijiu','reyingzi'],[]],
re_wuyi:['male','qun',4,['weijing','rerende'],[]],
zhangren:['male','qun',4,['shefu','gnsheque'],[]],
pangtong:['male','shu',3,['dujin'],[]],
},
translate:{
liubei:'雒城刘备',
re_wuyi:'雒城吴懿',
zhangren:'雒城张任',
pangtong:'雒城庞统',
rezhijian:'厚恩',
zhijian:'厚恩',
jijiu:'驰援',
reyingzi:'征令',
rerende:'遣军',
},
},
},
2020-07-31 02:16:01 +00:00
];
if(_status.keyVerified) list=[
{
name:'My Song',
place:[false,true,true,false],
character:['caozhen','key_hisako','key_iwasawa','sp_key_kanade'],
lib:{
character:{
caozhen:['male','wei',4,['xinsidi','tuxi']],
key_hisako:['female','key','2/3',['hisako_yinbao','shenzhi','shiorimiyuki_banyin','hisako_zhuanyun'],[]],
key_iwasawa:['female','key','-999/3',['iwasawa_yinhang','iwasawa_mysong','hisako_zhuanyun']],
sp_key_kanade:['female','key',3,['xinwuyan','xinbenxi']],
},
translate:{
caozhen:'突袭教师',
key_hisako:'绝望恶魔',
key_iwasawa:'引吭孤鸦',
sp_key_kanade:'学生会长',
},
},
},
2020-09-06 06:26:37 +00:00
{
name:'Day Game',
place:[false,true,true,false],
character:['key_yuzuru','sp_key_kanade','key_ayato','key_hinata'],
lib:{
character:{
key_yuzuru:['male','key',4,['hinata_qiulve','kurou']],
sp_key_kanade:['female','key',3,['hinata_qiulve','benxi'],[]],
key_ayato:['male','key',3,['hinata_qiulve','retieji']],
key_hinata:['female','key',4,['hinata_qiulve','hinata_ehou']],
},
translate:{
key_yuzuru:'新秀球王',
sp_key_kanade:'学生会长',
key_ayato:'副会长',
key_hinata:'球队领袖',
},
},
},
2020-07-31 02:16:01 +00:00
]
game.liangjunduilei=list;
game.chooseCharacterTwo=function(){
var next=game.createEvent('chooseCharacter',false);
next.setContent(function(){
'step 0'
for(var i in lib.skill){
if(lib.skill[i].audio&&!lib.skill[i].equipSkill) lib.skill[i].audio=false;
if(lib.skill[i].changeSeat){
lib.skill[i]={};
if(lib.translate[i+'_info']){
lib.translate[i+'_info']='此模式下不可用';
}
}
}
ui.arena.classList.add('choose-character');
var list=game.liangjunduilei;
var id=lib.status.videoId++;
var choiceList=ui.create.dialog('请选择要游玩的剧情','forcebutton');
choiceList.videoId=id;
for(var i=0;i<list.length;i++){
var str='<div class="popup text center" style="width:calc(100% - 10px);display:inline-block">';
str+=list[i].name;
str+='</div>';
var next=choiceList.add(str);
next.firstChild.addEventListener(lib.config.touchscreen?'touchend':'click',ui.click.button);
next.firstChild.link=i;
for(var j in lib.element.button){
next[j]=lib.element.button[i];
}
choiceList.buttons.add(next.firstChild);
}
game.me.chooseButton(true).set('dialog',id).set('onfree',true);
'step 1'
var pack=game.liangjunduilei[result.links[0]];
game.versusVideoName=pack.name;
if(get.is.phoneLayout()){
ui.duileiInfo=ui.create.div('.touchinfo.left',ui.window);
}
else{
ui.duileiInfo=ui.create.div(ui.gameinfo);
}
ui.duileiInfo.innerHTML='当前剧情:'+pack.name;
for(var i in pack.lib){
for(var j in pack.lib[i]){
lib[i][j]=pack.lib[i][j];
}
}
var player=game.players.randomGet();
_status.firstAct=player;
for(var i=0;i<4;i++){
player.init(pack.character[i]);
player.side=pack.place[i];
player=player.next;
}
for(var i=0;i<game.players.length;i++){
if(game.players[i].side==game.me.side){
game.players[i].node.identity.firstChild.innerHTML='友';
}
else{
game.players[i].node.identity.firstChild.innerHTML='敌';
}
game.players[i].node.identity.dataset.color=game.players[i].side+'zhu';
}
game.addVideo('arrangeLib',null,pack.lib);
setTimeout(function(){
ui.arena.classList.remove('choose-character');
},500);
2020-07-31 03:00:16 +00:00
if(get.config('two_phaseswap')){
game.addGlobalSkill('autoswap');
if(lib.config.show_handcardbutton){
ui.versushs=ui.create.system('手牌',null,true);
lib.setPopped(ui.versushs,game.versusHoverHandcards,220);
}
}
2020-07-31 02:16:01 +00:00
});
};
}
}
},
2018-04-17 07:32:43 +00:00
scene:{
name:'创建场景',
content:{
submode:'normal'
},
nostart:true,
fullshow:true,
template:{
mode:'identity',
init:function(){
game.saveConfig('double_character',false,'identity');
_status.brawl.playerNumber=_status.brawl.scene.players.length;
},
showcase:function(init){
if(init){
var name=lib.brawl[this.link].name;
var scene=lib.storage.scene[name];
ui.create.node('button','编辑场景',this,function(){
_status.sceneToLoad=scene;
game.switchScene();
});
if(_status.extensionmade.contains(name)){
ui.create.node('button','管理扩展',this,function(){
ui.click.configMenu();
ui.click.extensionTab(name);
},{marginLeft:'6px'});
}
else{
ui.create.node('button','删除场景',this,function(){
if(confirm('确定删除'+name+'')){
game.removeScene(name);
}
},{marginLeft:'6px'});
}
ui.create.node('button','导出扩展',this,function(){
var str='{name:"'+name+'",content:function(){\nif(lib.config.mode=="brawl"){\n'+
'if(!lib.storage.scene) lib.storage.scene={};\n'+
'if(!lib.storage.scene["'+name+'"]){\nlib.storage.scene["'+name+'"]='+get.stringify(scene)+';\n_status.extensionscene=true;}\n'+
'if(!_status.extensionmade) _status.extensionmade=[];\n'+
'_status.extensionmade.push("'+name+'");\n}}\n}';
var extension={'extension.js':'game.import("extension",function(lib,game,ui,get,ai,_status){return '+str+'})'};
game.importExtension(extension,null,name);
},{marginLeft:'6px'});
}
},
content:{
submode:'normal',
noAddSetting:true,
identityShown:true,
orderedPile:true,
cardPile:function(list){
list.randomSort();
var scene=_status.brawl.scene;
var inpile=[];
for(var i=0;i<list.length;i++){
if(lib.card[list[i][2]]){
if(lib.config.bannedcards.contains(list[i][2])) continue;
if(game.bannedcards&&game.bannedcards.contains(list[i][2])) continue;
inpile.add(list[i][2]);
}
}
var parseInfo=function(info){
var info2=[];
if(info[1]=='random'){
info2.push(['club','spade','heart','diamond'].randomGet());
}
else{
info2.push(info[1]);
}
if(info[2]=='random'){
info2.push(Math.ceil(Math.random()*13));
}
else{
info2.push(info[2]);
}
if(info[0]=='random'){
info2.push(inpile.randomGet());
}
else{
info2.push(info[0]);
}
return info2;
}
if(scene.replacepile){
list.length=0;
}
for(var i=scene.cardPileTop.length-1;i>=0;i--){
list.unshift(parseInfo(scene.cardPileTop[i]));
}
for(var i=0;i<scene.cardPileBottom.length;i++){
list.push(parseInfo(scene.cardPileBottom[i]));
}
for(var i=0;i<scene.discardPile.length;i++){
ui.create.card(ui.discardPile).init(parseInfo(scene.discardPile[i]));
}
return list;
},
gameStart:function(){
for(var i=0;i<game.players.length;i++){
game.players[i].node.marks.show();
game.players[i].node.name.show();
game.players[i].node.name2.show();
var info=game.players[i].brawlinfo;
if(info.maxHp){
game.players[i].maxHp=info.maxHp;
if(game.players[i].hp>game.players[i].maxHp){
game.players[i].hp=game.players[i].maxHp;
}
}
if(info.hp){
game.players[i].hp=info.hp;
if(game.players[i].hp>game.players[i].maxHp){
game.players[i].maxHp=game.players[i].hp;
}
}
game.players[i].update();
}
var scene=_status.brawl.scene;
var over=function(str){
switch(str){
case 'win':game.over(true);break;
case 'lose':game.over(false);break;
case 'tie':game.over('平局');break;
}
}
if(scene.turns){
var turns=scene.turns[0];
lib.onphase.push(function(){
turns--;
if(turns<0){
over(scene.turns[1]);
}
});
}
if(scene.washes){
var washes=scene.washes[0];
lib.onwash.push(function(){
washes--;
if(washes<=0){
over(scene.washes[1]);
}
});
}
},
chooseCharacterBefore:function(){
var scene=_status.brawl.scene;
var playercontrol=[];
var maxpos=0;
for(var i=0;i<scene.players.length;i++){
if(scene.players[i].playercontrol){
playercontrol.push(scene.players[i]);
}
maxpos=Math.max(maxpos,scene.players[i].position);
}
2016-08-20 09:47:05 +00:00
2018-04-17 07:32:43 +00:00
if(maxpos<scene.players.length){
maxpos=scene.players.length;
}
var posmap=[];
for(var i=1;i<=maxpos;i++){
posmap.push(i);
}
for(var i=0;i<scene.players.length;i++){
if(scene.players[i].position){
posmap.remove(scene.players[i].position);
}
}
for(var i=0;i<scene.players.length;i++){
if(!scene.players[i].position){
scene.players[i].position=posmap.randomRemove();
}
}
if(playercontrol.length){
game.me.brawlinfo=playercontrol.randomGet();
}
else{
game.me.brawlinfo=scene.players.randomGet();
}
var getpos=function(info){
var dp=info.position-game.me.brawlinfo.position;
if(dp<0){
dp+=maxpos;
}
return dp;
};
scene.players.sort(function(a,b){
return getpos(a)-getpos(b);
});
var target=game.me;
var createCard=function(info){
var info2=[];
if(info[1]=='random'){
info2.push(['club','spade','heart','diamond'].randomGet());
}
else{
info2.push(info[1]);
}
if(info[2]=='random'){
info2.push(Math.ceil(Math.random()*13));
}
else{
info2.push(info[2]);
}
if(info[0]=='random'){
info2.push(lib.inpile.randomGet());
}
else{
info2.push(info[0]);
}
return ui.create.card().init(info2);
}
_status.firstAct=game.me;
for(var i=0;i<scene.players.length;i++){
var info=scene.players[i];
target.brawlinfo=info;
target.identity=info.identity;
target.setIdentity(info.identity);
target.node.marks.hide();
if(info.name2!='none'&&info.name2!='random'){
if(info.name=='random'){
target.init(info.name2,info.name2);
target.node.name.hide();
target.node.avatar.hide();
}
else{
target.init(info.name,info.name2);
}
}
else{
if(info.name!='random'){
if(info.name2=='random'){
target.init(info.name,info.name);
target.node.name2.hide();
target.node.avatar2.hide();
}
else{
target.init(info.name);
}
}
}
if(info.linked) target.classList.add('linked'+(get.is.linked2(target)?'2':''));
2018-04-17 07:32:43 +00:00
if(info.turnedover) target.classList.add('turnedover');
if(info.position<_status.firstAct.brawlinfo.position) _status.firstAct=target;
var hs=[];
for(var j=0;j<info.handcards.length;j++){
hs.push(createCard(info.handcards[j]));
}
if(hs.length){
target.directgain(hs);
}
for(var j=0;j<info.equips.length;j++){
target.$equip(createCard(info.equips[j]));
}
for(var j=0;j<info.judges.length;j++){
target.node.judges.appendChild(createCard(info.judges[j]));
}
target=target.next;
}
},
chooseCharacterAi:function(player,list,list2){
var info=player.brawlinfo;
if(info.name2!='none'){
if(info.name=='random'&&info.name2=='random'){
list=list.slice(0);
player.init(list.randomRemove(),list.randomRemove());
}
else if(info.name=='random'){
player.init(list.randomGet(),info.name2);
}
else if(info.name2=='random'){
player.init(info.name,list.randomGet());
}
}
else{
if(info.name=='random'){
player.init(list.randomGet());
}
}
},
chooseCharacter:function(list){
var info=game.me.brawlinfo;
var event=_status.event;
if(info.name2=='none'){
if(info.name!='random'){
event.chosen=[info.name];
}
}
else{
if(info.name2=='random'&&info.name=='random'){
_status.brawl.doubleCharacter=true;
}
else if(info.name=='random'){
game.me.init(info.name2,info.name2);
game.me.node.avatar.hide();
game.me.node.name.hide();
_status.brawl.chooseCharacterStr='选择主将';
event.modchosen=[info.name,info.name2];
}
else if(info.name2=='random'){
game.me.init(info.name,info.name);
game.me.node.avatar2.hide();
game.me.node.name2.hide();
_status.brawl.chooseCharacterStr='选择副将';
event.modchosen=[info.name,info.name2];
}
else{
event.chosen=[info.name,info.name2];
}
}
if(game.me.identity=='zhu') return false;
return 'nozhu';
},
}
},
showcase:function(init){
if(init){
lib.translate.zhu=lib.translate.zhu||'主';
lib.translate.zhong=lib.translate.zhong||'忠';
lib.translate.nei=lib.translate.nei||'内';
lib.translate.fan=lib.translate.fan||'反';
2016-08-19 10:33:20 +00:00
2018-04-17 07:32:43 +00:00
this.style.transition='all 0s';
this.style.height=(this.offsetHeight-10)+'px';
this.style.overflow='scroll';
lib.setScroll(this);
var style={marginLeft:'3px',marginRight:'3px'};
var style2={position:'relative',display:'block',left:0,top:0,marginBottom:'6px',padding:0,width:'100%'};
var style3={marginLeft:'4px',marginRight:'4px',position:'relative'}
2016-08-19 10:33:20 +00:00
2018-04-17 07:32:43 +00:00
var scenename=ui.create.node('input',ui.create.div(style2,'','场景名称:',this),{width:'120px'});
scenename.type='text';
scenename.style.marginTop='20px';
var sceneintro=ui.create.node('input',ui.create.div(style2,'','场景描述:',this),{width:'120px'});
sceneintro.type='text';
sceneintro.style.marginBottom='10px';
2016-08-19 10:33:20 +00:00
2018-04-17 07:32:43 +00:00
var line1=ui.create.div(style2,this);
var addCharacter=ui.create.node('button','添加角色',line1,function(){
// line1.style.display='none';
resetStatus();
editPile.disabled=true;
// editCode.disabled=true;
saveButton.disabled=true;
// exportButton.disabled=true;
line7.style.display='none';
line2.style.display='block';
line2_t.style.display='block';
line3.style.display='block';
line4.style.display='block';
line5.style.display='block';
line6_h.style.display='block';
line6_e.style.display='block';
line6_j.style.display='block';
capt1.style.display='block';
capt2.style.display='block';
if(line6_h.childElementCount) capt_h.style.display='block';
if(line6_e.childElementCount) capt_e.style.display='block';
if(line6_j.childElementCount) capt_j.style.display='block';
},style);
var editPile=ui.create.node('button','场景选项',line1,function(){
resetCharacter();
addCharacter.disabled=true;
// editCode.disabled=true;
saveButton.disabled=true;
// exportButton.disabled=true;
line7.style.display='none';
line8.style.display='block';
capt8.style.display='block';
line9.style.display='block';
line10.style.display='block';
line11.style.display='block';
capt9.style.display='block';
line3.style.display='block';
2016-08-19 10:33:20 +00:00
2018-04-17 07:32:43 +00:00
line6_t.style.display='block';
line6_b.style.display='block';
line6_d.style.display='block';
if(line6_t.childElementCount) capt_t.style.display='block';
if(line6_b.childElementCount) capt_b.style.display='block';
if(line6_d.childElementCount) capt_d.style.display='block';
},style);
// var editCode=ui.create.node('button','编辑代码',line1,function(){
2020-02-14 05:33:43 +00:00
// console.log(1);
2018-04-17 07:32:43 +00:00
// },style);
var saveButton=ui.create.node('button','保存场景',line1,function(){
if(!scenename.value){
alert('请填写场景名称');
return;
}
var scene={
name:scenename.value,
intro:sceneintro.value,
players:[],
cardPileTop:[],
cardPileBottom:[],
discardPile:[],
};
for(var i=0;i<line7.childElementCount;i++){
scene.players.push(line7.childNodes[i].info);
}
if(scene.players.length<2){
alert('请添加至少两名角色');
return;
}
if(lib.storage.scene[scenename.value]){
if(_status.currentScene!=scenename.value){
if(!confirm('场景名与现有场景重复,是否覆盖?')){
return;
}
}
game.removeScene(scenename.value);
}
for(var i=0;i<line6_t.childElementCount;i++){
scene.cardPileTop.push(line6_t.childNodes[i].info);
}
for(var i=0;i<line6_b.childElementCount;i++){
scene.cardPileBottom.push(line6_b.childNodes[i].info);
}
for(var i=0;i<line6_d.childElementCount;i++){
scene.discardPile.push(line6_d.childNodes[i].info);
}
if(replacepile.checked){
scene.replacepile=true;
}
if(gameDraw.checked){
scene.gameDraw=true;
}
if(turnsresult.value!='none'){
scene.turns=[parseInt(turns.value),turnsresult.value]
}
if(washesresult.value!='none'){
scene.washes=[parseInt(washes.value),washesresult.value]
}
lib.storage.scene[scene.name]=scene;
game.save('scene',lib.storage.scene);
game.addScene(scene.name,true);
},style);
2016-08-19 10:33:20 +00:00
2016-08-18 10:51:06 +00:00
2018-04-17 07:32:43 +00:00
var capt1=ui.create.div(style2,'','角色信息',this);
var line2=ui.create.div(style2,this);
line2.style.display='none';
var identity=ui.create.selectlist([['zhu','主公'],['zhong','忠臣'],['nei','内奸'],['fan','反贼']],'zhu',line2);
identity.value='fan';
identity.style.marginLeft='3px';
identity.style.marginRight='3px';
var position=ui.create.selectlist([['0','随机位置'],['1','一号位'],['2','二号位'],['3','三号位'],['4','四号位'],['5','五号位'],['6','六号位'],['7','七号位'],['8','八号位']],'1',line2);
position.style.marginLeft='3px';
position.style.marginRight='3px';
var line2_t=ui.create.div(style2,this);
line2_t.style.display='none';
// line2_t.style.marginBottom='10px';
ui.create.node('span','体力:',line2_t);
var hp=ui.create.node('input',line2_t,{width:'40px'});
hp.type='text';
ui.create.node('span','体力上限:',line2_t,{marginLeft:'10px'});
var maxHp=ui.create.node('input',line2_t,{width:'40px'});
maxHp.type='text';
ui.create.node('span','横置 ',line2_t,{marginLeft:'20px'});
var linked=ui.create.node('input',line2_t);
linked.type='checkbox';
ui.create.node('span','翻面 ',line2_t,{marginLeft:'10px'});
var turnedover=ui.create.node('input',line2_t);
turnedover.type='checkbox';
ui.create.node('span','玩家 ',line2_t,{marginLeft:'10px'});
var playercontrol=ui.create.node('input',line2_t);
playercontrol.type='checkbox';
2016-08-18 10:51:06 +00:00
2018-04-17 07:32:43 +00:00
var list=[];
for(var i in lib.character){
list.push([i,lib.translate[i]]);
}
2016-08-18 10:51:06 +00:00
2018-04-17 07:32:43 +00:00
list.sort(function(a,b){
a=a[0];b=b[0];
var aa=a,bb=b;
if(aa.indexOf('_')!=-1){
aa=aa.slice(aa.indexOf('_')+1);
}
if(bb.indexOf('_')!=-1){
bb=bb.slice(bb.indexOf('_')+1);
}
if(aa!=bb){
return aa>bb?1:-1;
}
return a>b?1:-1;
});
list.unshift(['random','自选主将']);
var name1=ui.create.selectlist(list,list[0],line2);
name1.style.marginLeft='3px';
name1.style.marginRight='3px';
name1.style.maxWidth='80px';
list[0][1]='自选副将';
list.unshift(['none','无副将']);
var name2=ui.create.selectlist(list,list[0],line2);
name2.style.marginLeft='3px';
name2.style.marginRight='3px';
name2.style.maxWidth='80px';
2016-08-18 10:51:06 +00:00
2018-04-17 07:32:43 +00:00
var capt9=ui.create.div(style2,'','编辑牌堆',this);
capt9.style.display='none';
2016-08-19 10:33:20 +00:00
2018-04-17 07:32:43 +00:00
var capt2=ui.create.div(style2,'','添加卡牌',this);
var line3=ui.create.div(style2,this);
line3.style.display='none';
capt1.style.display='none';
capt2.style.display='none';
2016-08-18 10:51:06 +00:00
2018-04-17 07:32:43 +00:00
var line5=ui.create.div(style2,this);
line5.style.display='none';
var pileaddlist=[];
for(var i=0;i<lib.config.cards.length;i++){
if(!lib.cardPack[lib.config.cards[i]]) continue;
for(var j=0;j<lib.cardPack[lib.config.cards[i]].length;j++){
var cname=lib.cardPack[lib.config.cards[i]][j];
pileaddlist.push([cname,get.translation(cname)]);
if(cname=='sha'){
pileaddlist.push(['huosha','火杀']);
pileaddlist.push(['leisha','雷杀']);
2020-12-19 01:36:50 +00:00
pileaddlist.push(['icesha','冰杀']);
pileaddlist.push(['kamisha','神杀']);
2021-11-23 04:58:31 +00:00
pileaddlist.push(['cisha','刺杀']);
2018-04-17 07:32:43 +00:00
}
}
}
for(var i in lib.cardPack){
if(lib.config.all.cards.contains(i)) continue;
for(var j=0;j<lib.cardPack[i].length;j++){
var cname=lib.cardPack[i][j];
pileaddlist.push([cname,get.translation(cname)]);
}
}
pileaddlist.unshift(['random',['随机卡牌']]);
var cardpileaddname=ui.create.selectlist(pileaddlist,null,line3);
cardpileaddname.style.marginLeft='3px';
cardpileaddname.style.marginRight='3px';
cardpileaddname.style.width='85px';
var cardpileaddsuit=ui.create.selectlist([
['random','随机花色'],
['heart','红桃'],
['diamond','方片'],
['club','梅花'],
['spade','黑桃'],
],null,line3);
cardpileaddsuit.style.marginLeft='3px';
cardpileaddsuit.style.marginRight='3px';
cardpileaddsuit.style.width='85px';
var cardpileaddnumber=ui.create.selectlist([
['random','随机点数'],1,2,3,4,5,6,7,8,9,10,11,12,13
],null,line3);
cardpileaddnumber.style.marginLeft='3px';
cardpileaddnumber.style.marginRight='3px';
cardpileaddnumber.style.width='85px';
2016-08-18 13:48:50 +00:00
2018-04-17 07:32:43 +00:00
var fakecard=function(info,position,capt){
var name=info[0],suit=info[1],number=info[2];
var card=ui.create.card(null,'noclick',true);
card.style.zoom=0.6;
number=parseInt(cardpileaddnumber.value);
var name2=name;
var suit2=suit;
var number2=number;
if(name2=='random') name2='sha';
if(suit2=='random') suit2='?';
if(!number2){
number='random';
number2='?';
}
card.init([suit2,number2,name2]);
card.info=info;
if(name=='random'){
card.node.name.innerHTML=get.verticalStr('随机卡牌');
}
if(position&&capt){
card.listen(function(){
this.remove();
if(!position.childElementCount) capt.style.display='none';
});
position.appendChild(card);
}
return card;
};
var cc_h=ui.create.node('button','加入手牌区',line5,function(){
fakecard([cardpileaddname.value,cardpileaddsuit.value,cardpileaddnumber.value],line6_h,capt_h);
capt_h.style.display='block';
});
var cc_e=ui.create.node('button','加入装备区',line5,function(){
if(get.type(cardpileaddname.value)!='equip') return;
var subtype=get.subtype(cardpileaddname.value);
for(var i=0;i<line6_e.childElementCount;i++){
if(get.subtype(line6_e.childNodes[i].name)==subtype){
line6_e.childNodes[i].remove();break;
}
}
fakecard([cardpileaddname.value,cardpileaddsuit.value,cardpileaddnumber.value],line6_e,capt_e);
capt_e.style.display='block';
});
var cc_j=ui.create.node('button','加入判定区',line5,function(){
if(get.type(cardpileaddname.value)!='delay') return;
for(var i=0;i<line6_j.childElementCount;i++){
if(line6_j.childNodes[i].name==cardpileaddname.value){
line6_j.childNodes[i].remove();break;
}
}
fakecard([cardpileaddname.value,cardpileaddsuit.value,cardpileaddnumber.value],line6_j,capt_j);
capt_j.style.display='block';
});
cc_h.style.marginLeft='3px';
cc_h.style.marginRight='3px';
cc_h.style.width='85px';
cc_e.style.marginLeft='3px';
cc_e.style.marginRight='3px';
cc_e.style.width='85px';
cc_j.style.marginLeft='3px';
cc_j.style.marginRight='3px';
cc_j.style.width='85px';
2016-08-18 10:51:06 +00:00
2018-04-17 07:32:43 +00:00
var capt_h=ui.create.div(style2,'','手牌区',this);
var line6_h=ui.create.div(style2,this);
var capt_e=ui.create.div(style2,'','装备区',this);
var line6_e=ui.create.div(style2,this);
var capt_j=ui.create.div(style2,'','判定区',this);
var line6_j=ui.create.div(style2,this);
line6_j.style.marginBottom='10px';
capt_h.style.display='none';
capt_e.style.display='none';
capt_j.style.display='none';
2016-08-18 10:51:06 +00:00
2018-04-17 07:32:43 +00:00
var line10=ui.create.div(style2,this);
line10.style.display='none';
var ac_h=ui.create.node('button','加入牌堆顶',line10,function(){
fakecard([cardpileaddname.value,cardpileaddsuit.value,cardpileaddnumber.value],line6_t,capt_t);
capt_t.style.display='block';
});
var ac_e=ui.create.node('button','加入牌堆底',line10,function(){
fakecard([cardpileaddname.value,cardpileaddsuit.value,cardpileaddnumber.value],line6_b,capt_b);
capt_b.style.display='block';
});
var ac_j=ui.create.node('button','加入弃牌堆',line10,function(){
fakecard([cardpileaddname.value,cardpileaddsuit.value,cardpileaddnumber.value],line6_d,capt_d);
capt_d.style.display='block';
});
ac_h.style.marginLeft='3px';
ac_h.style.marginRight='3px';
ac_h.style.width='85px';
ac_e.style.marginLeft='3px';
ac_e.style.marginRight='3px';
ac_e.style.width='85px';
ac_j.style.marginLeft='3px';
ac_j.style.marginRight='3px';
ac_j.style.width='85px';
2016-08-19 10:33:20 +00:00
2018-04-17 07:32:43 +00:00
var line11=ui.create.div(style2,this,'','<span>替换牌堆</span>');
line11.style.display='none';
var replacepile=ui.create.node('input',line11);
replacepile.type='checkbox';
2016-08-19 10:33:20 +00:00
2018-04-17 07:32:43 +00:00
ui.create.node('span',line11,'开局摸牌',{marginLeft:'10px'});
var gameDraw=ui.create.node('input',line11);
gameDraw.type='checkbox';
gameDraw.checked=true;
2016-09-01 10:36:59 +00:00
2018-04-17 07:32:43 +00:00
var capt_t=ui.create.div(style2,'','牌堆顶',this);
var line6_t=ui.create.div(style2,this);
var capt_b=ui.create.div(style2,'','牌堆底',this);
var line6_b=ui.create.div(style2,this);
var capt_d=ui.create.div(style2,'','弃牌堆',this);
var line6_d=ui.create.div(style2,this);
line6_d.style.marginBottom='10px';
capt_t.style.display='none';
capt_b.style.display='none';
capt_d.style.display='none';
2016-08-19 10:33:20 +00:00
2018-04-17 07:32:43 +00:00
var line4=ui.create.div(style2,this);
line4.style.display='none';
line4.style.marginTop='20px';
var resetCharacter=function(){
// line1.style.display='block';
editPile.disabled=false;
// editCode.disabled=false;
saveButton.disabled=false;
// exportButton.disabled=false;
line7.style.display='block';
line2.style.display='none';
line2_t.style.display='none';
line3.style.display='none';
line4.style.display='none';
line5.style.display='none';
line6_h.style.display='none';
line6_e.style.display='none';
line6_j.style.display='none';
capt1.style.display='none';
capt2.style.display='none';
capt_h.style.display='none';
capt_e.style.display='none';
capt_j.style.display='none';
2016-08-18 10:51:06 +00:00
2018-04-17 07:32:43 +00:00
name1.value='random';
name2.value='none';
identity.value='fan';
position.value='0';
hp.value='';
maxHp.value='';
line6_h.innerHTML='';
line6_e.innerHTML='';
line6_j.innerHTML='';
cardpileaddname.value='random';
cardpileaddsuit.value='random';
cardpileaddnumber.value='random';
linked.checked=false;
turnedover.checked=false;
playercontrol.checked=false;
};
var createCharacter=function(info){
var player=ui.create.player(null,true);
player._customintro=function(uiintro){
if(info.handcards.length){
uiintro.addText('手牌',true);
var hs=ui.create.div('.buttons');
for(var i=0;i<info.handcards.length;i++){
hs.appendChild(fakecard(info.handcards[i]));
}
uiintro.add(hs);
}
else{
return false;
}
}
player.info=info;
var name=info.name,name3=info.name2;
if(name=='random'){
name='re_caocao';
}
if(name3!='none'){
if(name3=='random'){
name3='liubei';
}
player.init(name,name3);
if(info.name2=='random'){
player.node.name2.innerHTML=get.verticalStr('自选副将');
}
}
else{
player.init(name);
}
if(info.name=='random'){
player.node.name.innerHTML=get.verticalStr('自选主将');
}
if(info.maxHp){
player.maxHp=info.maxHp;
}
if(info.hp){
player.hp=Math.min(info.hp,player.maxHp);
}
for(var i=0;i<info.handcards.length;i++){
player.node.handcards1.appendChild(ui.create.card());
}
for(var i=0;i<info.equips.length;i++){
player.$equip(fakecard(info.equips[i]));
}
for(var i=0;i<info.judges.length;i++){
player.node.judges.appendChild(fakecard(info.judges[i]));
}
player.setIdentity(info.identity);
var pos=info.position;
if(pos==0){
pos='随机位置';
}
else{
pos=get.cnNumber(pos,true)+'号位'
}
if(info.linked&&info.turnedover){
pos+='<br>横置 - 翻面'
}
else{
if(info.linked) pos+=' - 横置';
if(info.turnedover) pos+=' - 翻面';
}
player.setNickname(pos);
player.update();
player.style.transform='scale(0.7)';
player.style.position='relative';
player.style.left=0;
player.style.top=0;
player.style.margin='-18px';
player.node.marks.remove();
2016-08-28 00:30:25 +00:00
2018-04-17 07:32:43 +00:00
line7.appendChild(player);
player.listen(function(){
if(confirm('是否删除此角色?')){
this.remove();
if(line7.childElementCount<8){
addCharacter.disabled=false;
}
}
});
if(line7.childElementCount>=8){
addCharacter.disabled=true;
}
2016-08-28 00:30:25 +00:00
2018-04-17 07:32:43 +00:00
return player;
};
ui.create.div('.menubutton.large','确定',line4,style3,function(){
var info={
name:name1.value,
name2:name2.value,
identity:identity.value,
position:parseInt(position.value),
hp:parseInt(hp.value),
maxHp:parseInt(maxHp.value),
linked:linked.checked,
turnedover:turnedover.checked,
playercontrol:playercontrol.checked,
handcards:[],
equips:[],
judges:[]
};
for(var i=0;i<line7.childElementCount;i++){
if(info.identity=='zhu'&&line7.childNodes[i].info.identity=='zhu'){
alert('不能有两个主公');
return;
}
if(info.position!=0&&info.position==line7.childNodes[i].info.position){
alert('座位与现在角色相同');
return;
}
}
for(var i=0;i<line6_h.childElementCount;i++){
info.handcards.push(line6_h.childNodes[i].info);
}
for(var i=0;i<line6_e.childElementCount;i++){
info.equips.push(line6_e.childNodes[i].info);
}
for(var i=0;i<line6_j.childElementCount;i++){
info.judges.push(line6_j.childNodes[i].info);
}
createCharacter(info);
resetCharacter();
});
ui.create.div('.menubutton.large','取消',line4,style3,resetCharacter);
var line7=ui.create.div(style2,this);
line7.style.marginTop='12px';
2016-08-19 10:33:20 +00:00
2018-04-17 07:32:43 +00:00
var capt8=ui.create.div(style2,'','胜负条件',this);
capt8.style.display='none';
var line8=ui.create.div(style2,this);
line8.style.display='none';
line8.style.marginTop='10px';
line8.style.marginBottom='10px';
var turnslist=[['1','一'],['2','两'],['3','三'],['4','四'],['5','五'],['6','六'],['7','七'],['8','八'],['9','九'],['10','十']];
var results=[['none','无'],['win','胜利'],['lose','失败'],['tie','平局']];
var turns=ui.create.selectlist(turnslist,'1',line8);
ui.create.node('span','个回合后',line8,style);
var turnsresult=ui.create.selectlist(results,'none',line8);
2016-08-19 10:33:20 +00:00
2018-04-17 07:32:43 +00:00
var washes=ui.create.selectlist(turnslist,'1',line8);
washes.style.marginLeft='20px';
ui.create.node('span','次洗牌后',line8,style);
var washesresult=ui.create.selectlist(results,'none',line8);
2016-08-19 10:33:20 +00:00
2018-04-17 07:32:43 +00:00
var line9=ui.create.div(style2,this);
line9.style.display='none';
line9.style.marginTop='20px';
var resetStatus=function(all){
if(line7.childElementCount>=8){
addCharacter.disabled=true;
}
else{
addCharacter.disabled=false;
}
// editCode.disabled=false;
saveButton.disabled=false;
// exportButton.disabled=false;
cardpileaddname.value='random';
cardpileaddsuit.value='random';
cardpileaddnumber.value='random';
2016-08-19 10:33:20 +00:00
2018-04-17 07:32:43 +00:00
line8.style.display='none';
capt8.style.display='none';
capt9.style.display='none';
line9.style.display='none';
line10.style.display='none';
line11.style.display='none';
line3.style.display='none';
line7.style.display='block';
2016-08-19 10:33:20 +00:00
2018-04-17 07:32:43 +00:00
line6_t.style.display='none';
line6_b.style.display='none';
line6_d.style.display='none';
capt_t.style.display='none';
capt_b.style.display='none';
capt_d.style.display='none';
2016-08-28 00:30:25 +00:00
2018-04-17 07:32:43 +00:00
if(all===true){
replacepile.checked=false;
gameDraw.checked=true;
turns.value='1';
turnsresult.value='none';
washes.value='1';
washesresult.value='none';
line6_t.innerHTML='';
line6_b.innerHTML='';
line6_d.innerHTML='';
}
}
2016-08-19 10:33:20 +00:00
2018-04-17 07:32:43 +00:00
ui.create.div('.menubutton.large','确定',line9,style3,resetStatus);
2016-08-28 00:30:25 +00:00
2018-04-17 07:32:43 +00:00
game.addSceneClear=function(){
resetCharacter();
resetStatus(true);
scenename.value='';
sceneintro.value='';
line7.innerHTML='';
delete _status.currentScene;
};
game.loadScene=function(scene){
resetCharacter();
resetStatus(true);
scenename.value=scene.name;
sceneintro.value=scene.intro;
_status.currentScene=scene.name;
line7.innerHTML='';
if(scene.replacepile) replacepile.checked=true;
if(scene.gameDraw) gameDraw.checked=true;
else gameDraw.checked=false;
if(scene.turns){
turns.value=scene.turns[0].toString();
turnsresult.value=scene.turns[1];
}
if(scene.washes){
washes.value=scene.washes[0].toString();
washesresult.value=scene.washes[1];
}
for(var i=0;i<scene.cardPileTop.length;i++){
fakecard(scene.cardPileTop[i],line6_t,capt_t);
}
for(var i=0;i<scene.cardPileBottom.length;i++){
fakecard(scene.cardPileBottom[i],line6_b,capt_b);
}
for(var i=0;i<scene.discardPile.length;i++){
fakecard(scene.discardPile[i],line6_d,capt_d);
}
2016-08-28 00:30:25 +00:00
2018-04-17 07:32:43 +00:00
for(var i=0;i<scene.players.length;i++){
createCharacter(scene.players[i]);
}
};
}
if(_status.sceneToLoad){
var scene=_status.sceneToLoad;
delete _status.sceneToLoad;
game.loadScene(scene);
}
}
},
stage:{
name:'创建关卡',
content:{
submode:'normal'
},
nostart:true,
fullshow:true,
template:{
showcase:function(init){
if(init){
var name=lib.brawl[this.link].name;
var stage=lib.storage.stage[name];
var style2={position:'relative',display:'block',left:0,top:0,marginBottom:'10px',padding:0,width:'100%'};
var style3={marginLeft:'4px',marginRight:'4px',position:'relative'}
var line1=ui.create.div(style2,this);
var line2=ui.create.div(style2,this);
line2.style.lineHeight='50px';
2018-01-05 04:46:56 +00:00
line2.style.overflow='scroll';
lib.setScroll(line2);
var container=this.parentNode.parentNode;
setTimeout(function(){
var rect1=container.getBoundingClientRect();
var rect2=line2.getBoundingClientRect();
line2.style.height=(rect1.height-(rect2.top-rect1.top))+'px';
},1000);
2018-04-17 07:32:43 +00:00
if(_status.extensionmade.contains(name)){
ui.create.node('button','管理扩展',line1,function(){
ui.click.configMenu();
ui.click.extensionTab(name);
},{marginLeft:'6px'});
}
else{
ui.create.node('button','删除关卡',line1,function(){
if(confirm('确定删除'+name+'')){
game.removeStage(name);
}
},{marginLeft:'6px'});
}
ui.create.node('button','导出扩展',line1,function(){
var level=stage.level;
stage.level=0;
var str='{name:"'+name+'",content:function(){\nif(lib.config.mode=="brawl"){\n'+
'if(!lib.storage.stage) lib.storage.stage={};\n'+
'if(!lib.storage.stage["'+name+'"]){\nlib.storage.stage["'+name+'"]='+get.stringify(stage)+';\n_status.extensionstage=true;}\n'+
'if(!_status.extensionmade) _status.extensionmade=[];\n'+
'_status.extensionmade.push("'+name+'");\n}}\n}';
stage.level=level;
var extension={'extension.js':'game.import("extension",function(lib,game,ui,get,ai,_status){return '+str+'})'};
game.importExtension(extension,null,name);
},{marginLeft:'6px'});
var noactive=true;
var clickNode=function(){
if(this.classList.contains('unselectable')) return;
if(!this.classList.contains('active')){
var active=this.parentNode.querySelector('.menubutton.large.active');
if(active){
active.classList.remove('active');
}
this.classList.add('active');
}
}
for(var i=0;i<stage.scenes.length;i++){
var node=ui.create.div('.menubutton.large',line2,stage.scenes[i].name,style3,clickNode);
node.index=i;
if(stage.mode=='sequal'){
if(i==stage.level){
node.classList.add('active');
noactive=false;
}
else{
node.classList.add('unselectable');
}
}
else if(stage.mode=='normal'){
if(i>stage.level){
node.classList.add('unselectable');
}
}
if(lib.storage.lastStage==i&&!node.classList.contains('unselectable')){
node.classList.add('active');
noactive=false;
}
else if(lib.storage.lastStage==undefined&&noactive&&!node.classList.contains('unselectable')){
node.classList.add('active');
noactive=false;
}
}
}
},
},
showcase:function(init){
if(_status.sceneChanged){
init=true;
this.innerHTML='';
delete _status.sceneChanged;
}
if(init){
this.style.transition='all 0s';
this.style.height=(this.offsetHeight-10)+'px';
// this.style.overflow='scroll';
// lib.setScroll(this);
var style2={position:'relative',display:'block',left:0,top:0,marginBottom:'6px',padding:0,width:'100%'};
var style3={marginLeft:'4px',marginRight:'4px',position:'relative'}
2016-10-01 06:07:17 +00:00
2018-04-17 07:32:43 +00:00
var scenename=ui.create.node('input',ui.create.div(style2,'','关卡名称:',this),{width:'120px'});
scenename.type='text';
scenename.style.marginTop='20px';
var sceneintro=ui.create.node('input',ui.create.div(style2,'','关卡描述:',this),{width:'120px'});
sceneintro.type='text';
sceneintro.style.marginBottom='10px';
2016-10-01 06:07:17 +00:00
2018-04-17 07:32:43 +00:00
var line1=ui.create.div(style2,this);
var line2=ui.create.div(style2,this);
line1.style.marginBottom='10px';
line2.style.lineHeight='50px';
2018-01-05 04:46:56 +00:00
line2.style.overflow='scroll';
lib.setScroll(line2);
var container=this.parentNode.parentNode;
setTimeout(function(){
var rect1=container.getBoundingClientRect();
var rect2=line2.getBoundingClientRect();
line2.style.height=(rect1.height-(rect2.top-rect1.top))+'px';
},1000);
2018-04-17 07:32:43 +00:00
var scenes=[];
for(var i in lib.storage.scene){
scenes.push([i,i]);
}
if(!scenes.length){
alert('请创建至少1个场景');
return;
}
var scenelist=ui.create.selectlist(scenes,null,line1);
var e1=function(){
if(this.nextSibling){
this.parentNode.insertBefore(this,this.nextSibling.nextSibling);
}
}
var e2=function(){
var that=this;
this.movetimeout=setTimeout(function(){
e1.call(that);
},500);
}
var e3=function(){
clearTimeout(this.movetimeout);
delete this.movetimeout;
}
var e4=function(value){
var node=ui.create.div('.menubutton.large',value,line2,style3,function(){
if(confirm('是否移除'+this.innerHTML+'')){
this.remove();
}
});
if(lib.config.touchscreen){
node.ontouchstart=e2;
node.ontouchend=e3;
node.ontouchmove=e3;
}
else{
node.oncontextmenu=e1;
node.onmousedown=e2;
node.onmouseup=e3;
node.onmouseleave=e3;
}
}
var addButton=ui.create.node('button','添加场景',line1,function(){
e4(scenelist.value);
},{marginLeft:'6px',marginRight:'12px'});
var sceneconfig=ui.create.selectlist([
['normal','默认模式'],
['sequal','连续闯关'],
['free','自由选关']
],null,line1);
var saveButton=ui.create.node('button','保存关卡',line1,function(){
if(!scenename.value){
alert('请填写关卡名称');
return;
}
if(line2.childElementCount<2){
alert('请添加至少2个场景');
return;
}
var stage={
name:scenename.value,
intro:sceneintro.value,
scenes:[],
mode:sceneconfig.value,
level:0
};
for(var i=0;i<line2.childElementCount;i++){
stage.scenes.push(lib.storage.scene[line2.childNodes[i].innerHTML]);
}
if(lib.storage.stage[scenename.value]){
if(!confirm('关卡名与现有关卡重复,是否覆盖?')){
return;
}
game.removeStage(scenename.value);
}
lib.storage.stage[stage.name]=stage;
game.save('stage',lib.storage.stage);
game.addStage(stage.name,true);
},{marginLeft:'6px'});
game.addStageClear=function(){
scenelist.value=scenes[0][0];
sceneconfig.value='normal';
scenename.value='';
sceneintro.value='';
line2.innerHTML='';
};
}
}
}
},
2017-04-15 00:25:50 +00:00
};
2017-04-14 23:35:56 +00:00
});