This commit is contained in:
Spmario233 2023-05-29 13:22:12 +08:00
parent dcccf27c38
commit 5db0d1df55
45 changed files with 4772 additions and 346 deletions

View File

@ -59,6 +59,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
filterTarget:function(card,player,target){
return target.hasSkill('clanlianzhu')&&!target.hasSkill('clanlianzhu_targeted')&&(!target.storage.clanlianzhu||target.storage.clanlianzhu&&game.hasPlayer(current=>{
if(current==player||current==target) return false;
return current.inRangeOf(player)||current.inRangeOf(target);
}));
},
@ -73,7 +74,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!target.storage.clanlianzhu){
return ui.selected.cards.length==1;
}
return true;
return ui.selected.cards.length==0;
},
position:'he',
discard:false,
@ -86,6 +87,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(target.hasSkill('clanlianzhu')&&!target.hasSkill('clanlianzhu_targeted')){
if(target.storage.clanlianzhu){
if(game.hasPlayer(current=>{
if(current==player||current==target) return false;
return current.inRangeOf(player)||current.inRangeOf(target);
})) kita.add(target);
}
@ -1408,8 +1410,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
dynamicTranslate:{
clanlianzhu:function(player){
if(player.storage.clanlianzhu) return '转换技。每名其他角色A的出牌阶段限一次。阴:A可以重铸一张牌,然后你可以重铸一张牌。若这两张牌颜色不同,则你的手牌上限-1<span class="bluetext">阳:A可以令你选择一名在你或A攻击范围内的另一名其他角色B,然后A和你可依次选择是否对B使用一张【杀】。若这两张【杀】颜色相同,则你的手牌上限+1</span>。';
return '转换技。每名其他角色A的出牌阶段限一次。<span class="bluetext">阴:A可以重铸一张牌,然后你可以重铸一张牌。若这两张牌颜色不同,则你的手牌上限-1</span>;阳:A可以令你选择一名在你或A攻击范围内的另一名其他角色B,然后A和你可依次选择是否对B使用一张【杀】。若这两张【杀】颜色相同,则你的手牌上限+1。';
if(player.storage.clanlianzhu) return '转换技。每名角色A的出牌阶段限一次。阴:A可以重铸一张牌,然后你可以重铸一张牌。若这两张牌颜色不同,则你的手牌上限-1<span class="bluetext">阳:A可以令你选择一名在你或A攻击范围内的另一名其他角色B,然后A和你可依次选择是否对B使用一张【杀】。若这两张【杀】颜色相同,则你的手牌上限+1</span>。';
return '转换技。每名角色A的出牌阶段限一次。<span class="bluetext">阴:A可以重铸一张牌,然后你可以重铸一张牌。若这两张牌颜色不同,则你的手牌上限-1</span>;阳:A可以令你选择一名在你或A攻击范围内的另一名其他角色B,然后A和你可依次选择是否对B使用一张【杀】。若这两张【杀】颜色相同,则你的手牌上限+1。';
},
},
translate:{
@ -1464,7 +1466,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
clanhuanjia_info:'出牌阶段结束时,你可以与一名角色拼点。赢的角色可以使用一张拼点牌。然后若此牌:未造成过伤害,你获得另一张拼点牌;造成过伤害,你失去一个技能。',
clan_wukuang:'族吴匡',
clanlianzhu:'联诛',
clanlianzhu_info:'转换技。每名其他角色A的出牌阶段限一次。阴:A可以重铸一张牌,然后你可以重铸一张牌。若这两张牌颜色不同,则你的手牌上限-1可以令你选择一名在你或攻击范围内的另一名其他角色然后和你可依次选择是否对使用一张【杀】。若这两张【杀】颜色相同则你的手牌上限+1。',
clanlianzhu_info:'转换技。每名角色A的出牌阶段限一次。阴:A可以重铸一张牌,然后你可以重铸一张牌。若这两张牌颜色不同,则你的手牌上限-1可以令你选择一名在你或攻击范围内的另一名其他角色然后和你可依次选择是否对使用一张【杀】。若这两张【杀】颜色相同则你的手牌上限+1。',
clan_wu:'陈留·吴氏',
clan_xun:'颍川·荀氏',

View File

@ -10043,6 +10043,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{global:'die'},
forced:true,
skillAnimation:true,
chargingSkill:true,
filter:function(event,player){
return player.hp>0;
},

View File

@ -929,7 +929,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
delete evt.result.used;
evt.result.card=get.autoViewAs({
name:name,
cards:[result],
cards:[result.links[0]],
storage:{shouli:true},
},result.links);
evt.result.cards=[result.links[0]];
@ -2170,9 +2170,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger.cancel();
},
ai:{
target:function(card,player,target){
if(card&&card.name=='qizhengxiangsheng') return 'zerotarget';
},
effect:{
target:function(card,player,target){
if(card&&card.name=='qizhengxiangsheng') return 'zerotarget';
},
}
},
},
global:{
@ -2597,61 +2599,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger.targets.addArray(targets);
},
},
// reshuishi:{
// audio:'shuishi',
// enable:'phaseUse',
// usable:1,
// filter:function(event,player){
// return player.maxHp<10;
// },
// content:function(){
// 'step 0'
// event.cards=[];
// event.suits=[];
// 'step 1'
// player.judge(function(result){
// var evt=_status.event.getParent('reshuishi');
// if(evt&&evt.suits&&evt.suits.contains(get.suit(result))) return 0;
// return 1;
// }).set('callback',function(){
// event.getParent().orderingCards.remove(event.judgeResult.card);
// }).judge2=function(result){
// return result.bool?true:false;
// };
// 'step 2'
// event.cards.push(result.card);
// if(result.bool&&player.maxHp<10){
// event.suits.push(result.suit);
// player.gainMaxHp();
// event.goto(1);
// }
// else{
// cards=cards.filterInD();
// if(cards.length) player.chooseTarget('将'+get.translation(cards)+'交给一名角色',true).set('ai',function(target){
// var player=_status.event.player;
// var att=get.attitude(player,target)/Math.sqrt(1+target.countCards('h'));
// if(target.hasSkillTag('nogain')) att/=10;
// return att;
// });
// else event.finish();
// }
// 'step 3'
// if(result.bool){
// var target=result.targets[0];
// event.target=target;
// player.line(target,'green');
// target.gain(cards,'gain2').giver=player;
// }
// 'step 4'
// if(target.isMaxHandcard()) player.loseMaxHp();
// },
// ai:{
// order:1.2,
// result:{
// player:1,
// },
// },
// },
reshuishi:{
audio:'shuishi',
enable:'phaseUse',
@ -6280,7 +6227,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'1':{
audio:'drlt_jieying',
trigger:{
player:'phaseZhunbeiBegin'
player:'phaseBegin'
},
forced:true,
filter:function(event,player){
@ -6908,7 +6855,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
twwuhun_info:'锁定技。①当你受到其他角色造成的1点伤害后你令伤害来源获得1枚“梦魇”标记。②当你对有“梦魇”标记的其他角色造成伤害后你令其获得一枚“梦魇”标记。③当你死亡时你可进行判定。若结果不为【桃】或【桃园结义】则你选择至少一名拥有“梦魇”标记的角色。令这些角色各自失去X点体力X为其“梦魇”标记数。',
shen_zhangfei:'神张飞',
shencai:'神裁',
shencai_info:'出牌阶段限一次,你可以令一名其他角色进行判定。你获得此判定牌,然后若此判定牌:包含以下要素中的任意一个,则其失去已有的下列效果,并获得对应的效果:{⒈体力:当其受到伤害后,其失去等量的体力、⒉武器:其不能使用牌响应杀、⒊打出:当其失去手牌后,其再随机弃置一张手牌(不嵌套触发)、⒋距离:其的结束阶段开始时,其翻面};若均不包含,你获得其区域里的一张牌,其获得一枚“死”并获得如下效果:其的角色手牌上限-X、其的回合结束时若X大于场上存活人数则其死亡X为其“死”标记数。',
shencai_info:'出牌阶段限一次,你可以令一名其他角色进行判定。你获得此判定牌,然后若此判定牌:包含以下要素中的任意一个,则其失去已有的下列效果,并获得对应的效果:{⒈体力:当其受到伤害后,其失去等量的体力、⒉武器:其不能使用牌响应杀、⒊打出:当其失去手牌后,其再随机弃置一张手牌(不嵌套触发)、⒋距离:其的结束阶段开始时,其翻面};若均不包含,你获得其区域里的一张牌,其获得一枚“死”并获得如下效果:其的角色手牌上限-X、其的回合结束时若X大于场上存活人数则其死亡X为其“死”标记数。',
xunshi:'巡使',
xunshi_info:'锁定技。①你手牌区内所有的多目标锦囊牌均视为花色为none的普【杀】。②你使用颜色为none的牌无距离和次数限制。③当你使用无颜色的牌选择目标后你令你的〖神裁〗的发动次数上限+1至多为5然后可以为此牌增加任意个目标。',
shen_zhangjiao:'神张角',

View File

@ -1547,6 +1547,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:'yijin',
trigger:{player:'phaseBegin'},
forced:true,
check:()=>false,
filter:function(event,player){
return !lib.skill.yijin.getKane(player).length;
},
@ -3152,7 +3153,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
'step 0'
player.chooseButton([get.prompt('spyanji'),[['zhengsu_leijin','zhengsu_bianzhen','zhengsu_mingzhi'],'vcard']]).set('ai',()=>Math.random());
player.chooseButton([get.prompt('spzhengjun'),[['zhengsu_leijin','zhengsu_bianzhen','zhengsu_mingzhi'],'vcard']]).set('ai',()=>Math.random());
'step 1'
if(result.bool){
player.logSkill('spzhengjun',player);
@ -5041,6 +5042,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:'yinlang',
trigger:{player:'phaseBegin'},
direct:true,
forced:true,
locked:false,
filter:function(event,player){
return !player.hasSkill('yaohu_round')&&game.hasPlayer(function(current){
return current.group&&current.group!='unknown';
@ -6568,11 +6571,30 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
game.log(player,'移去了所有','#g【备】');
player.unmarkSkill('xingqi');
player.addTempSkill('xinzifu_limit');
player.addMark('xinzifu_limit',1,false);
},
ai:{
neg:true,
combo:'xingqi',
},
subSkill:{
limit:{
charlotte:true,
markimage:'image/card/handcard.png',
intro:{
content:function(storage,player){
var num=-player.countMark('xinzifu_limit');
return '手牌上限'+num;
}
},
mod:{
maxHandcard:function(player,num){
return num-player.countMark('xinzifu_limit');
}
},
}
}
},
mibei:{
audio:2,
@ -17200,7 +17222,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ly_piliche:{
trigger:{source:'damageSource'},
check:function(event,player){
return get.attitude(player,event.player)*get.value(event.player.getDiscardableCards(player,'e'),event.player)>0;
return get.attitude(player,event.player)*get.value(event.player.getDiscardableCards(player,'e'),event.player)<=0;
},
filter:function(event,player){
return player!=event.player&&event.player.countDiscardableCards(player,'e')>0;
@ -17821,11 +17843,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp_chendong:['tw_chendong','sp_chendong','chendong'],
sp_jiangqing:['tw_jiangqing','sp_jiangqing','jiangqing'],
zhaotongzhaoguang:['dc_zhaotongzhaoguang','zhaotongzhaoguang'],
yangbiao:['yangbiao','dc_yangbiao'],
yangbiao:['yangbiao','dc_yangbiao','jsrg_yangbiao'],
qiaozhou:['yj_qiaozhou','qiaozhou'],
sunhanhua:['dc_qiaozhou','sunhanhua'],
sp_duyu:['sp_duyu','pk_sp_duyu'],
kongrong:['sp_kongrong','kongrong'],
kongrong:['sp_kongrong','jsrg_kongrong','kongrong'],
},
translate:{
liuzan:'手杀留赞',

File diff suppressed because it is too large Load Diff

View File

@ -438,6 +438,7 @@ window.noname_character_rank={
'lvdai',
'zhoufang',
'zhuzhi',
're_zhuzhi',
'guohuai',
'caorui',
'liuyu',
@ -576,6 +577,7 @@ window.noname_character_rank={
'yj_sufei',
'dc_ruiji',
'yuantanyuanxiyuanshang',
'yanghong',
],
bp:[
'chess_diaochan',
@ -905,6 +907,7 @@ window.noname_character_rank={
'xia_dianwei',
'xia_zhaoe',
'zhangkai',
'sunhong',
],
b:[
'diy_feishi',
@ -1433,6 +1436,8 @@ window.noname_character_rank={
'old_gaoshun',
'old_huanghao',
'old_liubiao',
'luoxian',
'ol_huban',
],
d:[
'lvmeng',
@ -1472,6 +1477,7 @@ window.noname_character_rank={
'tengfanglan',
'junk_lidian',
'junk_duanwei',
'std_panfeng',
],
rarity:{
legend:[
@ -2309,6 +2315,8 @@ window.noname_character_rank={
'zhangkai',
'wangguan',
'ol_yanwen',
'yanghong',
're_zhuzhi',
],
junk:[
'sunshao',
@ -2352,6 +2360,7 @@ window.noname_character_rank={
'junk_lidian',
'junk_duanwei',
'zerong',
'std_panfeng',
],
}
};

View File

@ -13,13 +13,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
refresh_yijiang2:['re_madai','re_wangyi','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','dc_bulianshi','xin_liubiao','re_xunyou','re_guanzhang'],
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','dc_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_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan','re_guotufengji','re_xiahoushi','re_liuchen','re_zhuzhi'],
refresh_yijiang6:['re_guohuanghou','re_sundeng'],
refresh_xinghuo:['re_duji','dc_gongsunzan','re_sp_taishici','re_caiyong','re_mazhong','re_wenpin'],
},
},
connect:true,
character:{
re_zhuzhi:['male','wu',4,['reanguo']],
dc_caozhi:['male','wei',3,['reluoying','dcjiushi']],
ol_huangzhong:['male','shu',4,['xinliegong','remoshi']],
re_wenpin:['male','wei',5,['rezhenwei'],['unseen']],
@ -157,6 +158,86 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_guohuai:['xiahouyuan','zhanghe'],
},
skill:{
//朱治
reanguo:{
audio:2,
enable:'phaseUse',
usable:1,
filterTarget:lib.filter.notMe,
content:function(){
'step 0'
if(target.isMinHandcard()){
target.draw();
event.h=true;
}
'step 1'
if(target.isMinHp()&&target.isDamaged()){
target.recover();
event.hp=true;
}
'step 2'
var equip=get.cardPile(function(card){
return get.type(card)=='equip'&&target.hasUseTarget(card);
});
if(target.isMinEquip()&&equip){
target.chooseUseTarget(equip,'nothrow','nopopup',true);
event.e=true;
}
'step 3'
game.updateRoundNumber();
if(!event.h&&player.isMinHandcard()){
player.draw();
event.h=true;
}
'step 4'
if(!event.hp&&player.isMinHp()&&player.isDamaged()){
player.recover();
event.hp=true;
}
'step 5'
if(!event.e&&player.isMinEquip()){
var equip=get.cardPile(function(card){
return get.type(card)=='equip'&&player.hasUseTarget(card);
});
if(equip){
player.chooseUseTarget(equip,'nothrow','nopopup',true);
event.e=true;
}
}
'step 6'
if(event.h&&event.hp&&event.e){
player.chooseCard('安国:是否重铸任意张牌?',[1,Infinity],(card,player)=>{
var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player);
if(mod!='unchanged') return mod;
return true;
},'he').set('ai',card=>{
return 6-get.value(card);
});
}
else event.finish();
'step 7'
if(result.bool){
player.loseToDiscardpile(result.cards);
player.draw(result.cards.length);
}
},
ai:{
threaten:1.65,
order:9,
result:{
player:function(player,target){
if(get.attitude(player,target)<=0){
if(target.isMinHandcard()||target.isMinEquip()||target.isMinHp()) return -1;
}
var num=0;
if(player.isMinHandcard()||target.isMinHandcard()) num++;
if(player.isMinEquip()||target.isMinEquip()) num++;
if((player.isMinHp()&&player.isDamaged())||(target.isMinHp()&&target.isDamaged())) num+=2.1;
return num;
}
}
}
},
//颜良文丑
olshuangxiong:{
audio:2,
@ -1044,7 +1125,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
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;
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;
@ -2251,7 +2332,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var history=player.getAllHistory('useCard');
var index;
if(event) index=history.indexOf(event)-1;
else index=history.length-2;
else index=history.length-1;
if(index>=0) return history[index];
return false;
},
@ -14195,6 +14276,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ol_yanwen:'界颜良文丑',
olshuangxiong:'双雄',
olshuangxiong_info:'①摸牌阶段结束时,你可以弃置一张牌。若如此做,你本回合内可以将一张与此牌颜色不同的牌当做【决斗】使用。②结束阶段,你从弃牌堆中获得本回合内对你造成伤害的所有牌。',
re_zhuzhi:'界朱治',
reanguo:'安国',
reanguo_info:'出牌阶段限一次。你可以选择一名其他角色若其手牌数为全场最少其摸一张牌体力值为全场最低其回复1点体力装备区内牌数为全场最少其随机使用一张装备牌。然后若该角色有未执行的效果且你满足条件你执行之。若你与其执行了全部分支你可以重铸任意张牌。',
refresh_standard:'界限突破·标',
refresh_feng:'界限突破·风',

View File

@ -28,21 +28,365 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sb_liubei:['male','shu',4,['sbrende','sbzhangwu','sbjijiang'],['zhu']],
sb_jiangwei:['male','shu','4/4/1',['sbtiaoxin','sbzhiji']],
sb_fazheng:['male','shu',3,['sbxuanhuo','sbenyuan']],
sb_chengong:['male','qun',3,['sbmingce','sbzhichi'],['unseen']],
sb_diaochan:['female','qun',3,['sblijian','sbbiyue'],['unseen']],
sb_yuanshao:['male','qun',4,['sbluanji','sbxueyi'],['zhu','unseen']],
sb_pangtong:['male','shu',3,['sblianhuan','sbniepan'],['unseen']],
sb_chengong:['male','qun',3,['sbmingce','sbzhichi']],
sb_diaochan:['female','qun',3,['sblijian','sbbiyue']],
sb_yuanshao:['male','qun',4,['sbluanji','sbxueyi'],['zhu']],
sb_pangtong:['male','shu',3,['sblianhuan','sbniepan']],
sb_sunce:['male','wu','2/4',['sbjiang','sbhunzi','sbzhiba'],['zhu','unseen']],
sb_daqiao:['female','wu',3,['sbguose','sbliuli'],['unseen']],
sb_liubiao:['male','qun',3,['sbzishou','sbzongshi'],['unseen']],
},
characterSort:{
sb:{
sb_zhi:['sb_sunquan','sb_zhouyu','sb_zhangjiao','sb_caocao','sb_zhenji','sb_liubei'],
sb_zhi:['sb_sunquan','sb_zhouyu','sb_zhangjiao','sb_caocao','sb_zhenji','sb_liubei','sb_daqiao','sb_liubiao'],
sb_shi:['sb_xuhuang','sb_machao','sb_fazheng','sb_chengong','sb_pangtong'],
sb_tong:['liucheng','sp_yangwan','sb_xiahoushi','sb_zhangfei','sb_zhaoyun'],
sb_tong:['liucheng','sp_yangwan','sb_xiahoushi','sb_zhangfei','sb_zhaoyun','sb_sunce'],
sb_yu:['sb_yujin','sb_lvmeng','sb_huangzhong','sb_huanggai','sb_zhouyu','sb_caoren','sb_ganning'],
sb_neng:['sb_huaxiong','sb_sunshangxiang','sb_jiangwei','sb_diaochan','sb_yuanshao'],
}
},
skill:{
//阿笨
sbjiang:{
audio:2,
trigger:{
player:'useCardToPlayered',
target:'useCardToTargeted',
},
shaRelated:true,
filter:function(event,player){
if(!(event.card.name=='juedou'||(event.card.name=='sha'&&get.color(event.card)=='red'))) return false;
return true;
},
frequent:true,
onremove:true,
group:['sbjiang_add','sbjiang_qiben'],
content:function(){
player.draw();
},
ai:{
effect:{
target:function(card,player,target){
if(card.name=='sha'&&get.color(card)=='red') return [1,0.6];
},
player:function(card,player,target){
if(card.name=='sha'&&get.color(card)=='red') return [1,1];
}
}
},
subSkill:{
add:{
audio:'sbjiang',
trigger:{player:'useCard2'},
direct:true,
filter:function(event,player){
if(event.card.name!='juedou') return false;
var info=get.info(event.card);
if(info.allowMultiple==false) return false;
if(event.targets&&!info.multitarget){
if(game.hasPlayer(function(current){
return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current)&&lib.filter.targetInRange(event.card,player,current);
})){
return true;
}
}
return false;
},
content:function(){
'step 0'
var prompt2='为'+get.translation(trigger.card)+'额外指定一个目标然后失去1点体力';
player.chooseTarget(get.prompt('sbjiang_add'),function(card,player,target){
var player=_status.event.player;
if(_status.event.targets.contains(target)) return false;
return lib.filter.targetEnabled2(_status.event.card,player,target);
}).set('prompt2',prompt2).set('ai',function(target){
var trigger=_status.event.getTrigger();
var player=_status.event.player;
var eff=get.effect(target,trigger.card,player,player);
if(player.hasZhuSkill('sbzhiba')&&!player.hasMark('sbjiang')) return eff;
if(eff+get.effect(player,{name:'losehp'},player)/8>0) return eff;
return 0;
}).set('targets',trigger.targets).set('card',trigger.card);
'step 1'
if(result.bool){
if(!event.isMine()&&!event.isOnline()) game.delayx();
event.targets=result.targets;
}
else{
event.finish();
}
'step 2'
if(event.targets){
player.logSkill('sbjiang_add',event.targets);
trigger.targets.addArray(event.targets);
player.loseHp();
}
}
},
qiben:{
audio:'sbjiang',
enable:'phaseUse',
viewAs:{name:'juedou'},
filterCard:true,
position:'h',
selectCard:-1,
prompt:function(){
var player=_status.event.player;
var limit=(player.hasMark('sbjiang')?(game.countPlayer(current=>{
return current.group=='wu'&&current!=player;
})+1):1);
return '出牌阶段限'+get.cnNumber(limit)+'次。你可以将所有手牌当【决斗】使用';
},
filter:function(event,player){
var limit=player.hasMark('sbjiang')?(game.countPlayer(current=>{
return current.group=='wu'&&current!=player;
})+1):1;
if((player.getStat('skill').sbjiang_qiben||0)>=limit) return false;
var hs=player.getCards('h');
if(!hs.length) 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 event.filterCard(get.autoViewAs({name:'juedou'},hs));
},
}
},
},
sbhunzi:{
audio:2,
trigger:{player:'dyingAfter'},
juexingji:true,
forced:true,
skillAnimation:true,
animationColor:'wood',
derivation:['sbyingzi','gzyinghun'],
content:function(){
'step 0'
player.awakenSkill('sbhunzi');
player.loseMaxHp();
'step 1'
player.changeHujia(2,null,true);
'step 2'
player.draw(3);
'step 3'
player.addSkillLog('sbyingzi');
player.addSkillLog('gzyinghun');
},
ai:{
threaten:function(player,target){
if(target.hp==1) return 2;
return 0.5;
},
maixie:true,
effect:{
target:function(card,player,target){
if(!target.hasFriend()||target.hp>1) return;
if(get.tag(card,'damage')==1&&(target.hasZhuSkill('sbzhiba')||player.countCards('hs','tao')+target.countCards('hs',['tao','jiu'])>0)&&
!target.isTurnedOver()&&_status.currentPhase!=target&&get.distance(_status.currentPhase,target,'absolute')<=3) return [0.5,1];
}
}
}
},
sbzhiba:{
audio:2,
trigger:{player:'dying'},
filter:function(event,player){
if(!player.hasZhuSkill('sbzhiba')) return false;
return player.hp<=0;
},
zhuSkill:true,
limited:true,
skillAnimation:true,
animationColor:'wood',
content:function(){
'step 0'
player.awakenSkill('sbzhiba');
var num=game.countPlayer(current=>current.group=='wu');
if(num>0) player.recover(num);
player.addMark('sbjiang',1,false);
event.targets=game.filterPlayer(current=>{
return current.group=='wu'&&current!=player;
}).sortBySeat(_status.currentPhase);
player.addTempSkill('sbzhiba_draw');
'step 1'
var target=targets.shift();
target.damage('nosource');
if(targets.length) event.redo();
},
subSkill:{
draw:{
trigger:{global:'dieAfter'},
filter:function(event,player){
return event.getParent(4).name=='sbzhiba';
},
forced:true,
charlotte:true,
content:function(){
player.draw(3);
}
}
}
},
//大乔
sbguose:{
audio:2,
enable:'phaseUse',
usable:4,
discard:false,
lose:false,
delay:false,
filter:function(event,player){
return player.countCards('hes',{suit:'diamond'})>0;
},
position:'hes',
filterCard:{suit:'diamond'},
selectCard:[0,1],
filterTarget:function(card,player,target){
if(!ui.selected.cards.length){
if(target.hasJudge('lebu')) return true;
return false;
}
if(player==target) return false;
var mod=game.checkMod(ui.selected.cards[0],player,'unchanged','cardEnabled2',player);
if(!mod) return false;
return player.canUse({name:'lebu',cards:ui.selected.cards},target);
},
check:function(card){
return 7-get.value(card);
},
content:function(){
'step 0'
if(target.hasJudge('lebu')){
target.discard(target.getJudge('lebu'));
}
else{
player.useCard({name:'lebu'},target,cards).audio=false;
}
'step 1'
player.draw();
player.chooseToDiscard(true,'he','国色:请弃置一张牌');
},
ai:{
result:{
target:function(player,target){
if(target.hasJudge('lebu')) return -get.effect(target,{name:'lebu'},player,target);
return get.effect(target,{name:'lebu'},player,target);
}
},
order:9,
}
},
sbliuli:{
audio:2,
inherit:'liuli',
group:'sbliuli_heart',
subSkill:{
heart:{
trigger:{player:'logSkill'},
filter:function(event,player){
if(event.skill!='sbliuli') return false;
if(player.hasSkill('sbliuli_used')) return false;
var evt=event.log_event;
return player.hasHistory('lose',evtx=>{
return evtx.getParent(2)==evt&&get.suit(evtx.cards[0])=='heart';
});
},
content:function(){
'step 0'
var sourcex=trigger.log_event.getTrigger().player;
player.chooseTarget('流离:是否令一名不为'+get.translation(sourcex)+'的其他角色获得“流离”标记?',(card,player,target)=>{
return target!=player&&target!=_status.event.sourcex;
}).set('ai',target=>{
return get.attitude(_status.event.player,target);
}).set('sourcex',sourcex);
'step 1'
if(result.bool){
var target=result.targets[0];
player.line(target,'green');
game.player.forEach(i=>i.removeSkill('sbliuli_dangxian'));
target.addSkill('sbliuli_dangxian');
player.addTempSkill('sbliuli_used');
}
}
},
used:{charlotte:true},
dangxian:{
trigger:{player:'phaseBegin'},
forced:true,
charlotte:true,
mark:true,
marktext:'流',
intro:{content:'回合开始时,执行一个额外的出牌阶段'},
content:function(){
var next=player.phaseUse();
event.next.remove(next);
trigger.next.push(next);
player.removeSkill('sbliuli_dangxian');
}
}
}
},
//刘表
sbzishou:{
audio:2,
trigger:{global:'phaseJieshuBegin'},
filter:function(event,player){
if(player==event.player) return false;
if(!event.player.countCards('he')) return false;
return !event.player.hasAllHistory('sourceDamage',evt=>{
return evt.player==player;
})&&!event.player.hasAllHistory('damage',evt=>{
return evt.source==player;
});
},
forced:true,
logTarget:'player',
content:function(){
'step 0'
trigger.player.chooseCard(true,get.translation(player)+'对你发动了【自守】','交给其一张牌','he');
'step 1'
if(result.bool){
trigger.player.give(result.cards,player);
}
},
ai:{
threaten:3,
}
},
sbzongshi:{
audio:2,
trigger:{player:'damageEnd'},
filter:function(event,player){
if(!event.source||!event.source.isIn()) return false;
return !player.getStorage('sbzongshi').contains(event.source);
},
forced:true,
onremove:true,
logTarget:'source',
content:function(){
trigger.source.chooseToDiscard(true,trigger.source.countCards('h'));
player.markAuto('sbzongshi',[trigger.source]);
},
intro:{
content:'已扒过目标:$'
},
ai:{
threaten:0.5,
effect:{
target:function(card,player,target,current){
if(!get.tag(card,'damage')) return;
var cards=player.getCards('h');
if(!target.hasFriend()) return;
var value=cards.reduce((p,c)=>{
return p+get.value(c);
});
if(cards.length>5||value>5*cards.length) return [1,0,0,-cards.length/2];
return [1,0,0,-0.5];
}
}
}
},
//貂蝉
sblijian:{
audio:2,
@ -66,6 +410,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(target.canUse(card,targetx)) target.useCard(card,targetx);
},
ai:{
threaten:3,
order:7,
result:{target:-1}
}
@ -246,10 +591,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
if(!player.needsToDiscard(-1)){
if(targets.length>=7){
if(num<2) return 0;
if(num<1) return 0;
}
else if(targets.length>=5){
if(num<1.5) return 0;
if(num<0.5) return 0;
}
}
return 6-get.value(card);
@ -364,6 +709,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1'
if(!trigger.card.storage) trigger.card.storage={};
trigger.card.storage.sblianhuan=true;
trigger._sblianhuan=true;
player.addTempSkill('sblianhuan_discard','phaseUseAfter');
}
},
@ -402,7 +748,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt('sblianhuan_add'),'为'+get.translation(trigger.card)+'额外指定任意个目标',function(card,player,target){
player.chooseTarget(get.prompt('sblianhuan_add'),'为'+get.translation(trigger.card)+'额外指定任意个目标',[1,Infinity],function(card,player,target){
return !_status.event.sourcex.contains(target)&&player.canUse(_status.event.card,target);
}).set('sourcex',trigger.targets).set('ai',function(target){
var player=_status.event.player;
@ -427,7 +773,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
locked:false,
popup:false,
filter:function(event,player){
return event.isFirstTarget&&event.card.name=='tiesuo'&&player.storage.sblianhuan;
return event.isFirstTarget&&event.card.name=='tiesuo'&&player.storage.sblianhuan&&!event.getParent()._sblianhuan;
},
content:function(){
'step 0'
@ -1868,7 +2214,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var card=result.cards[0];
target.showCards(card,get.translation(target)+'【洛神】展示');
if(get.color(card)=='black'){
player.gain(card,target,'giveAuto','bySelf').gaintag.add('sbluoshen');
player.gain(card,target,'give','bySelf').gaintag.add('sbluoshen');
}
else if(get.color(card)=='red'){
target.discard(card);
@ -2478,7 +2824,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//周瑜
sbyingzi:{
audio:2,
audioname:['heqi','sunce','gexuan','re_sunben','re_sunce','re_heqi'],
audioname:['sb_sunce'],
trigger:{player:'phaseDrawBegin2'},
forced:true,
getNum:function(player){
@ -3780,6 +4126,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!player.storage.sblianhuan) str+='③当你使用【铁索连环】时你可以失去1点体力然后当此牌指定第一个目标后你随机弃置每名不处于连环状态的目标角色一张手牌。';
else str+='③当你使用【铁索连环】时,你可以额外指定任意名角色为目标。④当你使用【铁索连环】指定第一个目标后,你随机弃置每名不处于连环状态的目标角色一张手牌。';
return str;
},
sbjiang:function(player){
var str='①当你使用【决斗】或红色【杀】指定目标后或当你成为【决斗】或红色【杀】的目标后你摸一张牌。②当你使用【决斗】时你可以额外指定一名目标然后你失去1点体力。③出牌阶段限';
if(player.countMark('sbjiang')) str+='X次。你可以将所有手牌当【决斗】使用X为场上其他吴势力角色数+1。';
else str+='一次。你可以将所有手牌当【决斗】使用。';
return str;
}
},
translate:{
@ -3926,6 +4278,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sblianhuan_lv2_info:'①出牌阶段,你可以重铸一张♣手牌。②出牌阶段限一次。你可以将一张♣手牌当【铁索连环】使用。③当你使用【铁索连环】时,你可以额外指定任意名角色为目标。④当你使用【铁索连环】指定第一个目标后,你随机弃置每名不处于连环状态的目标角色一张手牌。',
sbniepan:'涅槃',
sbniepan_info:'限定技。当你处于濒死状态时你可以弃置区域里的所有牌摸三张牌将体力回复至3点复原武将牌然后修改〖连环〗。',
sb_sunce:'谋孙策',
sbjiang:'激昂',
sbjiang_info:'①当你使用【决斗】或红色【杀】指定目标后或当你成为【决斗】或红色【杀】的目标后你摸一张牌。②当你使用【决斗】时你可以额外指定一名目标然后你失去1点体力。③出牌阶段限一次。你可以将所有手牌当【决斗】使用。',
sbhunzi:'魂姿',
sbhunzi_info:'觉醒技。当你脱离濒死状态后你减1点体力上限获得2点护甲摸三张牌。然后你获得〖英姿〗和〖英魂〗。',
sbzhiba:'制霸',
sbzhiba_info:'主公技限定技。当你进入濒死状态时你可以回复X点体力并修改〖激昂③〗为“出牌阶段限X次”X为场上其他吴势力角色数+1。然后其他吴势力角色依次受到1点无来源伤害且当有角色因此死亡后你摸三张牌。',
sb_daqiao:'谋大乔',
sbguose:'国色',
sbguose_info:'出牌阶段限四次。你可以选择一项1.将一张♦牌当【乐不思蜀】使用2.弃置场上一张【乐不思蜀】。然后你摸一张牌并弃置一张牌。',
sbliuli:'流离',
sbliuli_info:'当你成为【杀】的目标时,你可以弃置一张牌并选择你攻击范围内的一名不为此【杀】使用者的角色,将此【杀】转移给该角色。若你以此法弃置了♥牌,则你可以令一命不为此【杀】使用者的其他角色获得“流离”标记,且移去场上所有其他的“流离”(每回合限一次)。有“流离”的角色回合开始时,其移去其“流离”并执行一个额外的出牌阶段。',
sb_liubiao:'谋刘表',
sbzishou:'自守',
sbzishou_info:'锁定技。其他角色的结束阶段,若其与你于本局游戏内均未对对方造成过伤害,其须交给你一张牌。',
sbzongshi:'宗室',
sbzongshi_info:'锁定技。每名角色限一次。当你受到伤害后,你令伤害来源弃置所有手牌。',
sb_zhi:'谋攻篇·知',
sb_shi:'谋攻篇·识',

View File

@ -5082,7 +5082,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
gzyinghun:{
audio:'yinghun',
audioname:['re_sunjian','sunce','re_sunben','re_sunce','ol_sunjian'],
audioname:['re_sunjian','sunce','re_sunben','re_sunce','ol_sunjian','sb_sunce'],
trigger:{player:'phaseZhunbeiBegin'},
filter:function(event,player){
return player.getDamagedHp()>0;

View File

@ -28,6 +28,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
sunhong:['male','wu',3,['olxianbi','olzenrun']],
luoxian:['male','shu',4,['oldaili']],
ol_huban:['male','wei',4,['olhuiyun']],
wangguan:['male','wei',3,['olmiuyan','olshilu']],
ol_zhangyì:['male','shu',4,['oldianjun','olkangrui']],
ol_zhujun:['male','qun',4,['olcuipo']],
@ -184,6 +187,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//kaisa:["male","western",4,["zhengfu"]],
},
characterIntro:{
luoxian:'罗宪218年—270年字令则荆州襄阳今湖北襄阳人。西晋开国将领巴东太守郡府在永安白帝城。于蜀汉灭亡后降魏成功抵御孙吴的入侵守住入魏国的要冲永安。后仕晋官至冠军将军、假节封西鄂县侯。泰始六年270年去世谥烈侯。',
sunhong:'孙弘—252年三国时期吴国大臣扬州会稽今浙江省绍兴市人。官至吴国中书令、少傅。鲁王孙霸与太子孙和各植党羽孙弘即依附孙霸。孙权病笃而太子年少于是以孙弘领少傅。孙权临终召他与诸葛恪、孙峻等嘱以后事孙弘与诸葛恪同为顾命大臣。孙权死后孙弘因素来与诸葛恪不和怕为所治故而隐瞒了孙权的死讯欲矫诏除掉诸葛恪被孙峻告发。后诸葛恪请孙弘议事于座中将其诛杀。',
wangguan:'《三国演义》中虚构人物历史上不曾记载。在114回出场曾为邓艾手下参谋献反间计与邓艾被姜维识破兵败自投江而死。',
maxiumatie:'马休212年马铁212年。两人均为扶风茂陵今陕西兴平马腾之子马超之弟。马腾遭韩遂进攻乃携马休、马铁等入京受职。马休被封为奉车都尉马铁被封为骑都尉。后在邺城居住。因兄马超反两人被曹操夷灭。',
dongtuna:'董荼那,小说《三国演义》及其衍生作品中的角色,南蛮王孟获属下大将,第二洞元帅;与阿会喃等人一起担任孟获的援军出征,但是被俘虏,又被诸葛亮释放,再次出战时,被唾骂不知羞耻,面红耳赤的退军。后同阿会喃共同绑架孟获献于蜀军,却被诸葛亮在其二人与孟获的重要性间权衡后出卖了他们,放走了孟获,使其为孟获所杀。',
@ -671,6 +676,324 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
//孙弘
olxianbi:{
audio:2,
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
return !player.getStorage('olzenrun').contains(target)&&target.countCards('e')!=player.countCards('h');
},
content:function(){
'step 0'
var del=target.countCards('e')-player.countCards('h');
if(del==0) event.finish();
else if(del>0){
player.draw(Math.min(5,del));
}
else{
player.chooseToDiscard('险诐:弃置'+get.cnNumber(-del)+'张手牌',-del,'h',true);
player.addTempSkill('olxianbi_gain');
}
},
ai:{
order:5,
result:{
player:function(player,target){
return player.countCards('h',card=>{
return get.value(card)>6;
})>=target.countCards('e')?0:1;
}
}
},
subSkill:{
gain:{
trigger:{
player:'loseAfter',
},
filter:function(event,player){
return event.getParent(3).name=='olxianbi';
},
forced:true,
charlotte:true,
popup:false,
content:function(){
var cards=[],cards2=trigger.cards;
for(var cardx of cards2){
var type=get.type2(cardx,player);
var card=get.discardPile(function(card){
return get.type(card,false)==type&&!cards2.contains(card)&&!cards.contains(card);
});
if(card) cards.push(card);
}
if(cards.length) player.gain(cards,'gain2');
}
}
}
},
olzenrun:{
audio:2,
trigger:{player:'drawBefore'},
filter:function(event,player){
return !player.hasSkill('olzenrun_used')&&game.hasPlayer(current=>{
return !player.getStorage('olzenrun').contains(current)&&current!=player&&current.hasCard(function(card){
return lib.filter.canBeGained(card,player,current);
},'he')
});
},
direct:true,
check:function(event,player){
return true;
},
content:function(){
'step 0'
var num=trigger.num;
player.chooseTarget(get.prompt('olzenrun'),'改为获得一名其他角色'+get.cnNumber(num)+'张牌',(card,player,target)=>{
return !player.getStorage('olzenrun').contains(target)&&target!=player&&target.hasCard(function(card){
return lib.filter.canBeGained(card,player,target);
},'he')
}).set('ai',target=>{
return get.attitude(_status.event.player,target)/5+Math.random()+2.5;
});
'step 1'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('olzenrun',target);
player.addTempSkill('olzenrun_used',['phaseZhunbeiAfter','phaseJudgeAfter','phaseDrawAfter','phaseUseAfter','phaseDiscardAfter','phaseJieshuAfter']);
trigger.cancel();
player.gainPlayerCard(target,trigger.num,'he',true);
}
'step 2'
if(result.bool){
var cards=result.cards;
var num=cards.length;
event.num=num;
target.chooseControl().set('choiceList',[
'摸'+get.cnNumber(num)+'张牌',
'令其不能再对你发动〖险诐〗和〖谮润〗'
]).set('prompt',get.translation(player)+'对你发动了【谮润】,请选择一项').set('ai',()=>{
if(_status.event.bool) return 0;
return 1;
}).set('bool',get.attitude(target,player)>0||num==1&&Math.random()<0.5||num>=2);
}
else event.finish();
'step 3'
game.log(target,'选择了','#y'+result.control);
if(result.index==0){
target.draw(num);
}
else{
player.markAuto('olzenrun',[target]);
}
},
subSkill:{
used:{
charlotte:true,
}
}
},
//罗宪
oldaili:{
audio:2,
trigger:{global:'phaseEnd'},
filter:function(event,player){
return player.countCards('h',card=>{
return card.hasGaintag('oldaili_tag');
})%2==0;
},
group:'oldaili_record',
content:function(){
player.turnOver();
player.draw(3,'visible').gaintag=['oldaili_tag'];
},
mod:{
aiValue:function(player,card,num){
if(get.itemtype(card)!='card'||!card.hasGaintag('oldaili_tag')) return;
if(get.distance(_status.currentPhase,player,'absolute')==1&&!player.isTurnedOver()) return;
if(player.countCards('h',card=>{
return card.hasGaintag('oldaili_tag');
})%2==0&&!ui.selected.cards.some(card=>{
return card.hasGaintag('oldaili_tag');
})){
return num/10;
}
},
aiUseful:function(){
return lib.skill.oldaili.mod.aiValue.apply(this,arguments);
},
},
subSkill:{
record:{
trigger:{player:'showCardsEnd'},
forced:true,
charlotte:true,
popup:false,
firstDo:true,
content:function(){
game.broadcastAll(function(cards){
cards.forEach(card=>card.addGaintag('oldaili_tag'));
},trigger.cards);
}
}
}
},
//胡班
olhuiyun:{
audio:2,
enable:'phaseUse',
viewAs:{
name:'huogong',
storage:{olhuiyun:true},
},
filterCard:true,
position:'hes',
onuse:function(links,player){
player.addTempSkill('olhuiyun_after');
player.addTempSkill('olhuiyun_record');
},
ai:{
effect:{
player:function(card,player,target){
if(get.attitude(player,target)>0&&card&&card.name=='huogong'&&card.storage&&card.storage.olhuiyun&&!player.hasSkill('olhuiyun_3')) return [0,0.5,0,0.5];
}
}
},
subSkill:{
after:{
audio:'olhuiyun',
trigger:{global:'useCardAfter'},
charlotte:true,
forced:true,
direct:true,
filter:function(event,player){
return event.card.name=='huogong'&&event.card.storage&&event.card.storage.olhuiyun&&event.targets.some(i=>i.isIn());
},
content:function(){
'step 0'
var choices=[];
var choiceList=[
'使用展示牌,然后重铸所有手牌',
'使用一张手牌,然后重铸展示牌',
'摸一张牌'
];
for(var i=1;i<=3;i++){
if(!player.hasSkill('olhuiyun_'+i)) choices.push('选项'+get.cnNumber(i,true));
else choiceList[i-1]='<span style="opacity:0.5">'+choiceList[i-1]+'</span>';
}
if(!choices.length) event.finish();
else{
player.logSkill('olhuiyun_after');
player.chooseControl(choices).set('choiceList',choiceList).set('prompt','晖云:选择一项,令'+get.translation(trigger.targets)+'可以选择执行').set('ai',()=>{
return _status.event.choice;
}).set('choice',function(){
if(choices.length==1) return choices[0];
var choicesx=choices.slice();
if(get.attitude(player,trigger.targets[0])>0&&choices.contains('选项三')) return '选项三';
choicesx.remove('选项三');
return choicesx.randomGet();
}());
}
'step 1'
if(result.control!='cancel2'){
var index=['选项一','选项二','选项三'].indexOf(result.control)+1;
event.index=index;
game.log(player,'选择了','#y'+result.control);
player.addTempSkill('olhuiyun_'+index,'roundStart');
event.targets=trigger.targets.slice(0);
}
else event.finish();
'step 2'
var target=targets.shift();
event.target=target;
if(target.isIn()){
var cards=target.getCards('h',card=>card.hasGaintag('olhuiyun_tag'));
if(event.index==3){
target.chooseBool('是否摸一张牌?').set('ai',()=>true);
event.goto(5);
}
else if(cards.length){
if(event.index==1){
target.chooseToUse({
filterCard:function(card){
if(get.itemtype(card)!='card'||!card.hasGaintag('olhuiyun_tag')) return false;
return lib.filter.filterCard.apply(this,arguments);
},
prompt:'是否使用一张展示牌,然后重铸所有手牌?'
});
}
else{
target.chooseToUse({
filterCard:function(card){
if(get.itemtype(card)!='card'||get.position(card)!='h'&&get.position(card)!='s') return false;
return lib.filter.filterCard.apply(this,arguments);
},
prompt:'是否使用一张手牌,然后重铸展示牌?'
});
event.goto(4);
}
}
else event.goto(6);
}
else event.goto(6);
'step 3'
if(result.bool){
var hs=target.getCards('h',card=>{
var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player);
if(mod!='unchanged') return mod;
return true;
});
if(hs.length){
target.loseToDiscardpile(hs);
target.draw(hs.length);
}
}
event.goto(6);
'step 4'
if(result.bool){
var hs=target.getCards('h',card=>{
if(!card.hasGaintag('olhuiyun_tag')) return false;
var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player);
if(mod!='unchanged') return mod;
return true;
});
if(hs.length){
target.loseToDiscardpile(hs);
target.draw(hs.length);
}
}
event.goto(6);
'step 5'
if(result.bool){
target.draw();
}
'step 6'
if(targets.length) event.goto(2);
}
},
record:{
trigger:{global:'showCardsEnd'},
forced:true,
charlotte:true,
popup:false,
firstDo:true,
filter:function(event,player){
if(event.getParent().name!='huogong') return false;
var card=event.getParent(2).card;
if(card&&card.storage&&card.storage.olhuiyun) return true;
return false;
},
content:function(){
game.broadcastAll(function(cards){
cards.forEach(card=>card.addGaintag('olhuiyun_tag'));
},trigger.cards);
}
},
1:{charlotte:true},
2:{charlotte:true},
3:{charlotte:true},
}
},
//王瓘
olmiuyan:{
audio:2,
@ -10472,22 +10795,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
},
subSkill:{
count:{
forced:true,
silent:true,
popup:false,
trigger:{
player:"loseEnd",
},
filter:function(event,player){
return event.cards2&&event.cards2.length>0;
},
content:function (){
lib.skill.xinshanjia.sync(player);
},
},
},
audio:"shanjia",
trigger:{
player:"phaseUseBegin",
@ -10520,16 +10827,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.chooseToDiscard('he',true,num).ai=get.disvalue;
}
'step 2'
var bool=true;
var bool1=true,bool2=true;
if(result.cards){
var cards=result.cards;
for(var i=0;i<result.cards.length;i++){
if(['basic','trick'].contains(get.type(result.cards[i],'trick',result.cards[i].original=='h'?player:false))){
bool=false;break;
}
var type=get.type(result.cards[i],'trick',result.cards[i].original=='h'?player:false);
if(type=='basic') bool1=false;
if(type=='trick') bool2=false;
}
}
if(bool){
player.chooseUseTarget({name:'sha'},'是否视为使用一张【杀】?',false,'nodistance');
if(bool1) player.addTempSkill('xinshanjia_sha','phaseUseAfter');
if(bool2) player.addTempSkill('xinshanjia_nodis','phaseUseAfter');
if(bool1&&bool2){
player.chooseUseTarget({name:'sha'},'是否视为使用一张【杀】?',false);
}
},
ai:{
@ -10545,6 +10855,40 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
subSkill:{
count:{
forced:true,
silent:true,
popup:false,
trigger:{
player:"loseEnd",
},
filter:function(event,player){
return event.cards2&&event.cards2.length>0;
},
content:function (){
lib.skill.xinshanjia.sync(player);
},
},
sha:{
mark:true,
charlotte:true,
intro:{content:'使用【杀】的次数上限+1'},
mod:{
cardUsable:function(card,player,num){
if(card.name=='sha') return num+1;
}
}
},
nodis:{
mark:true,
charlotte:true,
intro:{content:'使用牌无距离限制'},
mod:{
targetInRange:()=>true
}
}
}
},
//OL马超
ol_shichou:{
@ -16635,30 +16979,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
filter:function(event,player){
if(event.targets.length!=1||!['sha','juedou'].contains(event.card.name)) return false;
var evt2=event.getParent('phaseUse');
if(evt2.player!=player) return false;
return player.getHistory('useCard',function(evt){
return evt.card.name==event.card.name&&evt.getParent('phaseUse')==evt2;
return evt.card.name==event.card.name;
}).indexOf(event.getParent())==0;
},
direct:true,
content:function(){
'step 0'
player.chooseControl('draw_card','加伤害','cancel2').set('prompt',get.prompt2('fengpo'));
var str1=get.translation(trigger.card),str2=get.translation(trigger.target);
player.chooseControl('摸X加1伤','摸1加X伤','cancel2').set('prompt',get.prompt('fengpo',trigger.target)).set('prompt2','你可以选择一项1.摸X张牌令'+str1+'的伤害+12.摸一张牌,令'+str1+'的伤害+XX为'+str2+'的♦牌的数量)。');
'step 1'
if(result.control&&result.control!='cancel2'){
player.logSkill('fengpo',trigger.target);
var nd=trigger.target.countCards('h',{suit:'diamond'});
if(result.control=='draw_card'){
player.draw(nd);
}
else{
var trigger2=trigger.getParent();
if(typeof trigger2.baseDamage!='number'){
var nd=trigger.target.countCards('he',{suit:'diamond'});
var draw=1,damage=1;
if(result.control=='摸X加1伤') draw=nd;
else damage=nd;
player.draw(draw);
var trigger2=trigger.getParent();
if(typeof trigger2.baseDamage!='number'){
trigger2.baseDamage=1;
}
trigger2.baseDamage+=nd;
}
trigger2.baseDamage+=damage;
}
}
},
@ -17545,6 +17887,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
if(!target.storage.rezhoufu2_markcount) target.storage.rezhoufu2_markcount=0;
target.addToExpansion(cards,player,'give').gaintag.add('rezhoufu2');
target.addSkill('rezhoufu_judge');
},
ai:{
order:1,
@ -17552,18 +17895,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target:-1,
},
},
group:['rezhoufu_judge','rezhoufu_losehp'],
group:['rezhoufu_losehp'],
subSkill:{
judge:{
audio:'zhoufu',
trigger:{global:'judgeBefore'},
trigger:{player:'judgeBefore'},
forced:true,
charlotte:true,
filter:function(event,player){
return !event.directresult&&event.player.getExpansions('rezhoufu2').length;
return !event.directresult&&player.getExpansions('rezhoufu2').length;
},
logTarget:'player',
content:function(){
var cards=[trigger.player.getExpansions('rezhoufu2')[0]];
var cards=[player.getExpansions('rezhoufu2')[0]];
trigger.directresult=cards[0];
},
},
@ -21395,11 +21738,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dingfeng:['dingfeng','tw_dingfeng','old_dingfeng'],
zumao:['zumao','tw_zumao'],
beimihu:['tw_beimihu','beimihu'],
panfeng:['re_panfeng','panfeng'],
panfeng:['re_panfeng','panfeng','std_panfeng'],
sunluyu:['sunluyu','re_sunluyu'],
jin_simazhao:['jin_simazhao','simazhao','sp_simazhao'],
jin_wangyuanji:['jin_wangyuanji','wangyuanji','sp_wangyuanji'],
wangyun:['re_wangyun','wangyun','dc_wangyun','old_wangyun','pe_wangyun'],
wangyun:['re_wangyun','wangyun','dc_wangyun','jsrg_wangyun','old_wangyun','pe_wangyun'],
zhangliang:['re_zhangliang','zhangliang'],
lingju:['lingju','old_lingju'],
guansuo:['guansuo','ol_guansuo'],
@ -21634,7 +21977,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
daoshu_info:'出牌阶段限一次。你可以选择一个花色并获得一名其他角色的一张手牌。若此牌花色与你选择的相同则你对其造成1点伤害且你〖盗书〗于此阶段内可使用的次数上限+1。否则你须交给其一张与此牌花色不同的手牌没有则展示手牌。',
xinshanjia:"缮甲",
xinshanjia_info:"出牌阶段开始时你可以摸三张牌然后弃置3-X张牌(X为你本局游戏内不因使用而失去过的装备牌的数目且至多为3)。若你没有以此法弃置基本牌或锦囊牌,则你可以视为使用了一张无距离限制且不计入出牌阶段使用次数的【杀】。",
xinshanjia_info:"出牌阶段开始时你可以摸三张牌然后弃置3-X张牌(X为你本局游戏内不因使用而失去过的装备牌的数目且至多为3)。若你没有以此法弃置:基本牌,此阶段你使用【杀】的次数上限+1锦囊牌此阶段你使用牌无距离限制基本牌或锦囊牌你可以视为使用一张【杀】。",
"new_meibu":"魅步",
"new_meibu_info":"其他角色的出牌阶段开始时若你在其攻击范围内你可以弃置一张牌令该角色于本回合内获得技能〖止息〗。若你以此法弃置的牌不是【杀】或黑色锦囊牌则本回合其与你的距离视为1。",
"new_mumu":"穆穆",
@ -21795,7 +22138,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinyongsi_info:'锁定技摸牌阶段你令额定摸牌数改为XX为势力数弃牌阶段开始时你选择一项1.弃置一张牌2.失去1点体力。',
xiehui:'黠慧',
xiehui2:'黠慧',
xiehui_info:'锁定技,你的黑色牌不计入手牌上限;其他角色获得你的黑色牌时,其不能使用、打出、弃置这些牌直到其体力值为止。',
xiehui_info:'锁定技,你的黑色牌不计入手牌上限;其他角色获得你的黑色牌时,其不能使用、打出、弃置这些牌直到其体力值减为止。',
lianzhu:'连诛',
lianzhu_info:'出牌阶段限一次你可以展示并交给一名其他角色一张牌若此牌为黑色其选择一项1.你摸两张牌2.弃置两张牌',
shanjia:'缮甲',
@ -21932,7 +22275,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
bushi_info:'当你受到1点伤害后或其他角色受到你造成的1点伤害后受到伤害的角色可以获得你的一张「米」',
midao_info:'一名角色的判定牌生效前,你可以打出一张「米」代替之。',
fengpo:'凤魄',
fengpo_info:'每种牌名各限一次。当你于出牌阶段内使用的第一张【杀】或【决斗】指定目标后若目标角色数为1你可以选择一项1.摸X张牌2.令此牌的伤害值基数+XX为其手牌中♦牌的数量)',
fengpo_info:'每种牌名各限一次。当你每回合使用的第一张【杀】或【决斗】指定目标后若目标角色数为1你可以选择一项1.摸X张牌,令此牌的伤害值基数+12.摸一张牌,令此牌的伤害值基数+XX为其♦牌的数量',
chenqing:'陈情',
chenqing_info:'每轮限一次,当一名角色处于濒死状态时,你可以令另一名其他角色摸四张牌,然后其弃置四张牌。若其以此法弃置的四张牌花色各不相同,则视为该角色对濒死的角色使用一张【桃】。',
mozhi:'默识',
@ -22072,7 +22415,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
oldxiemu_info:'当你成为其他角色使用的黑色牌的目标后,你可以弃置一张【杀】,然后摸两张牌。',
spmengjin_info:'当你使用【杀】指定目标后,你可以弃置目标角色的一张牌。',
fenxun_info:'出牌阶段限一次你可以弃置一张牌并选择一名其他角色你于本回合内至其的距离视为1。',
rezhoufu_info:'出牌阶段限一次,你可以用一张牌对一名其他角色施“咒”。当有“咒”的角色判定时,将“咒”作为判定牌;一名角色的回合结束时你令本回合移除过“咒”的角色各失去1点体力',
rezhoufu_info:'①出牌阶段限一次。你可以用一张牌对一名其他角色施“咒”,且当其判定时,将“咒”作为判定牌。②一名角色的回合结束时你令本回合移除过“咒”的角色各失去1点体力',
reyingbing_info:'锁定技,有“咒”的角色使用与“咒”颜色相同的牌时,你摸一张牌;若这是你第二次因该“咒”摸牌,则你获得该"咒"。',
yingbin_info:'锁定技,有“咒”的角色使用与“咒”花色相同的牌时,你摸一张牌;当你因同一名角色的同一张“咒”的效果摸第二张牌时,移去该“咒”。',
zhoufu_info:'出牌阶段限一次你可以将一张手牌置于一名没有“咒”的其他角色的武将牌旁称为“咒”。当有“咒”的角色判定时其改为将“咒”作为判定牌一名角色的回合结束时若有角色于此回合因判定而移除过“咒”则你令这些角色各失去1点体力。',
@ -22497,7 +22840,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
olmiuyan_info:'转换技。你可以将一张黑色牌当做【火攻】使用。然后若此技能:处于阳状态且此牌造成了伤害,则你获得此阶段内所有被展示过的手牌;处于阴状态且未造成伤害,则你令此技能失效直到本轮结束。',
olshilu:'失路',
olshilu_info:'锁定技。当你受到伤害后你摸X张牌X为你的体力值且至多为5。然后你展示攻击范围内一名角色的一张手牌令此牌的牌名视为【杀】。',
ol_huban:'OL胡班',
olhuiyun:'晖云',
olhuiyun_tag:'invisible',
olhuiyun_info:'每轮每项各限一次。你可以将一张牌当【火攻】使用。此牌结算结束后你选择一项令目标角色选择是否执行1.使用展示的牌然后重铸所有手牌2.使用一张手牌然后重铸展示牌3.摸一张牌。',
sunhong:'孙弘',
olxianbi:'险诐',
olxianbi_info:'出牌阶段限一次。你可以选择一名角色,然后将手牌摸至或弃置至等同于其装备区里的牌数(至多摸五张),且当你因此弃置一张牌后,你随机获得弃牌堆中的另一张类型相同的牌。',
olzenrun:'谮润',
olzenrun_info:'每阶段限一次。当你摸牌时你可以改为获得一名其他角色等量的牌然后其选择一项1.摸等量的牌2.令你本局游戏不能再对其发动〖险诐〗和〖谮润〗。',
luoxian:'罗宪',
oldaili:'带砺',
oldaili_tag:'带砺',
oldaili_info:'一名角色的回合结束时,若你被展示过的手牌数为偶数,则你可以翻面,摸三张牌并展示之。',
sp_tianji:'天极·皇室宗亲',
sp_sibi:'四弼·辅国文曲',
sp_tianzhu:'天柱·势冠一方',

File diff suppressed because it is too large Load Diff

View File

@ -8,9 +8,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
standard_2008:["caocao","simayi","xiahoudun","zhangliao","xuzhu","guojia","zhenji","liubei","guanyu","zhangfei","zhugeliang","zhaoyun","machao","huangyueying","sunquan","ganning","lvmeng","huanggai","zhouyu","daqiao","luxun","sunshangxiang","huatuo","lvbu","diaochan","re_lidian"],
standard_2013:["huaxiong","re_yuanshu","re_xushu"],
standard_2019:["gongsunzan","xf_yiji"],
standard_2023:["std_panfeng"],
},
},
character:{
std_panfeng:['male','qun',4,['stdkuangfu']],
re_lidian:['male','wei',3,['xunxun','xinwangxi']],
re_xushu:['male','shu',4,['zhuhai','qianxin']],
caocao:['male','wei',4,['jianxiong','hujia'],['zhu']],
@ -92,6 +94,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
guanyu:['zhangfei','liaohua'],
},
skill:{
stdkuangfu:{
audio:'xinkuangfu',
trigger:{source:'damageSource'},
forced:true,
usable:1,
filter:function(event,player){
return player.isPhaseUsing()&&event.card&&event.card.name=='sha'&&event.player!=player&&event.player.isIn();
},
content:function(){
if(trigger.player.hp<player.hp) player.draw(2);
else player.loseHp();
},
ai:{
halfneg:true,
}
},
rewangzun:{
trigger:{global:'phaseZhunbeiBegin'},
forced:true,
@ -1717,7 +1735,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
liuli:{
audio:2,
audioname:['re_daqiao','daxiaoqiao'],
audioname:['re_daqiao','daxiaoqiao','sb_daqiao'],
trigger:{target:'useCardToTarget'},
direct:true,
preHidden:true,
@ -2621,7 +2639,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
kurou_info:'出牌阶段,你可以失去一点体力,然后摸两张牌。',
yingzi_info:'摸牌阶段,你可以多摸一张牌。',
fanjian_info:'出牌阶段限一次。你可以令一名角色选择一种花色然后其获得你的一张手牌。若其以此法选择的花色与其获得的牌花色不同则你对其造成1点伤害。',
guose_info:'你可以将一张方片牌当做【乐不思蜀】使用。',
guose_info:'你可以将一张方片牌当做【乐不思蜀】使用。',
liuli_info:'当你成为【杀】的目标时,你可以弃置一张牌并将此【杀】转移给攻击范围内的一名其他角色(不能是此【杀】的使用者)。',
qianxun_info:'锁定技,你不能成为【顺手牵羊】和【乐不思蜀】的目标。',
lianying_info:'当你失去最后的手牌时,你可以摸一张牌。',
@ -2662,10 +2680,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
retongji_info:'攻击范围内包含你的角色成为【杀】的目标时,若你不是此【杀】的使用者或目标,其可弃置一张牌,然后将此【杀】转移给你。',
re_xushu:'徐庶',
re_lidian:'李典',
std_panfeng:'潘凤',
stdkuangfu:'狂斧',
stdkuangfu_info:'锁定技。出牌阶段限一次。当你使用【杀】对其他角色造成伤害后若其体力值小于你你摸两张牌不小于你你失去1点体力。',
standard_2008:"2008版标准包",
standard_2013:"2013版标准包",
standard_2019:"2019版标准包",
standard_2023:"2023版标准包",
},
};
});

View File

@ -436,6 +436,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.markAuto('twyanshi',[target]);
}
},
mod:{
targetInRange:function(card,player,target){
if(target.hasMark('twyanshi_mark')) return true;
},
},
subSkill:{
hurt:{
audio:'twyanshi',
@ -539,7 +544,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var targetx of targets){
num+=targetx.hp;
}
if(num>0) return [1,0.5-1.5*num];
if(num>0) return [1,0,0,0.5-1.5*num];
}
}
}
@ -697,7 +702,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
twkaizeng:{
audio:2,
global:'twkaizeng_want',
askInfo:['好哥哥给点XXX','有XXX吗','想要XXX','能给些XXX吗','手头正缺XXX'],
refuseInfo:['不给','拒绝'],
subSkill:{
want:{
@ -6793,12 +6797,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var card=lib.skill.twmuyue_backup.card;
event.card=card;
player.removeSkill('twmuyue_effect');
var card=get.cardPile2(function(cardx){
var cardx=get.cardPile2(function(cardx){
return cardx.name==card[2];
});
player.line(target,'green');
if(card) target.gain(card,'gain2');
else {
if(cardx) target.gain(cardx,'gain2');
else{
player.chat('无牌可得了吗?!');
game.log('但是牌堆中已经没有','#g【'+get.translation(card[2])+'】','了!');
}
@ -7632,7 +7636,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var num=player.countMark('twchuanshu_mark');
trigger.baseDamage+=num;
trigger._twchuanshu=num;
player.removeMark('twchuanshu_mark',num);
player.removeMark('twchuanshu_mark',num,false);
}
else{
var num1=trigger._twchuanshu;
@ -7658,6 +7662,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.logSkill('twchuanshu_clear',targets.filter(i=>i.isIn()));
for(var target of targets){
target.unmarkAuto('twchuanshu_effect',[player]);
if(target.getStorage('twchuanshu_effect').length==0) target.removeSkill('twchuanshu_effect');
}
}
}
@ -10444,7 +10449,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var attitude=get.attitude(player,trigger.player);
if(attitude==0||result==0){
if(trigger.player!=player) return 0;
var checkx=get.color(card,true)==get.color(judging);
var checkx=get.color(card,player)==get.color(judging);
if(checkx>0) return checkx;
return 0;
};
@ -10462,7 +10467,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.$gain2(trigger.player.judging[0]);
player.gain(trigger.player.judging[0]);
var card=result.cards[0];
if(get.color(card)==get.color(trigger.player.judging[0])) player.draw('nodelay');
if(get.color(card,player)==get.color(trigger.player.judging[0])) player.draw('nodelay');
trigger.player.judging[0]=result.cards[0];
trigger.orderingCards.addArray(result.cards);
game.log(trigger.player,'的判定牌改为',result.cards[0]);
@ -13125,7 +13130,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
tw_xiahoushang:['caopi'],
},
characterReplace:{
tw_caocao:['tw_caocao','yj_caocao'],
tw_caocao:['tw_caocao','jsrg_caocao','yj_caocao'],
mateng:['tw_mateng','mateng'],
},
dynamicTranslate:{

View File

@ -1257,7 +1257,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player:["useCardAfter","respond"],
},
filter:function (event,player){
if(get.itemtype(event.cards)!='cards'||player==_status.currentPhase) return false;
if(get.itemtype(event.cards)!='cards') return false;
for(var i=0;i<event.cards.length;i++){
if(event.cards[i].isInPile()){
return true;
@ -1269,7 +1269,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function (){
'step 0'
player.chooseTarget(get.prompt2('xinfu_xunxian'),function(card,player,target){
return target!=player&&target.countCards('h')>player.countCards('h');
if(target==player) return false;
return target.countCards('h')>player.countCards('h')||Math.max(0,target.hp)>Math.max(0,player.hp);
}).set('ai',function(target){
var att=get.attitude(_status.event.player,target);
if(att<3) return 0;
@ -1483,6 +1484,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp_taishici:['re_sp_taishici','sp_taishici'],
mazhong:['mazhong','re_mazhong'],
wenpin:['re_wenpin','wenpin'],
liuyan:['jsrg_liuyan','liuyan'],
},
translate:{
xinghuoliaoyuan:'星火燎原',
@ -1553,7 +1555,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"xinfu_guanchao":"观潮",
"xinfu_guanchao_info":"出牌阶段开始时你可以选择获得一项效果直到回合结束1.当你使用牌时若你此阶段使用过的所有牌的点数为递增你摸一张牌2.当你使用牌时,若你此阶段使用过的所有牌的点数为递减,你摸一张牌。",
"xinfu_xunxian":"逊贤",
"xinfu_xunxian_info":"每名其他角色的回合限一次,当你使用或打出的牌结算完成后,你可以将其对应的所有实体牌交给一名手牌数大于你的角色。",
"xinfu_xunxian_info":"每回合限一次。当你使用或打出的牌结算完成后,你可以将其对应的所有实体牌交给一名手牌数或体力值大于你的角色。",
"xinfu_kannan":"戡难",
"xinfu_kannan_info":"出牌阶段限X次你可以与一名本回合内未成为过〖戡难〗目标的角色拼点。若你赢你使用的下一张【杀】的伤害值基数+1且你本回合内不能再发动〖戡难〗。若你没赢其使用的下一张【杀】的伤害值基数+1。X为你的体力值。",
"kannan_eff":"戡难",

View File

@ -4595,10 +4595,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
popup:false,
onremove:true,
filter:function(event,player){
return typeof player.storage.fumian_draw=='number';
},
filter:function(event,player){
return !event.numFixed;
return !event.numFixed&&typeof player.storage.fumian_draw=='number';
},
content:function(){
trigger.num+=player.storage.fumian_draw;
@ -13027,7 +13024,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xiansix:{},
xiansi2:{
enable:'chooseToUse',
audio:true,
audio:2,
audioname:['re_liufeng'],
viewAs:{name:'sha',isCard:true},
filter:function(event,player){
@ -13095,7 +13092,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
"step 3"
if(event.directresult||result.bool){
player.logSkill('xiansi2',event.target);
player.logSkill('xiansi2_log',event.target);
game.trySkillAudio('xiansi2',event.target,true);
var links=event.directresult||result.links;
target.loseToDiscardpile(links);
}
@ -13104,7 +13102,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
order:function(){
return get.order({name:'sha'})+0.05;
},
}
},
subSkill:{log:{}}
},
shibei:{
trigger:{player:'damageEnd'},
@ -13532,7 +13531,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhangyi:['re_zhangyi','zhangyi'],
quancong:['old_quancong','re_quancong','xin_quancong','quancong'],
sunxiu:['re_sunxiu','xin_sunxiu','sunxiu'],
zhuzhi:['zhuzhi','xin_zhuzhi','old_zhuzhi'],
zhuzhi:['re_zhuzhi','zhuzhi','xin_zhuzhi','old_zhuzhi'],
liuyu:['dc_liuyu','liuyu','ol_liuyu'],
zhangrang:['zhangrang','ol_zhangrang','junk_zhangrang'],
jikang:['re_jikang','jikang'],
@ -13814,9 +13813,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinsidi2:'司敌',
xinsidi_info:'其他角色出牌阶段开始时,你可以弃置一张与你装备区里的牌颜色相同的非基本牌,然后该角色于此阶段内不能使用和打出与此牌颜色相同的牌。此阶段结束时,若其此阶段没有使用【杀】,视为你对其使用了【杀】。',
dangxian:'当先',
dangxian_info:'锁定技,准备阶段,你执行一个额外的出牌阶段。',
dangxian_info:'锁定技,回合开始时,你执行一个额外的出牌阶段。',
xindangxian:'当先',
xindangxian_info:'锁定技,准备阶段你执行一个额外的出牌阶段。此阶段开始时你失去1点体力并从牌堆/弃牌堆中获得一张【杀】(若你已发动过〖伏枥〗,则可以不发动此效果)。',
xindangxian_info:'锁定技,回合开始时你执行一个额外的出牌阶段。此阶段开始时你失去1点体力并从牌堆/弃牌堆中获得一张【杀】(若你已发动过〖伏枥〗,则可以不发动此效果)。',
longyin:'龙吟',
longyin_info:'当一名角色于其出牌阶段内使用【杀】时,你可弃置一张牌令此【杀】不计入出牌阶段使用次数,若此【杀】为红色,你摸一张牌。',
zhongyong:'忠勇',
@ -14059,7 +14058,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zili_info:'觉醒技准备阶段开始时若“权”的数量不小于3你减1点体力上限然后选择一项1、回复1点体力2、摸两张牌。然后你获得技能“排异”。',
quanji_info:'当你受到1点伤害后你可以摸一张牌然后将一张手牌置于武将牌上称为“权”你的手牌上限+XX为“权”的数量。',
xianzhou_info:'限定技。出牌阶段你可以将装备区内的所有牌交给一名其他角色然后该角色选择一项令你回复X点体力或对其攻击范围内的X名角色各造成1点伤害(X为你以此法交给该角色的牌的数量)。',
qieting_info:'其他角色的结束阶段,若其未于此回合内使用过指定其他角色为目标的牌,你可以选择一项:将其装备区里的一张牌移动至你装备区里的相应位置;或摸一张牌。',
qieting_info:'其他角色的回合结束时,若其未于此回合内使用过指定其他角色为目标的牌,你可以选择一项:将其装备区里的一张牌移动至你装备区里的相应位置;或摸一张牌。',
zhuikong_info:'其他角色的准备阶段若你已受伤你可以与该角色拼点。若你赢该角色本回合使用的牌不能指定除该角色外的角色为目标。若你没赢其本回合至你的距离视为1。',
oldzhuikong_info:'其他角色的准备阶段若你已受伤你可以与该角色拼点。若你赢该角色跳过本回合的出牌阶段。若你没赢其本回合至你的距离视为1。',
qiuyuan_info:'当你成为【杀】的目标时,你可以令一名其他角色选择一项:①、交给你一张【闪】;②、成为此【杀】的额外目标。',

View File

@ -1,5 +1,5 @@
window.noname_asset_list=[
'v1.9.121',
'v1.9.122',
'audio/background/aozhan_chaoming.mp3',
'audio/background/aozhan_online.mp3',
'audio/background/aozhan_rewrite.mp3',
@ -7605,6 +7605,31 @@ window.noname_asset_list=[
'image/character/zumao.jpg',
'image/character/zuoci.jpg',
'image/character/zuofen.jpg',
'image/character/jsrg_caocao.jpg',
'image/character/jsrg_dongbai.jpg',
'image/character/jsrg_hejin.jpg',
'image/character/jsrg_huangfusong.jpg',
'image/character/jsrg_kongrong.jpg',
'image/character/jsrg_liubei.jpg',
'image/character/jsrg_liuhong.jpg',
'image/character/jsrg_liuyan.jpg',
'image/character/jsrg_nanhualaoxian.jpg',
'image/character/jsrg_qiaoxuan.jpg',
'image/character/jsrg_sunjian.jpg',
'image/character/jsrg_wangyun.jpg',
'image/character/jsrg_xushao.jpg',
'image/character/jsrg_yangbiao.jpg',
'image/character/jsrg_zhujun.jpg',
'image/character/luoxian.jpg',
'image/character/ol_huban.jpg',
'image/character/re_zhuzhi.jpg',
'image/character/sb_chengong.jpg',
'image/character/sb_diaochan.jpg',
'image/character/sb_pangtong.jpg',
'image/character/sb_yuanshao.jpg',
'image/character/std_panfeng.jpg',
'image/character/sunhong.jpg',
'image/character/yanghong.jpg',
'image/emotion/shibing_emotion/1.gif',
'image/emotion/shibing_emotion/2.gif',

View File

@ -2,7 +2,7 @@
(function(){
if(!localStorage.getItem('noname_alerted')){
localStorage.setItem('noname_alerted',true);
alert('无名杀官方发布地址仅有GitHub仓库\n其他所有的所谓“无名杀”社群包括但不限于绝大多数“官方”QQ群、QQ频道等均为粉丝自发组织,与无名杀官方无关!');
alert('无名杀官方发布地址仅有GitHub仓库\n其他所有的所谓“无名杀”社群包括但不限于绝大多数“官方”QQ群、QQ频道等均为玩家自发组织,与无名杀官方无关!');
}
var _status={
paused:false,
@ -536,6 +536,10 @@
},
unfrequent:true,
},
fuck_sojson:{
name:'检测加密扩展',
init:false,
},
errstop:{
name:'出错时停止游戏',
init:false,
@ -6692,7 +6696,7 @@
globalId:0,
},
help:{
'关于游戏':'<div style="margin:10px">关于无名杀</div><ul style="margin-top:0"><li>无名杀官方发布地址仅有GitHub仓库<br><a href="https://github.com/libccy/noname">点击前往Github仓库</a><br><li>其他所有的所谓“无名杀”社群包括但不限于绝大多数“官方”QQ群、QQ频道等均为粉丝自发组织与无名杀官方无关',
'关于游戏':'<div style="margin:10px">关于无名杀</div><ul style="margin-top:0"><li>无名杀官方发布地址仅有GitHub仓库<br><a href="https://github.com/libccy/noname">点击前往Github仓库</a><br><li>无名杀基于GPLv3开源协议。<br><a href="https://www.gnu.org/licenses/gpl-3.0.html">点击查看GPLv3协议</a><br><li>其他所有的所谓“无名杀”社群包括但不限于绝大多数“官方”QQ群、QQ频道等均为粉丝自发组织与无名杀官方无关',
'游戏操作':'<ul><li>长按/鼠标悬停/右键单击显示信息。<li>触屏模式中,双指点击切换暂停;下划显示菜单,上划切换托管。<li>键盘快捷键<br>'+
'<table><tr><td>A<td>切换托管<tr><td>W<td>切换不询问无懈<tr><td>空格<td>暂停</table><li>编辑牌堆<br>在卡牌包中修改牌堆后,将自动创建一个临时牌堆,在所有模式中共用,当保存当前牌堆后,临时牌堆被清除。每个模式可设置不同的已保存牌堆,设置的牌堆优先级大于临时牌堆。</ul>',
'游戏命令':'<div style="margin:10px">变量名</div><ul style="margin-top:0"><li>场上角色<br>game.players<li>阵亡角色<br>game.dead'+
@ -7986,9 +7990,22 @@
},onerror);
},onerror);
};
game.readFileAsText=function(filename,callback,onerror){
window.resolveLocalFileSystemURL(lib.assetURL,function(entry){
entry.getFile(filename,{},function(fileEntry){
fileEntry.file(function(fileToLoad){
var fileReader = new FileReader();
fileReader.onload = function(e){
callback(e.target.result);
};
fileReader.readAsText(fileToLoad, "UTF-8");
},onerror);
},onerror);
},onerror);
};
game.writeFile=function(data,path,name,callback){
game.ensureDirectory(path,function(){});
if(Object.prototype.toString.call(data)=='[object File]'){
game.ensureDirectory(path,function(){
if(Object.prototype.toString.call(data)=='[object File]'){
var fileReader = new FileReader();
fileReader.onload = function(e){
game.writeFile(e.target.result,path,name,callback);
@ -8005,6 +8022,7 @@
});
});
}
});
};
game.removeFile=function(dir,callback){
window.resolveLocalFileSystemURL(lib.assetURL,function(entry){
@ -8174,8 +8192,18 @@
}
});
};
game.readFileAsText=function(filename,callback,onerror){
lib.node.fs.readFile(__dirname+'/'+filename,'utf-8',function(err,data){
if(err){
onerror(err);
}
else{
callback(data);
}
});
};
game.writeFile=function(data,path,name,callback){
game.ensureDirectory(path,function(){});
game.ensureDirectory(path,function(){
if(Object.prototype.toString.call(data)=='[object File]'){
var fileReader = new FileReader();
fileReader.onload = function(e){
@ -8189,6 +8217,7 @@
lib.node.fs.writeFile(__dirname+'/'+path+'/'+name,zip.files.i.asNodeBuffer(),null,callback);
});
}
});
};
game.removeFile=function(filename,callback){
lib.node.fs.unlink(__dirname+'/'+filename,callback||function(){});
@ -9270,15 +9299,29 @@
}
}
else{
var script=document.createElement('script');
var script_src;
if(!file){
script.src = path;
script_src = path;
}
else{
script.src = path+'/'+file+".js";
script_src = path+'/'+file+".js";
}
if(path.indexOf('http')==0){
script.src+='?rand='+get.id();
script_src+='?rand='+get.id();
}
else{
if(game.readFile&&lib.config.fuck_sojson&&script_src.includes('extension')!=-1&&script_src.indexOf(lib.assetURL)==0){
var path_to_read=script_src.slice(lib.assetURL.length);
game.readFileAsText(path_to_read,function(result){
if(result.includes('sojson')||result.includes('jsjiami')||result.includes('var _0x')) alert('检测到您安装了使用免费版sojson进行加密的扩展。请谨慎使用这些扩展避免游戏数据遭到破坏。\n扩展文件'+path_to_read);
},function(){
});
}
}
var script=document.createElement('script');
script.src=script_src;
if(path.indexOf('http')==0){
script.addEventListener('load',function(){
script.remove();
});
@ -10440,6 +10483,103 @@
emptyEvent:function(){
event.trigger(event.name);
},
chooseToDebate:function(){
'step 0'
event.targets=event.list.filter(function(i){
return i.countCards('h')>0;
});
if(!event.targets.length) event.result={bool:false};
else{
var next=player.chooseCardOL(event.targets,get.translation(player)+'发起了议事,请选择展示的手牌',true).set('type','debate').set('source',player).set('ai',event.ai||function(card){
return Math.random();
}).set('aiCard',event.aiCard||function(target){
var hs=target.getCards('h');
return {bool:true,cards:[hs.randomGet()]};
});
next._args.remove('glow_result');
}
'step 1'
var red=[],black=[];
event.videoId=lib.status.videoId++;
for(var i=0;i<event.targets.length;i++){
var card=result[i].cards[0],target=event.targets[i];
if(get.color(card,target)=='red') red.push([target,card]);
else black.push([target,card]);
}
event.red=red; event.black=black;
if(red.length){
game.log(red.map(function(i){
return i[0];
}),'意见为<span class="firetext">红色</span>,展示了',red.map(function(i){
return i[1];
}));
}
else game.log('#b无人','意见为<span class="firetext">红色</span>');
if(black.length){
game.log(black.map(function(i){
return i[0];
}),'意见为','#g黑色',',展示了',black.map(function(i){
return i[1];
}));
}
else game.log('#b无人','意见为','#g黑色');
game.broadcastAll(function(name,id,redArgs,blackArgs){
var dialog=ui.create.dialog(name+'发起了议事','hidden','forcebutton');
dialog.videoId=id;
dialog.classList.add('scroll1');
dialog.classList.add('scroll2');
dialog.classList.add('fullwidth');
dialog.buttonss=[];
var list=['意见为红色的角色','意见为黑色的角色']
for(var i=0;i<list.length;i++){
dialog.add('<div class="text center">'+list[i]+'</div>');
var buttons=ui.create.div('.buttons',dialog.content);
dialog.buttonss.push(buttons);
buttons.classList.add('popup');
buttons.classList.add('guanxing');
}
var func=function(target){
if(target._tempTranslate) return target._tempTranslate;
var name=target.name;
if(lib.translate[name+'_ab']) return lib.translate[name+'_ab'];
return get.translation(name);
};
for(var i=0;i<redArgs.length;i++){
var list=redArgs[i];
var button=ui.create.button(list[1],'card',dialog.buttonss[0]);
button.querySelector('.info').innerHTML=func(list[0]);
}
for(var i=0;i<blackArgs.length;i++){
var list=blackArgs[i];
var button=ui.create.button(list[1],'card',dialog.buttonss[1]);
button.querySelector('.info').innerHTML=func(list[0]);
}
dialog.open();
},get.translation(player),event.videoId,red,black);
game.delay(4);
'step 2'
game.broadcastAll('closeDialog',event.videoId);
var opinion=null;
if(event.red.length>event.black.length) opinion='red';
else if(event.red.length<event.black.length) opinion='black';
if(opinion) game.log(player,'本次发起的议事结果为',opinion=='red'?'<span class="firetext">红色</span>':'#g黑色');
else game.log(player,'本次发起的议事无结果');
event.result={
bool:true,
opinion:opinion,
red:event.red,
black:event.black,
targets:event.targets
}
'step 3'
if(event.callback){
var next=game.createEvent('debateCallback',false);
next.player=player;
next.debateResult=get.copy(event.result);
next.setContent(event.callback);
}
},
delay:function(){
game[event.name].apply(game,event._args)
},
@ -13182,6 +13322,7 @@
if(shown.length>0) player.$give(shown,i[0]);
if(hidden.length>0) player.$giveAuto(hidden,i[0]);
}
break;
default:
event.finish();
}
@ -14284,7 +14425,7 @@
else if(event.prompt){
event.dialog=ui.create.dialog(event.prompt);
if(event.prompt2){
event.dialog.addText(event.prompt2,event.prompt2.length<=20||event.centerprompt2);
event.dialog.addText(event.prompt2,Boolean(event.prompt2.length<=20||event.centerprompt2));
}
}
}
@ -17450,6 +17591,21 @@
},
player:{
//新函数
chooseToDebate:function(){
var next=game.createEvent('chooseToDebate');
next.player=this;
next._args=[];
for(var i=0;i<arguments.length;i++){
if(get.itemtype(arguments[i])=='players'){
next.list=arguments[i].slice(0);
}
else{
next._args.push(arguments[i]);
}
}
next.setContent('chooseToDebate');
return next;
},
cooperationWith:function(target,type,reason){
var player=this;
if(!player.storage.cooperation) player.storage.cooperation=[];
@ -24094,13 +24250,13 @@
if(this.countCards('hs','hufu')) return true;
if(!noauto&&this.countCards('hs','yuchanqian')) return true;
if(this.hasSkillTag('respondSha',true,respond?'respond':'use',true)) return true;
return false;
return this.hasUsableCard('sha');
},
hasShan:function(){
if(this.countCards('hs','shan')) return true;
if(this.countCards('hs','hufu')) return true;
if(this.hasSkillTag('respondShan',true,null,true)) return true;
return false;
return this.hasUsableCard('sha');
},
mayHaveShan:function(){
return this.hasShan();
@ -26435,7 +26591,7 @@
else this.filterOk=info.filterOk;
if(info.selectCard!=undefined) this.selectCard=info.selectCard;
if(info.position!=undefined) this.position=info.position;
if(info.forced!=undefined) this.forced=info.forced;
//if(info.forced!=undefined) this.forced=info.forced;
if(info.complexSelect!=undefined) this.complexSelect=info.complexSelect;
if(info.complexCard!=undefined) this.complexCard=info.complexCard;
if(info.complexTarget!=undefined) this.complexTarget=info.complexTarget;
@ -26472,7 +26628,7 @@
else this.filterOk=info.filterOk;
if(info.selectCard!=undefined) this.selectCard=info.selectCard;
if(info.position!=undefined) this.position=info.position;
if(info.forced!=undefined) this.forced=info.forced;
//if(info.forced!=undefined) this.forced=info.forced;
if(info.complexSelect!=undefined) this.complexSelect=info.complexSelect;
if(info.complexCard!=undefined) this.complexCard=info.complexCard;
if(info.complexTarget!=undefined) this.complexTarget=info.complexTarget;
@ -26487,7 +26643,7 @@
this.filterCard=info.filterCard?get.filter(info.filterCard):undefined;
this.selectCard=info.selectCard;
this.position=info.position;
this.forced=info.forced;
//this.forced=info.forced;
this.complexSelect=info.complexSelect;
this.complexCard=info.complexCard;
this.complexTarget=info.complexTarget;
@ -31124,6 +31280,8 @@
zip.file(i,data[i]);
filelist.push(i);
}
game.print(filelist);
game.print(filelist2);
if(exportext){
if(pkg){
filelist.remove('extension.js');
@ -41112,31 +41270,37 @@
for(var i in dash2.content.image){
extension[i]=dash2.content.image[i];
}
if(exportext){
var proexport=function(){
game.importExtension(extension,null,page.currentExtension,{
intro:introExtLine.querySelector('input').value||'',
author:authorExtLine.querySelector('input').value||'',
netdisk:diskExtLine.querySelector('input').value||'',
forum:forumExtLine.querySelector('input').value||'',
version:versionExtLine.querySelector('input').value||'',
});
};
if(game.getFileList){
game.getFileList('extension/'+page.currentExtension,function(folders,files){
extension._filelist=files;
game.readFile('LICENSE',function(data){
extension['LICENSE']=data;
game.writeFile(data,'extension/'+page.currentExtension,'LICENSE',function(){})
if(exportext){
var proexport=function(){
game.importExtension(extension,null,page.currentExtension,{
intro:introExtLine.querySelector('input').value||'',
author:authorExtLine.querySelector('input').value||'',
netdisk:diskExtLine.querySelector('input').value||'',
forum:forumExtLine.querySelector('input').value||'',
version:versionExtLine.querySelector('input').value||'',
});
};
if(game.getFileList){
game.getFileList('extension/'+page.currentExtension,function(folders,files){
extension._filelist=files;
proexport();
});
}
else{
proexport();
});
}
}
else{
proexport();
game.importExtension(extension,function(){
exportExtLine.style.display='';
});
}
}
else{
game.importExtension(extension,function(){
exportExtLine.style.display='';
});
}
},function(){
alert('许可证文件丢失,无法导出扩展');
});
},500);
};
var buttonConfirm=document.createElement('button');
@ -43037,6 +43201,9 @@
importExtension.style.width='100%';
importExtension.style.textAlign='left';
ui.create.div('','<input type="file" accept="application/zip" style="width:153px"><button>确定</button>',importExtension);
ui.create.div('.config','修改下载地址',page,function(){
alert('您可以在“设置→通用→获取扩展地址”中,修改下载扩展时所采用的地址。')
})
var extensionURL;
var source=lib.config.extension_sources,index=lib.config.extension_source;
@ -46644,6 +46811,14 @@
node.removeEventListener('click',ui.click.resume);
},500);
}
if(!localStorage.getItem('gplv3_alerted')){
if(confirm('无名杀是一款基于GPLv3协议的开源软件\n你可以在遵守GPLv3协议的基础上任意使用修改并转发《无名杀》以及所有基于《无名杀》开发的拓展。\n点击“确定”即代表您认可并接受GPLv3协议↓\nhttps://www.gnu.org/licenses/gpl-3.0.html')){
localStorage.setItem('gplv3_alerted',true);
}
else{
game.exit();
}
}
},
system:function(str,func,right,before){
var parent=right?ui.system2:ui.system1;
@ -50717,7 +50892,7 @@
}
},
auto:function(){
if(ui.auto.classList.contains('hidden')&&arguments[0]!=='forced') return;
if(!ui||!ui.auto||ui.auto.classList.contains('hidden')&&arguments[0]!=='forced') return;
if(_status.paused2) return;
ui.click.shortcut(false);
if(!_status.auto){
@ -51563,6 +51738,29 @@
},
};
var get={
skillCategoriesOf:function(skill,player){
var list=[],info=get.info(skill);
if(!info) return list;
if(get.is.locked(skill,player)) list.add('锁定技');
if(info.zhuSkill) list.add('主公技');
if(info.limited) list.add('限定技');
if(info.juexingji||info.limited) list.add('觉醒技');
if(info.limited) list.add('限定技');
if(info.zhuanhuanji) list.add('转换技');
if(info.hiddenSkill) list.add('隐匿技');
if(info.clanSkill) list.add('宗族技');
if(info.groupSkill) list.add('势力技');
if(info.dutySkill) list.add('使命技');
if(info.chargeSkill) list.add('蓄力技');
if(info.zhenfa) list.add('阵法技');
if(info.mainSkill) list.add('主将技');
if(info.viceSkill) list.add('副将技');
if(info.lordSkill) list.add('君主技');
if(info.chargingSkill) list.add('蓄能技');
if(info.charlotte) list.add('Charlotte');
if(info.categories) list.addArray(info.categories(skill,player));
return list;
},
numOf:function(obj,item){
var num=0;
for(var i=0;i<obj.length;i++){
@ -55919,7 +56117,7 @@
name='icedamage';
}
var eff=get.effect(target,{name:name},player,viewer);
if(eff>0&&target.hujia>0) return 0;
if(eff>0&&target.hujia>0) return eff/1.3;
return eff;
},
recoverEffect:function(target,player,viewer){

View File

@ -1,4 +1,5 @@
window.noname_source_list=[
'LICENSE',
'card/extra.js',
'card/gujian.js',
'card/guozhan.js',

View File

@ -1,14 +1,17 @@
window.noname_update={
version:'1.9.121',
update:'1.9.120.3.1',
version:'1.9.122',
update:'1.9.121',
changeLog:[
'族吴匡、界颜良文丑、王匡',
'谢灵毓、笮融、张闿',
'削弱版段煨、李典',
'增大GPL协议的醒目性',
'整合@copcap 编写的代码',
'线下武将包《江山如故·起》(暂时不含许劭)',
'OL罗宪、胡班、孙弘十周年界朱治、杨弘',
'谋陈宫、貂蝉、庞统、袁绍;线下标潘凤',
'其他技能调整和bug修复',
],
files:[
'card/extra.js',
'LICENSE',
//'card/extra.js',
//'card/gujian.js',
//'card/guozhan.js',
//'card/gwent.js',
@ -24,7 +27,7 @@ window.noname_update={
//'card/zhulu.js',
'character/clan.js',
'character/diy.js',
//'character/extra.js',
'character/extra.js',
//'character/hearth.js',
//'character/gujian.js',
//'character/gwent.js',
@ -44,9 +47,9 @@ window.noname_update={
'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',
@ -62,7 +65,7 @@ window.noname_update={
//'mode/chess.js',
//'mode/connect.js',
//'mode/doudizhu.js',
//'mode/guozhan.js',
'mode/guozhan.js',
//'mode/identity.js',
//'mode/single.js',
//'mode/stone.js',

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
image/character/luoxian.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: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
image/character/sunhong.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -1250,7 +1250,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
gzzhenxi:{
audio:'twzhenxi',
trigger:{player:'useCardToPlayered'},
logTarget:'target',
filter:function(event,player){
if(event.card.name!='sha') return false;
if(event.target.countCards('he')||player.hasCard(function(card){
@ -1266,49 +1265,55 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
direct:true,
content:function(){
'step 0'
var target=trigger.target;
event.target=target;
var list=[],choiceList=[
'弃置'+get.translation(trigger.target)+'一张牌',
'将一张♦非锦囊牌当做【乐不思蜀】或♣非锦囊牌当做【兵粮寸断】对'+get.translation(trigger.target)+'使用',
'弃置'+get.translation(target)+'一张牌',
'将一张♦非锦囊牌当做【乐不思蜀】或♣非锦囊牌当做【兵粮寸断】对'+get.translation(target)+'使用',
'背水!若其有暗置的武将牌且你的武将牌均明置,你依次执行上述两项'
];
if(trigger.target.countDiscardableCards(player,'he')) list.push('选项一');
if(target.countDiscardableCards(player,'he')) list.push('选项一');
else choiceList[0]='<span style="opacity:0.5">'+choiceList[0]+'</span>';
if(player.countCards('he',function(card){
return get.suit(card)=='diamond'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'lebu'},[card]),trigger.target);
return get.suit(card)=='diamond'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'lebu'},[card]),target);
})||(player.countCards('he',function(card){
return get.suit(card)=='club'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'bingliang'},[card]),trigger.target);
return get.suit(card)=='club'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'bingliang'},[card]),target);
}))) list.push('选项二');
else choiceList[1]='<span style="opacity:0.5">'+choiceList[1]+'</span>';
if(trigger.target.isUnseen(2)&&!player.isUnseen(2)) list.push('背水!');
if(target.isUnseen(2)&&!player.isUnseen(2)) list.push('背水!');
else choiceList[2]='<span style="opacity:0.5">'+choiceList[2]+'</span>';
player.chooseControl(list,'cancel2').set('prompt',get.prompt('gzzhenxi',trigger.target)).set('choiceList',choiceList).set('ai',function(){
player.chooseControl(list,'cancel2').set('prompt',get.prompt('gzzhenxi',target)).set('choiceList',choiceList).set('ai',function(){
var player=_status.event.player,trigger=_status.event.getTrigger(),list=_status.event.list;
if(get.attitude(player,trigger.target)>0) return 'cancel2';
if(list.contains('背水!')) return '背水!';
if(list.contains('选项二')) return '选项二';
return '选项一';
}).set('list',list);
}).set('list',list).set('hiddenSkill','gzzhenxi');
'step 1'
if(result.control=='cancel2'){
event.finish();
return;
}
if(result.control!='选项二'&&trigger.target.countDiscardableCards(player,'he')) player.discardPlayerCard(trigger.target,'he',true);
if(result.control!='选项一'&&player.countCards('he',function(card){
return get.suit(card)=='diamond'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'lebu'},[card]),trigger.target);
})||(player.countCards('he',function(card){
return get.suit(card)=='club'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'bingliang'},[card]),trigger.target,false);
}))){
player.logSkill('gzzhenxi',target);
event.choice=result.control;
if(event.choice!='选项二'&&target.countDiscardableCards(player,'he')) player.discardPlayerCard(target,'he',true);
'step 2'
if(event.choice!='选项一'&&!player.isUnseen(2)&&target.isUnseen(2)&&
player.hasCard(function(card){
return get.suit(card)=='diamond'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'lebu'},[card]),target);
},'he')||(player.hasCard(function(card){
return get.suit(card)=='club'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'bingliang'},[card]),target,false);
},'he'))){
var next=game.createEvent('gzzhenxi_use');
next.player=player;
next.target=trigger.target;
next.target=target;
next.setContent(lib.skill.gzzhenxi.contentx);
}
},
ai:{unequip_ai:true},
contentx:function(){
'step 0'
player.chooseCardTarget({
player.chooseCard({
position:'hes',
forced:true,
prompt:'震袭',
@ -1316,15 +1321,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
filterCard:function(card,player){
if(get.itemtype(card)!='card'||get.type2(card)=='trick'||!['diamond','club'].contains(get.suit(card))) return false;
var cardx={name:get.suit(card)=='diamond'?'lebu':'bingliang'};
if(!player.canUse(get.autoViewAs(cardx,[card]),_status.event.getParent().player,false)) return false;
return lib.filter.filterCard.apply(this,arguments);
},
filterTarget:function(card,player,target){
var source=_status.event.target;
if(target!=source&&!ui.selected.targets.contains(source)) return false;
var cardx={name:get.suit(card)=='diamond'?'lebu':'bingliang'};
card=get.autoViewAs(cardx,[card]);
return lib.filter.filterTarget.apply(this,arguments);
return player.canUse(get.autoViewAs(cardx,[card]),_status.event.getParent().target,false);
},
});
'step 1'
@ -1428,9 +1425,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
return get.attitude(player,event.player)<0;
},
usable:1,
logTarget:'player',
content:function(){
'step 0'
if(trigger.player.hasSex('female')&&trigger.player.countCards('e')) player.chooseToDiscard('he','追妒:是否弃置一张牌并令其执行两项?').set('ai',function(card){
var target=trigger.player;
event.target=target;
if(target.hasSex('female')&&target.countCards('e')>0) player.chooseToDiscard('he','追妒:是否弃置一张牌并令其执行两项?').set('ai',function(card){
return 8-get.value(card);
});
else event.goto(2);
@ -1440,8 +1440,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
event.goto(3);
}
'step 2'
if(trigger.player.countCards('e')>0){
trigger.player.chooseControl().set('prompt','追妒:请选择一项').set('choiceList',[
if(target.countCards('e')>0){
target.chooseControl().set('prompt','追妒:请选择一项').set('choiceList',[
'令'+get.translation(trigger.player)+'此次对你造成的伤害+1',
'弃置装备区里的所有牌',
]).set('ai',function(){
@ -1449,13 +1449,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(player.hp<=2) return 1;
if(get.value(cards)<=7) return 1;
return 0;
}).set('list',list);
});
}
else event._result={control:'选项一'};
'step 3'
player.line(trigger.player);
player.line(target);
if(result.control!='选项二') trigger.num++;
if(result.control!='选项一') trigger.player.chooseToDiscard(trigger.player.countCards('e'),true,'e');
if(result.control!='选项一') target.chooseToDiscard(target.countCards('e'),true,'e');
},
},
gzshigong:{
@ -7309,6 +7309,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
forceunique:true,
group:'wuziliangjiangdao',
derivation:'wuziliangjiangdao',
lordSkill:true,
global:'g_jianan',
},
g_jianan:{
@ -10042,6 +10043,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
jiahe:{
unique:true,
forceunique:true,
lordSkill:true,
audio:2,
derivation:'yuanjiangfenghuotu',
mark:true,
@ -10848,6 +10850,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
derivation:'huangjintianbingfu',
unique:true,
forceunique:true,
lordSkill:true,
trigger:{player:'phaseZhunbeiBegin'},
forced:true,
filter:function(event,player){
@ -11097,6 +11100,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
group:'wuhujiangdaqi',
derivation:'wuhujiangdaqi',
mark:true,
lordSkill:true,
},
wuhujiangdaqi:{
unique:true,