Merge pull request #8 from libccy/PR-Branch

Pr branch
This commit is contained in:
狂神 2024-03-05 21:13:38 +08:00 committed by GitHub
commit ed9d00205d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
20 changed files with 259 additions and 110 deletions

View File

@ -487,8 +487,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var player=_status.event.player;
var num=_status.event.num;
var num2=player.getDamagedHp();
if(num>num2) return 7-get.value(card);
if(num==num2) return lib.skill.zhiheng.check(card);
if(num<num2) return 8-get.value(card);
if(num==num2||num2>=(2+num-num2)) return lib.skill.zhiheng.check(card);
return 0;
}).set('num',num).logSkill='clanxieshu';
'step 1'

View File

@ -2031,7 +2031,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(trigger.targets&&trigger.targets.length){
let result=yield player.chooseControl(['额外结算','摸一张牌']).set('prompt','实荐:请选择一项').set('prompt2',`${get.translation(trigger.card)}额外结算一次,或摸一张牌`).set('ai',()=>{
return get.event('choice');
}).set('choice',['basic','trick'].includes(get.type(trigger.card))&&trigger.targets.map(i=>get.effect(i,trigger.card,target,player)).reduce((p,c)=>p+c,0)>=5?0:1);
}).set('choice',function(){
if(trigger.card.name==='tiesuo'||!['basic','trick'].includes(get.type(trigger.card))) return 1;
if(trigger.targets.reduce((p,c)=>{
return p+get.effect(c,trigger.card,target,_status.event.player);
},0)>=get.effect(player,{name:'draw'},player,_status.event.player)) return 0;
return 1;
}());
if(result.index==0){
trigger.getParent().effectCount++;
game.log(player,'令',trigger.card,'额外结算一次');

View File

@ -14594,7 +14594,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(event.current.needsToDiscard()){
att=1;
}
player.chooseControlList(['令'+name+'摸一张牌展示','令'+name+'手牌上永久+1','弃置一张牌并令'+name+'获得一张本回进入弃牌堆的牌'],function(){
player.chooseControlList(['令'+name+'摸一张牌展示','令'+name+'手牌上永久+1','弃置一张牌并令'+name+'获得一张本回进入弃牌堆的牌'],function(){
return _status.event.att;
}).set('att',att);
}

View File

@ -1830,7 +1830,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
let result;
if(_status.connectMode) game.broadcastAll(()=>{_status.noclearcountdown=true});
if(choices.length==1) result={control:choices[0]};
else result=yield player.chooseControl(choices,'cancel2').set('choiceList',choiceList).set('prompt',get.prompt('dcxunjie')).set('ai',()=>{
else result=yield player.chooseControl(choices,'cancel2').set('choiceList',choiceList).set('prompt',get.prompt('dcxunjie')).set('ai',()=>{
return get.event('choice');
}).set('choice',(()=>{
const getValue=(index,target)=>{

View File

@ -5733,7 +5733,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var num=0;
for(var i of cards) num+=get.number(i,player);
num=num%13;
if(num==0) num=13;
if(num==0) num=13;
var card=get.cardPile2(function(card){
return get.number(card,false)==num;
});
@ -14293,34 +14293,34 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
filter:function(event,player){
if(!player.storage.yizan&&player.countCards('hes')<2) return false;
if(!player.hasCard(function(card){
return get.type(card)=='basic';
},'hs')) return false;
for(var name of lib.inpile){
if(get.type(name)!='basic') continue;
if(event.filterCard(get.autoViewAs({name},'unsure'),player,event)) return true;
if(name=='sha'){
for(var nature of lib.inpile_nature){
if(event.filterCard(get.autoViewAs({name,nature},'unsure'),player,event)) return true;
}
}
}
if(!player.hasCard(function(card){
return get.type(card)=='basic';
},'hs')) return false;
for(var name of lib.inpile){
if(get.type(name)!='basic') continue;
if(event.filterCard(get.autoViewAs({name},'unsure'),player,event)) return true;
if(name=='sha'){
for(var nature of lib.inpile_nature){
if(event.filterCard(get.autoViewAs({name,nature},'unsure'),player,event)) return true;
}
}
}
return false;
},
chooseButton:{
dialog:function(event,player){
var list=[];
for(var name of lib.inpile){
if(get.type(name)!='basic') continue;
if(event.filterCard(get.autoViewAs({name},'unsure'),player,event)){
list.push(['基本','',name]);
}
if(name=='sha'){
for(var nature of lib.inpile_nature){
if(event.filterCard(get.autoViewAs({name,nature},'unsure'),player,event)) list.push(['基本','','sha',nature]);
}
}
}
for(var name of lib.inpile){
if(get.type(name)!='basic') continue;
if(event.filterCard(get.autoViewAs({name},'unsure'),player,event)){
list.push(['基本','',name]);
}
if(name=='sha'){
for(var nature of lib.inpile_nature){
if(event.filterCard(get.autoViewAs({name,nature},'unsure'),player,event)) list.push(['基本','','sha',nature]);
}
}
}
return ui.create.dialog('翊赞',[list,'vcard'],'hidden');
},
check:function(button){
@ -15664,7 +15664,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sunru:['dc_sunru','sunru'],
liuye:['dc_liuye','liuye'],
zhaotongzhaoguang:['dc_zhaotongzhaoguang','zhaotongzhaoguang'],
yangbiao:['yangbiao','dc_yangbiao','jsrg_yangbiao'],
yangbiao:['yangbiao','dc_yangbiao','jsrg_yangbiao'],
qiaozhou:['yj_qiaozhou','qiaozhou'],
sunhanhua:['dc_sunhanhua','sunhanhua'],
zhoubuyi:['zhoubuyi','yj_zhoubuyi'],

View File

@ -30,6 +30,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
fullskin:true,
type:'equip',
subtype:'equip1',
get destroy(){
return !lib.card.sizhaojian.inShanShanFestival();
},
inShanShanFestival(){
//闪闪节外离开装备区会销毁
const date=new Date();
return date.getMonth()+1==3&&date.getDate()>=2&&date.getDate()<=15;
},
distance:{attackFrom:-1},
ai:{basic:{equipValue:7}},
skills:['olsbyufeng_sizhaojian'],
@ -164,16 +172,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player:'enterGame',
},
filter(event,player){
if(get.cardPile('sizhaojian','field')||lib.inpile.includes('sizhaojian')) return false;
return (event.name!='phase'||game.phaseNumber==0)&&player.hasEquipableSlot(1);
const card=get.cardPile('sizhaojian','field')||game.createCard2('sizhaojian','diamond',6);
return (event.name!='phase'||game.phaseNumber==0)&&player.canEquip(card,true);
},
forced:true,
locked:false,
async content(event,trigger,player){
game.broadcastAll(()=>lib.inpile.add('sizhaojian'));
const card=game.createCard2('sizhaojian','diamond',6);
player.$gain2(card,false);
game.delayx();
if(lib.card.sizhaojian.inShanShanFestival()){
game.broadcastAll(()=>lib.inpile.add('sizhaojian'));
}
const card=get.cardPile('sizhaojian','field')||game.createCard2('sizhaojian','diamond',6);
if(get.owner(card)) get.owner(card).$give(card,player,false);
else{
player.$gain2(card,false);
game.delayx();
}
player.equip(card);
},
subSkill:{
@ -205,8 +218,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
let evt=_status.event;
if(evt.name!='chooseToUse') evt=evt.getParent('chooseToUse');
if(!evt||!evt.respondTo||!storage.includes(evt.respondTo[1])) return;
const num = get.number(card);
if(num!='unsure' && (typeof num!='number' || num<=get.number(evt.respondTo[1]))) return false;
const num=get.number(card);
if(num!='unsure'&&typeof num=='number'&&num<get.number(evt.respondTo[1])) return false;
},
},
onremove(player){
@ -237,9 +250,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
trigger:{global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter']},
filter(event,player){
if(!player.hasEquipableSlot(1)||player.getEquip(1)||player.getEquip('sizhaojian')) return false;
const card=get.cardPile('sizhaojian','field');
if(!card||!player.canEquip(card,true)) return false;
if(player.getEquip(1)) return false;
const card=get.cardPile('sizhaojian','field')||game.createCard2('sizhaojian','diamond',6);
if(!player.canEquip(card,true)) return false;
return game.hasPlayer(target=>{
if(target==player||target.group!='qun') return false;
const evt=event.getl(target);
@ -254,12 +267,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
const evt=trigger.getl(target);
return evt&&evt.player==target&&evt.es&&evt.es.length>0;
}).sortBySeat();
const card=get.cardPile('sizhaojian','field');
const card=get.cardPile('sizhaojian','field')||game.createCard2('sizhaojian','diamond',6);
for(const target of targets){
const {result:{bool}}=await target.chooseBool(get.prompt('olsbshishou',player),'将'+get.translation(card)+'置入'+get.translation(player)+'的装备区中').set('choice',get.attitude(target,player)>0);
if(bool){
target.logSkill('olsbshishou',player);
if(get.owner(card)) get.owner(card).$give(card,player,false);
else{
player.$gain2(card,false);
game.delayx();
}
player.equip(card);
break;
}
@ -1027,11 +1044,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
olsbyufeng:'玉锋',
olsbyufeng_sizhaojian:'思召剑',
olsbyufeng_block:'思召剑',
olsbyufeng_info:'游戏开始时,若【思召剑】未加入本局游戏,若你可装备【思召剑】,则你将【思召剑】置入装备区。',
olsbyufeng_info:'游戏开始时,你将【思召剑】置入装备区。',
sizhaojian:'思召剑',
sizhaojian_info:'当你使用有点数的【杀】指定目标后,你令目标角色只能使用无点数或点数大于等于此【杀】的【闪】响应此牌。',
sizhaojian_append:'<span class="text" style="font-family: yuanli">【思召剑】于闪闪节3月2日-3月15日外离开装备区后销毁此牌</span>',
olsbshishou:'士首',
olsbshishou_info:'主公技,其他群势力角色失去装备区的牌后,若你的装备区中没有武器牌,且【思召剑】存在于场上/牌堆/弃牌堆中,其可令你将【思召剑】置入装备区。',
olsbshishou_info:'主公技,其他群势力角色失去装备区的牌后,若你的装备区中没有武器牌,其可将【思召剑】置入你的装备区。',
onlyOL_yijiang1:'OL专属·将1',
onlyOL_yijiang2:'OL专属·将2',

View File

@ -1039,6 +1039,7 @@ window.noname_character_rank={
'jsrg_zhenji',
'junk_xuyou',
'sp_machao',
'liupan',
'mengyou',
're_wenpin',
'yue_zhoufei',

View File

@ -1141,7 +1141,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
});
if(!target){
event.finish();
return;
return;
}
event.target=target;
player.logSkill('sbqicai_gain',target);

View File

@ -7640,7 +7640,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 3'
game.delayx();
game.broadcastAll(function(onEnd){
_status.event.onEnd01=onEnd;
_status.event.onEnd01=onEnd;
if(_status.guhuoNode) _status.guhuoNode.listenTransition(onEnd,300);
},event.onEnd01);
'step 4'

View File

@ -18,7 +18,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp_zhongdan:["cuiyan","huangfusong"],
sp_guozhan2:["sp_dongzhuo","liqueguosi","zhangren"],
sp_others:["hanba","caiyang"],
sp_waitforsort:['ol_luyusheng','ol_pengyang','ol_tw_zhangji','ol_liwan','ol_liuyan','caoyu'],
sp_waitforsort:['ol_luyusheng','ol_pengyang','ol_tw_zhangji','ol_liwan','ol_liuyan','caoyu','liupan'],
},
},
characterFilter:{
@ -30,6 +30,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
liupan:['male','qun',4,['olpijing']],
guotu:['male','qun',3,['olqushi','olweijie']],
ol_hujinding:['female','shu',3,['olqingyuan','olchongshen']],
tianchou:['male','qun',4,['olshandao']],
@ -202,6 +203,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
luzhi:['male','wei',3,['qingzhong','weijing']]
},
characterIntro:{
liupan:'刘磐(生卒年不详),山阳高平人,荆州牧刘表从子。与南阳人黄忠共守长沙攸县。为人骁勇,数次为寇于艾、西安诸县。江东孙策于是分海昏、建昌为左右六县,以东莱太史慈为建昌都尉,治海昏,并督诸将共拒刘磐。于是刘磐绝迹不复为寇。',
guotu:'郭图205年字公则颍川治今河南省禹州市人。东汉末年袁绍帐下谋士。韩馥统冀州时郭图与荀谌等人奉袁绍之命说服韩馥让位。袁绍统一河北后郭图与审配等人力劝袁绍统率大军攻打曹操。袁绍死后袁尚继位。郭图与辛评为袁谭效力挑唆袁谭攻击袁尚。建安十年205年郭图和袁谭一同被曹操所杀。',
tianchou:'田畴169年或170年-214年或216年字子泰东汉右北平郡无终人东汉末年隐士。田畴好文习武。汉初平年间其受刘虞派遣去长安呈送指控公孙赞奏章献帝大悦封为骑都尉田畴不受。携诏返回时刘虞已被公孙所杀田畴到刘墓祭拜被公孙所提不久释放。田畴回故乡后率家族及随从数百人隐居徐无山致力农桑数年间增至5000家。制定法条兴建学校一时民风良好乌桓、鲜卑纷纷与其结交。汉建安二十年207年曹操北征乌桓田畴请为向导。上徐无山、出卢龙、过平冈、登白狼堆、至柳城曹军大胜封田畴为亭侯坚辞不受。曹念田功四次封赏终不受乃拜为议郎。建安二十一年216年田畴去世。',
liyi:'李异生卒年不详三国时期东吴将领。建安末与谢旌率水陆三千击破刘备军将领詹晏、陈凤。刘备领兵攻孙权时李异与陆逊等人屯巫、秭归为蜀将所破。黄武元年222年陆逊破刘备于猇亭李异追踪蜀军屯驻南山。清代学者赵一清认为此李异与刘璋部将李异为同一人。',
@ -708,6 +710,80 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
//刘磐
olpijing:{
audio:2,
trigger:{player:'useCardToPlayered'},
filter(event,player){
if(!game.hasPlayer(target=>target!=player&&!event.targets.includes(target)&&lib.filter.targetEnabled2(event.card,player,target)&&lib.filter.targetInRange(event.card,player,target))) return false;
return get.color(event.card)=='black'&&(event.card.name=='sha'||get.type(event.card)=='trick')&&event.targets.length==1;
},
usable:1,
direct:true,
locked:false,
async content(event,trigger,player){
const num=Math.max(1,player.getDamagedHp());
const {result:{bool,targets}}=await player.chooseTarget(get.prompt('olpijing'),[1,num],(card,player,target)=>{
const trigger=get.event().getTrigger();
return target!=player&&!trigger.targets.includes(target)&&lib.filter.targetEnabled2(trigger.card,player,target)&&lib.filter.targetInRange(trigger.card,player,target);
}).set('ai',target=>{
const player=get.event('player'),trigger=get.event().getTrigger();
return get.effect(target,trigger.card,player,player)*(target.getStorage('olpijing_effect').includes(player)?2:1)+get.effect(target,{name:'shunshou_copy2'},player,player);
}).set('prompt2','令至多'+get.cnNumber(num)+'名角色成为'+get.translation(trigger.card)+'的目标并交给你一张牌');
if(bool){
player.logSkill('olpijing',targets);
trigger.targets.addArray(targets);
for(const target of targets){
target.addSkill('olpijing_effect');
target.markAuto('olpijing_effect',[player]);
await target.chooseToGive(player,'he',true,'披荆:交给'+get.translation(player)+'一张牌');
}
}
else player.storage.counttrigger.olpijing--;
},
mod:{
aiOrder(player,card,num){
if(!(card.name=='sha'||get.type(card)=='trick')||get.color(card)!='black') return;
const info=get.info(card);
if(info&&!info.notarget&&(info.toself||info.singleCard||!info.selectTarget||info.selectTarget==1)&&game.countPlayer(target=>{
if(get.effect(target,card,player,player)<=0) return false;
return lib.filter.targetEnabled2(card,player,target)&&lib.filter.targetInRange(card,player,target);
})>1) return num+0.01;
},
},
subSkill:{
effect:{
charlotte:true,
onremove:true,
intro:{content:'使用的下一张基本牌或普通锦囊牌指定唯一目标时,可指定$为额外目标或摸一张牌'},
trigger:{player:'useCardToPlayer'},
filter(event,player){
return (get.type(event.card)=='basic'||get.type(event.card)=='trick')&&event.targets.length==1;
},
forced:true,
popup:false,
async content(event,trigger,player){
const storage=player.getStorage('olpijing_effect');
player.removeSkill('olpijing_effect');
const {result:{bool,targets}}=await player.chooseTarget('披荆:请选择此牌的额外目标',[1,storage.length],(card,player,target)=>{
const trigger=get.event().getTrigger();
return !trigger.targets.includes(target)&&get.event('storage').includes(target)&&lib.filter.targetEnabled2(trigger.card,player,target)&&lib.filter.targetInRange(trigger.card,player,target);
}).set('prompt2','不选择的角色视为你选择摸牌项').set('ai',target=>{
const player=get.event('player'),trigger=get.event().getTrigger();
return get.effect(target,trigger.card,player,player)-get.effect(player,{name:'draw'},player,player);
}).set('storage',storage);
if(bool){
player.line(targets);
trigger.targets.addArray(targets);
if(storage.length-targets.length>0){
player.draw(storage.length-targets.length);
}
}
else player.draw(storage.length);
},
},
},
},
//郭图
olqushi:{
audio:2,
@ -14050,6 +14126,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var cards=result.cards;
target.addToExpansion(cards,player,'give').gaintag.add('zlshoufu2');
player.line(target,'green');
if(get.mode()!=='identity'||player.identity!=='nei') player.addExpose(0.12);
target.addSkill('zlshoufu2');
'step 3'
game.delayx();
@ -27392,6 +27469,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
olqushi_info:'出牌阶段限一次你可以摸一张牌然后将一张手牌扣置于一名其他角色的武将牌上称为“趋”。目标角色于其结束阶段移去武将牌上的所有“趋”若其于本回合使用过与“趋”相同类别的牌则你摸X张牌X为其本回合使用牌指定过的目标数之和且至多为5。',
olweijie:'诿解',
olweijie_info:'每回合限一次你的回合外当你需要使用或打出一张基本牌时你可以弃置距离为1的一名角色的一张手牌若此牌牌名与你需要使用或打出的牌的牌名相同则视为你使用或打出之。',
liupan:'刘磐',
olpijing:'披荆',
olpijing_info:'每回合限一次当你使用黑色【杀】或黑色普通锦囊牌指定唯一目标后你可以令至多X名其他角色成为此牌的额外目标并依次交给你一张牌X为你已损失的体力值且X至少为1。这些角色下次使用基本牌或普通锦囊牌指定唯一目标时其可令你成为此牌的额外目标或摸一张牌。',
sp_tianji:'天极·皇室宗亲',
sp_sibi:'四弼·辅国文曲',

View File

@ -3445,15 +3445,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else{
switch(type){
case 'basic':
if(sha>0&&get.name(card)=='sha'){
if(sha>0&&get.name(i)=='sha'){
sha--;
var add=3;
if(!player.hasValueTarget(card)&&player.hasValueTarget(card,false)) add+=player.getUseValue(card,false);
if(!player.hasValueTarget(i)&&player.hasValueTarget(i,false)) add+=player.getUseValue(i,false);
eff+=add;
}
break
case 'trick':
if(player.hasValueTarget(card)) eff+=6;
if(player.hasValueTarget(i)) eff+=6;
break;
case 'equip':
if(player.hasValueTarget({name:'guohe_copy2'})) eff+=player.getUseValue({name:'guohe_copy2'});
@ -3470,15 +3470,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(type==control) continue;
switch(type){
case 'basic':
if(sha>0&&get.name(card)=='sha'){
if(sha>0&&get.name(i)=='sha'){
sha--;
var add=3;
if(!player.hasValueTarget(card)&&player.hasValueTarget(card,false)) add+=player.getUseValue(card,false);
if(!player.hasValueTarget(i)&&player.hasValueTarget(i,false)) add+=player.getUseValue(i,false);
eff+=add;
}
break
case 'trick':
if(player.hasValueTarget(card)) eff+=6;
if(player.hasValueTarget(i)) eff+=6;
break;
case 'equip':
if(player.hasValueTarget({name:'guohe_copy2'})) eff+=player.getUseValue({name:'guohe_copy2'});

View File

@ -6403,7 +6403,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return !player.hasHistory('useSkill',function(evt){
return evt.skill=='twshuangren';
})&&!player.hasHistory('sourceDamage',function(evt){
return evt.card.name=='sha';
return evt.card&&evt.card.name=='sha';
});
},
direct:true,
@ -15889,7 +15889,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
twkujian_info:'出牌阶段限一次。你可以将至多三张手牌交给一名其他角色,称为“谏”,你获得以下效果:当其他角色使用或打出牌后,若其中有“谏”,你与其各摸一张牌;当其他角色不因使用或打出而失去牌后,若其中有“谏”,你与其各弃置一张牌。',
twruilian:'睿敛',
twruilian2:'睿敛',
twruilian_info:'一轮游戏开始时,你可以选择一名角色。其下回合结束时,若其本回弃置过至少两张其的牌,你可以选择其本回合弃置过的一种类别,你与其各从弃牌堆中获得一张此类别的牌。',
twruilian_info:'一轮游戏开始时,你可以选择一名角色。其下回合结束时,若其本回弃置过至少两张牌,你可以选择其本回合弃置过的一种类别,你与其各从弃牌堆中获得一张此类别的牌。',
tw_xiahouen:'夏侯恩',
twfujian:'负剑',
twfujian_info:'锁定技。①游戏开始时或准备阶段若你的装备区里没有武器牌你随机将牌堆中的一张武器牌置入装备区。②当你于回合外失去武器牌后你失去1点体力。',

View File

@ -154,10 +154,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ai:{
order:9,
result:{
player:1,
player:function(player,target){
if(player.storage.dcsbquanmou) return 1;
return 1+game.countPlayer(i=>player!==i&&target!==i&&!i.hasSkill('false_mark')&&get.attitude(player,i)<0);
},
target:function(player,target){
if(!player.storage.dcsbquanmou) return 1.2;
return -0.2;
let res=target.hasSkillTag('noh')?0:-1;
if(player.storage.dcsbquanmou) return res+0.6;
return res;
},
},
},
@ -218,6 +222,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
ai:{
threaten:2.5,
effect:{
target(card,player,target){
if(get.tag(card,'damage')&&player&&player.hasSkill('dcsbquanmou_true')){
let tars=game.countPlayer(i=>player!==i&&target!==i&&get.damageEffect(i,player,player)>0);
return [1,0,1,6*Math.min(3,tars)/(3+Math.pow(target.countCards('h'),2))];
}
}
}
},
},
false:{
@ -253,10 +265,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
ai:{
filterDamage:true,
nodamage:true,
nofire:true,
nothunder:true,
skillTagFilter(player,tag,arg){
return (arg&&arg.player&&arg.player.hasSkill('dcsbquanmou_false'));
},
effect:{
target(card,player,target){
if(get.tag(card,'damage')&&player&&player.hasSkill('dcsbquanmou_false')) return 'zeroplayertarget';
}
}
},
},
},
@ -13416,8 +13435,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.draw();
'step 1'
var next=player.chooseTarget().set('ai',function(target){
var player=_status.event.player;
return get.damageEffect(target,player,player)
let player=_status.event.player;
if(target.hasSkillTag('filterDamage',null,{
player:player
},true)) return get.damageEffect(target,player,player);
return 2*get.damageEffect(target,player,player);
});
if(!['identity','guozhan'].includes(get.mode())){
next.set('prompt','选择一名体力值最大的敌方角色对其造成2点伤害');
@ -13445,9 +13467,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ai:{
result:{
target:function(player,target){
if(!['identity','guozhan'].includes(get.mode())) return 1;
var target=game.filterPlayer(i=>i!=player).sort((a,b)=>b.hp-a.hp)[0];
return target&&get.damageEffect(target,player,player)>0?1:0;
let es;
if(['identity','guozhan'].includes(get.mode())) es=game.hasPlayer(i=>{
return i!=player&&!game.hasPlayer(j=>{
return player!==j&&j.hp>i.hp;
})&&get.attitude(player,i)<0;
});
else es=game.hasPlayer(i=>{
return i.isEnemyOf(player)&&!game.hasPlayer(j=>{
return j.hp>i.hp&&j.isEnemyOf(player);
})&&get.attitude(player,i)<0;
});
if(es) return 2;
return -1.5;
},
},
order:12,
@ -13456,26 +13488,38 @@ game.import('character',function(lib,game,ui,get,ai,_status){
subSkill:{
dying:{
trigger:{global:'dying'},
forced:true,
popup:false,
filter:function(event,player){
var evt=event.getParent(2);
if(!evt||evt.name!='kuiji_content'||evt.player!=player) return false;
var list=game.filterPlayer(function(current){
return current.isFriendOf(player);
}).sort(function(a,b){
return a.hp-b.hp;
});
return (list.length==1||list[0].hp<list[1].hp)&&list[0].isDamaged();
let evt=event.getParent(2);
return evt&&evt.name=='kuiji';
},
locked:true,
direct:true,
content:function(){
var list=game.filterPlayer(function(current){
return current.isFriendOf(player);
}).sort(function(a,b){
return a.hp-b.hp;
})[0];
player.logSkill('kuiji',list);
list.recover();
'step 0'
var list;
if(['identity','guozhan'].includes(get.mode())) list=game.filterPlayer(current=>{
return current!==trigger.player&&!game.hasPlayer(i=>{
return trigger.player!==i&&i.hp<current.hp;
});
}).filter(i=>i.isDamaged());
else list=game.filterPlayer(current=>{
return current.isFriendOf(player)&&!game.hasPlayer(i=>{
return i.hp<current.hp&&i.isFriendOf(player);
});
}).filter(i=>i.isDamaged());
if(list.length>1) player.chooseTarget('溃击选择一名角色回复1点体力',(card,player,target)=>{
return _status.event.list.includes(target);
},true).set('list',list).set('ai',target=>{
return get.recoverEffect(target,player,_status.event.player);
});
else if(list.length) event._result={bool:true,targets:list};
else event._result={bool:false};
'step 1'
if(result.bool){
let target=result.targets[0];
player.logSkill('kuiji',target);
target.recover();
}
},
},
},

View File

@ -4342,8 +4342,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
longxi2:'龙息',
longxi_info:'锁定技,在回合外每当你需要使用或打出一张卡牌时,若牌堆顶的前两张中有可使用或打出的牌,你立即获得之。',
zhuyue:'逐月',
zhuyue_info:'出牌阶段限一次,你可以弃置一张非基本牌并指定至多两个目标各随机弃置一张牌,若如此做,你本回使用的杀须指定选中角色为目标。',
zhuyue_info_alter:'出牌阶段限一次,你可以弃置一张黑色非基本牌并指定至多两个目标各随机弃置一张牌,若如此做,你本回使用的杀须指定选中角色为目标。',
zhuyue_info:'出牌阶段限一次,你可以弃置一张非基本牌并指定至多两个目标各随机弃置一张牌,若如此做,你本回使用的杀须指定选中角色为目标。',
zhuyue_info_alter:'出牌阶段限一次,你可以弃置一张黑色非基本牌并指定至多两个目标各随机弃置一张牌,若如此做,你本回使用的杀须指定选中角色为目标。',
guanri:'贯日',
guanri_info:'限制技你可以弃置两张红色手牌并失去1点体力然后对一名体力值不少于你的其他角色造成2点火焰伤害并弃置其所有装备牌。',
tianxian:'天弦',

View File

@ -13963,7 +13963,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
chengong:['chengong','re_chengong','sb_chengong'],
xunyou:['xunyou','re_xunyou'],
xuezong:['xuezong','tw_xuezong'],
huanghao:['huanghao','dc_huanghao','old_huanghao'],
huanghao:['huanghao','dc_huanghao','old_huanghao'],
caorui:['caorui','re_caorui','old_caorui'],
sunziliufang:['sunziliufang','dc_sunziliufang'],
liyan:['liyan','old_liyan'],

BIN
image/character/liupan.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 47 KiB

View File

@ -10587,10 +10587,10 @@ return event.junling=='junling5'?1:0;});
if(huoshao&&player.inline(target.getNext())) return -3;
if(target.isUnseen()) return 0;
if(player.isMajor()) return 0;
if(!player.isMajor()&&huoshao&&player.getNext().isMajor()) return -2;
if(!player.isMajor()&&huoshao&&player.getNext().isMajor()&&player.getNext().getNext().isMajor()) return -3;
if(!player.isMajor()&&huoshao&&!target.isMajor()&&target.getNext().isMajor()&&target.getNext().getNext().isMajor()) return 3;
if(!player.isMajor()&&huoshao&&!target.isMajor()&&target.getNext().isMajor()) return 1.5;
if(!player.isMajor()&&huoshao&&player.getNext().isMajor()) return -2;
if(!player.isMajor()&&huoshao&&player.getNext().isMajor()&&player.getNext().getNext().isMajor()) return -3;
if(!player.isMajor()&&huoshao&&!target.isMajor()&&target.getNext().isMajor()&&target.getNext().getNext().isMajor()) return 3;
if(!player.isMajor()&&huoshao&&!target.isMajor()&&target.getNext().isMajor()) return 1.5;
return 1;
},
target:function(player,target){

View File

@ -580,7 +580,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
case 'fan':list[i]='反贼';break;
case 'zhong':list[i]='忠臣';break;
case 'nei':list[i]='内奸';break;
case 'commoner':list[i]='平民'; break;
case 'commoner':list[i]='平民'; break;
case 'zhu':list[i]='主公';break;
case 'enemy':list[i]='敌方';break;
case 'friend':list[i]='友方';break;
@ -737,7 +737,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
switch(me.identity){
case 'fan':game.over(false);break;
case 'zhong':game.over(true);break;
case 'commoner':game.over(true); break;
case 'commoner':game.over(true); break;
default:game.over();break;
}
}
@ -745,7 +745,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
switch(me.identity){
case 'fan':game.over(true);break;
case 'zhong':game.over(false);break;
case 'commoner':game.over(true); break;
case 'commoner':game.over(true); break;
default:game.over();break;
}
}
@ -765,7 +765,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}
}
else if(me.identity=='nei'){
if(game.players.length==(1+game.players.filter(i=>i.identity=='commoner').length)&&me.isAlive()){
if(game.players.length==(1+game.players.filter(i=>i.identity=='commoner').length)&&me.isAlive()){
game.over(true);
}
else{
@ -781,8 +781,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
game.over(false);
}
}
else if(me.identity=='commoner'){
game.over(true);
else if(me.identity=='commoner'){
game.over(true);
}
},
checkOnlineResult:function(player){
@ -794,7 +794,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(game.zhu.isAlive()){
return (player.identity=='zhu'||player.identity=='zhong'||player.identity=='mingzhong'||player.identity=='commoner'&&player.isAlive());
}
else if(game.players.length==(1+game.players.filter(i=>i.identity=='commoner').length)&&game.players[0].identity=='nei'||game.players[0].identity=='commoner'){
else if(game.players.length==(1+game.players.filter(i=>i.identity=='commoner').length)&&game.players[0].identity=='nei'||game.players[0].identity=='commoner'){
return player.isAlive();
}
else{
@ -1568,9 +1568,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
link=['zhu','zhong','nei','fan','mingzhong'].randomGet();
}
else{
var listi=['zhu','zhong','nei','fan'];
if(get.config('enable_commoner')&&!event.stratagemMode) listi.push('commoner');
link=listi.randomGet();
var listi=['zhu','zhong','nei','fan'];
if(get.config('enable_commoner')&&!event.stratagemMode) listi.push('commoner');
link=listi.randomGet();
}
for(var i=0;i<this.parentNode.childElementCount;i++){
if(this.parentNode.childNodes[i].link==link){
@ -2712,7 +2712,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}
}
if(this.identity=='fan'&&source) source.draw(3);
else if(this.identity=='commoner'&&source) source.draw(2);
else if(this.identity=='commoner'&&source) source.draw(2);
else if(this.identity=='mingzhong'&&source){
if(source.identity=='zhu'){
source.discard(source.getCards('he'));
@ -3506,11 +3506,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
game.players[i].ai.shown<1){
identity2='nei';break;
}
else if(game.players[i].identity=='commoner'&&
game.players[i].ai.identity_mark=='zhong'&&
game.players[i].ai.shown<1){
identity2='commoner'; break;
}
else if(game.players[i].identity=='commoner'&&
game.players[i].ai.identity_mark=='zhong'&&
game.players[i].ai.shown<1){
identity2='commoner'; break;
}
}
}
var zhongmode=false;
@ -3596,13 +3596,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(zhongmode&&to.ai.sizhong&&to.ai.shown<1) return 6;
return Math.min(3,-situation);
case 'fan': return -8;
case 'commoner':
return Math.min(3,Math.max(-3,situation-0.2));
case 'commoner':
return Math.min(3,Math.max(-3,situation-0.2));
}
break;
case 'nei':
if(identity2=='zhu'&&game.players.length==2) return -10;
if(from!=to&&identity2!='zhu'&&identity2!='commoner'&&game.players.length==3) return -8;
if(from!=to&&identity2!='zhu'&&identity2!='commoner'&&game.players.length==3) return -8;
var strategy=get.aiStrategy();
if(strategy==4){
if(from==to) return 10;
@ -3706,8 +3706,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(game.zhu&&game.zhu.hp<=2) return -1;
return Math.min(3,situation);
case 'fan': return 5;
case 'commoner':
return 2*get.population('fan')-3;
case 'commoner':
return 2*get.population('fan')-3;
}
break;
case 'commoner':

View File

@ -1414,7 +1414,7 @@ export class Create extends Uninstantable {
packlist.push(lib.config.all.characters[i]);
}
for (var i in lib.characterPack) {
if (!lib.config.all.characters.includes(i)) {
if (lib.config.characters.includes(i) && !lib.config.all.characters.includes(i)) {
packlist.push(i);
}
}