This commit is contained in:
Spmario233 2023-02-22 13:47:10 +08:00
parent cc3e434459
commit 9cca60bcc3
80 changed files with 8296 additions and 1008 deletions

View File

@ -520,7 +520,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
ai:{
canLink:function(player,target,card){
if(!target.isLinked()||player.hasSkill('jueqing')||target.hasSkill('gangzhi')||target.hasSkill('gangzhi')) return false;
if(!target.isLinked()||player.hasSkill('jueqing')||target.hasSkill('gangzhi')||player.hasSkill('gangzhi')) return false;
var es=target.countCards('e');
if(!es) return true;
if(target.hp>=3&&es>=2){

View File

@ -155,7 +155,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){
toself:true,
judge:function(card){
if(get.suit(card)=='spade') return -6;
return 0;
return 6;
},
judge2:function(result){
if(result.bool==false) return true;
return false;
},
cardPrompt:function(card){
var str='出牌阶段对你使用。你将【浮雷】置入判定区。若判定结果为♠则目标角色受到X点雷电伤害X为此牌判定结果为♠的次数。判定完成后将此牌移动到下家的判定区里。';
@ -383,9 +387,13 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return (lib.filter.judge(card,player,target)&&player!=target);
},
judge:function(card){
if(get.suit(card)=='club') return 0;
if(get.suit(card)=='club') return 1;
return -3;
},
judge2:function(result){
if(result.bool==false) return true;
return false;
},
effect:function(){
if(result.bool==false){
player.addTempSkill('caomu_skill');

View File

@ -2642,13 +2642,22 @@ game.import('card',function(lib,game,ui,get,ai,_status){
event.wuxieresult=player;
event.wuxieresult2=result;
game.broadcast('cancel',id);
if(_status.event.id==id&&_status.event.name=='chooseToUse'&&_status.paused){
return (function(){
event.resultOL=_status.event.resultOL;
if(_status.event.id==id&&_status.event.name=='chooseToUse'&&_status.paused) event.resultOL=_status.event.resultOL;
if(_status.event._parent_id==id){
ui.click.cancel();
if(ui.confirm) ui.confirm.close();
});
}
if(_status.event.id==id){
if(_status.event._backup) ui.click.cancel();
ui.click.cancel();
if(ui.confirm){
ui.confirm.close();
}
if(_status.event.result){
_status.event.result.id=id;
}
}
});
}
else{
if(_status.event.id==id&&_status.event.name=='chooseToUse'&&_status.paused){
@ -2703,6 +2712,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
game.players[i].hideTimer();
}
'step 8'
if(event.wuxieresult2._sendskill) lib.skill[event.wuxieresult2._sendskill[0]]=event.wuxieresult2._sendskill[1];
if(event.wuxieresult&&event.wuxieresult2&&event.wuxieresult2.skill){
var info=get.info(event.wuxieresult2.skill);
if(info&&info.precontent&&!game.online){

View File

@ -7,13 +7,582 @@ game.import('character',function(lib,game,ui,get,ai,_status){
character:{
clan_wuxian:['female','shu',3,['clanyirong','clanguixiang','clanmuyin'],['clan:陈留吴氏']],
clan_wuban:['male','shu',4,['clanzhanding','clanmuyin'],['clan:陈留吴氏']],
clan_xunshu:['male','qun',3,['clanshenjun','clanbalong','clandaojie'],['clan:颍川荀氏']],
clan_xunchen:['male','qun',3,['clansankuang','clanbeishi','clandaojie'],['clan:颍川荀氏']],
clan_xuncai:['female','qun',3,['clanlieshi','clandianzhan','clanhuanyin','clandaojie'],['clan:颍川荀氏']],
clan_xuncan:['male','wei',3,['clanyunshen','clanshangshen','clanfenchai','clandaojie'],['clan:颍川荀氏']],
},
characterSort:{
clan:{
clan_wu:['clan_wuxian','clan_wuban'],
clan_xun:['clan_xunshu','clan_xunchen','clan_xuncai','clan_xuncan']
},
},
skill:{
//族荀谌
clansankuang:{
audio:2,
trigger:{player:'useCardAfter'},
direct:true,
forced:true,
filter:function(event,player){
var card=event.card,type=get.type2(card);
for(var i=player.actionHistory.length-1; i>=0; i--){
var history=player.actionHistory[i].useCard;
for(var evt of history){
if(evt==event) continue;
if(get.type2(evt.card)==type) return false;
}
if(player.actionHistory[i].isRound) break;
}
return true;
},
getNum:function(player){
return (player.countCards('ej')>0)+(player.isDamaged())+(Math.max(0,player.hp)<player.countCards('h'));
},
content:function(){
'step 0'
player.chooseTarget('三恇:选择一名其他角色','令其交给你至少X张牌然后其获得'+get.translation(trigger.cards.filterInD('ejod'))+'X为以下条件中其满足的项数场上有牌、已受伤、体力值小于手牌数',true,lib.filter.notMe).set('ai',target=>{
var att=get.attitude(player,target);
if(_status.event.goon) return -att;
return -Math.sqrt(Math.abs(att))-lib.skill.clansankuang.getNum(target);
}).set('goon',Math.max.apply(Math,trigger.cards.map(i=>get.value(i)))<=5||trigger.cards.filterInD('ejod').length==0)
'step 1'
if(result.bool){
var target=result.targets[0],num=lib.skill.clansankuang.getNum(target),num2=target.countCards('he');
event.target=target;
player.logSkill('clansankuang',target);
if(num2==0) event._result={bool:false};
else if(num2<=num) event._result={bool:true,cards:target.getCards('he')};
target.chooseCard('he',true,[num,Infinity]).set('ai',get.unuseful);
}else event.finish();
'step 2'
if(result.bool){
var cards=result.cards;
target.give(cards,player);
game.delayx();
}
'step 3'
if(trigger.cards.filterInD('ej').length) target.gain(trigger.cards.filterInD('ej'),player,'giveAuto','bySelf');
else if(trigger.cards.filterInD('od').length) target.gain(trigger.cards.filterInD('od'),'gain2','bySelf');
},
ai:{
reverseOrder:true,
skillTagFilter:function(player){
if(player.getHistory('useCard',evt=>get.type(evt.card)=='equip').length>0) return false;
},
effect:{
target:function(card,player,target){
if(player==target&&get.type(card)=='equip'&&!player.getHistory('useCard',evt=>get.type(evt.card)=='equip').length==0) return [1,3];
},
},
threaten:1.6,
},
},
clanbeishi:{
audio:2,
trigger:{
global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
},
forced:true,
filter:function(event,player){
var history=player.getAllHistory('useSkill',evt=>evt.skill=='clansankuang');
if(!history.length) return false;
var target=history[0].targets[0];
if(target.countCards('h')) return false;
var evt=event.getl(target);
return evt&&evt.hs&&evt.hs.length;
},
content:function(){
player.recover();
}
},
//族荀淑
clanshenjun:{
audio:2,
trigger:{
global:'useCard',
},
forced:true,
locked:false,
filter:function(event,player){
return (event.card.name=='sha'||get.type(event.card)=='trick')&&player.countCards('h',event.card.name)>0;
},
content:function(){
var cards=player.getCards('h',trigger.card.name);
player.showCards(cards,get.translation(player)+'发动了【神君】');
player.addGaintag(cards,'clanshenjun');
for(var name of lib.phaseName){
var evt=_status.event.getParent(name);
if(!evt||evt.name!=name) continue;
player.addTempSkill('clanshenjun_viewAs',name+'After');
break;
}
},
subSkill:{
viewAs:{
trigger:{player:['phaseZhunbeiEnd','phaseJudgeEnd','phaseDrawEnd','phaseUseEnd','phaseDiscardEnd','phaseJieshuEnd']},
filter:function(event,player){
return player.countCards('h',card=>card.hasGaintag('clanshenjun'))>0;
},
forced:true,
charlotte:true,
content:function(){
'step 0'
var cards=player.getCards('h',card=>card.hasGaintag('clanshenjun'));
var list=[],names=[];
for(var card of cards){
var name=get.name(card),nature=get.nature(card);
var namex=name+(nature?nature:'');
if(names.contains(namex)) continue;
if(nature) list.push([get.type(card),'',name,nature]);
else list.push([get.type(card),'',name]);
names.push(namex);
}
list.sort((a,b)=>{
return 100*(lib.inpile.indexOf(a[2])-lib.inpile.indexOf(b[2]))+lib.inpile_nature.indexOf(a[3])-lib.inpile_nature.indexOf(b[3]);
})
player.chooseButton(['是否将'+get.cnNumber(cards.length)+'张牌当下列一张牌使用?',[list,'vcard']]).set('ai',function(button){
return _status.event.player.getUseValue({name:button.link[2],nature:button.link[3]});
});
'step 1'
if(result.bool){
var name=result.links[0][2],nature=result.links[0][3];
debugger;
var cards=player.getCards('h',card=>card.hasGaintag('clanshenjun'));
game.broadcastAll(function(num,card){
lib.skill.clanshenjun_backup.selectCard=num;
lib.skill.clanshenjun_backup.viewAs=card;
},cards.length,{name:name,nature:nature});
var next=player.chooseToUse();
next.set('openskilldialog','将'+get.cnNumber(cards.length)+'张牌当做'+(nature?get.translation(nature):'')+'【'+get.translation(name)+'】使用');
next.set('norestore',true);
next.set('addCount',false);
next.set('_backupevent','clanshenjun_backup');
next.set('custom',{
add:{},
replace:{window:function(){}}
});
next.backup('clanshenjun_backup');
}
}
},
backup:{
filterCard:function(card){
return get.itemtype(card)=='card';
},
position:'hes',
filterTarget:lib.filter.targetEnabled,
check:(card)=>6-get.value(card),
log:false,
precontent:function(){
delete event.result.skill;
},
}
}
},
clanbalong:{
audio:2,
trigger:{
player:['damageEnd','recoverEnd','loseHpEnd'],
},
forced:true,
filter:function(event,player){
if(game.getGlobalHistory('changeHp',evt=>evt.player==player&&evt.getParent()==event).length!=1) return false;
var cards=player.getCards('h'),map={};
if(!cards.length) return false;
for(var card of cards){
var type=get.type2(card);
if(typeof map[type]!='number') map[type]=0;
map[type]++;
}
var list=[];
for(var i in map){
if(map[i]>0) list.push([i,map[i]]);
}
list.sort((a,b)=>b[1]-a[1]);
return list[0][0]=='trick'&&(list.length==1||list[0][1]>list[1][1]);
},
content:function(){
player.showHandcards(get.translation(player)+'发动了【八龙】');
player.drawTo(game.countPlayer());
}
},
//族荀粲
clanyunshen:{
audio:2,
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
return player!=target&&target.isDamaged();
},
content:function(){
'step 0'
target.recover();
'step 1'
var name=get.translation(target);
player.chooseControl().set('choiceList',[name+'视为对你使用一张冰【杀】','你视为对'+name+'使用一张冰【杀】']).set('prompt','熨身:请选择一项').set('ai',()=>_status.event.choice).set('choice',function(){
var card={name:'sha',nature:'ice',isCard:true};
var eff=get.effect(player,card,target,player),eff2=get.effect(target,card,player,player);
if(eff>eff2) return '选项一';
else return '选项二';
}());
'step 2'
var players=[target,player];
if(result.control=='选项二') players.reverse();
players[0].useCard({name:'sha',nature:'ice',isCard:true},players[1],false,'noai');
},
ai:{
order:2,
expose:0.2,
result:{
target:function(player,target){
var eff=get.recoverEffect(target,player,player);
if(eff>0) return 1;
else if(get.effect(target,{name:'sha',nature:'ice',isCard:true},player,player)>eff) return -1;
return 0;
}
}
}
},
clanshangshen:{
audio:2,
trigger:{global:'damageEnd'},
filter:function(event,player){
if(!event.nature) return false;
return game.countPlayer2(current=>{
return current.hasHistory('damage',evt=>{
return evt.nature&&evt!=event;
});
})==0;
},
logTarget:'player',
check:function(event,player){
if(get.attitude(player,event.player)<=2) return false;
if(event.player.countCards('h')>=4) return false;
return true;
},
content:function(){
'step 0'
event.judgestr=get.translation('shandian');
player.judge(lib.card.shandian.judge,event.judgestr).judge2=lib.card.shandian.judge2;
game.delayx(1.5);
'step 1'
trigger.player.drawTo(4);
},
ai:{expose:0.25}
},
clanfenchai:{
audio:2,
init:function(player){
if(player.getStorage('clanfenchai').length>0) return;
var history=player.getHistory('useSkill',evt=>{
if(evt.type!='player') return false;
var skill=evt.sourceSkill||evt.skill,targets=evt.targets;
var info=get.info(skill);
if(!info||info.charlotte) return false;
if(targets&&targets.length){
if(targets.filter(i=>player.differentSexFrom(i)).length>0) return true;
}
return false;
});
if(history.length){
var evt=history[0],targets=evt.targets;
player.markAuto('clanfenchai',targets.filter(i=>player.differentSexFrom(i)));
}
},
trigger:{
player:['logSkill','useSkillAfter'],
},
forced:true,
silent:true,
onremove:true,
marktext:'钗',
intro:{
content:(storage,player)=>'对象:'+get.translation(storage),
},
group:'clanfenchai_audio',
filter:function(event,player){
if(event.type!='player') return false;
var targets=event.targets;
if(!targets||!targets.length) return false;
var info=get.info(event.sourceSkill||event.skill);
if(!info||info.charlotte) return false;
if(player.getStorage('clanfenchai').length!=0) return false;
return targets.filter(i=>player.differentSexFrom(i)).length>0;
},
content:function(){
player.markAuto('clanfenchai',trigger.targets.filter(i=>player.differentSexFrom(i)));
},
subSkill:{
audio:{
audio:'clanfenchai',
forced:true,
trigger:{player:'judge'},
content:function(){}
}
},
mod:{
suit:function(card,suit){
var player=get.owner(card)||_status.event.player;
if(!player||!player.judging||player.judging[0]!=card) return;
return player.getStorage('clanfenchai').filter(i=>i.isIn()).length>0?'heart':'spade';
}
}
},
//族荀采
clanlieshi:{
audio:2,
enable:'phaseUse',
filter:function(event,player){
return !player.storage._disableJudge||player.countCards('h',card=>['sha','shan'].contains(get.name(card)))>0;
},
chooseButton:{
dialog:function(event,player){
var dialog=ui.create.dialog('烈誓:选择一项','hidden');
dialog.add([lib.skill.clanlieshi.choices.slice(),'textbutton']);
return dialog;
},
filter:function(button,player){
var link=button.link;
if(link=='damage') return !player.storage._disableJudge;
var num=player.countCards('h',link);
return num>0&&num==player.getDiscardableCards(player,'h').filter(i=>get.name(i)==link).length;
},
check:function(button){
var player=_status.event.player;
switch (button.link){
case 'damage':
if(get.damageEffect(player,player,player,'fire')>=0) return 10;
if(player.hp>=Math.max(2,3-player.getFriends().length)&&game.countPlayer(current=>get.attitude(player,current)<0&&current.countCards('h',card=>['sha','shan'].contains(get.name(card))))) return 0.8+Math.random();
return 0;
case 'shan':
if(player.countCards('h','shan')==1) return 8+Math.random();
return 1+Math.random();
case 'sha':
if(player.countCards('h','sha')==1) return 8+Math.random();
return 0.9+Math.random();
}
},
backup:function(links){
var next=get.copy(lib.skill['clanlieshi_backupx']);
next.choice=links[0];
return next;
},
prompt:function(links){
if(links[0]=='damage') return '废除判定区并受到1点火焰伤害';
return '弃置所有【'+get.translation(links[0])+'】';
},
},
choices:[
['damage','废除判定区并受到1点火焰伤害'],
['shan','弃置所有【闪】'],
['sha','弃置所有【杀】'],
],
ai:{
order:function(item,player){
if(!player) return;
var eff=get.damageEffect(player,player,player,'fire'),disabled=!player.storage._disableJudge;
if((player.countCards('h','sha')==1||player.countCards('h','shan')==1)&&eff<0&&!disabled) return 8;
else if(eff>=0&&!disabled) return 5.8;
if(!disabled&&!player.countCards('h',card=>['sha','shan'].contains(get.name(card)))){
if((!player.hasSkill('clanhuanyin')||!player.canSave(player))&&player.hp<=1) return 0;
if(player.canSave(player)&&player.hp==1&&player.countCards('h')<=1) return 2.6;
if(player.hp<Math.max(2,3-player.getFriends().length)||!game.countPlayer(current=>get.attitude(player,current)<0&&current.countCards('h',card=>['sha','shan'].contains(get.name(card))))) return 0;
}
return 2.5;
},
expose:0.2,
result:{player:1},
},
subSkill:{
backup:{},
backupx:{
audio:'clanlieshi',
selectCard:-1,
selectTarget:-1,
filterCard:()=>false,
filterTarget:()=>false,
multitarget:true,
content:function(){
'step 0'
var choice=lib.skill.clanlieshi_backup.choice;
event.choice=choice;
if(choice=='damage'){
player.damage('fire');
if(!player.storage._disableJudge) player.disableJudge();
}else{
var cards=player.getCards('h',choice);
if(cards.length) player.discard(cards);
}
'step 1'
if(!player.isIn()) event.finish();
else player.chooseTarget('烈誓:令一名其他角色选择另一项',lib.filter.notMe,true).set('ai',target=>{
var player=_status.event.player,chosen=_status.event.getParent().choice,att=get.attitude(player,target);
if(chosen=='damage'){
if(att>0) return 0;
return -att/2+target.countCards('h',card=>['sha','shan'].contains(get.name(card)));
}
return get.damageEffect(target,player,player,'fire');
});
'step 2'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.line(target,'fire');
var list=[],choice=event.choice;
var choiceList=lib.skill.clanlieshi.choices.slice();
choiceList=choiceList.map((link,ind,arr)=>{
link=link[1];
var ok=true;
if(arr[ind][0]==choice){
link+=''+get.translation(player)+'已选)';
ok=false;
}
if(ind==0){
if(target.storage._disableJudge) ok=false;
}
else if(ind>0){
var name=ind==1?'shan':'sha';
if(!target.countCards('h',name)) ok=false;
}
if(!ok) link='<span style="opacity:0.5">'+link+'</span>';
else list.push('选项'+get.cnNumber(ind+1,true));
return link;
});
if(!list.length){event.finish(); return;}
target.chooseControl(list).set('choiceList',choiceList).set('ai',()=>{
var controls=_status.event.controls.slice(),player=_status.event.player,user=_status.event.getParent().player;
if(controls.length==1) return controls[0];
if(controls.contains('选项一')&&get.damageEffect(player,user,player,'fire')>=0) return '选项一';
if(controls.contains('选项一')&&player.hp<=2&&player.countCards('h',card=>['sha','shan'].contains(get.name(card)))<=3) controls.remove('选项一');
if(controls.length==1) return controls[0];
if(player.getCards('h','sha').reduce((p,c)=>p+get.value(c,player),0)>player.getCards('h','sha').reduce((p,c)=>p+get.value(c,player),0)){
if(controls.contains('选项三')) return '选项三';
}
else if(controls.contains('选项二')) return '选项二';
return controls.randomGet();
});
} else event.finish();
'step 3'
if(result.control=='选项一'){
if(!target.storage._disableJudge) target.disableJudge();
target.damage('fire');
}else{
var cards=target.getCards('h',result.control=='选项二'?'shan':'sha');
if(cards.length) target.discard(cards);
}
}
}
}
},
clandianzhan:{
audio:2,
trigger:{player:'useCardAfter'},
forced:true,
filter:function(event,player){
if(!lib.suit.contains(get.suit(event.card))) return false;
var card=event.card,suit=get.suit(card);
for(var i=player.actionHistory.length-1; i>=0; i--){
var history=player.actionHistory[i].useCard;
for(var evt of history){
if(evt==event) continue;
if(get.suit(evt.card)==suit) return false;
}
if(player.actionHistory[i].isRound) break;
}
return event.targets&&event.targets.length==1&&!event.targets[0].isLinked()||
player.getCards('h',card=>get.suit(card)==get.suit(event.card)).filter(card=>{
var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player);
if(mod!='unchanged') return true;
return false;
}).length==0;
},
content:function(){
'step 0'
if(trigger.targets&&trigger.targets.length==1){
trigger.targets[0].link(true);
}
var cards=player.getCards('h',card=>get.suit(card)==get.suit(trigger.card));
if(cards.filter(card=>{
var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player);
if(mod!='unchanged') return false;
return true;
}).length==0){
player.loseToDiscardpile(cards);
player.draw(cards.length);
}
'step 1'
player.draw();
}
},
clanhuanyin:{
audio:2,
trigger:{player:'dying'},
forced:true,
check:()=>true,
filter:function(event){
return event.player.countCards('h')<4;
},
content:function(){
player.drawTo(4);
}
},
clandaojie:{
audio:2,
audioname:['clan_xunshu','clan_xunchen','clan_xuncai','clan_xuncan'],
trigger:{player:'useCardAfter'},
filter:function(event,player){
return player.getHistory('useCard',evt=>{
return get.type(evt.card)=='trick'&&!get.tag(evt.card,'damage');
}).indexOf(event)==0;
},
forced:true,
clanSkill:true,
content:function(){
'step 0'
var skills=player.getSkills(null,false,false).filter(skill=>{
var info=get.info(skill);
if(!info||info.charlotte||!get.is.locked(skill)||get.skillInfoTranslation(skill,player).length==0) return false;
return true;
});
player.chooseControl(skills,'cancel2').set('choiceList',skills.map(i=>{
return '<div class="skill">【'+get.translation(lib.translate[i+'_ab']||get.translation(i).slice(0,2))+'】</div><div>'+get.skillInfoTranslation(i,player)+'</div>';
})).set('displayIndex',false).set('prompt','蹈节失去一个锁定技或点“取消”失去1点体力').set('ai',()=>{
var player=_status.event.player,choices=_status.event.controls.slice();
var negs=choices.filter(i=>{
var info=get.info(i);
if(!info||!info.ai) return false;
return info.ai.neg||info.ai.halfneg;
});
if(negs.length) return negs.randomGet();
if(get.effect(player,{name:'losehp'},player,player)>=0) return 'cancel2';
if(player.hp>3) return 'cancel2';
return Math.random()<0.75?'clandaojie':choices.randomGet();
});
'step 1'
if(result.control!='cancel2'){
player.removeSkill(result.control);
player.popup(result.control);
game.log(player,'失去了技能','#g【'+get.translation(result.control)+'】');
}
else{
player.loseHp();
}
'step 2'
var targets=game.filterPlayer(current=>current==player||current.hasClan('颍川荀氏'));
if(targets.length==1) event._result={bool:true,targets:targets};
else player.chooseTarget('蹈节:将'+get.translation(trigger.cards.filterInD())+'交给一名颍川荀氏角色',true,(card,player,target)=>{
return target==player||target.hasClan('颍川荀氏')
}).set('ai',target=>get.attitude(_status.event.player,target));
'step 3'
if(result.bool){
var target=result.targets[0];
player.line(target,'green');
target.gain(trigger.cards.filterInD(),player,'gain2');
}
},
},
//族吴班
clanzhanding:{
audio:2,
@ -181,6 +750,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
clanmuyin:{
audio:2,
clanSkill:true,
audioname:['clan_wuxian','clan_wuban'],
trigger:{player:'phaseZhunbeiBegin'},
isMax:function(player){
@ -245,6 +815,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
characterReplace:{
wuban:['clan_wuban','wuban'],
},
characterIntro:{
xunshu:'荀淑83年149年字季和为郎陵侯相颍川颍阴人今河南省许昌市人。汉和帝至汉桓帝时人物以品行高洁著称。有子八人号八龙。年轻时有高尚的德行学问渊博不喜欢雕章琢句徒在文字上用功不注重实际的学识。因此常常被俗儒看不起。但州里却称他有知人之明。安帝时征召任为郎中后来再升当涂长。离职还乡里。他的孙子荀彧是曹操部下著名的谋士。',
xuncai:'荀采(生卒年不详),字女荀,颍川人,东汉名士荀爽之女。荀采聪慧敏捷而有才艺。十七岁时,荀采嫁给阴瑜。两年后阴瑜去世。荀采不愿意改嫁,但荀爽答应把荀采嫁给同郡人郭奕。荀采趁着旁人没有防备,用粉在门上写下:“尸还阴”,而后自缢而死。',
xuncan:'荀粲210年—238年字奉倩颍川郡颍阴县今河南省许昌市人。三国时期曹魏大臣、玄学家太尉荀彧幼子。个性简贵不轻易交接常人所交之辈皆一时俊杰。聪颖过人善谈玄理名噪一时。娶大将军曹洪之女为妻生活美满。景初二年面对妻子去世悲痛过度而死时年二十九成语“荀令伤神”与之有关。',
},
translate:{
clan_wuxian:'族吴苋',
clanyirong:'移荣',
@ -257,8 +832,35 @@ game.import('character',function(lib,game,ui,get,ai,_status){
clan_wuban:'族吴班',
clanzhanding:'斩钉',
clanzhanding_info:'你可以将任意张牌当做【杀】使用。你以此法使用的【杀】结算结束后,你令你的手牌上限-1然后若你因此【杀】造成过伤害则你将手牌摸至手牌上限至多摸五张否则你令此【杀】不计入次数限制。',
clan_xunshu:'族荀淑',
clanshenjun:'神君',
clanshenjun_info:'当一名角色使用【杀】或普通锦囊牌时,若你手牌中有该牌名的牌,你展示之,且这些牌称为“神君”。然后本阶段结束时,你可以将等同于你“神君”数张牌当做一张“神君”牌使用。',
clanbalong:'八龙',
clanbalong_info:'锁定技。当你回复体力后或受到伤害后或失去体力后,若你手牌中唯一最多的类别为锦囊牌,你展示所有手牌并摸至角色数张。',
clandaojie:'蹈节',
clandaojie_info:'宗族技锁定技。当你每回合第一次使用非伤害类普通锦囊牌后你须失去一个锁定技或失去1点体力令一名颍川荀氏角色获得此牌对应的所有实体牌。',
clan_xuncai:'族荀采',
clanlieshi:'烈誓',
clanlieshi_info:'出牌阶段你可以选择一项1.废除判定区并受到你造成的1点火焰伤害2.弃置所有【闪】3.弃置所有【杀】。然后令一名其他角色从你未选择的选项中选择一项。',
clandianzhan:'点盏',
clandianzhan_info:'锁定技。当你每轮第一次使用一种花色的牌后若此牌的目标数为1你横置此牌目标若你有此花色的手牌你重铸这些牌。然后你摸一张牌。',
clanhuanyin:'还阴',
clanhuanyin_info:'锁定技。当你进入濒死状态时,将手牌补至四张。',
clan_xunchen:'族荀谌',
clansankuang:'三恇',
clansankuang_info:'锁定技。当你每轮第一次使用一种类别的牌后你令一名其他角色交给你至少X张牌然后于场上或弃牌堆内或处理区内获得你使用的牌对应的所有实体牌X为以下条件中其满足的项数场上有牌、已受伤、体力值小于手牌数。',
clanbeishi:'卑势',
clanbeishi_info:'锁定技。当一名角色失去最后的手牌后若其是你首次发动〖三恇〗的目标角色你回复1点体力。',
clan_xuncan:'族荀粲',
clanyunshen:'熨身',
clanyunshen_info:'出牌阶段限一次。你可以令一名其他角色回复1点体力然后选择一项1.你视为对其使用一张冰【杀】2.其视为对你使用一张冰【杀】。',
clanshangshen:'伤神',
clanshangshen_info:'当一名角色受到属性伤害后,若本回合此前没有角色或已死亡的角色受到过属性伤害,你可以进行目标角色为你的【闪电】的特殊的使用流程,然后其将手牌摸至四张。',
clanfenchai:'分钗',
clanfenchai_info:'锁定技。若你首次发动技能指定的目标角色中:存在存活角色,你的判定牌视为♥;不存在存活角色,你的判定牌视为♠。',
clan_wu:'陈留·吴氏',
clan_xun:'颍川·荀氏',
},
};
});

View File

@ -87,7 +87,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_kyou:['female','key',3,['kyou_zhidian','kyou_duanfa']],
key_seira:['female','key',3,['seira_xinghui','seira_yuanying']],
key_kiyu:['female','key',3,['kiyu_yuling','kiyu_xianyu']],
//key_tomoyo:['female','key',4,['tomoyo_wuwei','tomoyo_yingshou']],
key_tomoyo:['female','key',4,['tomoyo_wuwei','tomoyo_zhengfeng']],
ns_huangchengyan:['male','shu',3,['nslongyue','nszhenyin']],
ns_sunchensunjun:['male','wu',5,['nsxianhai','nsxingchu']],
@ -205,7 +205,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"ns_huangchengyan","ns_sunchensunjun","ns_yuanxi","ns_caoshuang"],
diy_yijiang2:["key_yuuki","key_tenzen","key_kyouko","key_kotarou","key_kyou",
"ns_chentai","ns_huangwudie","ns_sunyi","ns_zhangning","ns_yanghu"],
diy_yijiang3:['ns_ruanji','ns_zanghong','ns_limi','ns_zhonglimu','prp_zhugeliang','key_seira','key_kiyu'],
diy_yijiang3:['ns_ruanji','ns_zanghong','ns_limi','ns_zhonglimu','prp_zhugeliang','key_seira','key_kiyu','key_tomoyo'],
diy_tieba:["ns_zuoci","ns_lvzhi","ns_wangyun","ns_nanhua","ns_nanhua_left","ns_nanhua_right","ns_huamulan","ns_huangzu","ns_jinke","ns_yanliang","ns_wenchou","ns_caocao","ns_caocaosp","ns_zhugeliang","ns_wangyue","ns_yuji","ns_xinxianying","ns_guanlu","ns_simazhao","ns_sunjian","ns_duangui","ns_zhangbao","ns_masu","ns_zhangxiu","ns_lvmeng","ns_shenpei","ns_yujisp","ns_yangyi","ns_liuzhang","ns_xinnanhua","ns_luyusheng"],
diy_fakenews:["diy_wenyang","ns_zhangwei","ns_caimao","ns_chengpu"],
diy_xushi:["diy_feishi","diy_hanlong","diy_liufu","diy_liuyan","diy_liuzan","diy_tianyu","diy_xizhenxihong","diy_yangyi","diy_zaozhirenjun"],
@ -547,6 +547,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var storage=player.getStorage('tomoyo_wuwei_mark');
return !storage.contains(get.suit(card));
},
check:function(card){
return 5-get.value(card);
},
onuse:function(result,player){
player.markAuto('tomoyo_wuwei_mark',[get.suit(result.card,false)]);
player.addTempSkill('tomoyo_wuwei_mark');
@ -565,10 +568,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{global:'useCardAfter'},
direct:true,
filter:function(event,player){
return player.inRangeOf(event.player)&&player.canUse('sha',event.player,false);
return event.card.name=='shan'&&player.inRangeOf(event.player)&&player.canUse('sha',event.player,false);
},
content:function(){
player.chooseToUse(get.prompt('tomoyo_wuwei',trigger.target),'对该角色使用一张【杀】',function(card,player,event){
player.chooseToUse('武威:是否对'+get.translation(trigger.player)+'使用一张【杀】?',function(card,player,event){
if(get.name(card)!='sha') return false;
return lib.filter.filterCard.apply(this,arguments);
},trigger.player,-1).set('addCount',false).logSkill='tomoyo_wuwei_combo';
@ -576,8 +579,136 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
tomoyo_yingshou:{},
tomoyo_changshi:{},
tomoyo_zhengfeng:{
dutySkill:true,
trigger:{player:'phaseZhunbeiBegin'},
direct:true,
filter:function(event,player){
return game.hasPlayer((current)=>player.inRange(current));
},
content:function(){
'step 0'
player.chooseTarget(get.prompt('tomoyo_zhengfeng'),'令一名攻击范围内的角色进行判定。其于你的下回合开始前使用与判定结果颜色相同的牌时,你摸一张牌。',function(card,player,target){
return player.inRange(target);
}).set('ai',function(target){
var player=_status.event.player;
if(player.hp<=1&&!player.countCards('h')) return 0;
var hs=target.countCards('h'),thr=get.threaten(target);
if(target.hasJudge('lebu')) return 0;
return Math.sqrt(1+hs)*Math.sqrt(Math.max(1,1+thr));
});
'step 1'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('tomoyo_zhengfeng',target);
target.judge();
}
'step 2'
player.addTempSkill('tomoyo_zhengfeng_tomoyo',{player:'phaseBeginStart'});
player.markAuto('tomoyo_zhengfeng_tomoyo',[{
target:target,
color:result.color,
}]);
},
group:'tomoyo_zhengfeng_after',
subSkill:{
tomoyo:{
charlotte:true,
onremove:true,
mod:{
inRangeOf:function(source,player){
var list=player.getStorage('tomoyo_zhengfeng_tomoyo');
for(var obj of list){
if(obj.target==source) return true;
}
},
},
trigger:{global:'useCard'},
forced:true,
filter:function(event,player){
var color=get.color(event.card);
if(color=='none') return false;
var list=player.getStorage('tomoyo_zhengfeng_tomoyo');
for(var obj of list){
if(obj.target==event.player&&color==obj.color) return true;
}
return false;
},
content:function(){
player.draw();
},
intro:{
mark:function(dialog,students,player){
if(!students||!students.length) return '全校风纪良好!';
var str='';
for(var i of students){
if(str.length>0) str+='<br>';
str+=get.translation(i.target);
str+='';
str+=get.translation(i.color);
}
dialog.addText(str);
},
},
},
after:{
trigger:{player:'phaseJieshuBegin'},
filter:function(event,player){
return !player.hasHistory('useSkill',function(evt){
return evt.skill=='tomoyo_zhengfeng';
});
},
prompt:'整风:是否放弃使命?',
prompt2:'你可以减1点体力上限并失去〖武威〗摸两张牌并回复1点体力然后获得技能〖长誓〗。',
skillAnimation:true,
animationColor:'gray',
check:function(event,player){
return (player.hp*1.1+player.countCards('h'))<3;
},
content:function(){
'step 0'
game.log(player,'放弃了身为学生会长的使命');
player.awakenSkill('tomoyo_zhengfeng');
player.loseMaxHp();
'step 1'
player.removeSkill('tomoyo_wuwei');
'step 2'
player.draw(2);
player.recover();
'step 3'
player.addSkill('tomoyo_changshi');
},
},
},
},
tomoyo_changshi:{
trigger:{
global:['gainAfter','loseAsyncAfter'],
},
forced:true,
filter:function(event,player){
return game.hasPlayer(function(current){
return current!=player&&event.getg(current).length>1&&player.inRangeOf(current);
});
},
content:function(){
player.draw();
},
group:'tomoyo_changshi_recover',
subSkill:{
recover:{
trigger:{global:'recoverAfter'},
forced:true,
filter:function(event,player){
return event.player.isAlive()&&player.inRangeOf(event.player);
},
content:function(){
player.changeHujia(1);
},
},
},
},
//天宫希优
kiyu_yuling:{
mod:{
@ -17144,10 +17275,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_tomoyo:'坂上智代',
tomoyo_wuwei:'武威',
tomoyo_wuwei_info:'①每回合每种花色限一次。你可以将一张手牌当做【杀】使用或打出。②当有角色使用【闪】后,若你在其攻击范围内,你可以对其使用一张【杀】(无距离限制)。',
/*tomoyo_yingshou:'',
tomoyo_yingshou_info:'',
tomoyo_zhengfeng:'整风',
tomoyo_zhengfeng_info:'使命技。①准备阶段你可以令攻击范围内的一名角色进行判定。若如此做你获得如下效果直到下回合开始你视为在该角色的攻击范围内且当该角色使用与判定牌颜色相同的牌时你摸一张牌。②失败结束阶段若你于本回合内未发动过〖整风①〗则你可以减1点体力上限。你失去〖武威〗摸两张牌并回复1点体力然后获得〖长誓〗。',
tomoyo_changshi:'长誓',
tomoyo_changshi_info:'',*/
tomoyo_changshi_info:'锁定技。一名攻击范围内包含你的角色回复体力后你获得1点护甲一名攻击范围内包含你的角色一次性获得至少两张牌后你摸一张牌。',
noname:"小无",
noname_zhuyuan:"祝愿",

View File

@ -13,7 +13,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
extra_yin:['shen_liubei','shen_luxun'],
extra_lei:['shen_ganning','shen_zhangliao'],
extra_key:['key_kagari','key_shiki','db_key_hina'],
extra_decade:['shen_jiangwei','shen_machao','shen_zhangfei'],
extra_decade:['shen_jiangwei','shen_machao','shen_zhangfei','shen_zhangjiao'],
extra_ol:['ol_zhangliao','shen_caopi','shen_zhenji','shen_sunquan'],
extra_mobilezhi:['shen_guojia','shen_xunyu'],
extra_mobilexin:['shen_taishici','shen_sunce'],
@ -22,6 +22,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
shen_zhangjiao:['male','shen',3,['yizhao','sijun','sanshou','tianjie'],['qun']],
shen_zhangfei:['male','shen',4,['shencai','xunshi'],['shu']],
tw_shen_guanyu:['male','shen',4,['twwushen','twwuhun'],['shu']],
shen_machao:['male','shen',4,['shouli','hengwu'],['shu']],
@ -72,6 +73,148 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
//神张角
yizhao:{
audio:2,
trigger:{
player:['useCard','respond']
},
forced:true,
filter:function(event,player){
return typeof get.number(event.card)=='number';
},
marktext:'黄',
intro:{
name:'黄(异兆/肆军)',
name2:'黄',
content:'mark',
markcount:function(storage,player){
return storage.toString().slice(-2);
},
},
content:function(){
'step 0'
event.num=player.countMark('yizhao');
player.addMark('yizhao',get.number(trigger.card));
'step 1'
var num=Math.floor(num/10)%10,num2=Math.floor(player.countMark('yizhao')/10)%10;
if(num!=num2){
var card=get.cardPile2(card=>{
return get.number(card,false)==num2;
});
if(card) player.gain(card,'gain2');
}
},
mod:{
aiOrder:function(player,card,num){
if(get.number(card)+player.countMark('yizhao')%10>10) return num+10;
},
},
ai:{
threaten:1.5,
effect:{
target:function(card,player,target,current){
if(get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,0.1];
}
}
}
},
sijun:{
audio:2,
trigger:{player:'phaseZhunbeiBegin'},
filter:function(event,player){
return player.countMark('yizhao')>ui.cardPile.childNodes.length;
},
check:()=>true,
content:function(){
'step 0'
player.removeMark('yizhao',player.countMark('yizhao'));
'step 1'
var total=0,cards=[];
for(var i=0;i<36;i++){
var card=get.cardPile(card=>{
if(cards.contains(card)) return false;
var num=get.number(card,false);
if(total+num>36) return false;
return true;
});
if(card){
total+=get.number(card,false);
cards.push(card);
}
if(total==36) break;
}
if(cards.length) player.gain(cards,'gain2');
}
},
sanshou:{
audio:2,
trigger:{player:'damageBegin4'},
check:function(event,player){
return get.damageEffect(player,event.source,event.source,event.nature)<=0;
},
content:function(){
'step 0'
var cards=game.cardsGotoOrdering(get.cards(3)).cards;
event.cards=cards;
player.showCards(cards,get.translation(player)+'发动了【三首】');
'step 1'
var types=[];
types.addArray(game.getGlobalHistory('useCard').map(evt=>get.type2(evt.card)));
if(cards.filter(card=>!types.contains(get.type2(card))).length){
trigger.cancel();
}
game.delayx();
},
ai:{
effect:{
target:function(card,player,target){
if(card.name=='shandian'||card.name=='fulei') return [0,0.1];
if(!get.tag(card,'damage')) return;
var types=[],bool=0;
types.addArray(game.getGlobalHistory('useCard').map(evt=>get.type2(evt.card)));
if(!types.contains(get.type2(card))) bool=1;
if(types.length<2) return Math.min(1,0.4+(types.length+bool)*0.2);
}
}
},
},
tianjie:{
audio:2,
trigger:{global:'phaseEnd'},
direct:true,
filter:function(event,player){
return player.hasSkill('tianjie_shuffled');
},
content:function(){
'step 0'
player.chooseTarget(get.prompt('tianjie_effect'),'选择至多三名其他角色依次对这些角色造成X点雷电伤害X为其手牌中【闪】的数量至少为1',[1,3]).set('ai',target=>{
var player=_status.event.player;
return get.damageEffect(target,player,player,'thunder')*Math.sqrt(Math.max(1,target.countCards('h','shan')));
});
'step 1'
if(result.bool){
var targets=result.targets;
player.logSkill('tianjie_effect',targets);
for(var target of targets){
var num=Math.max(1,target.countCards('h','shan'));
target.damage(num,'thunder');
}
}
},
subSkill:{
effect:{
trigger:{global:'washCard'},
forced:true,
silent:true,
charlotte:true,
content:function(){
player.addTempSkill('tianjie_shuffled');
},
},
shuffled:{charlotte:true},
}
},
shencai:{
audio:2,
enable:'phaseUse',
@ -6529,6 +6672,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
shencai_info:'①出牌阶段限一次,你可以令一名其他角色进行判定。你获得此判定牌,然后若此判定牌:包含以下要素中的任意一个,则其失去已有的下列效果,并获得对应的效果:{⒈体力:当其受到伤害后,其失去等量的体力、⒉武器:其不能使用牌响应杀、⒊打出:当其失去手牌后,其再随机弃置一张手牌(不嵌套触发)、⒋距离:其的结束阶段开始时,其翻面};若均不包含,你获得其一张牌,其获得一枚“死”并获得如下效果:其的角色手牌上限-X、其的回合结束时若X大于场上存活人数则其死亡X为其“死”标记数。',
xunshi:'巡使',
xunshi_info:'锁定技。①你手牌区内所有的多目标锦囊牌均视为花色为none的普【杀】。②你使用颜色为none的牌无距离和次数限制。③当你使用无颜色的牌选择目标后你令你的〖神裁〗的发动次数上限+1至多为5然后可以为此牌增加任意个目标。',
shen_zhangjiao:'神张角',
yizhao:'异兆',
yizhao_info:'锁定技。当你使用或打出牌后,你获得等同于此牌点数枚“黄”标记。然后若“黄”的十位数发生变化,你获得牌堆中一张点数为你“黄”的十位数的牌。',
sijun:'肆军',
sijun_info:'准备阶段若“黄”数大于牌堆的牌数你可以移去所有“黄”然后随机获得任意张点数之和为36的牌。',
sanshou:'三首',
sanshou_info:'当你受到伤害时,你可以亮出牌堆顶三张牌。若其中有本回合未被使用过的牌的类型,防止此伤害。',
tianjie:'天劫',
tianjie_info:'一名角色的回合结束时若本回合牌堆洗过牌你可以选择至多三名其他角色。你依次对每名目标角色造成X点雷电伤害X为其手牌中【闪】的数量至少为1。',
extra_feng:'神话再临·风',
extra_huo:'神话再临·火',

File diff suppressed because it is too large Load Diff

View File

@ -1909,9 +1909,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return player.canEquip(card,true);
});
if(cards.length){
player.$give(card,player,false);
player.$give(cards[0],player,false);
game.delay(0.5);
player.equip(card);
player.equip(cards[0]);
event.redo();
}
'step 1'

View File

@ -41,6 +41,7 @@ window.noname_character_rank={
'key_sakuya',
'boss_zhaoyun',
'noname',
'sb_machao',
],
ap:[
'gjqt_aruan',
@ -104,6 +105,8 @@ window.noname_character_rank={
'liuhui',
'luyi',
'shen_zhangfei',
'clan_xuncai',
'zhujianping',
'key_kamome',
'key_yukine',
'key_inari',
@ -278,6 +281,10 @@ window.noname_character_rank={
'jin_zhouchu',
'huojun',
'xiahouxuan',
'ol_liuba',
'wanglie',
'zhaozhi',
'shen_zhangjiao',
'key_misuzu',
'key_sunohara',
'key_umi',
@ -295,6 +302,7 @@ window.noname_character_rank={
'key_nao',
'key_kotarou',
'key_kyou',
'key_tomoyo',
],
am:[
'diy_caiwenji',
@ -538,6 +546,10 @@ window.noname_character_rank={
'yinfuren',
'dc_zhaoyǎn',
'clan_wuxian',
'clan_xunchen',
'chenjiao',
'chengbing',
'sb_caosong',
],
bp:[
'chess_diaochan',
@ -830,8 +842,15 @@ window.noname_character_rank={
'dc_huban',
'dingshangwan',
're_zhuhuan',
'xin_zhuhuan',
'dc_liuye',
'zhugeshang',
're_xunyou',
'liwan',
'ol_furong',
'shiyi',
'gongsundu',
'yuanji',
],
b:[
'diy_feishi',
@ -883,6 +902,7 @@ window.noname_character_rank={
're_zhangchunhua',
'xunyou',
'yufan',
're_chengong',
'chengong',
'bulianshi',
'dc_bulianshi',
@ -920,6 +940,7 @@ window.noname_character_rank={
'wulan',
're_sunben',
'hujinding',
'dc_hujinding',
'dongcheng',
'taoqian',
'chendeng',
@ -956,6 +977,7 @@ window.noname_character_rank={
'ns_chengpu',
're_sunluban',
're_caoxiu',
'xin _caoxiu',
'sunluyu',
'sp_diaochan',
'liuxie',
@ -1028,6 +1050,7 @@ window.noname_character_rank={
'xin_caozhen',
'ol_dengzhi',
'sundeng',
're_sundeng',
're_duji',
'sp_chendong',
'sp_zongyu',
@ -1076,6 +1099,12 @@ window.noname_character_rank={
'dc_liru',
'kebineng',
'wangwei',
'zhangzhi',
'clan_xuncan',
'clan_xunshu',
'sunlang',
'yangfu',
'sp_pengyang',
],
bm:[
'diy_xizhenxihong',
@ -1226,6 +1255,7 @@ window.noname_character_rank={
'sp_zhangwen',
're_zoushi',
'yuejiu',
'dc_yuejiu',
'xin_sunluban',
'ol_bianfuren',
'sp_ol_zhanghe',
@ -1240,6 +1270,11 @@ window.noname_character_rank={
'xin_mamidi',
'xin_quancong',
'dc_caiyang',
're_caiyong',
'liyixiesheng',
'panghui',
'leibo',
'dongguiren',
],
c:[
'xiahoudun',
@ -1288,6 +1323,7 @@ window.noname_character_rank={
'sp_huaxin',
'sp_xujing',
'caimaozhangyun',
'ahuinan',
'mushun',
],
d:[
@ -1314,6 +1350,9 @@ window.noname_character_rank={
'bianxi',
'junk_sunquan',
'clan_wuban',
'wangjun',
'xin_wuyi',
'xin_zhuzhi',
],
rarity:{
legend:[
@ -1442,6 +1481,13 @@ window.noname_character_rank={
'clan_wuxian',
'luyi',
'shen_zhangfei',
'clan_xuncai',
'wanglie',
'zhujianping',
'zhaozhi',
'liuhui',
'shen_zhangjiao',
'sb_machao',
'key_tomoya',
'key_masato',
'key_shiorimiyuki',
@ -1464,6 +1510,7 @@ window.noname_character_rank={
'key_satomi',
'key_seira',
'key_kiyu',
'key_tomoyo',
'noname',
],
epic:[
@ -1649,6 +1696,10 @@ window.noname_character_rank={
'zhangfen',
'xiahouxuan',
'prp_zhugeliang',
'zhangzhi',
'ol_liuba',
'shiyi',
'yuanji',
'key_kano',
'key_haruko',
'key_akiko',
@ -1763,6 +1814,7 @@ window.noname_character_rank={
'key_kyoko',
'jiakui',
'hujinding',
'dc_hujinding',
'zhangyì',
'lingcao',
'sunru',
@ -2068,10 +2120,19 @@ window.noname_character_rank={
'chengui',
'dingshangwan',
're_zhuhuan',
'xin_zhuhuan',
'yinfuren',
'dc_liuye',
'dc_zhaoyǎn',
'zhugeshang',
're_xunyou',
'liwan',
'furong',
'clan_xunchen',
'sunlang',
'chengbing',
'gongsundu',
'xin_caoxiu',
],
junk:[
'sunshao',
@ -2097,6 +2158,12 @@ window.noname_character_rank={
'bianxi',
'junk_sunquan',
'clan_wuban',
'ahuinan',
'sp_caosong',
'yangfu',
'wangjun',
'xin_wuyi',
'xin_zhuzhi',
],
}
};

View File

@ -9,23 +9,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
refresh_huo:["ol_sp_zhugeliang","ol_xunyu","ol_dianwei","re_yanwen","ol_pangtong","ol_yuanshao","ol_pangde","re_taishici"],
refresh_lin:['re_menghuo','ol_sunjian','re_caopi','ol_xuhuang','ol_dongzhuo','ol_zhurong','re_jiaxu','ol_lusu'],
refresh_shan:['ol_jiangwei','ol_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce','ol_dengai','re_zhanghe'],
refresh_yijiang1:['xin_wuguotai','xin_gaoshun','re_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua','dc_xushu'],
refresh_yijiang2:['re_madai','re_wangyi','guanzhang','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','dc_bulianshi','xin_liubiao'],
refresh_yijiang1:['xin_wuguotai','xin_gaoshun','re_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua','dc_xushu','re_chengong'],
refresh_yijiang2:['re_madai','re_wangyi','guanzhang','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','dc_bulianshi','xin_liubiao','re_xunyou'],
refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','xin_yufan','dc_liru','re_manchong','re_fuhuanghou','re_guanping','re_liufeng'],
refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','re_chenqun','re_caifuren','re_guyong','re_jushou','re_zhuhuan'],
refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan','re_guotufengji','re_xiahoushi','re_liuchen'],
refresh_yijiang6:['re_guohuanghou'],
refresh_xinghuo:['re_duji','dc_gongsunzan','re_sp_taishici'],
refresh_yijiang6:['re_guohuanghou','re_sundeng'],
refresh_xinghuo:['re_duji','dc_gongsunzan','re_sp_taishici','re_caiyong'],
},
},
connect:true,
character:{
re_sundeng:['male','wu',4,['rekuangbi']],
re_caiyong:['male','qun',3,['rebizhuan','retongbo']],
re_chengong:['male','qun',3,['remingce','zhichi']],
re_xunyou:['male','wei',3,['reqice','rezhiyu'],['clan:颍川荀氏']],
dc_liru:['male','qun',3,['xinjuece','dcmieji','dcfencheng']],
re_zhuhuan:['male','wu',4,['refenli','repingkou']],
ol_dianwei:['male','wei',4,['olqiangxi','olningwu']],
re_sp_taishici:['male','qun',4,['rejixu']],
re_liufeng:['male','shu',4,['rexiansi']],
ol_xunyu:['male','wei',3,['quhu','oljieming']],
ol_xunyu:['male','wei',3,['quhu','oljieming'],['clan:颍川荀氏']],
re_liuchen:['male','shu',4,['rezhanjue','reqinwang'],['zhu']],
dc_gongsunzan:['male','qun',4,['reyicong','dcqiaomeng']],
re_duji:['male','wei',3,['reandong','reyingshi']],
@ -150,6 +154,419 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_xushu:['zhaoyun','sp_zhugeliang'],
},
skill:{
//十周年孙登
rekuangbi:{
audio:2,
trigger:{player:'phaseUseBegin'},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt2('rekuangbi'),(card,player,target) => {
return target.countCards('he')>0&&target!=player;
}).set('ai',target=>{
var player=_status.event.player;
if(_status.event.goon) return get.attitude(player,target)*Math.sqrt(target.countCards('he'));
return -get.attitude(player,target)/(target.countCards('he')+1)*10;
}).set('goon',player.countCards('hs',card=>player.hasValueTarget(card))>=2);
'step 1'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('rekuangbi',target);
target.chooseCard('匡弼:将至多三张牌置于'+get.translation(player)+'的武将牌上','he',[1,3],true).set('ai',card=>{
if(get.attitude(_status.event.player,_status.event.getParent().player)>0){
return 7-get.value(card);
}
return -get.value(card);
});
}else event.finish();
'step 2'
if(result.bool){
player.addToExpansion(result.cards,target,'give').gaintag.add('rekuangbi_effect');
player.addTempSkill('rekuangbi_effect','phaseUseEnd');
player.markAuto('rekuangbi_effect',[target]);
}
},
subSkill:{
effect:{
trigger:{player:'useCard'},
charlotte:true,
forced:true,
filter:function(event,player){
return player.getExpansions('rekuangbi_effect').length>0;
},
content:function(){
'step 0'
var cards=player.getExpansions('rekuangbi_effect');
var suit=get.suit(trigger.card),cardsx=cards.filter(card=>get.suit(card)==suit);
var len=cardsx.length;
if(len>1){
player.chooseButton(['匡弼:移去一张同花色的“匡弼”牌',cards],true).set('filterButton',button=>{
return get.suit(button.link)==_status.event.suit;
}).set('suit',suit);
}
else if(len==1){
event._result={bool:true,links:cardsx};
}
else{
event._result={bool:false,links:[cards.randomGet()]};
}
'step 1'
if(result.links&&result.links.length){
player.loseToDiscardpile(result.links);
game.delayx();
}
if(result.bool){
player.draw('nodelay');
var target=player.getStorage('rekuangbi_effect')[0];
if(target&&target.isIn()) target.draw();
}
else{
player.draw();
}
},
intro:{
content:'expansion',
markcount:'expansion',
},
onremove:function(player,skill){
var cards=player.getExpansions(skill);
if(cards.length) player.loseToDiscardpile(cards);
delete player.storage[skill];
},
}
}
},
//十周年蔡邕
rebizhuan:{
audio:2,
trigger:{
player:'useCard',
target:'useCardToTargeted',
},
filter:function(event,player){
if(event.name!='useCard'&&event.player==event.target) return false;
var num=4+Math.min(player.countMark('retongbo'),game.countPlayer());
if(player.getExpansions('rebizhuan').length>=num) return false;
return get.suit(event.card)=='spade';
},
marktext:'书',
intro:{
name:'辟撰(书)',
name2:'书',
content:'expansion',
markcount:'expansion',
},
frequent:true,
locked:false,
content:function(){
player.addToExpansion(get.cards(),'gain2').gaintag.add('rebizhuan');
},
mod:{
maxHandcard:function(player,num){
return num+player.getExpansions('rebizhuan').length;
}
}
},
retongbo:{
audio:2,
trigger:{player:'phaseDrawAfter'},
direct:true,
filter:function(event,player){
return player.getExpansions('rebizhuan').length>0&&player.countCards('he')>0;
},
content:function(){
'step 0'
var next=player.chooseToMove('通博:是否交换“书”和手牌?');
next.set('list',[
[get.translation(player)+'(你)的“书”',player.getExpansions('rebizhuan')],
['你的牌',player.getCards('he')],
]);
next.set('filterMove',function(from,to){
return typeof to!='number';
});
next.set('processAI',function(list){
var player=_status.event.player,cards=list[0][1].concat(list[1][1]),cards2=[];
cards.sort((a,b)=>{
return get.useful(a)-get.useful(b);
});
cards2=cards.splice(0,player.getExpansions('rebizhuan').length);
return [cards2,cards];
});
'step 1'
if(result.bool){
var pushs=result.moved[0],gains=result.moved[1];
pushs.removeArray(player.getExpansions('rebizhuan'));
gains.removeArray(player.getCards('he'));
if(!pushs.length||pushs.length!=gains.length){
event.finish();
return;
}
player.logSkill('retongbo');
player.addToExpansion(pushs,'give',player).gaintag.add('rebizhuan');
player.gain(gains,'gain2');
}
'step 2'
event.cards=player.getExpansions('rebizhuan').slice(0);
if(event.cards.length<4) event.finish();
else {
event.given=[];
var list=[];
event.cards.forEach(i=>list.add(get.suit(i)));
if(list.length>=4&&player.hp<=2) event.four=true;
}
'step 3'
if(event.given.length<4){
player.chooseCardButton('是否将'+get.cnNumber(4-event.given.length)+'张“书”交给任意名其他角色?',event.cards,[1,4-event.given.length],event.given.length>0).set('ai',function(button){
if(!_status.event.goon) return 0;
var four=_status.event.getParent().four,given=_status.event.getParent().given;
if(four) return get.value(button.link)+(given.map(i=>get.suit(i)).contains(get.suit(button.link))?0:10);
if(ui.selected.buttons.length==0) return get.value(button.link);
return 0;
}).set('goon',game.hasPlayer(current=>get.attitude(player,current)>0));
}
else{
event.goto(6);
}
'step 4'
if(result.bool){
for(var i=0;i<result.links.length;i++){
event.cards.remove(result.links[i]);
}
event.togive=result.links.slice(0);
event.given.addArray(event.togive);
player.chooseTarget('将'+get.translation(result.links)+'交给一名其他角色',true,function(card,player,target){
return target!=player;
}).set('ai',function(target){
var att=get.attitude(_status.event.player,target);
if(_status.event.enemy){
return -att;
}
else if(att>0){
return att/(1+target.countCards('h'));
}
else{
return att/100;
}
}).set('enemy',get.value(event.togive[0],player,'raw')<0);
}
else{
event.finish();
}
'step 5'
if(result.targets.length){
result.targets[0].gain(event.togive,'draw').giver=player;
player.line(result.targets[0],'green');
game.log(result.targets[0],'获得了'+get.cnNumber(event.togive.length)+'张','#g“书”');
if(event.given.length<4) event.goto(3);
}
'step 6'
if(event.given.length==4){
var suits=lib.suit.slice(0);
event.given.forEach(i=>suits.remove(get.suit(i,player)));
if(suits.length==0){
player.recover();
player.addMark('retongbo',1,false);
}
}
},
marktext:'博',
intro:{
content:function(storage,player){
var num=4+Math.min(storage,game.countPlayer());
return '“书”的上限+'+num;
}
},
ai:{
combo:'rebizhuan',
}
},
//十周年陈宫
remingce:{
enable:'phaseUse',
usable:1,
audio:2,
position:'he',
filterCard:function(card){
return get.name(card)=='sha'||get.type(card)=='equip';
},
filter:function(event,player){
return player.countCards('h','sha')>0||player.countCards('he',{type:'equip'})>0;
},
check:function(card){return 8-get.value(card)},
selectTarget:2,
multitarget:true,
discard:false,
lose:false,
targetprompt:['得到牌','出杀目标'],
filterTarget:function(card,player,target){
if(ui.selected.targets.length==0){
return player!=target;
}
return true;
},
delay:false,
content:function(){
'step 0'
player.give(cards,targets[0],'visible');
'step 1'
if(!targets[0].canUse({name:'sha',isCard:true},targets[1],false,false)) event._result={control:'选项二'};
else targets[0].chooseControl().set('ai',function(){
var player=_status.event.player,target=_status.event.target;
return get.effect(target,{name:'sha',isCard:true},player,player)>0?0:1;
}).set('choiceList',['视为对'+get.translation(targets[1])+'使用一张【杀】,若此杀造成伤害则执行选项二','你与'+get.translation(player)+'各摸一张牌']).set('target',targets[1]).set('prompt','对'+get.translation(targets[1])+'使用一张杀,或摸一张牌');
'step 2'
if(result.control=='选项二'){
game.asyncDraw([player,targets[0]]);
event.finish();
}
else{
targets[0].useCard({name:'sha',isCard:true},targets[1]);
}
'step 3'
if(targets[0].hasHistory('useCard',evt=>{
return evt.getParent()==event&&targets[0].hasHistory('sourceDamage',evtx=>evt.card==evtx.card);
})){
game.asyncDraw([player,targets[0]]);
}
},
ai:{
result:{
player:function(player){
var players=game.filterPlayer();
for(var i=0;i<players.length;i++){
if(players[i]!=player&&get.attitude(player,players[i])>1&&get.attitude(players[i],player)>1){
return 1;
}
}
return 0;
},
target:function(player,target){
if(ui.selected.targets.length){
return -0.1;
}
return 1;
}
},
order:8.5,
expose:0.2
}
},
// 界荀攸
reqice:{
audio:2,
enable:'phaseUse',
filter:function(event,player){
var hs=player.getCards('h');
if(!hs.length) return false;
if((player.getStat('skill').reqice||0) >= player.countMark('reqice_mark')+1) return false;
for(var i=0; i<hs.length; i++){
var mod2=game.checkMod(hs[i],player,'unchanged','cardEnabled2',player);
if(mod2===false) return false;
}
return true;
},
chooseButton:{
dialog:function(player){
var list=[];
for(var i=0; i<lib.inpile.length; i++){
if(get.type(lib.inpile[i])=='trick') list.push(['锦囊','',lib.inpile[i]]);
}
return ui.create.dialog(get.translation('reqice'),[list,'vcard']);
},
filter:function(button,player){
return lib.filter.filterCard({name:button.link[2]},player,_status.event.getParent());
},
check:function(button){
var player=_status.event.player;
var effect=player.getUseValue(button.link[2]);
if(player.countCards('hs',button.link[2])>0) return 0;
if((player.getStat('skill').reqice||0)<player.countMark('reqice_mark')+1){
if(['draw','gain'].some(i=>get.tag(button.link[2],i) >= 1)) return effect*2;
}
if(effect>0) return effect;
return 0;
},
backup:function(links,player){
return {
filterCard:true,
selectCard:-1,
position:'h',
audio:'reqice',
popname:true,
viewAs:{name:links[0][2]},
}
},
prompt:function(links,player){
return '将所有手牌当【'+get.translation(links[0][2])+'】使用';
}
},
ai:{
order:1,
result:{
player:function(player){
var num=0;
var cards=player.getCards('h');
if(cards.length >= 3&&player.hp >= 3&&player.countMark('reqice_mark')<2) return 0;
for(var i=0; i<cards.length; i++){
num+=Math.max(0,get.value(cards[i],player,'raw'));
}
num/=cards.length;
num/=(player.countMark('reqice_mark')+1)*1.3;
num*=Math.min(cards.length,player.hp);
return 13-num;
}
},
threaten:1.7,
},
subSkill:{
bakcup:{},
mark:{
charlotte:true,
onremove:true,
intro:{
name2:'奇策',
content:'mark',
},
},
}
},
rezhiyu:{
audio:2,
trigger:{player:'damageEnd'},
content:function(){
'step 0'
player.draw();
'step 1'
if(!player.countCards('h')) event.finish();
else player.showHandcards();
'step 2'
if(!trigger.source||!trigger.source.isIn()) event._result={bool:false,cards:[]};
else trigger.source.chooseToDiscard('智愚:请弃置一张手牌',true);
'step 3'
var cards=player.getCards('h');
var color=get.color(cards[0],player);
var bool=true;
for(var i=1; i<cards.length; i++){
if(get.color(cards[i],player)!=color){
bool=false;
break;
}
}
if(bool){
var cards=result.cards.filterInD('d');
if(cards.length){
player.gain(cards,'gain2');
}
player.addMark('reqice_mark',1);
player.addTempSkill('reqice_mark',{player:'phaseAfter'});
}
},
ai:{
maixie_defend:true,
threaten:0.85
}
},
oljiang:{
audio:'jiang',
inherit:'jiang',
@ -4094,7 +4511,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target.judge(function(card){
var evt=_status.event.getParent('redingpin'),suit=get.suit(card);
switch(suit){
case 'club': case 'spade':return evt.target.hp;
case 'club':case 'spade':return evt.target.hp;
case 'diamond':return get.sgn(get.attitude(evt.target,evt.player))*-3;
}
return 0;
@ -4104,7 +4521,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
};
'step 1'
switch(result.suit){
case 'spade': case 'club':
case 'spade':case 'club':
if(target.hp>0) target.draw(Math.min(3,target.hp));
target.addTempSkill('redingpin2');
break;
@ -5595,7 +6012,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
"step 0"
target.chooseToDiscard(cards.length,'弃置'+get.cnNumber(cards.length)+'张牌并失去1点体力或点取消将武将牌翻面并摸'+get.cnNumber(cards.length)+'张牌').set('ai',function(card){
target.chooseToDiscard(cards.length,'弃置'+get.cnNumber(cards.length)+'张牌并失去1点体力或点取消将武将牌翻面并摸'+get.cnNumber(cards.length)+'张牌','he').set('ai',function(card){
var player=_status.event.player;
if(player.isTurnedOver()) return -1;
return (player.hp*player.hp)-get.value(card);
@ -9420,7 +9837,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 2'
player.chooseCardTarget({
filterCard:function(card){
return !card.hasGaintag('reyiji_tag');
return get.itemtype(card)=='card'&&!card.hasGaintag('reyiji_tag');
},
filterTarget:lib.filter.notMe,
selectCard:[1,event.num],
@ -9688,16 +10105,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
"new_yijue2":{
new_yijue2:{
trigger:{
player:"damageBegin1",
},
filter:function(event){
return event.source&&event.source.hasSkill('new_yijue')&&event.card&&event.card.name=='sha'&&get.suit(event.card)=='heart'&&event.notLink();
return event.source&&event.source==_status.currentPhase&&event.card.name=='sha'&&get.suit(event.card)=='heart'&&event.notLink();
},
silent:true,
popup:false,
forced:true,
charlotte:true,
content:function(){
trigger.num++;
},
@ -12503,7 +12920,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinleiji_misa:'雷击',
xinguidao:'鬼道',
xinleiji_info:'①当你使用或打出【闪】或【闪电】时你可以进行判定。②当你的判定的判定牌生效后若结果为黑桃你可对一名其他角色造成2点雷电伤害梅花你回复1点体力并可对一名其他其他角色造成1点雷电伤害。',
xinleiji_append:'<span style="font-family: yuanli">不能触发〖雷击〗的判定:〖暴虐〗、〖助祭〗、<br>〖弘仪〗、〖孤影〗。</span>',
xinleiji_append:'<span style="font-family:yuanli">不能触发〖雷击〗的判定:〖暴虐〗、〖助祭〗、<br>〖弘仪〗、〖孤影〗。</span>',
xinleiji_faq:'不能触发〖雷击〗的判定',
xinleiji_faq_info:'<br>董卓/界董卓〖暴虐〗<br>黄巾雷使〖助祭〗<br>羊徽瑜〖弘仪〗<br>鸣濑白羽〖孤影〗',
xinguidao_info:'一名角色的判定牌生效前你可以打出一张黑色牌作为判定牌并获得原判定牌。若你以此法打出的牌为黑桃2-9则你摸一张牌。',
@ -12943,7 +13360,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
reweimu_info:'锁定技。①你不能成为黑色锦囊牌的目标。②当你于回合内受到伤害时你防止此伤害并摸2X张牌X为伤害值。',
ol_lusu:'界鲁肃',
olhaoshi:'好施',
olhaoshi_info:'摸牌阶段开始时你可以多摸两张牌。然后摸牌阶段结束时若你的手牌数大于5则你将手牌数的一半向下取整交给一名手牌最少其他角色并获得如下效果直到你下回合开始当你成为【杀】或普通锦囊牌的目标后其可以交给你一张手 牌。',
olhaoshi_info:'摸牌阶段开始时你可以多摸两张牌。然后摸牌阶段结束时若你的手牌数大于5则你将手牌数的一半向下取整交给一名手牌最少其他角色并获得如下效果直到你下回合开始当你成为【杀】或普通锦囊牌的目标后其可以交给你一张手牌。',
oldimeng:'缔盟',
oldimeng_info:'出牌阶段限一次你可令两名满足X≤Y的其他角色交换手牌并获得如下效果出牌阶段结束时你弃置X张牌X为这两名角色手牌数之差的绝对值Y为你的手牌数。',
@ -13058,6 +13475,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcfencheng_info:'限定技。出牌阶段你可以指定一名其他角色令从其开始的其他角色依次选择一项⒈弃置至少X张牌X为上一名角色弃置的牌数+1。⒉你对其造成2点伤害。',
oljiang:'激昂',
oljiang_info:'①当你使用【决斗】或红色【杀】指定第一个目标后或成为【决斗】或红色【杀】的目标后你可以摸一张牌。②当有【决斗】或红色【杀】于每回合内首次因弃置而进入弃牌堆后你可以失去1点体力并获得这些牌。',
re_xunyou:'界荀攸',
reqice:'奇策',
reqice_info:'出牌阶段限X次X为你的“奇策”数+1你可以将所有手牌当做任意一张普通锦囊牌使用。',
rezhiyu:'智愚',
rezhiyu_info:'当你受到伤害后你可以摸一张牌然后展示所有手牌令伤害来源弃置一张手牌。若你展示的牌颜色均相同你获得1枚“奇策”直到下回合结束且获得来源弃置的牌。',
re_caiyong:'界蔡邕',
rebizhuan:'辟撰',
rebizhuan_bg:'书',
rebizhuan_info:'①当你使用♠牌时,或成为其他角色使用♠牌的目标后,你可以将牌堆顶的一张牌置于武将牌上,称为“书”(你至多拥有四张“书”)。②你的手牌上限+XX为“书”数。',
retongbo:'通博',
retongbo_info:'摸牌阶段结束时你可以用任意手牌交换等量“书”。然后若“书”数至少为4你可以将四张“书”任意交给其他角色。若你交出的牌花色各不相同你回复1点体力且“书”的上限+1至多增加等同存活角色数的上限。',
re_chengong:'界陈宫',
remingce:'明策',
remingce_info:'出牌阶段限一次。你可以将一张【杀】或装备牌交给一名其他角色其选择一项1.视为对你选择的另一名角色使用一张【杀】且若此牌造成伤害则执行选项22.你与其各摸一张牌。',
re_sundeng:'界孙登',
rekuangbi:'匡弼',
rekuangbi_info:'出牌阶段开始时,你可以令一名其他角色将至多三张牌置于你的武将牌上直到此阶段结束。然后当你使用牌时,若你:有与此牌花色相同的“匡弼”牌,你移去其中一张并与其各摸一张牌;没有与此牌花色相同的“匡弼”牌,你随机移去一张“匡弼”牌并摸一张牌。',
refresh_standard:'界限突破·标',
refresh_feng:'界限突破·风',

File diff suppressed because it is too large Load Diff

View File

@ -7,11 +7,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp:{
sp_tianji:["sunhao","liuxie","caoang","hetaihou","sunluyu",'ol_wangrong',"zuofen","ganfuren","ol_bianfuren","qinghegongzhu","tengfanglan","ruiji",'caoxiancaohua'],
sp_sibi:["yangxiu","chenlin","chengyu","shixie","fuwan","wangyun","zhugejin","simalang","maliang","buzhi","dongyun","kanze","sunqian","xizhicai","sunshao",'duxi',"jianggan",'ol_dengzhi','ol_yangyi','ol_dongzhao','ol_chendeng','jin_yanghu','wangyan','xiahouxuan'],
sp_tianzhu:["wutugu","yanbaihu","shamoke","panfeng","zhugedan",'huangzu','gaogan',"tadun","fanjiangzhangda"],
sp_tianzhu:["wutugu","yanbaihu","shamoke","panfeng","zhugedan",'huangzu','gaogan',"tadun","fanjiangzhangda","ahuinan"],
sp_nvshi:["lingju","guanyinping","zhangxingcai","mayunlu","dongbai","zhaoxiang",'ol_zhangchangpu','ol_xinxianying',"daxiaoqiao","jin_guohuai"],
sp_shaowei:["simahui","zhangbao","zhanglu","zhugeguo","xujing","zhangling",'huangchengyan','ol_puyuan'],
sp_huben:["caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong'],
sp_liesi:['mizhu','weizi'],
sp_shaowei:["simahui","zhangbao","zhanglu","zhugeguo","xujing","zhangling",'huangchengyan','ol_puyuan','zhangzhi'],
sp_huben:["caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong'],
sp_liesi:['mizhu','weizi','ol_liuba'],
sp_default:["sp_diaochan","sp_zhaoyun","sp_sunshangxiang","sp_caoren","sp_jiangwei","sp_machao","sp_caiwenji","jsp_guanyu","jsp_huangyueying","sp_pangde","sp_jiaxu","yuanshu",'sp_zhangliao','sp_ol_zhanghe','sp_menghuo'],
sp_qifu:["caoying",'panshu',"caochun","yuantanyuanshang",'caoshuang','wolongfengchu','guansuo','baosanniang','fengfangnv','jin_zhouchu'],
sp_wanglang:['wanglang'],
@ -28,6 +28,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
zhangzhi:['male','qun',3,['olbixin','olximo']],
ol_liuba:['male','shu',3,['oltongduo','olzhubi']],
ol_furong:['male','shu',4,['olxiaosi']],
ahuinan:['male','qun',4,['jueman']],
jin_guohuai:['female','jin',3,['zhefu','yidu']],
xiahouxuan:['male','wei',3,['olhuanfu','olqingyi','olzeyue']],
dengzhong:['male','wei',4,['dzkanpo','dzgengzhan']],
@ -178,6 +182,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//kaisa:["male","western",4,["zhengfu"]],
},
characterIntro:{
zhangzhi:'张芝—192年字伯英敦煌郡渊泉县今甘肃省瓜州县人。东汉书法家、“草书之祖”大司农张奂的儿子。出身名门拒绝朝廷征召潜心研习书法。擅长草书中的章草将古代当时字字区别、笔画分离的草法改为上下牵连富于变化的新写法富有独创性在当时影响很大。李志敏评价“张芝创造了草书问世以来的第一座高峰精熟神妙兼善章今”。 没有真迹传世,仅存《八月帖》等刻帖。汉献帝初平三年,去世于家中,著有《笔心论》,与钟繇、王羲之和王献之并称“书中四贤”。',
ahuinan:'阿会喃,小说《三国演义》及其衍生作品中的角色,南蛮王孟获属下大将,第三洞元帅;与董荼那等人一起担任孟获的援军出征,但是被俘虏,又被诸葛亮释放,再次出战时,被唾骂不知羞耻,面红耳赤的退军。后同董荼那共同绑架孟获献于蜀军,却被诸葛亮在其二人与孟获的重要性间权衡后出卖了他们,放走了孟获,使其为孟获所杀。',
xiahouxuan:'夏侯玄209年254年字泰初《三国志》等作太初沛国谯县今安徽省亳州市人。三国时期曹魏大臣、思想家、文学家征南大将军夏侯尚之子大将军曹爽的表弟。夏侯玄少年有名望仪表出众时人称为“朗朗如日月之入怀”。魏文帝黄初六年225年袭封昌陵乡侯。魏明帝时历任散骑黄门侍郎、羽林监。少帝曹芳继位后拜散骑常侍、中护军保卫皇宫。后任征西将军任内与曹爽策划骆谷之役大失人心。高平陵政变后被夺去兵权改任大鸿胪、太常卿。嘉平六年254年中书令李丰与外戚张缉密谋杀死大将军司马师改以夏侯玄执政。事泄被杀夷灭三族夏侯玄死时年仅四十六岁。著有文集三卷如今已佚。政治上提出了“审官择人”、“除重官”、“改服制”等制度被太傅司马懿评价“皆大善”。博学多识才华出众精通玄学成为“四聪”之一与何晏等人开创了魏晋玄学的先河是早期的玄学领袖人物。',
dengzhong:'邓忠不详264年三国时期曹魏名将邓艾之子。景元五年264年钟会谋反事败士兵哗变钟会被杀邓艾部将想追还邓艾父子但卫瓘却派田续追邓艾于绵竹西相遇将邓艾和邓忠等人杀死。直至泰始九年273年才恢复名节。',
wangyan:'王衍256年311年字夷甫琅邪郡临沂县今山东省临沂市人。西晋末年重臣玄学清谈领袖曹魏幽州刺史王雄之孙、平北将军王乂之子、司徒王戎堂弟。王衍出身琅琊王氏。外表清明俊秀风姿安详文雅笃好老庄学说颇有时名。步入仕途后历任黄门侍郎、中领军、尚书令、尚书仆射等职。光熙元年307年升任司空。次年又任司徒。王衍位高权重却不思为国为保全自己还让弟弟王澄、族弟王敦分任荆州、青州刺史遭时人鄙夷。王弥进攻洛阳时王衍率军抵抗。其后转任太尉兼尚书令又兼领太傅军司。永嘉五年311年东海王司马越去世王衍奉其灵柩返回东海途中为羯人石勒所俘获。王衍在与石勒交谈时仍推脱责任并劝其称帝石勒大怒将其与西晋旧臣一同活埋时年五十六岁。王衍工书法尤擅行书《宣和书谱》有其作品《尊夫人帖》。',
@ -657,6 +663,522 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
//刘巴
oltongduo:{
audio:2,
trigger:{player:'phaseZhunbeiBegin'},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt2('oltongduo'),function(card,player,target){
return target!=player&&target.countCards('h')>0;
}).set('ai',function(target){
var att=get.attitude(_status.event.player,target);
if(att>0) return Math.sqrt(att)/10;
return 5-att;
});
'step 1'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('oltongduo',target);
target.chooseCard('h',true,'统度:将一张手牌交给'+get.translation(player)+',然后其于此阶段结束时将此牌置于牌堆顶');
}
else{
event.finish();
}
'step 2'
if(result.bool){
player.addTempSkill('oltongduo_put');
event.target.give(result.cards,player,true).gaintag.add('oltongduo');
}
},
subSkill:{
put:{
trigger:{player:'phaseUseEnd'},
charlotte:true,
forced:true,
filter:function(event,player){
return player.hasCard(card=>card.hasGaintag('oltongduo'),'h');
},
content:function(){
var cards=player.getCards('h',card=>card.hasGaintag('oltongduo'));
player.lose(cards,ui.cardPile,'insert');
game.log(player,'将',get.cnNumber(cards.length)+'张牌','置于牌堆顶');
game.broadcastAll(function(player){
var cardx=ui.create.card();
cardx.classList.add('infohidden');
cardx.classList.add('infoflip');
player.$throw(cardx,1000,'nobroadcast');
},player);
},
onremove:function(player){
player.removeGaintag('oltongduo');
},
}
}
},
olzhubi:{
audio:2,
enable:'phaseUse',
group:'olzhubi_replace',
filter:function(event,player){
return (player.getStat('skill').olzhubi||0)<player.maxHp;
},
filterTarget:function(card,player,target){
return target.countCards('he')>0;
},
content:function(){
'step 0'
target.chooseCard('he',true,'铸币:请重铸一张牌',(card,player,target)=>{
var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player);
if(mod!='unchanged') return mod;
return true;
});
'step 1'
if(result.bool){
var cards=result.cards;
target.loseToDiscardpile(cards);
target.draw().gaintag=['olzhubi_tag'];
}
},
ai:{
order:6,
result:{
target:function(player,target){
if(target.hasCard(card=>card.hasGaintag('olzhubi_tag'),'h')) return 0.5;
return 1;
}
}
},
subSkill:{
replace:{
trigger:{global:'phaseJieshuBegin'},
filter:function(event,player){
return event.player.hasCard(card=>card.hasGaintag('olzhubi_tag'),'h');
},
forced:true,
locked:false,
logTarget:'player',
content:function(){
'step 0'
var cards=get.bottomCards(5);
event.cards2=cards;
game.cardsGotoOrdering(cards);
var next=player.chooseToMove('铸币:用任意“币”交换牌堆底等量张牌');
var hs=player.getCards('h',card=>card.hasGaintag('olzhubi_tag'));
next.set('filterMove',function(from,to){
return typeof to!='number';
});
next.set('list',[
['牌堆底',cards],
['你的手牌',hs,'olzhubi_tag']
]);
next.set('processAI',function(list){
var all=list[0][1].concat(list[1][1]),cards=all.slice(0);
var num=_status.event.num;
cards.sort(function(a,b){
return get.value(b)-get.value(a);
});
return [cards.slice(num),cards.slice(0,num)];
});
next.set('num',hs.length);
'step 1'
if(result.bool){
event.forceDie=true;
var cards=result.moved[0];
event.cards=cards;
var hs=player.getCards('h');
var lose=[],gain=event.cards2;
for(var i of cards){
if(hs.contains(i)) lose.push(i);
else gain.remove(i);
}
if(lose.length) player.lose(lose,ui.cardPile);
if(gain.length) player.gain(gain,'draw');
}
else event.finish();
'step 2'
for(var i of cards){
if(!(('hejsdx').includes(get.position(i,true)))){
i.fix();
ui.cardPile.appendChild(i);
}
}
game.updateRoundNumber();
}
},
}
},
//傅肜
olxiaosi:{
audio:2,
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
return target.countCards('h')>0&&player!=target;
},
filterCard:function(card,player,target){
return get.type(card)=='basic';
},
check:function(card){
var player=_status.event.player;
if(player.hasValueTarget(card)) return 10-get.value(card);
return 0.1;
},
content:function(){
'step 0'
if(target.countCards('h',card=>{
return get.type(card)=='basic'&&lib.filter.cardDiscardable(card,target,'olxiaosi');
})==0) event.draw=true;
else{
target.chooseToDiscard('h',true,'效死:弃置一张基本牌',{type:'basic'});
}
'step 1'
var cards2=cards.filterInD('d');
if(result.bool){
cards2=cards2.addArray(result.cards.filterInD('d'));
}
event.cards2=cards2;
'step 2'
if (!event.cards2.length) event.finish();
else player.chooseButton(['效死:是否使用其中的一张牌?',event.cards2]).set('filterButton',button=>{
return _status.event.player.hasUseTarget(button.link,false,false);
}).set('ai',button=>{
if(button.link.name=='jiu') return 10;
return _status.event.player.getUseValue(button.link);
});
'step 3'
if(result.bool){
var card=result.links[0];
event.cards2.remove(card);
player.$gain2(card,false);
game.delayx();
player.chooseUseTarget(true,card,false,'nodistance');
}
'step 4'
if(event.cards2.filter(i=>player.hasUseTarget(i,false,false)).length) event.goto(2);
'step 5'
if(event.draw) player.draw();
},
ai:{
order:4.5,
result:{
player:1,
target:-1
}
}
},
//阿会喃
jueman:{
audio:2,
trigger:{global:'phaseEnd'},
forced:true,
direct:true,
filter:function(event,player){
var history=game.getGlobalHistory('useCard',evt=>{
return get.type(evt.card)=='basic';
});
if(history.length<2) return false;
var users=history.slice(0,2).map(i=>i.player);
var list=users.filter(user=>user==player);
if(list.length==1) return true;
if(list.length==0){
var evtx=history[2];
if(evtx){
var name=evtx.card.name,nature=evtx.card.nature;
if(evtx&&player.hasUseTarget({name:name,nature:nature,isCard:true})) return true;
}
}
return false;
},
content:function(){
'step 0'
var history=game.getGlobalHistory('useCard',evt=>{
return get.type(evt.card)=='basic';
});
var list=history.slice(0,2).map(i=>i.player).filter(user=>user==player);
if(list.length==1) {
player.logSkill('jueman');
player.draw();
}
else if(list.length==0){
var evtx=history[2],name=evtx.card.name,nature=evtx.card.nature;
player.chooseUseTarget({name:name,nature:nature,isCard:true},true).set('logSkill','jueman');
}
}
},
//张芝
olbixin:{
audio:2,
trigger:{
global:['phaseZhunbeiBegin','phaseJieshuBegin'],
},
direct:true,
onremove:['olbixin','olbixin_basic','olbixin_trick','olbixin_equip'],
group:'olbixin_full',
map:{基本:'basic',锦囊:'trick',装备:'equip'},
filter:function(event,player){
var count=player.countMark('olbixin');
if(count>0&&event.player!=player) return false;
if(count>1&&event.name=='phaseZhunbei') return false;
if(count>2) return false;
var num=count>=3?3:1;
var types=['basic','trick','equip'].filter(type=>{
return player.countMark('olbixin_'+type)<num;
});
if(!types.length) return false;
return lib.skill.olbixin.getList(player).length>0;
},
getList:function(player,event){
var natures=lib.inpile_nature.slice(0),used=[];
var history=player.actionHistory;
for(var i=history.length-1;i>=0;i--){
var info=history[i];
for(var evt of info.useCard){
var name=evt.card.name;
if(get.type(name)!='basic') continue;
if(name=='sha'){
if(evt.card.nature) natures.remove(evt.card.nature);
else used.push(name);
}
else used.push(name);
};
if(info.isRound) break;
}
var vcards=[];
for(var name of lib.inpile){
if(get.type(name)!='basic') continue;
if(!event){
if(name=='sha'){
if(!used.contains('sha')&&player.hasUseTarget({name:'sha'})) vcards.push(['基本','','sha']);
for(var nature of natures) {
if(player.hasUseTarget({name:'sha',nature:nature})) vcards.push(['基本','','sha',nature]);
}
}
else if(!used.contains(name)&&player.hasUseTarget({name:name})) vcards.push(['基本','',name]);
}
else{
if(name=='sha'){
if(!used.contains('sha')&&event.filterCard({name:'sha'},player,event)) vcards.push(['基本','','sha']);
for(var nature of natures) {
if(event.filterCard({name:'sha',nature:nature},player,event)) vcards.push(['基本','','sha',nature]);
}
}
else if(!used.contains(name)&&event.filterCard({name:name},player,event)) vcards.push(['基本','',name]);
}
}
return vcards;
},
content:function(){
'step 0'
var types=['basic','trick','equip'];
var list=lib.skill.olbixin.getList(player);
if(list.length){
var dialog=['###'+get.prompt('olbixin')+'###<div class="text center">摸'+get.cnNumber(player.countMark('olbixin')>=3?1:3)+'张牌,然后将所有指定类型的手牌当一张基本牌使用</div>'];
dialog.push([types.map(i=>get.translation(i)),'tdnodes']);
dialog.push([list,'vcard']);
player.chooseButton(dialog,2).set('filterButton',button=>{
var player=_status.event.player,count=player.countMark('olbixin'),num=count>=3?3:1;
var type=typeof button.link;
if(ui.selected.buttons.length&&type==typeof ui.selected.buttons[0].link) return false;
if(type=='string'&&player.countMark('olbixin_'+lib.skill.olbixin.map[button.link])>=num) return false;
if(type!='string'&&!player.hasUseTarget({name:button.link[2],nature:button.link[3]})) return false;
return true;
}).set('ai',button=>{
var list=_status.event.list;
var type=typeof button.link;
if(type=='string') return (1.2-list.indexOf(lib.skill.olbixin.map[button.link]))*10;
return _status.event.player.getUseValue({name:button.link[2],nature:button.link[3]});
}).set('list',types.map(i=>[i,player.getCards('h',{type:i}).map(i=>get.value(i)).reduce((p,c)=>p+c,0)]).sort((a,b)=>a[1]-b[1]).map(i=>i[0]));
}else event.finish();
'step 1'
if(result.bool){
if(typeof result.links[0]!='string') result.links.reverse();
var type=result.links[0],name=result.links[1][2],nature=result.links[1][3];
player.logSkill('olbixin');
game.log(player,'声明了',type+'牌');
type=lib.skill.olbixin.map[type];
event.type=type;
event.card={name:name,nature:nature};
player.addMark('olbixin_'+type,1,false);
player.draw(player.countMark('olbixin')>=3?1:3);
game.delayx();
}else event.finish();
'step 2'
if(player.hasCard(card=>get.type2(card)==event.type,'h')){
var cards=player.getCards('h',card=>get.type2(card)==event.type);
var cardx=get.autoViewAs(card,cards);
if(player.hasUseTarget(cardx,true,false)){
player.chooseUseTarget(cardx,cards,true,false).set('prompt','选择'+get.translation(cardx)+''+get.translation(cards)+')的目标');
}
}
},
subSkill:{
full:{
enable:'chooseToUse',
filter:function(event,player){
if(event.olbixin) return false;
var count=player.countMark('olbixin');
if(count<=2) return false;
var num=count>=3?3:1;
var types=['basic','trick','equip'].filter(type=>{
return player.countMark('olbixin_'+type)<num;
});
if(!types.length) return false;
return lib.skill.olbixin.getList(player,event).length>0;
},
chooseButton:{
dialog:function(event,player){
var list=lib.skill.olbixin.getList(player,event);
var types=['basic','trick','equip'];
return ui.create.dialog(
'###笔心###<div class="text center">摸一张牌,然后将所有指定类型的手牌当一张基本牌使用</div>',
[types.map(i=>get.translation(i)),'tdnodes'],
[list,'vcard']
);
},
filter:function(button,player){
var player=_status.event.player,count=player.countMark('olbixin'),num=count>=3?3:1;
var type=typeof button.link;
if(ui.selected.buttons.length&&type==typeof ui.selected.buttons[0].link) return false;
if(type=='string'&&player.countMark('olbixin_'+lib.skill.olbixin.map[button.link])>=num) return false;
if(type!='string'&&!_status.event.getParent().filterCard({name:button.link[2],nature:button.link[3]},player,_status.event.getParent())) return false;
return true;
},
select:2,
check:function(button){
var types=['basic','trick','equip'];
var type=typeof button.link;
var player=_status.event.player;
var list=types.map(i=>[i,player.getCards('h',{type:i}).map(i=>get.value(i)).reduce((p,c)=>p+c,0)]).sort((a,b)=>a[1]-b[1]).map(i=>i[0]);
if(type=='string') return (1.2-list.indexOf(button.link)+Math.sqrt(3-player.countMark('olbixin_'+lib.skill.olbixin.map[button.link])))*10;
if(_status.event.getParent().type!='phase') return 1;
return player.getUseValue({name:button.link[2],nature:button.link[3]});
},
backup:function(links,player){
if(typeof links[0]!='string') links.reverse();
return {
popname:true,
position:'h',
filterCard:()=>false,
selectCard:-1,
type:lib.skill.olbixin.map[links[0]],
viewAs:{name:links[1][2],nature:links[1][3]},
precontent:function(){
'step 0'
player.logSkill('olbixin');
var type=lib.skill.olbixin_full_backup.type;
game.log(player,'声明了',type,'牌');
delete event.result.skill;
player.addMark('olbixin_'+type,1,false);
player.draw(player.countMark('olbixin')>=3?1:3);
'step 1'
var cards=player.getCards('h',card=>get.type2(card)==lib.skill.olbixin_full_backup.type);
var cardsx=cards.filter(i=>game.checkMod(i,player,'unchanged','cardEnabled2',player)!==false);
if(cardsx.length&&cardsx.length==cards.length){
event.result.cards=cards;
game.delayx();
}
else{
event.cancel();
event.getParent().set('olbixin',true);
event.getParent().goto(0);
}
},
}
},
prompt:function(links,player){
return '摸一张牌,然后将所有'+get.translation(links[0])+'牌当做'+(get.translation(links[1][3])||'')+get.translation(links[1][2])+'使用';
}
},
hiddenCard:function(player,name){
var count=player.countMark('olbixin');
if(!lib.inpile.contains(name)||get.type(name)!='basic'||count<3) return false;
var types=['basic','trick','equip'].filter(type=>{
return player.countMark('olbixin_'+type)<3;
});
return types.length;
},
ai:{
fireAttack:true,
respondSha:true,
respondShan:true,
skillTagFilter:function(player){
var count=player.countMark('olbixin');
if(count<3) return;
var types=['basic','trick','equip'].filter(type=>{
return player.countMark('olbixin_'+type)<3;
});
if(types.length) return true;
},
order:1,
result:{
player:function(player){
if(_status.event.dying) return get.attitude(player,_status.event.dying);
return 1;
},
},
},
},
full_backup:{},
}
},
olximo:{
audio:2,
trigger:{player:'logSkill'},
derivation:'olfeibai',
filter:function(event,player){
return event.skill=='olbixin'&&player.countMark('olbixin')<3;
},
forced:true,
content:function(){
player.addMark('olbixin',1,false);
game.log(player,'删除了','#g【笔心】','描述的前五个字符');
if(player.countMark('olbixin')==3){
game.log(player,'交换了','#g【笔心】','方括号中的两个数字');
player.removeSkill('olximo');
game.log(player,'失去了技能','#g【洗墨】');
player.addSkillLog('olfeibai');
}
},
ai:{
combo:'olbixin',
}
},
olfeibai:{
audio:2,
trigger:{
source:'damageBegin1',
player:'recoverBegin',
},
filter:function(event,player){
var storage=player.storage.olfeibai;
var evt=event.getParent(),card=event.card;
if(evt.player!=player||!card) return false;
if(storage&&event.name=='recover'){
return get.color(card)!='red';
}
if(!storage&&event.name=='damage'){
return get.color(card)!='black';
}
return false;
},
content:function(){
player.changeZhuanhuanji('olfeibai');
trigger.num++;
},
zhuanhuanji:true,
forced:true,
mark:true,
marktext:'☯',
intro:{
content:function(storage,player){
if(storage) return '转换技。当你因执行你使用的非红色牌的效果而回复体力时,此回复值+1。';
return '转换技。当你因执行你使用的非黑色牌的效果而造成伤害时,此伤害值+1。';
},
},
},
//新诸葛瑾
olhuanshi:{
audio:'huanshi',
@ -7632,7 +8154,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
else event.finish();
'step 3'
targets[0].gain(card,result.targets[0],'give');
result.targets[0].gain(card,result.targets[0],'give').giver=player;
},
ai:{
order:4,
@ -19496,6 +20018,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(num<4) str+='</span>';
return str;
},
olbixin:function(player){
var count=player.countMark('olbixin');
if(count<3) return lib.translate.olbixin_info.slice(count*5);
return '你可以声明一种牌的类型(每种类型限[3]次),并选择一种你本轮未使用过且有合法目标的的基本牌。你摸[1]张牌,然后若你有此类型的手牌,你将所有此类型的手牌当此基本牌使用。';
},
olfeibai:function(player){
if(player.storage.olfeibai) return '转换技,锁定技。阴:当你因执行你使用的非黑色牌的效果而造成伤害时,此伤害值+1<span class="bluetext">阳:当你因执行你使用的非红色牌的效果而回复体力时,此回复值+1。</span>';
return '转换技,锁定技。<span class="bluetext">阴:当你因执行你使用的非黑色牌的效果而造成伤害时,此伤害值+1</span>阳:当你因执行你使用的非红色牌的效果而回复体力时,此回复值+1。'
},
},
characterReplace:{
caoshuang:['caoshuang','ns_caoshuang'],
@ -19537,6 +20068,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
huangzu:['dc_huangzu','huangzu'],
huojun:['huojun','tw_huojun'],
zhaoyǎn:['dc_zhaoyǎn','zhaoyǎn'],
furong:['ol_furong','furong'],
},
translate:{
"xinfu_lingren":"凌人",
@ -20535,11 +21067,30 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xindiaodu:"调度",
xindiaodu_info:"①每回合限一次,与你势力相同的角色使用装备牌时,其可以摸一张牌。②出牌阶段开始时,你可以获得与你势力相同的一名角色装备区内的一张牌,然后你可以将此牌交给另一名与你势力相同的其他角色。",
olhuanshi:'缓释',
olhuanshi_info:'一名角色的判定牌生效前,你可以令其观看你的牌并其中的一张牌,你打出此牌代替判定牌。然后你可以重铸任意张牌(每回合限重铸一次)。',
olhuanshi_info:'一名角色的判定牌生效前,你可以令其观看你的牌并选择其中的一张牌,你打出此牌代替判定牌。然后你可以重铸任意张牌(每回合限重铸一次)。',
olhongyuan:'弘援',
olhongyuan_info:'每阶段限一次。当你一次性获得至少两张牌以后,你可以将至多两张牌交给等量名角色。',
olmingzhe:'明哲',
olmingzhe_info:'锁定技。当你于出牌阶段外失去红色牌后,你展示这些牌中所有背面朝上移动的牌(没有则不展示),然后摸一张牌。',
ahuinan:'阿会喃',
jueman:'蟨蛮',
jueman_info:'锁定技。一名角色的回合结束时若本回合被使用过的基本牌数不小于2且前两张基本牌的使用者均不为你你视为使用本回合被使用的第三张基本牌有且仅有其中之一为你你摸一张牌。',
ol_liuba:'刘巴',
oltongduo:'统度',
oltongduo_info:'准备阶段,你可以令一名角色交给你一张手牌,然后出牌阶段结束时,你将此牌置于牌堆顶。',
olzhubi:'铸币',
olzhubi_tag:'币',
olzhubi_info:'①出牌阶段限X次X为你的体力上限。你可以令一名角色重铸一张牌以此法获得的牌称为“币”。②一名角色的结束阶段若其有“币”其观看牌堆底的五张牌然后可以用任意“币”交换其中等量张牌。',
ol_furong:'傅肜',
olxiaosi:'效死',
olxiaosi_info:'出牌阶段限一次。你可以选择一名有手牌的其他角色并弃置一张基本牌。若其有可被弃置的基本牌,其弃置一张基本牌。然后你可以以任意顺序使用你与其以此法弃置的牌(无距离和次数限制)。最后若其未以此法弃置牌,你摸一张牌。',
zhangzhi:'张芝',
olbixin:'笔心',
olbixin_info:'一名角色的准备阶段或结束阶段,你可以声明一种牌的类型(每种类型限[1]次),并选择一种你本轮未使用过且有合法目标的的基本牌。你摸[3]张牌,然后若你有此类型的手牌,你将所有此类型的手牌当此基本牌使用。',
olximo:'洗墨',
olximo_info:'锁定技。当你发动〖笔心〗后,你移除其描述的前五个字符。若你已发动三次〖笔心〗,交换中括号中的两个数字,失去〖洗墨〗并获得〖飞白〗。',
olfeibai:'飞白',
olfeibai_info:'转换技,锁定技。阴:当你因执行你使用的非黑色牌的效果而造成伤害时,此伤害值+1当你因执行你使用的非红色牌的效果而回复体力时此回复值+1。',
sp_tianji:'天极·皇室宗亲',
sp_sibi:'四弼·辅国文曲',

File diff suppressed because it is too large Load Diff

View File

@ -775,6 +775,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
locked:false,
audio:2,
audioname:['sb_zhenji'],
enable:['chooseToRespond','chooseToUse'],
filterCard:function(card){
return get.color(card)=='black';
@ -2420,10 +2421,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(event.name=='dying') return true;
if(event.giver!=player) return false;
if(event.name=='gain'){
return event.getg(event.player).length>0;
return event.player!=player&&event.getg(event.player).length>0;
}
return game.hasPlayer(function(current){
return event.getg(current).length>0;
return current!=player&&event.getg(current).length>0;
});
},
direct:true,
@ -2431,7 +2432,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 0'
if(trigger.name!='loseAsync') event.targets=[trigger.player];
else event.targets=game.filterPlayer(function(current){
return trigger.getg(current).length>0;
return current!=player&&trigger.getg(current).length>0;
});
'step 1'
var target=event.targets.shift();

View File

@ -889,7 +889,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
order:10,
result:{
player:1,
player:function(player){
if(_status.event.dying) return get.attitude(player,_status.event.dying)>0;
return 1;
},
},
},
group:['twyingji_wuxie'],

View File

@ -1529,7 +1529,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"weilu_effect2":"威虏",
"weilu_effect2_info":"",
"xinfu_zengdao":"赠刀",
"xinfu_zengdao_info":"限定技,出牌阶段,你可以将装备牌内的任意张牌置于一名其他角色的武将牌旁,称之为「刀」。该角色造成伤害时,其须移去一张「刀」,然后此伤害+1。",
"xinfu_zengdao_info":"限定技,出牌阶段,你可以将装备区内的任意张牌置于一名其他角色的武将牌旁,称之为“刀”。该角色造成伤害时,其须移去一张“刀”,然后此伤害+1。",
"xinfu_zengdao2":"赠刀",
"xinfu_zengdao2_info":"",
"xinfu_guanwei":"观微",

View File

@ -13,10 +13,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yijiang_2015:['caoxiu','caorui','zhongyao','xiahoushi','liuchen','zhangyi','zhuzhi','quancong','sunxiu','gongsunyuan','guotufengji'],
yijiang_2016:['guohuanghou','sunziliufang','huanghao','liyan','sundeng','cenhun','zhangrang','liuyu'],
yijiang_2017:['xinxianying','jikang','wuxian','qinmi','xuezong','xushi','caiyong','caojie'],
yijiang_2022:['lukai','kebineng','zhugeshang'],
yijiang_2022:['lukai','kebineng','zhugeshang','liwan'],
},
},
character:{
liwan:['female','wei',3,['liandui','biejun']],
zhugeshang:['male','shu',3,['sangu','yizu']],
kebineng:['male','qun',4,['kousheng']],
lukai:['male','wu',4,['lkbushi','lkzhongzhuang']],
@ -28,7 +29,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhangchunhua:['female','wei',3,['jueqing','shangshi']],
caozhi:['male','wei',3,['luoying','jiushi']],
caochong:['male','wei',3,['chengxiang','renxin']],
xunyou:['male','wei',3,['qice','zhiyu']],
xunyou:['male','wei',3,['qice','zhiyu'],['clan:颍川荀氏']],
xin_xushu:['male','shu',3,['xinwuyan','xinjujian']],
xin_masu:['male','shu',3,['olsanyao','rezhiman']],
zhuran:['male','wu',4,['danshou']],
@ -103,6 +104,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yujin:["male","wei",4,["yizhong"],[]],
},
characterIntro:{
liwan:'李婉生卒年不详字淑文里居不详贾充之妻魏晋时期才女约景元年间260年前后在世。著有《典戒》。《隋书·经籍志》载李婉有文集一卷今失传。',
zhugeshang:'诸葛尚244年2月263年11月琅琊阳都今山东沂南诸葛瞻长子诸葛亮之孙。诸葛尚博览兵书且精通武艺。炎兴元年公元263年出任先锋抗拒魏国大将邓艾与其父诸葛瞻同战死于绵竹时年十九岁。',
kebineng:'轲比能235年为中国三国时期的鲜卑首领之一。轲比能出身鲜卑支部因他作战勇敢执法公平不贪财物所以被鲜卑民众推举为大人。轲比能因其部落近塞所以他抓住有利条件积极学习汉族先进技术和文化促进了鲜卑族的进步和北方的民族融合。轲比能统率下的部众战守有法战斗力相当强大。自曹操北征后向曹氏进贡表示效忠。魏文帝时轲比能受封附义王。轲比能在进行部落统一战争时受魏国干涉受沉重打击于是对魏怀贰献书魏帝表忠以麻痹魏庭使之放松警惕。此后轲比能的部众变得强盛控弦十余万骑为害魏国边境。每次钞略得财物轲比能都公开透明地均平分配所以得部众死力各部大人都敬畏之。实力强大后他继续部落统一战争于是威行诸部落建立起强大的鲜卑族政权。深感威胁的魏国幽州刺史王雄派刺客韩龙将其刺杀其政权立刻崩溃鲜卑民族再次陷入混战。',
lukai:'陆凯198269年字敬风吴郡吴县今江苏省苏州市人。三国时期吴国重臣丞相陆逊的族侄大司马陆抗的族兄。黄武年间举孝廉出身曾任永兴县长、诸暨县长颇有治绩。拜建武都尉、儋耳太守与聂友率军讨伐朱崖和儋耳迁建武校尉。五凤二年255年讨斩零陵山贼陈毖拜偏将军、巴丘督册封都乡侯。迁武昌右部督随军进入寿春。后拜荡魏将军加号绥远将军。吴景帝孙休继位拜征北将军、假节、领豫州牧。孙皓即位迁任镇西大将军都督巴丘又领荆州牧进封嘉兴侯。宝鼎元年266年迁左丞相。以正直及屡次劝谏孙皓而闻名。建衡元年269年去世时年七十二。',
@ -201,6 +203,131 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhonghui:['jiangwei'],
},
skill:{
//李婉
liandui:{
audio:2,
trigger:{global:'useCard'},
filter:function(event,player){
var history=game.getAllGlobalHistory('useCard');
var index=history.indexOf(event);
if(index<=0) return false;
var previous=history[index-1].player;
if(event.player==player&&previous!=player&&previous.isIn()) return true;
if(event.player!=player&&previous==player) return true;
return false;
},
direct:true,
content:function(){
'step 0'
var history=game.getAllGlobalHistory('useCard');
var index=history.indexOf(trigger);
var previous=history[index-1].player;
var user=trigger.player,target=previous;
event.user=user;event.target=target;
if(user){
user.chooseBool('是否对'+get.translation(target)+'发动【联对】?','令'+get.translation(target)+'摸两张牌').set('ai',()=>_status.event.bool).set('bool',get.effect(target,{name:'wuzhong'},user,user)>0);
}
'step 1'
if(result.bool){
event.user.logSkill('liandui',target);
target.draw(2);
}
}
},
biejun:{
audio:2,
global:'biejun_give',
trigger:{player:'damageBegin4'},
filter:function(event,player){
return !player.hasSkill('biejun_used')&&player.countCards('h',card=>{
return card.hasGaintag('biejun');
})==0;
},
prompt2:'翻面并防止此伤害',
check:function(event,player){
return player.isTurnedOver()||event.num>=player.hp||get.distance(_status.currentPhase,player,'absolute')>=3;
},
content:function(){
player.addTempSkill('biejun_used');
player.turnOver();
trigger.cancel();
},
ai:{
effect:{
target:function(card,player,target){
if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
if(get.tag(card,'damage')){
if(player.getNext()==target&&lib.skill.biejun.filter(null,target)&&target.isTurnedOver()) return [0,1];
}
}
}
},
subSkill:{
used:{charlotte:true},
give:{
audio:2,
enable:'phaseUse',
usable:1,
filter:function(event,player){
if(!player.countCards('h')) return false;
var targets=game.filterPlayer(function(current){
return current!=player&&current.hasSkill('biejun');
});
if(!targets.length) return false;
return true;
},
selectCard:1,
filterCard:true,
filterTarget:function(card,player,target){
return target.hasSkill('biejun');
},
selectTarget:function(){
var player=_status.event.player;
var targets=game.filterPlayer(function(current){
return current!=player&&current.hasSkill('biejun');
});
return targets.length>1?1:-1;
},
complexSelect:true,
prompt:function(){
var player=_status.event.player;
var targets=game.filterPlayer(function(current){
return current!=player&&current.hasSkill('biejun');
});
return '将一张手牌交给'+get.translation(targets)+(targets.length>1?'中的一人':'');
},
position:'h',
discard:false,
lose:false,
delay:false,
check:function(card){
var player=_status.event.player;
if(game.hasPlayer(function(current){
return lib.skill.biejun_give.filterTarget(null,player,current)&&get.attitude(player,current)>0;
})){
return 5-get.value(card);
}
return -get.value(card);
},
content:function(){
game.trySkillAudio('biejun',target);
player.give(cards,target).gaintag.add('biejun');
target.addTempSkill('biejun_tag');
},
ai:{
order:2,
result:{target:1},
},
},
tag:{
charlotte:true,
forced:true,
onremove:function(player){
player.removeGaintag('biejun');
}
}
}
},
//诸葛尚
sangu:{
audio:2,
@ -469,7 +596,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{source:'damageSource'},
forced:true,
filter:function(event,player){
if(!event.card.storage||!event.card.storage.kousheng||event.getParent().type!='card') return false;
if(!event.card||!event.card.storage||!event.card.storage.kousheng||event.getParent().type!='card') return false;
var target=event.player;
return target.isIn()&&player.hasCard(function(card){
return card.hasGaintag('kousheng');
@ -2337,11 +2464,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
fenli:{
audio:2,
audioname:['xin_zhuhuan'],
group:['fenli_draw','fenli_use','fenli_discard'],
subfrequent:['discard'],
subSkill:{
draw:{
audio:'fenli',
audioname:['xin_zhuhuan'],
trigger:{player:'phaseDrawBefore'},
prompt:'是否发动【奋励】跳过摸牌阶段?',
filter:function(event,player){
@ -2359,6 +2488,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
use:{
audio:'fenli',
audioname:['xin_zhuhuan'],
trigger:{player:'phaseUseBefore'},
prompt:'是否发动【奋励】跳过出牌阶段?',
filter:function(event,player){
@ -2377,6 +2507,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
discard:{
audio:'fenli',
audioname:['xin_zhuhuan'],
trigger:{player:'phaseDiscardBefore'},
prompt:'是否发动【奋励】跳过弃牌阶段?',
frequent:true,
@ -10554,6 +10685,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhichi:{
audio:2,
trigger:{player:'damageEnd'},
audioname:['re_chengong'],
forced:true,
filter:function(event,player){
return _status.currentPhase!=player;
@ -12672,13 +12804,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
caozhen:['re_caozhen','xin_caozhen','caozhen','old_caozhen'],
wuyi:['re_wuyi','wuyi'],
sunluban:['re_sunluban','xin_sunluban','sunluban'],
zhuhuan:['re_zhuhuan','zhuhuan','old_zhuhuan'],
zhuhuan:['re_zhuhuan','xin_zhuhuan','zhuhuan','old_zhuhuan'],
caoxiu:['re_caoxiu','caoxiu','old_caoxiu'],
xiahoushi:['re_xiahoushi','xiahoushi'],
zhangyi:['re_zhangyi','zhangyi'],
quancong:['old_quancong','re_quancong','xin_quancong','quancong'],
sunxiu:['re_sunxiu','xin_sunxiu','sunxiu'],
zhuzhi:['zhuzhi','old_zhuzhi'],
zhuzhi:['zhuzhi','xin_zhuzhi','old_zhuzhi'],
liuyu:['dc_liuyu','liuyu','ol_liuyu'],
zhangrang:['zhangrang','ol_zhangrang','junk_zhangrang'],
jikang:['re_jikang','jikang'],
@ -12693,6 +12825,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
guohuanghou:['re_guohuanghou','guohuanghou'],
liuchen:['re_liuchen','liuchen'],
liufeng:['re_liufeng','liufeng'],
sundeng:['re_sundeng','sundeng'],
caiyong:['re_caiyong','caiyong'],
chengong:['re_chengong','chengong'],
},
translate:{
old_huaxiong:'华雄',
@ -13293,6 +13428,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sangu_info:'出牌阶段结束时,你可以选择至多三个{【杀】或不为notarget或singleCard的普通锦囊牌}中的牌名然后令一名其他角色记录这些牌名。该角色的下个出牌阶段开始时其的手牌均视为其记录中的第一张牌直到此阶段结束且当其使用或打出牌时移除这些牌中的第一张牌。若你以此法选择过的牌名中包含你本阶段内未使用过的牌名则你失去1点体力。',
yizu:'轶祖',
yizu_info:'锁定技。每回合限一次当你成为【杀】或【决斗】的目标后若你的体力值不大于使用者的体力值则你回复1点体力。',
liwan:'李婉',
liandui:'联对',
liandui_info:'①当你使用牌时,若本局游戏内上一张被使用的牌的使用者不为你,你可以令其摸两张牌。②其他角色使用牌时,若本局游戏内上一张被使用的牌的使用者为你,其可以令你摸两张牌。',
biejun:'别君',
biejun_info:'①其他角色的出牌阶段限一次。其可以将一张手牌交给你。②每回合限一次。当你受到伤害时,若你手牌中没有本回合因〖别君①〗获得的牌,你可以翻面并防止此伤害。',
yijiang_2011:'一将成名2011',
yijiang_2012:'一将成名2012',

File diff suppressed because it is too large Load Diff

View File

@ -26,6 +26,7 @@
cardMove:[],
custom:[],
useCard:[],
changeHp:[],
}],
cardtag:{
yingbian_zhuzhan:[],
@ -7163,9 +7164,6 @@
}
return list;
};
Array.prototype.find=function(item){
return this.indexOf(item);
};
Array.prototype.contains=function(item){
return this.indexOf(item)!=-1;
};
@ -7189,7 +7187,7 @@
for(var i=0;i<item.length;i++) this.remove(item[i]);
return;
}
var pos=this.find(item);
var pos=this.indexOf(item);
if(pos==-1){
return false;
}
@ -7662,7 +7660,7 @@
}
var extcontent=localStorage.getItem(lib.configprefix+'extension_'+lib.config.extensions[i]);
if(extcontent){
var backup_onload=lib.init.onload;
//var backup_onload=lib.init.onload;
_status.evaluatingExtension=true;
try{
eval(extcontent);
@ -7670,7 +7668,7 @@
catch(e){
console.log(e);
}
lib.init.onload=backup_onload;
//lib.init.onload=backup_onload;
_status.evaluatingExtension=false;
}
else if(lib.config.mode!='connect'||(!localStorage.getItem(lib.configprefix+'directstart')&&show_splash)){
@ -10388,6 +10386,12 @@
zhengsu_leijin_info:'回合内所有于出牌阶段使用的牌点数递增且不少于三张。',
zhengsu_bianzhen_info:'回合内所有于出牌阶段使用的牌花色相同且不少于两张。',
zhengsu_mingzhi_info:'回合内所有于弃牌阶段弃置的牌花色均不相同且不少于两张。',
db_atk:'策略',
db_atk1:'全军出击',
db_atk2:'分兵围城',
db_def:'策略',
db_def1:'奇袭粮道',
db_def2:'开城诱敌',
},
element:{
content:{
@ -10925,12 +10929,22 @@
},
chooseToDuiben:function(){
'step 0'
game.log(player,'对',target,'发起了','#y对策');
if(!event.namelist) event.namelist=['全军出击','分兵围城','奇袭粮道','开城诱敌'];
game.broadcastAll(function(list){
var list2=['db_atk1','db_atk2','db_def1','db_def2'];
for(var i=0;i<4;i++){
lib.card[list2[i]].image='card/'+list2[i]+(list[0]=='全军出击'?'':'_'+list[i]);
lib.translate[list2[i]]=list[i];
}
},event.namelist);
if(!event.title) event.title='对策';
game.log(player,'向',target,'发起了','#y'+event.title);
if(!event.ai) event.ai=function(){return 1+Math.random()};
if(_status.connectMode){
player.chooseButtonOL([
[player,['对策:请选择一种防御对策',[[['','','db_def2'],['','','db_def1']],'vcard']],true],
[target,['对策:请选择一种进攻之策',[[['','','db_atk1'],['','','db_atk2']],'vcard']],true]
],function(){},function(){return 1+Math.random()}).set('switchToAuto',function(){
[player,[event.title+':请选择一种策',[[['','','db_def2'],['','','db_def1']],'vcard']],true],
[target,[event.title+':请选择一种策',[[['','','db_atk1'],['','','db_atk2']],'vcard']],true]
],function(){},event.ai).set('switchToAuto',function(){
_status.event.result='ai';
}).set('processAI',function(){
var buttons=_status.event.dialog.buttons;
@ -10947,11 +10961,11 @@
event.goto(4);
}
else{
player.chooseButton(['对策:请选择一种防御对策',[[['','','db_def2'],['','','db_def1']],'vcard']],true).ai=function(){return 1+Math.random()};
player.chooseButton([event.title+':请选择一种策',[[['','','db_def2'],['','','db_def1']],'vcard']],true).ai=event.ai;
}
'step 2'
event.mes=result.links[0][2];
target.chooseButton(['对策:请选择一种进攻之策',[[['','','db_atk1'],['','','db_atk2']],'vcard']],true).ai=function(){return 1+Math.random()};
target.chooseButton([event.title+':请选择一种策',[[['','','db_atk1'],['','','db_atk2']],'vcard']],true).ai=event.ai;
'step 3'
event.tes=result.links[0][2];
'step 4'
@ -10961,27 +10975,29 @@
ui.arena.classList.add('thrownhighlight');
game.addVideo('thrownhighlight1');
target.$compare(game.createCard(event.tes,'',''),player,game.createCard(event.mes,'',''));
game.log(target,'选择的进攻之策为','#g'+get.translation(event.tes));
game.log(player,'选择的防御对策为','#g'+get.translation(event.mes));
game.log(target,'选择的为','#g'+get.translation(event.tes));
game.log(player,'选择的为','#g'+get.translation(event.mes));
game.delay(0,1500);
'step 5'
var mes=event.mes.slice(6);
var tes=event.tes.slice(6);
var str;
if(mes==tes){
str=get.translation(player)+'对策成功';
str=get.translation(player)+event.title+'成功';
player.popup('胜','wood');
target.popup('负','fire');
game.log(player,'#g胜');
event.result={bool:true};
}
else{
str=get.translation(player)+'对策失败';
str=get.translation(player)+event.title+'失败';
target.popup('胜','wood');
player.popup('负','fire');
game.log(target,'#g胜');
event.result={bool:false};
}
event.result.player=event.mes;
event.result.target=event.tes;
game.broadcastAll(function(str){
var dialog=ui.create.dialog(str);
dialog.classList.add('center');
@ -11304,24 +11320,6 @@
}
}
player.ai.tempIgnore=[];
_status.globalHistory.push({
cardMove:[],
custom:[],
useCard:[],
});
game.countPlayer2(function(current){
current.actionHistory.push({useCard:[],respond:[],skipped:[],lose:[],gain:[],sourceDamage:[],damage:[],custom:[],useSkill:[]});
current.stat.push({card:{},skill:{}});
if(event.parent._roundStart){
current.getHistory().isRound=true;
current.getStat().isRound=true;
}
});
player.getHistory().isMe=true;
player.getStat().isMe=true;
if(event.parent._roundStart){
game.getGlobalHistory().isRound=true;
}
if(ui.land&&ui.land.player==player){
game.addVideo('destroyLand');
ui.land.destroy();
@ -12490,7 +12488,9 @@
if(event.type=='phase'){
if(event.isMine()){
event.endButton=ui.create.control('结束回合','stayleft',function(){
if(_status.event.skill){
var evt=_status.event;
if(evt.name!='chooseToUse'||evt.type!='phase') return;
if(evt.skill){
ui.click.cancel();
}
ui.click.cancel();
@ -16721,6 +16721,8 @@
player.update();
},
changeHp:function(){
//add to GlobalHistory
game.getGlobalHistory().changeHp.push(event);
//changeHujia moved here
if(num<0&&player.hujia>0&&event.getParent().name=='damage'&&!player.hasSkillTag('nohujia')){
event.hujia=Math.min(-num,player.hujia);
@ -22691,12 +22693,14 @@
if(this.skills.contains(skill)) return;
var info=lib.skill[skill];
if(!info) return;
if(!addToSkills){
this.skills.add(skill);
if(!nobroadcast){
game.broadcast(function(player,skill){
player.skills.add(skill);
},this,skill);
}
if(!addToSkills) this.skills.add(skill);
}
this.addSkillTrigger(skill);
if(this.awakenedSkills.contains(skill)){
this.awakenSkill(skill);
@ -23047,9 +23051,7 @@
},
addTempSkill:function(skill,expire,checkConflict){
if(this.hasSkill(skill)&&this.tempSkills[skill]==undefined) return;
var noremove=this.skills.contains(skill);
this.addSkill(skill,checkConflict,true);
if(!noremove) this.skills.remove(skill);
this.addSkill(skill,checkConflict,true,true);
if(!expire){
expire='phaseAfter';
@ -23088,16 +23090,6 @@
}
}
for(var i in expire){
if(typeof expire[i]=='string'){
lib.hookmap[expire[i]]=true;
}
else if(Array.isArray(expire[i])){
for(var j=0;j<expire.length;j++){
lib.hookmap[expire[i][j]]=true;
}
}
}
return skill;
},
attitudeTo:function(target){
@ -26502,7 +26494,7 @@
allbool=true;
};
var totalPopulation=game.players.length+game.dead.length+1;
var player=start;;
var player=start;
var globalskill='global_'+name;
var map=_status.connectMode?lib.playerOL:game.playerMap;
for(var iwhile=0;iwhile<totalPopulation;iwhile++){
@ -26518,7 +26510,7 @@
if(j.indexOf('hidden:')!=0) notemp.addArray(player.additionalSkills[j]);
}
for(var j in player.tempSkills){
if(notemp.contains(j)) return;
if(notemp.contains(j)) continue;
var expire=player.tempSkills[j];
if(expire===name||
(Array.isArray(expire)&&expire.contains(name))||
@ -27025,6 +27017,23 @@
group_qun:{fullskin:true},
group_key:{fullskin:true},
group_jin:{fullskin:true},
db_atk1:{
type:'db_atk',
fullimage:true,
},
db_atk2:{
type:'db_atk',
fullimage:true,
},
db_def1:{
type:'db_def',
fullimage:true,
},
db_def2:{
type:'db_def',
fullimage:true,
},
},
filter:{
all:function(){
@ -28180,8 +28189,9 @@
else{
player.phaseSkipped=false;
}
var isRound=false;
if(!trigger.skill){
var isRound=_status.roundSkipped;
isRound=_status.roundSkipped;
if(_status.seatNumSettled){
var seatNum=player.getSeatNum();
if(seatNum!=0){
@ -28206,6 +28216,25 @@
event.trigger('roundStart');
}
}
_status.globalHistory.push({
cardMove:[],
custom:[],
useCard:[],
changeHp:[],
});
game.countPlayer2(function(current){
current.actionHistory.push({useCard:[],respond:[],skipped:[],lose:[],gain:[],sourceDamage:[],damage:[],custom:[],useSkill:[]});
current.stat.push({card:{},skill:{}});
if(isRound){
current.getHistory().isRound=true;
current.getStat().isRound=true;
}
});
player.getHistory().isMe=true;
player.getStat().isMe=true;
if(isRound){
game.getGlobalHistory().isRound=true;
}
},
},
_usecard:{
@ -29440,10 +29469,11 @@
}
},
cancel:function(id){
if(_status.event._parent_id==id&&_status.event.isMine()&&_status.paused&&_status.imchoosing){
if(_status.event._parent_id==id){
ui.click.cancel();
}
if(_status.event.id==id&&_status.event.isMine()&&_status.paused&&_status.imchoosing){
if(_status.event.id==id){
if(_status.event._backup) ui.click.cancel();
ui.click.cancel();
if(ui.confirm){
ui.confirm.close();
@ -30414,9 +30444,10 @@
},
import:function(type,content){
if(type=='extension'){
var backup_onload=lib.init.onload;
//Anti-Cheat system updated, no need to work here
//var backup_onload=lib.init.onload;
game.loadExtension(content);
lib.init.onload=backup_onload;
//lib.init.onload=backup_onload;
}
else{
if(!lib.imported[type]){
@ -45162,6 +45193,7 @@
var hidden=false;
var notouchscroll=false;
var forcebutton=false;
var noforcebutton=false;
var dialog=ui.create.div('.dialog');
dialog.contentContainer=ui.create.div('.content-container',dialog);
dialog.content=ui.create.div('.content',dialog.contentContainer);
@ -45176,6 +45208,7 @@
else if(arguments[i]=='hidden') hidden=true;
else if(arguments[i]=='notouchscroll') notouchscroll=true;
else if(arguments[i]=='forcebutton') forcebutton=true;
else if(arguments[i]=='noforcebutton') noforcebutton=true;
else dialog.add(arguments[i]);
}
if(!hidden){
@ -45188,7 +45221,10 @@
dialog.contentContainer.style.WebkitOverflowScrolling='touch';
dialog.ontouchstart=ui.click.dragtouchdialog;
}
if(forcebutton){
if(noforcebutton){
dialog.noforcebutton=true;
}
else if(forcebutton){
dialog.forcebutton=true;
dialog.classList.add('forcebutton');
}

View File

@ -1,29 +1,29 @@
window.noname_update={
version:'1.9.119',
update:'1.9.118.0.1',
version:'1.9.120',
update:'1.9.119',
changeLog:[
'联机欢乐成双模式:选将机制修改',
'穆顺',
'整合@copcap 编写的48个武将',
'技能设计比赛入选稿:坂上智代',
'其他技能调整和bug修复',
'players://["mushun"]',
'players://["ahuinan","chengbing","chenjiao","clan_xuncai","clan_xuncan","clan_xunchen","clan_xunshu","dc_hujinding","dc_yuejiu","dongguiren","gongsundu","key_tomoyo","leibo","liwan","liyixiejing","ol_furong","ol_liuba","panghui","re_caiyong","re_chengong","re_sundeng","re_xunyou","sb_caocao","sb_caoren","sb_ganning","sb_huanggai","sb_lvmeng","sb_machao","sb_sunquan","sb_sunshangxiang","sb_xiahoushi","sb_xuhuang","sb_zhangjiao","sb_zhenji","sb_zhouyu","shen_zhangjiao","shiyi","sp_caosong","sp_pengyang","sunlang","wangjun","wanglie","xin_caoxiu","xin_wuyi","xin_zhuzhi","yangfu","yuanji","zhangzhi","zhaozhi","zhujianping"]',
],
files:[
//'card/extra.js',
//'card/gujian.js',
//'card/guozhan.js',
'card/guozhan.js',
//'card/gwent.js',
//'card/huanlekapai.js',
//'card/mtg.js',
//'card/sp.js',
//'card/standard.js',
'card/sp.js',
'card/standard.js',
//'card/swd.js',
//'card/yunchou.js',
//'card/yingbian.js',
//'card/yongjian.js',
//'card/zhenfa.js',
//'card/zhulu.js',
//'character/clan.js',
//'character/diy.js',
'character/clan.js',
'character/diy.js',
'character/extra.js',
//'character/hearth.js',
//'character/gujian.js',
@ -36,21 +36,21 @@ window.noname_update={
//'character/ow.js',
'character/rank.js',
'character/refresh.js',
//'character/sb.js',
'character/shenhua.js',
'character/sb.js',
//'character/shenhua.js',
'character/sp.js',
'character/sp2.js',
//'character/standard.js',
//'character/tw.js',
//'character/swd.js',
//'character/xianjian.js',
//'character/xinghuoliaoyuan.js',
'character/xinghuoliaoyuan.js',
'character/yijiang.js',
'character/yingbian.js',
//'character/yingbian.js',
//'character/yxs.js',
//'extension/boss/extension.js',
//'font/suits.ttf',
//'layout/default/layout.css',
'layout/default/layout.css',
//'layout/default/menu.css',
//'layout/long2/layout.css',
//'layout/mobile/equip.css',
@ -67,7 +67,7 @@ window.noname_update={
//'mode/single.js',
//'mode/stone.js',
//'mode/tafang.js',
'mode/versus.js',
//'mode/versus.js',
'game/game.js',
//'game/keyWords.js',
//'game/NoSleep.js',

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
image/character/ahuinan.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

BIN
image/character/leibo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
image/character/liwan.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
image/character/panghui.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
image/character/shiyi.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
image/character/sunlang.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
image/character/wangjun.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
image/character/wanglie.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
image/character/yangfu.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
image/character/yuanji.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
image/character/zhaozhi.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -1452,9 +1452,9 @@ div:not(.handcards)>.card>.info>span,
width: 100%;
}
.buttons.guanxing {
min-height: 106px;
min-height: 106px !important;
margin: 0px;
width: 90%;
width: 90% !important;
}
.buttons.smallzoom {
display: block;

View File

@ -6518,7 +6518,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
player.line(result.targets,'green');
if(result.cards.length){
event.cards=result.cards;
player.give(result.cards,result.cards[0]);
player.give(result.cards,result.targets[0]);
}
else{
player.storage.gzzhengbi_eff1=result.targets[0];
@ -10114,7 +10114,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
global:['useCardToPlayered','useCardToTargeted'],
},
preHidden:true,
frequent:true,
//frequent:true,
direct:true,
filter:function(event,player){
if(event.card.name!='sha') return false;