Merge branch 'libccy:PR-Branch' into PR-Branch

This commit is contained in:
nonameShijian 2024-01-24 23:25:17 +08:00 committed by GitHub
commit 618d7ab802
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
54 changed files with 55 additions and 40 deletions

BIN
audio/die/mp_liuling.mp3 Normal file

Binary file not shown.

BIN
audio/die/tw_gongsunfan.mp3 Normal file

Binary file not shown.

BIN
audio/die/tw_yangang.mp3 Normal file

Binary file not shown.

BIN
audio/die/xia_liubei.mp3 Normal file

Binary file not shown.

BIN
audio/die/xia_xiahoudun.mp3 Normal file

Binary file not shown.

Binary file not shown.

BIN
audio/die/xia_zhangwei.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcshouze.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mpbishi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mpbishi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mpjiusong1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mpjiusong2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mpmaotao1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mpmaotao2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twchengxi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twchengxi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twdanlie1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twdanlie2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twfenwang1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twfenwang2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twhuiyuan1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twhuiyuan2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twhuzhong1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twhuzhong2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twjuezhu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twjuezhu2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twshenyi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twshenyi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twshoushou1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twshoushou2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twxianfeng1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twxianfeng2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twxinghan1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twxinghan2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twzhiqu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twzhiqu2.mp3 Normal file

Binary file not shown.

View File

@ -330,7 +330,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
res = 0.9; res = 0.9;
if(f&&t || target.hasSkillTag('nodamage')) return 0; if(f&&t || target.hasSkillTag('nodamage')) return 0;
if(f || t) res = 0.45; if(f || t) res = 0.45;
if(target.getEquip('tengjia')) res *= 2; if(!f&&target.getEquip('tengjia')) res *= 2;
if(!target.isLinked()) res = -res; if(!target.isLinked()) res = -res;
if(ui.selected.targets.length) return res; if(ui.selected.targets.length) return res;
let fs = 0, let fs = 0,

View File

@ -1343,7 +1343,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
}, },
target:(card,player,target)=>{ target:(card,player,target)=>{
if(target._g_taipingyaoshu_temp) return; if(target._g_taipingyaoshu_temp) return;
if(get.subtype(card)==='equip2'&&target.getEquip('taipingyaoshu')&&!target.countEmpty(2)){ if(get.subtype(card)==='equip2'&&target.getEquip('taipingyaoshu')&&!target.countEmptySlot(2)){
target._g_taipingyaoshu_temp=true; target._g_taipingyaoshu_temp=true;
let lose=get.effect(target,{name:'losehp'},target,target), let lose=get.effect(target,{name:'losehp'},target,target),
draw=2*get.effect(target,{name:'draw'},target,target); draw=2*get.effect(target,{name:'draw'},target,target);

View File

@ -527,15 +527,15 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(event.name=='phase'){ if(event.name=='phase'){
if(game.phaseNumber!=0) return false; if(game.phaseNumber!=0) return false;
if(!player._start_cards) return false; if(!player._start_cards) return false;
var hs=player.getCards('h'); let hs=player.getCards('h');
for(var card of player._start_cards){ for(let card of player._start_cards){
if(get.name(card,player)=='du'&&hs.includes(card)) return true; if(get.name(card,player)=='du'&&hs.includes(card)) return true;
} }
} }
else{ else{
if(event.getParent().name!='draw') return false; if(event.getParent().name!='draw') return false;
var hs=player.getCards('h'); let hs=player.getCards('h');
for(var card of event.cards){ for(let card of event.getg(player)){
if(get.name(card,player)=='du'&&hs.includes(card)) return true; if(get.name(card,player)=='du'&&hs.includes(card)) return true;
} }
} }

View File

@ -4564,7 +4564,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
filter(event,player){ filter(event,player){
if(!event.source||!event.source.isIn()||event.source.group!='qun') return false; if(!event.source||!event.source.isIn()||event.source.group!='qun') return false;
if(!event.souce.countCards('he')<2) return false; if(!event.source.countCards('he')<2) return false;
if(!player.hasZhuSkill('dddfuyi',event.source)) return false; if(!player.hasZhuSkill('dddfuyi',event.source)) return false;
const skills=player.getStockSkills(true,true).filter(skill=>{ const skills=player.getStockSkills(true,true).filter(skill=>{
return !player.hasSkill(skill,null,false,false); return !player.hasSkill(skill,null,false,false);

View File

@ -6117,7 +6117,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
kuangfeng3:{ kuangfeng3:{
trigger:{global:'damageBegin3'}, trigger:{global:'damageBegin3'},
filter:function(event){ filter:function(event,player){
return event.hasNature('fire')&&event.player.getStorage('kuangfeng2').includes(player); return event.hasNature('fire')&&event.player.getStorage('kuangfeng2').includes(player);
}, },
charlotte:true, charlotte:true,

View File

@ -757,7 +757,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'useCardAfter'}, trigger:{player:'useCardAfter'},
filter:function(event,player){ filter:function(event,player){
if(get.type(event.card)!='basic') return false; if(get.type(event.card)!='basic') return false;
if(player.getHistory('gain',evt=>evt.getParent().name=='dccaisi').length>player.maxHp) return false; if(player.getHistory('gain',evt=>{
return evt.getParent().name==='dccaisi';
}).reduce((num,evt)=>{
return num+evt.cards.length;
},0)>player.maxHp) return false;
return _status.currentPhase; return _status.currentPhase;
}, },
prompt2:function(event,player){ prompt2:function(event,player){
@ -11171,6 +11175,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
liuchongluojun:'刘宠(?~197年汉明帝刘庄玄孙陈敬王刘羡曾孙陈顷王刘崇之孙陈孝王刘承之子陈国第六位国君也是东汉陈国的最后一位国君。骆俊?-197字孝远东汉末年扬州会稽郡乌伤县今浙江义乌人。宗室陈王刘宠的国相在任期间励精图治深得民众爱戴。刘宠勇猛过人善使弓弩箭法高超。在其父刘承死后继承陈王爵位。中平年间黄巾军起义郡县官兵都弃城逃走刘宠于是征兵自守卫。当时天下饥荒诸王侯都已不再享有租赋反屡遭抢掠有的甚至流离在外死于荒野。只有陈国仍很富强邻郡百姓纷纷前去投靠陈国拥有部众达十余万人。初平元年190年各州郡起兵讨伐董卓刘宠率军屯驻阳夏自称辅汉大将军。建安二年197年袁术向陈国求取粮草遭陈国国相骆俊拒绝袁术大为生气便派刺客张闿假装路过陈国乘机杀死骆俊和刘宠。', liuchongluojun:'刘宠(?~197年汉明帝刘庄玄孙陈敬王刘羡曾孙陈顷王刘崇之孙陈孝王刘承之子陈国第六位国君也是东汉陈国的最后一位国君。骆俊?-197字孝远东汉末年扬州会稽郡乌伤县今浙江义乌人。宗室陈王刘宠的国相在任期间励精图治深得民众爱戴。刘宠勇猛过人善使弓弩箭法高超。在其父刘承死后继承陈王爵位。中平年间黄巾军起义郡县官兵都弃城逃走刘宠于是征兵自守卫。当时天下饥荒诸王侯都已不再享有租赋反屡遭抢掠有的甚至流离在外死于荒野。只有陈国仍很富强邻郡百姓纷纷前去投靠陈国拥有部众达十余万人。初平元年190年各州郡起兵讨伐董卓刘宠率军屯驻阳夏自称辅汉大将军。建安二年197年袁术向陈国求取粮草遭陈国国相骆俊拒绝袁术大为生气便派刺客张闿假装路过陈国乘机杀死骆俊和刘宠。',
yuechen:'乐綝195~257年字号不详阳平郡卫国县今河南省清丰县人。三国时期曹魏将领右将军乐进的儿子。果毅坚毅袭封广昌亭侯累迁扬州刺史。甘露二年为叛乱的征东大将军诸葛诞所杀追赠卫尉。', yuechen:'乐綝195~257年字号不详阳平郡卫国县今河南省清丰县人。三国时期曹魏将领右将军乐进的儿子。果毅坚毅袭封广昌亭侯累迁扬州刺史。甘露二年为叛乱的征东大将军诸葛诞所杀追赠卫尉。',
kuaiqi:'蒯祺(?~219年南郡中卢人荆州望族子弟与荆州牧刘表帐下谋士蒯良、蒯越为同族东汉末年房陵太守。建安二十四年219年汉中王刘备遣宜都太守孟达从秭归北攻房陵蒯祺于战斗中被孟达所部士兵所杀。清朝任兆麟《心斋十种》中的《襄阳记》辑本引用《万历襄阳府志》“钦从祖祺妇即诸葛孔明之姊也”称蒯祺娶故兖州泰山郡丞诸葛珪长女即他是知名政治家、蜀汉丞相诸葛亮的姐夫。但在任兆麟之前的《襄阳记》辑本中并没有这一条。', kuaiqi:'蒯祺(?~219年南郡中卢人荆州望族子弟与荆州牧刘表帐下谋士蒯良、蒯越为同族东汉末年房陵太守。建安二十四年219年汉中王刘备遣宜都太守孟达从秭归北攻房陵蒯祺于战斗中被孟达所部士兵所杀。清朝任兆麟《心斋十种》中的《襄阳记》辑本引用《万历襄阳府志》“钦从祖祺妇即诸葛孔明之姊也”称蒯祺娶故兖州泰山郡丞诸葛珪长女即他是知名政治家、蜀汉丞相诸葛亮的姐夫。但在任兆麟之前的《襄阳记》辑本中并没有这一条。',
pangshanmin:'庞山民,荆州襄阳人,三国时期曹魏大臣。庞山民出身荆州庞氏,为隐士庞德公之子、凤雏庞统的堂兄,娶诸葛亮二姐诸葛氏(“若雪”为网络小说虚构)为妻。后出仕曹魏,历任黄门、吏部郎等职。',
}, },
characterTitle:{ characterTitle:{
}, },

View File

@ -1214,6 +1214,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
enable:'chooseToUse', enable:'chooseToUse',
viewAs:{name:'lebu'}, viewAs:{name:'lebu'},
position:'hes', position:'hes',
round:1,
viewAsFilter(player){ viewAsFilter(player){
return player.countCards('hes'); return player.countCards('hes');
}, },
@ -8251,7 +8252,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
jsrgeqian_info:'①结束阶段,你可以蓄谋任意次。②当你使用【杀】或蓄谋牌指定其他角色为唯一目标后,你可以令此牌不计入次数限制并获得目标一张牌,然后其可以令你本回合至其的距离+2。', jsrgeqian_info:'①结束阶段,你可以蓄谋任意次。②当你使用【杀】或蓄谋牌指定其他角色为唯一目标后,你可以令此牌不计入次数限制并获得目标一张牌,然后其可以令你本回合至其的距离+2。',
jsrgfusha:'伏杀', jsrgfusha:'伏杀',
jsrgfusha_info:'限定技。出牌阶段若你的攻击范围内仅有一名角色你可以对其造成X点伤害X为你的攻击范围至多为游戏人数。', jsrgfusha_info:'限定技。出牌阶段若你的攻击范围内仅有一名角色你可以对其造成X点伤害X为你的攻击范围至多为游戏人数。',
jsrg_sunlubansunluyu:'合孙鲁班孙鲁育', jsrg_sunlubansunluyu:'合大小虎',
jsrg_sunlubansunluyu_prefix:'合', jsrg_sunlubansunluyu_prefix:'合',
jsrgdaimou:'殆谋', jsrgdaimou:'殆谋',
jsrgdaimou_info:'每回合各限一次。当一名角色使用【杀】指定其他角色/你为目标时,你可以用牌堆顶的牌蓄谋/你须弃置你区域里的一张蓄谋牌。', jsrgdaimou_info:'每回合各限一次。当一名角色使用【杀】指定其他角色/你为目标时,你可以用牌堆顶的牌蓄谋/你须弃置你区域里的一张蓄谋牌。',

View File

@ -4112,7 +4112,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1' 'step 1'
var hp=player.hp-1,maxhp=player.maxHp-1; var hp=player.hp-1,maxhp=player.maxHp-1;
if(hp>0&&maxhp>0){ if(hp>0&&maxhp>0){
player.chooseControl(choices).set('prompt','安国:请选择一项').set('choiceList',[ player.chooseControl().set('prompt','安国:请选择一项').set('choiceList',[
'失去'+hp+'点体力,令'+get.translation(trigger.player)+'获得1点护甲', '失去'+hp+'点体力,令'+get.translation(trigger.player)+'获得1点护甲',
'减'+maxhp+'点体力上限,令'+get.translation(trigger.player)+'获得1点护甲' '减'+maxhp+'点体力上限,令'+get.translation(trigger.player)+'获得1点护甲'
]).set('ai',()=>'选项一'); ]).set('ai',()=>'选项一');
@ -6760,7 +6760,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mingzhi:false, mingzhi:false,
effect:{ effect:{
target:function(card,player,target,current){ target:function(card,player,target,current){
if((get.tag(card,'respondShan')||get.tag(card,'respondSha'))&&target.getStorage('jibing').length>0&&player.isMaxHp()){ if((get.tag(card,'respondShan')||get.tag(card,'respondSha'))&&target.getExpansions('jibing').length>0&&player.isMaxHp()){
if(get.attitude(target,player)<=0){ if(get.attitude(target,player)<=0){
return [0,0,1,0.3]; return [0,0,1,0.3];
} }

View File

@ -404,6 +404,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
sbsongwei:{ sbsongwei:{
audio:2, audio:2,
init:(player)=>{
player.addSkill('sbsongwei_delete');
},
trigger:{player:'phaseUseBegin'}, trigger:{player:'phaseUseBegin'},
filter:function(event,player){ filter:function(event,player){
return game.hasPlayer(target=>target.group=='wei'&&target!=player); return game.hasPlayer(target=>target.group=='wei'&&target!=player);
@ -414,7 +417,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
async content(event,trigger,player){ async content(event,trigger,player){
player.addMark('sbxingshang',game.countPlayer(target=>target.group=='wei'&&target!=player)); player.addMark('sbxingshang',game.countPlayer(target=>target.group=='wei'&&target!=player));
}, },
group:'sbsongwei_delete',
subSkill:{ subSkill:{
delete:{ delete:{
audio:'sbsongwei', audio:'sbsongwei',
@ -453,7 +455,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
direct:true, direct:true,
content:function*(event,map){ content:function*(event,map){
var player=map.player; var player=map.player;
var result=yield player.chooseTarget(get.prompt('sbwusheng'),'选择一名非主公的其他角色,本阶段对其使用【杀】无距离和次数限制,使用【杀】指定其为目标后摸一张牌,对其使用张【杀】后不能对其使用【杀】',(card,player,target)=>{ var result=yield player.chooseTarget(get.prompt('sbwusheng'),'选择一名非主公的其他角色,本阶段对其使用【杀】无距离和次数限制,使用【杀】指定其为目标后摸一张牌,对其使用张【杀】后不能对其使用【杀】',(card,player,target)=>{
return target!=player&&!target.isZhu2(); return target!=player&&!target.isZhu2();
}).set('ai',target=>{ }).set('ai',target=>{
var player=_status.event.player; var player=_status.event.player;
@ -462,6 +464,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.bool){ if(result.bool){
var target=result.targets[0]; var target=result.targets[0];
player.logSkill('sbwusheng',target); player.logSkill('sbwusheng',target);
if(get.mode()!=='identity'||player.identity!=='nei') player.addExpose(0.25);
player.addTempSkill('sbwusheng_effect',{player:'phaseUseAfter'}); player.addTempSkill('sbwusheng_effect',{player:'phaseUseAfter'});
player.storage.sbwusheng_effect[target.playerid]=0; player.storage.sbwusheng_effect[target.playerid]=0;
} }
@ -555,7 +558,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
playerEnabled:function(card,player,target){ playerEnabled:function(card,player,target){
if(card.name!='sha'||typeof player.storage.sbwusheng_effect[target.playerid]!='number') return; if(card.name!='sha'||typeof player.storage.sbwusheng_effect[target.playerid]!='number') return;
if(player.storage.sbwusheng_effect[target.playerid]>=5) return false; if(player.storage.sbwusheng_effect[target.playerid]>=3) return false;
}, },
}, },
audio:'sbwusheng', audio:'sbwusheng',
@ -645,7 +648,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
filterCardx:function(card,player){ filterCardx:function(card,player){
//if(player.getStorage('sbqicai').includes(card.name)) return false; //if(player.getStorage('sbqicai').includes(card.name)) return false;
return get.type(card)=='equip'&&get.hasPlayer(target=>target!=player&&target.hasEmptySlot(get.subtype(card))); return get.type(card)=='equip'&&game.hasPlayer(target=>target!=player&&target.hasEmptySlot(get.subtype(card)));
}, },
usable:1, usable:1,
chooseButton:{ chooseButton:{
@ -6353,7 +6356,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sb_guanyu_prefix:'谋', sb_guanyu_prefix:'谋',
sbwusheng:'武圣', sbwusheng:'武圣',
sbwusheng_wusheng_backup:'武圣', sbwusheng_wusheng_backup:'武圣',
sbwusheng_info:'你可以将一张手牌当作任意【杀】使用或打出。出牌阶段开始时,你可以选择一名非主公的其他角色,本阶段对其使用【杀】无距离和次数限制,使用【杀】指定其为目标后摸一张牌,对其使用张【杀】后不能对其使用【杀】。', sbwusheng_info:'你可以将一张手牌当作任意【杀】使用或打出。出牌阶段开始时,你可以选择一名非主公的其他角色,本阶段对其使用【杀】无距离和次数限制,使用【杀】指定其为目标后摸一张牌,对其使用张【杀】后不能对其使用【杀】。',
sbyijue:'义绝', sbyijue:'义绝',
sbyijue_info:'锁定技,每名角色每局游戏限一次,当你对一名角色造成大于等于其体力值的伤害时,你防止此伤害,且本回合你使用牌指定其为目标后,取消之。', sbyijue_info:'锁定技,每名角色每局游戏限一次,当你对一名角色造成大于等于其体力值的伤害时,你防止此伤害,且本回合你使用牌指定其为目标后,取消之。',
sb_caopi:'谋曹丕', sb_caopi:'谋曹丕',
@ -6361,7 +6364,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sbxingshang:'行殇', sbxingshang:'行殇',
sbxingshang_info:'①每回合限一次当一名角色死亡时或受到伤害时你获得1个“颂”标记。②出牌阶段限一次你可以1.移去1个“颂”标记令一名角色复原武将牌2.移去2个“颂”标记令一名角色摸X张牌X为场上阵亡角色数且X至少为1至多为53.移去3个“颂”标记令一名体力上限小于10的角色加1点体力上限回复1点体力随机恢复一个已废除的装备栏4.移去4个“颂”标记获得一名阵亡角色武将牌上的所有技能然后你失去武将牌上的所有技能。', sbxingshang_info:'①每回合限一次当一名角色死亡时或受到伤害时你获得1个“颂”标记。②出牌阶段限一次你可以1.移去1个“颂”标记令一名角色复原武将牌2.移去2个“颂”标记令一名角色摸X张牌X为场上阵亡角色数且X至少为1至多为53.移去3个“颂”标记令一名体力上限小于10的角色加1点体力上限回复1点体力随机恢复一个已废除的装备栏4.移去4个“颂”标记获得一名阵亡角色武将牌上的所有技能然后你失去武将牌上的所有技能。',
sbfangzhu:'放逐', sbfangzhu:'放逐',
sbfangzhu_info:'出牌阶段限一次你可以1.移去2个“颂”标记令一名其他角色的非Charlotte技能失效直到其回合结束2.移去2个“颂”标记令一名其他角色不能响应除其以为的角色使用的牌直到其回合结束3.移去2个“颂”标记令一名其他角色将武将牌翻面4.移去2个“颂”标记,令一名其他角色只能使用你选择的一种类型的牌直到其回合结束。', sbfangzhu_info:'出牌阶段限一次你可以1.移去2个“颂”标记令一名其他角色的非Charlotte技能失效直到其回合结束2.移去2个“颂”标记令一名其他角色不能响应除其以外的角色使用的牌直到其回合结束3.移去3个“颂”标记令一名其他角色将武将牌翻面4.移去3个“颂”标记,令一名其他角色只能使用你选择的一种类型的牌直到其回合结束。',
sbsongwei:'颂威', sbsongwei:'颂威',
sbsongwei_info:'主公技。①出牌阶段开始时你获得Y个“颂”标记Y为场上其他魏势力角色数。②每局游戏限一次出牌阶段你可以令一名其他魏势力角色失去所有武将牌的技能。', sbsongwei_info:'主公技。①出牌阶段开始时你获得Y个“颂”标记Y为场上其他魏势力角色数。②每局游戏限一次出牌阶段你可以令一名其他魏势力角色失去所有武将牌的技能。',

View File

@ -942,7 +942,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2, audio:2,
trigger:{ trigger:{
player:'loseAfter', player:'loseAfter',
global:['gainAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], global:['gainAfter','equipAfter','addJudgeAfter','loseAsyncAfter','addToExpansionAfter'],
}, },
filter(event,player){ filter(event,player){
if(!_status.currentPhase||!_status.currentPhase.isIn()) return false; if(!_status.currentPhase||!_status.currentPhase.isIn()) return false;
@ -3038,13 +3038,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var aimx=game.filterPlayer(current=>{ var aimx=game.filterPlayer(current=>{
return target.canUse({name:'sha'},current)&&get.effect(current,{name:'sha'},target,target)>0; return target.canUse({name:'sha'},current)&&get.effect(current,{name:'sha'},target,target)>0;
}).sort((a,b)=>get.effect(b,{name:'sha'},target,target)-get.effect(a,{name:'sha'},target,target))[0]; }).sort((a,b)=>get.effect(b,{name:'sha'},target,target)-get.effect(a,{name:'sha'},target,target))[0];
if(get.effect(aimx,{name:'sha'},target,player)<0&&get.effect(aimx,{name:'sha'},target,aimx)<0&&!canSave(player,aimx)) return 0; if(aimx&&get.effect(aimx,{name:'sha'},target,player)<0&&get.effect(aimx,{name:'sha'},target,aimx)<0&&!canSave(player,aimx)) return 0;
} }
if(target.hasValueTarget({name:'juedou'})){ if(target.hasValueTarget({name:'juedou'})){
var aimy=game.filterPlayer(current=>{ var aimy=game.filterPlayer(current=>{
return target.canUse({name:'juedou'},current)&&get.effect(current,{name:'juedou'},target,target)>0; return target.canUse({name:'juedou'},current)&&get.effect(current,{name:'juedou'},target,target)>0;
}).sort((a,b)=>get.effect(b,{name:'juedou'},target,target)-get.effect(a,{name:'juedou'},target,target))[0]; }).sort((a,b)=>get.effect(b,{name:'juedou'},target,target)-get.effect(a,{name:'juedou'},target,target))[0];
if(get.effect(aimy,{name:'juedou'},target,player)<0&&get.effect(aimy,{name:'sha'},target,aimy)<0&&!canSave(player,aimy)) return 0; if(aimy&&get.effect(aimy,{name:'juedou'},target,player)<0&&get.effect(aimy,{name:'sha'},target,aimy)<0&&!canSave(player,aimy)) return 0;
} }
return -1; return -1;
}, },
@ -14987,7 +14987,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.chooseCard('he',get.prompt('new_xingwu'),'将一张牌置于武将牌上作为“舞”').set('ai',function(card){ player.chooseCard('he',get.prompt('new_xingwu'),'将一张牌置于武将牌上作为“舞”').set('ai',function(card){
if(_status.event.goon) return 20-get.value(card); if(_status.event.goon) return 20-get.value(card);
return 7-get.value(card); return 7-get.value(card);
}).set('goon',player.needsToDiscard()||player.getStorage('new_xingwu').length>1); }).set('goon',player.needsToDiscard()||player.getExpansions('new_xingwu').length>1);
'step 1' 'step 1'
if(result.bool){ if(result.bool){
player.logSkill('new_xingwu'); player.logSkill('new_xingwu');
@ -15061,7 +15061,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
new_luoyan:{ new_luoyan:{
init:function(player){ init:function(player){
if(player.getStorage('new_xingwu').length) player.addAdditionalSkill('new_luoyan',['oltianxiang','liuli']); if(player.getExpansions('new_xingwu').length) player.addAdditionalSkill('new_luoyan',['oltianxiang','liuli']);
}, },
onremove:function(player){ onremove:function(player){
player.removeAdditionalSkill('new_luoyan'); player.removeAdditionalSkill('new_luoyan');
@ -24834,7 +24834,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
forced:true, forced:true,
content:function(){ content:function(){
player.addMark('xinfu_xionghuo',1); if(player.countMark('xinfu_xionghuo')<3) player.addMark('xinfu_xionghuo',1);
if(trigger.player.hp<0&&get.itemtype(trigger.parent.cards)=='cards'&&get.position(trigger.parent.cards[0],true)=='o'){ if(trigger.player.hp<0&&get.itemtype(trigger.parent.cards)=='cards'&&get.position(trigger.parent.cards[0],true)=='o'){
player.gain(trigger.parent.cards,'gain2'); player.gain(trigger.parent.cards,'gain2');
} }
@ -25815,7 +25815,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"xinfu_fujian":"伏间", "xinfu_fujian":"伏间",
"xinfu_fujian_info":"锁定技结束阶段开始时你观看一名随机的其他角色的随机X张手牌。(X为场上手牌最少的角色的手牌数)", "xinfu_fujian_info":"锁定技结束阶段开始时你观看一名随机的其他角色的随机X张手牌。(X为场上手牌最少的角色的手牌数)",
xinfu_xionghuo:'凶镬', xinfu_xionghuo:'凶镬',
xinfu_xionghuo_info:'游戏开始时你获得3个“暴戾”标记。出牌阶段,你可以交给一名其他角色一个“暴戾”标记。当你对有“暴戾”标记的其他角色造成伤害时,此伤害+1。有“暴戾”标记的其他角色的出牌阶段开始时其移去所有“暴戾”标记并随机执行一项1.受到1点火焰伤害且本回合不能对你使用【杀】2.失去1点体力且本回合手牌上限-13.你随机获得其一张手牌和一张装备区的牌。', xinfu_xionghuo_info:'游戏开始时你获得3个“暴戾”标记标记上限为3。出牌阶段,你可以交给一名其他角色一个“暴戾”标记。当你对有“暴戾”标记的其他角色造成伤害时,此伤害+1。有“暴戾”标记的其他角色的出牌阶段开始时其移去所有“暴戾”标记并随机执行一项1.受到1点火焰伤害且本回合不能对你使用【杀】2.失去1点体力且本回合手牌上限-13.你随机获得其一张手牌和一张装备区的牌。',
xinfu_shajue:'杀绝', xinfu_shajue:'杀绝',
xinfu_shajue_info:'锁定技其他角色进入濒死状态时你获得一个“暴戾”标记。然后若其体力值小于0你获得使其进入濒死状态的牌。', xinfu_shajue_info:'锁定技其他角色进入濒死状态时你获得一个“暴戾”标记。然后若其体力值小于0你获得使其进入濒死状态的牌。',
xinfu_jianjie:"荐杰", xinfu_jianjie:"荐杰",

View File

@ -10998,7 +10998,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
gongxiu:'共修', gongxiu:'共修',
gongxiu_info:'结束阶段,若你本回合内发动过〖经合〗,则你选择一项:①令所有本回合内成为过〖经合〗目标的角色各摸一张牌;②令所有本回合内未成为过〖经合〗目标的角色各弃置一张手牌。', gongxiu_info:'结束阶段,若你本回合内发动过〖经合〗,则你选择一项:①令所有本回合内成为过〖经合〗目标的角色各摸一张牌;②令所有本回合内未成为过〖经合〗目标的角色各弃置一张手牌。',
jinghe:'经合', jinghe:'经合',
jinghe_info:'出牌阶段限一次,你可以展示四张牌名各不相同的牌并选择等量的角色。系统从“写满技能的天书”中随机选择等量的技能,然后这些角色依次选择获得其中的一个。', jinghe_info:'出牌阶段限一次,你可以展示至多四张牌名各不相同的牌并选择等量的角色。系统从“写满技能的天书”中随机选择等量的技能,然后这些角色依次选择获得其中的一个。',
nhyinbing:'阴兵', nhyinbing:'阴兵',
nhyinbing_info:'锁定技,你使用的【杀】造成伤害改为失去体力。其他角色失去体力后,你摸一张牌。', nhyinbing_info:'锁定技,你使用的【杀】造成伤害改为失去体力。其他角色失去体力后,你摸一张牌。',
nhhuoqi:'活气', nhhuoqi:'活气',

View File

@ -13659,7 +13659,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return (get.suit(card)!=_status.event.suit?9:6)-get.value(card); return (get.suit(card)!=_status.event.suit?9:6)-get.value(card);
}).set('num',num); }).set('num',num);
if(lib.suit.includes(suit)){ if(lib.suit.includes(suit)){
next.set('prompt2','若弃置的是'+get.suit(suit)+'牌,则改为'+get.translation(player)+'获得之'); next.set('prompt2','若弃置的是'+get.translation(suit)+'牌,则改为'+get.translation(player)+'获得之');
next.set('suit',suit); next.set('suit',suit);
} }
'step 1' 'step 1'

View File

@ -1700,7 +1700,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if (!list.includes(get.suit(card))) att = 2; if (!list.includes(get.suit(card))) att = 2;
if (_status.event.goon) return (20 - get.value(card)) * att; if (_status.event.goon) return (20 - get.value(card)) * att;
return (7 - get.value(card)) * att; return (7 - get.value(card)) * att;
}).set('goon', player.needsToDiscard() || player.getStorage('dcxingwu').length == 2); }).set('goon', player.needsToDiscard() || player.getExpansions('dcxingwu').length == 2);
'step 1' 'step 1'
if (result.bool) { if (result.bool) {
player.logSkill('dcxingwu'); player.logSkill('dcxingwu');
@ -1901,7 +1901,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var player=_status.event.player; var player=_status.event.player;
var target=_status.event.target; var target=_status.event.target;
var left=0,right=0; var left=0,right=0;
var leftx=target.getPrevious(),lefty=target.getNext(); var leftx=target.getPrevious(),rightx=target.getNext();
while(leftx!=player){ while(leftx!=player){
if(get.damageEffect(leftx,player,player)<0) break; if(get.damageEffect(leftx,player,player)<0) break;
else{ else{
@ -4436,7 +4436,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 0' 'step 0'
var cards=lib.skill.dcshexue.getLast(); var cards=lib.skill.dcshexue.getLast();
cards=cards.filter(card=>player.hasUseTarget(card,false)); cards=cards.filter(card=>player.hasUseTarget(card,false));
player.chooseButton(['设学:是否将一张牌当作其中一张牌使用?',[cards,'vards']]); player.chooseButton(['设学:是否将一张牌当作其中一张牌使用?',[cards,'vcard']]);
'step 1' 'step 1'
if(!result.bool) return; if(!result.bool) return;
var card=result.links[0]; var card=result.links[0];
@ -6323,7 +6323,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
}, },
dcshouze:{ dcshouze:{
audio:2, audio:true,
trigger:{player:'phaseJieshuBegin'}, trigger:{player:'phaseJieshuBegin'},
forced:true, forced:true,
filter:function(event,player){ filter:function(event,player){
@ -13507,6 +13507,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
tianshangyi:'田尚衣,一作陈尚衣,魏文帝曹丕宫中著名宫人。能歌善舞,一时冠绝于世,私以为比之汉宫飞燕也不遑多让。', tianshangyi:'田尚衣,一作陈尚衣,魏文帝曹丕宫中著名宫人。能歌善舞,一时冠绝于世,私以为比之汉宫飞燕也不遑多让。',
malingli:'马伶俐,游卡桌游原创角色,设定上为,马超之女,其身形虽娇小,却继承了马超英勇略带冲动的个性,活泼阳光,调皮伶俐,爱摆弄爆竹烟花一类的小器具,包包里经常放置用五色彩纸包装的小炸弹球。马伶俐从小跟随马超和马云騄学习战斗技巧,战斗力超强,坚强的意志和勇气也得到了提升,同时擅长马术,有一匹可爱的小白马伴随其身边。后马伶俐成年,嫁与刘备之子刘理,获封梁王妃。两人琴瑟相和,极为恩爱,常结伴出游,被人誉为天作之合。', malingli:'马伶俐,游卡桌游原创角色,设定上为,马超之女,其身形虽娇小,却继承了马超英勇略带冲动的个性,活泼阳光,调皮伶俐,爱摆弄爆竹烟花一类的小器具,包包里经常放置用五色彩纸包装的小炸弹球。马伶俐从小跟随马超和马云騄学习战斗技巧,战斗力超强,坚强的意志和勇气也得到了提升,同时擅长马术,有一匹可爱的小白马伴随其身边。后马伶俐成年,嫁与刘备之子刘理,获封梁王妃。两人琴瑟相和,极为恩爱,常结伴出游,被人誉为天作之合。',
zhugeruoxue:'诸葛氏(“若雪”为网络小说虚构),诸葛亮的二姐,庞山民之妻。', zhugeruoxue:'诸葛氏(“若雪”为网络小说虚构),诸葛亮的二姐,庞山民之妻。',
caoyi:'曹轶,游卡桌游旗下产品《三国杀》原创角色。设定上为曹纯所收养的孙女,从小受到曹纯的教导,在军营中长大,性情坚毅有担当,军事谋略丰富,战斗能力超强。曹轶喜欢美食,特别是甜食,并且擅长制作各种点心。她身边跟随的雪白小老虎是曹纯在她及笄时送的生辰礼物,希望她如小老虎一样,英勇无畏。曹轶与曹婴交好,两人以姐妹相称。曹轶成年后继承祖父衣钵,接手精锐部队“虎豹骑”,成为新的虎豹骑的统领者。',
}, },
characterTitle:{ characterTitle:{
// wulan:'#b对决限定武将', // wulan:'#b对决限定武将',
@ -14118,7 +14119,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dc_sb_lusu:'新杀谋鲁肃', dc_sb_lusu:'新杀谋鲁肃',
dc_sb_lusu_prefix:'新杀谋', dc_sb_lusu_prefix:'新杀谋',
dcsbmingshi:'明势', dcsbmingshi:'明势',
dcsbmingshi_info:'摸牌阶段,你可以多摸两张牌,然后展示三张牌并令一名其他角色选择获得其中的一张牌。', dcsbmingshi_info:'摸牌阶段,你可以多摸两张牌,然后展示三张牌并令一名其他角色选择获得其中的一张牌。',
dcsbmengmou:'盟谋', dcsbmengmou:'盟谋',
dcsbmengmou_info:'转换技每回合每项各限一次当你得到其他角色的牌后或其他角色得到你的牌后你可以令该角色使用至多X张【杀】且其每以此法造成1点伤害其回复1点体力你可令该角色打出至多X张【杀】然后其失去Y点体力。X为你的体力值Y为X-其打出【杀】数)', dcsbmengmou_info:'转换技每回合每项各限一次当你得到其他角色的牌后或其他角色得到你的牌后你可以令该角色使用至多X张【杀】且其每以此法造成1点伤害其回复1点体力你可令该角色打出至多X张【杀】然后其失去Y点体力。X为你的体力值Y为X-其打出【杀】数)',
dc_sb_zhouyu:'新杀谋周瑜', dc_sb_zhouyu:'新杀谋周瑜',

View File

@ -1182,7 +1182,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
getv=(name,player)=>{ getv=(name,player)=>{
let v=trigger.getTempCache('sangu',player.id+name); let v=trigger.getTempCache('sangu',player.id+name);
if(typeof v==='number') return v; if(typeof v==='number') return v;
v=player.getUseValue({name:name,storage:{sangu:true}},arg); v=player.getUseValue({name:name,storage:{sangu:true}});
trigger.putTempCache('sangu',player.id+name,v); trigger.putTempCache('sangu',player.id+name,v);
return v; return v;
}; };
@ -8094,7 +8094,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
const chooseToPutCard = async function(target){ const chooseToPutCard = async function(target){
await target.draw(); await target.draw();
if(target.countCards('he')){ if(target.countCards('he')){
const {result:{cards,bool}} = const {result:{cards,bool}} =
await target.chooseCard('选择一张牌置于牌堆顶','he',true); await target.chooseCard('选择一张牌置于牌堆顶','he',true);
if(bool){ if(bool){
await target.lose(cards,ui.cardPile,'insert'); await target.lose(cards,ui.cardPile,'insert');

View File

@ -971,7 +971,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
charlotte:true, charlotte:true,
forced:true, forced:true,
popup:false, popup:false,
trigger:{global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','loseAfter','gainAfter','addToExpansionAfter']}, trigger:{global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','loseAfter','addToExpansionAfter']},
usable:1, usable:1,
filter:function(event,player){ filter:function(event,player){
var target=player.storage.qimei_draw; var target=player.storage.qimei_draw;
@ -1623,7 +1623,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var list,skills=[]; var list,skills=[];
if(get.mode()=='guozhan'){ if(get.mode()=='guozhan'){
list=[]; list=[];
for(var i in lib.characterPack.mode_guozhan) list.push(i); for(var i in lib.characterPack.mode_guozhan){
if(lib.character[i])list.push(i);
}
} }
else if(_status.connectMode) list=get.charactersOL(); else if(_status.connectMode) list=get.charactersOL();
else { else {

View File

@ -1871,7 +1871,10 @@ export class Get extends Uninstantable {
if (card) return list[0]; if (card) return list[0];
return list; return list;
} }
static judge(card) { return card.viewAs ? lib.card[card.viewAs].judge : get.info(card).judge; } static judge(card) {
const cardInfo = (card.viewAs ? lib.card[card.viewAs] : get.info(card));
return (cardInfo && cardInfo.judge) ? cardInfo.judge : ()=>0;
}
static judge2(card) { return card.viewAs ? lib.card[card.viewAs].judge2 : get.info(card).judge2; } static judge2(card) { return card.viewAs ? lib.card[card.viewAs].judge2 : get.info(card).judge2; }
static distance(from, to, method) { static distance(from, to, method) {
if (from == to) return 0; if (from == to) return 0;

View File

@ -34,7 +34,7 @@ export const importMode = generateImportFunction('mode', (name) => `../../mode/$
*/ */
function generateImportFunction(type, pathParser) { function generateImportFunction(type, pathParser) {
return async (name) => { return async (name) => {
if(type == 'extension' && !game.hasExtension(name)){ if(type == 'extension' && !game.hasExtension(name) && !lib.config.all.stockextension.includes(name)){
await game.import(type,createEmptyExtension(name)); await game.import(type,createEmptyExtension(name));
return; return;
} }

View File

@ -3921,8 +3921,8 @@ export class Library extends Uninstantable {
item: { item: {
'6': '6', '6': '6',
'12': '12', '12': '12',
'20': '24', '20': '20',
'30': '36', '30': '30',
}, },
unfrequent: true unfrequent: true
}, },