This commit is contained in:
Spmario233 2022-10-20 19:50:57 +08:00
parent f3b897ff86
commit 857f53d8f1
32 changed files with 1678 additions and 184 deletions

View File

@ -149,7 +149,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(card){
if(game.hasPlayer(function(current){
return (get.attitude(target,current)<0&&
target.canUse(card,current,true,true)&&
target.canUse(card,current,null,true)&&
!current.hasSkillTag('filterDamage',null,{
player:player,
card:card,
@ -164,7 +164,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
},
tag:{
save:1
save:1,
recover:0.1,
}
}
},

View File

@ -1070,7 +1070,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
distance:{attackFrom:-1},
ai:{
equipValue:function(card,player){
if(player.identity=='unknown'||player.identity=='ye') return 2.5;
if(player.identity=='unknown'||player.identity=='ye') return 2;
return 2+game.countPlayer(function(current){
return current.isFriendOf(player);
})/2;

View File

@ -156,16 +156,24 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(get.suit(card)=='spade') return -6;
return 0;
},
cardPrompt:function(card){
var str='出牌阶段对你使用。你将【浮雷】置入判定区。若判定结果为♠则目标角色受到X点雷电伤害X为此牌判定结果为♠的次数。判定完成后将此牌移动到下家的判定区里。';
if(card.storage&&card.storage.fulei) str+=('<br><span style="font-family:yuanli">此牌已判定命中过:'+card.storage.fulei+'次</span>');
return str;
},
effect:function(){
'step 0'
if(result.bool==false){
if(!card.storage.fulei){
card.storage.fulei=1;
var card=cards[0];
if(card){
if(!card.storage.fulei){
card.storage.fulei=1;
}
else{
card.storage.fulei++;
}
player.damage(card.storage.fulei,'thunder','nosource');
}
else{
card.storage.fulei++;
}
player.damage(card.storage.fulei,'thunder','nosource');
}
'step 1'
player.addJudgeNext(card);
@ -608,7 +616,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
g_jinchan2_info:'当你因弃置而失去【金蝉脱壳】时,你摸一张牌',
jinchan_info:'当你成为其他角色使用牌的目标时,若你的手牌里只有【金蝉脱壳】,使目标锦囊牌或基本牌对你无效,你摸两张牌。当你因弃置而失去【金蝉脱壳】时,你摸一张牌。',
fulei:'浮雷',
fulei_info:'出牌阶段,对你使用。将【浮雷】放置于你的判定区里若判定结果为黑桃则目标角色受到X点雷电伤害X为此锦囊判定结果为黑桃的次数)。判定完成后,将此牌移动到下家的判定区里。',
fulei_info:'出牌阶段,对你使用。你将【浮雷】置入判定区。若判定结果为♠则目标角色受到X点雷电伤害X为此牌判定结果为♠的次数)。判定完成后,将此牌移动到下家的判定区里。',
qibaodao:'七宝刀',
qibaodao_info:'攻击范围2锁定技你使用【杀】无视目标防具若目标角色未损失体力值此【杀】伤害+1',
qibaodao2:'七宝刀',

View File

@ -85,6 +85,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_tenzen:['male','key',4,['tenzen_fenghuan','tenzen_retianquan']],
key_kyouko:['female','key',3,['kyouko_rongzhu','kyouko_gongmian']],
key_kyou:['female','key',3,['kyou_zhidian','kyou_duanfa']],
key_seira:['female','key',3,['seira_xinghui','seira_yuanying']],
ns_huangchengyan:['male','shu',3,['nslongyue','nszhenyin']],
ns_sunchensunjun:['male','wu',5,['nsxianhai','nsxingchu']],
@ -99,6 +100,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ns_ruanji:['male','wei',3,['nsshizui','nsxiaoye']],
ns_limi:['male','jin',3,['nstuilun']],
ns_zhonglimu:['male','wu',4,['nskuanhuai','nsdingbian']],
prp_zhugeliang:['male','shu',3,['nsxingyun','nshanlang']],
ns_zhangwei:['female','shu',3,['nsqiyue','nsxuezhu']],
diy_wenyang:['male','wei','4/6',['lvli','choujue']],
@ -200,7 +202,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"ns_huangchengyan","ns_sunchensunjun","ns_yuanxi","ns_caoshuang"],
diy_yijiang2:["key_yuuki","key_tenzen","key_kyouko","key_kotarou","key_kyou",
"ns_chentai","ns_huangwudie","ns_sunyi","ns_zhangning","ns_yanghu"],
diy_yijiang3:['ns_ruanji','ns_zanghong','ns_limi','ns_zhonglimu'],
diy_yijiang3:['ns_ruanji','ns_zanghong','ns_limi','ns_zhonglimu','prp_zhugeliang','key_seira'],
diy_tieba:["ns_zuoci","ns_lvzhi","ns_wangyun","ns_nanhua","ns_nanhua_left","ns_nanhua_right","ns_huamulan","ns_huangzu","ns_jinke","ns_yanliang","ns_wenchou","ns_caocao","ns_caocaosp","ns_zhugeliang","ns_wangyue","ns_yuji","ns_xinxianying","ns_guanlu","ns_simazhao","ns_sunjian","ns_duangui","ns_zhangbao","ns_masu","ns_zhangxiu","ns_lvmeng","ns_shenpei","ns_yujisp","ns_yangyi","ns_liuzhang","ns_xinnanhua","ns_luyusheng"],
diy_fakenews:["diy_wenyang","ns_zhangwei","ns_caimao","ns_chengpu"],
diy_xushi:["diy_feishi","diy_hanlong","diy_liufu","diy_liuyan","diy_liuzan","diy_tianyu","diy_xizhenxihong","diy_yangyi","diy_zaozhirenjun"],
@ -302,6 +304,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_kyouko:'#b阿阿阿687',
key_tenzen:'#b皋耳击',
key_kotarou:'#bb1154486224',
key_seira:'#b阿开木木W🍀',
ns_huangchengyan:'#g竹邀月',
ns_sunchensunjun:'#gVenusjeu',
@ -316,6 +319,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ns_zanghong:'#g阿七',
ns_limi:'#g-心若困兽-',
ns_zhonglimu:'#gJG赛文♠7',
prp_zhugeliang:'#g阿开木木W🍀',
ns_luyusheng:'#g猫咪大院 - 魚と水',
ns_caimao:'#gP尔号玩家◆',
@ -463,7 +467,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return -4;
},
effect:function(){
var source=card.storage.nsfuzhou_source;
var source=cards[0].storage.nsfuzhou_source;
if(!source||!source.isAlive()) return;
source.line(player,'thunder');
if(result.color=='black'){
@ -523,6 +527,359 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_lucia:['key_shizuru'],
},
skill:{
//樱庭星罗
seira_xinghui:{
trigger:{player:'phaseZhunbeiBegin'},
check:function(event,player){
return !player.getExpansions('seira_xinghui').length;
},
content:function(){
'step 0'
game.delayx();
'step 1'
if(get.isLuckyStar(player)){
event.num=6;
player.throwDice(6);
}
else player.throwDice();
'step 2'
var cards=get.cards(num);
event.cards=cards;
game.cardsGotoOrdering(cards);
var next=player.chooseToMove();
next.set('prompt','星辉:选择要作为“星屑”的牌(先选择的在上)');
next.set('list',[
['置于武将牌上',cards],
['置入弃牌堆'],
]);
next.processAI=function(list){
var cards=list[0][1],player=_status.event.player;
var top=[];
var judges=player.getCards('j');
var stopped=false;
if(!player.hasWuxie()){
for(var i=0;i<judges.length;i++){
var judge=get.judge(judges[i]);
cards.sort(function(a,b){
return judge(b)-judge(a);
});
if(judge(cards[0])<0){
stopped=true;break;
}
else{
top.unshift(cards.shift());
}
}
}
var bottom;
if(!stopped){
cards.sort(function(a,b){
return get.value(b,player)-get.value(a,player);
});
while(cards.length){
if(get.value(cards[0],player)<=5) break;
top.unshift(cards.shift());
}
}
bottom=cards;
return [top,bottom];
}
'step 3'
if(result.bool&&result.moved&&result.moved[0].length){
event.cards=result.moved[0];
player.chooseTarget(true,'将以下牌置于一名角色的武将牌上',get.translation(event.cards),function(card,player,target){
return !target.getExpansions('seira_xinghui').length;
}).set('ai',function(target){
return target==_status.event.player?1:0;
});
event.cards.reverse();
}
else event.finish();
'step 4'
var target=result.targets[0];
player.line(target,{color:[253, 153, 182]});
target.addToExpansion(cards).gaintag.add('seira_xinghui');
game.log(player,'将'+get.cnNumber(cards.length)+'张牌置于',target,'的武将牌上')
target.addSkill('seira_xinghui_hoshikuzu');
},
intro:{
markcount:'expansion',
content:function(storage,player){
return '共有'+get.cnNumber(player.getExpansions('seira_xinghui').length)+'张牌';
},
onunmark:function(storage,player){
player.removeSkill('seira_xinghui_hoshikuzu');
},
},
subSkill:{
hoshikuzu:{
trigger:{source:'damageBegin1'},
forced:true,
charlotte:true,
filter:function(event,player){
return player.getExpansions('seira_xinghui').length>0;
},
content:function(){
trigger.num++;
game.log(player,'造成了','#y暴击伤害');
},
group:['seira_xinghui_draw','seira_xinghui_judge'],
},
draw:{
trigger:{player:'drawBefore'},
forced:true,
filter:function(event,player){
return player.getExpansions('seira_xinghui').length>0;
},
content:function(){
var cards=player.getExpansions('seira_xinghui');
var num=Math.min(cards.length,trigger.num);
trigger.num-=num;
player.gain(cards.slice(0,num),'draw');
if(trigger.num==0) trigger.cancel();
},
},
judge:{
trigger:{player:'judgeBegin'},
forced:true,
filter:function(event,player){
return player.getExpansions('seira_xinghui').length>0;
},
content:function(){
trigger.directresult=player.getExpansions('seira_xinghui')[0];
},
},
},
},
seira_yuanying:{
enable:'phaseUse',
usable:1,
filterTarget:true,
selectTarget:2,
multitarget:true,
multiline:true,
line:{color:[253, 153, 182]},
content:function(){
game.countPlayer(function(current){
if(!targets.contains(current)){
current.removeSkill('seira_yinyuan');
}
else{
current.addSkillLog('seira_yinyuan');
}
});
game.delayx();
},
ai:{
order:1,
result:{target:1},
expose:0.1,
},
derivation:'seira_yinyuan',
},
seira_yinyuan:{
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
return target!=player&&target.hasSkill('seira_yinyuan',null,null,false)&&target.countCards('hej')>0;
},
content:function(){
player.gainPlayerCard(target,true,'hej');
target.recover();
},
mark:true,
intro:{content:'skillinfo'},
ai:{
order:9,
viewHandcard:true,
skillTagFilter:function(player,tag,arg){
if(player==arg) return false;
return player.hasSkill('seira_yinyuan')&&arg.hasSkill('seira_yinyuan');
},
result:{
player:function(player,target){
var effect=get.effect(target,{name:'shunshou_copy'},player,player);
if(target.isDamaged()){
if(effect<0) effect/=2;
effect+=get.recoverEffect(target,player,player);
}
return effect;
},
},
},
},
//派对浪客
nsxingyun:{
audio:2,
enable:'chooseToUse',
getSixiang:function(card){
if(typeof card=='string') card={name:card};
if(card.name=='shan') return '玄武';
var type=get.type(card,null,false);
if(type=='delay') return '朱雀';
if(get.tag(card,'damage')) return '白虎';
if(get.tag(card,'recover')) return '玄武';
if(type=='trick') return '青龙';
return false;
},
filter:function(event,player){
if(player.hasSkill('nsxingyun_round')) return false;
var list=player.getStorage('nsxingyun');
if(list.length>=4) return false;
for(var i of lib.inpile){
var type=lib.skill.nsxingyun.getSixiang(i);
if(!type||list.contains(type)) continue;
if(event.filterCard({name:i},player,event)) return true;
if(i=='sha'){
for(var j of lib.inpile_nature){
if(event.filterCard({name:i,nature:j},player,event)) return true;
}
}
}
return false;
},
chooseButton:{
dialog:function(event,player){
var map={青龙:[],朱雀:[],白虎:[],玄武:[]};
var list=player.getStorage('nsxingyun');
for(var i of lib.inpile){
var type=lib.skill.nsxingyun.getSixiang(i);
if(!type||list.contains(type)) continue;
if(event.filterCard({name:i},player,event)) map[type].push([get.type2(i,false),'',i]);
if(i=='sha'){
for(var j of lib.inpile_nature){
if(event.filterCard({name:i,nature:j},player,event)) map[type].push([get.type2(i,false),'',i,j]);
}
}
}
var dialog=['星陨','hidden'];
for(var i in map){
if(map[i].length>0){
dialog.push('<div class="text center">'+i+'</div>');
dialog.push([map[i],'vcard']);
}
}
return ui.create.dialog.apply(ui.create,dialog);
},
filter:function(button,player){
return _status.event.getParent().filterCard({
name:button.link[2],
nature:button.link[3],
},player,_status.event.getParent());
},
check:function(button){
if(_status.event.getParent().type!='phase') return 1;
return _status.event.player.getUseValue({
name:button.link[2],
nature:button.link[3],
},false);
},
backup:function(links,player){
return {
selectCard:1,
filterCard:true,
popname:true,
position:'hs',
check:function(card){
return 7-get.value(card);
},
viewAs:{name:links[0][2],nature:links[0][3]},
precontent:function(){
player.addTempSkill('nsxingyun_round');
},
}
},
prompt:function(links,player){
return '将一张手牌当做'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'使用';
}
},
ai:{
threaten:2.6,
order:1,
result:{player:1},
},
group:'nsxingyun_clear',
derivation:['nsxingyun_faq','bazhen'],
subSkill:{
backup:{},
clear:{
trigger:{player:'useCardAfter'},
forced:true,
popup:false,
filter:function(event,player){
return event.skill=='nsxingyun_backup'&&event.cards.length==1
&&lib.skill.nsxingyun.getSixiang(event.card)!=lib.skill.nsxingyun.getSixiang(event.cards[0])&&!player.getStorage('nsxingyun').contains(lib.skill.nsxingyun.getSixiang(event.card));
},
content:function(){
'step 0'
player.draw(2);
player.markAuto('nsxingyun',[lib.skill.nsxingyun.getSixiang(trigger.card)]);
'step 1'
if(player.getStorage('nsxingyun').length>=4) player.addSkillLog('bazhen');
},
},
round:{
charlotte:true,
onremove:true,
},
},
},
nshanlang:{
trigger:{player:'phaseZhunbeiBegin'},
direct:true,
filter:function(event,player){
return player.countCards('h')>0&&game.hasPlayer(
(current)=>player!=current&&player.canCompare(current)
);
},
content:function(){
'step 0'
var goon=player.hasCard(function(card){
return get.value(card)<=7;
},'h');
player.chooseTarget([1,3],get.prompt('nshanlang'),'和至多三名角色进行拼点',function(card,player,target){
return target!=player&&player.canCompare(target);
}).set('ai',function(target){
if(!_status.event.goon) return false;
var att=get.attitude(_status.event.player,target);
if(att>=0) return 0;
if(target.hasSkillTag('noh')) att/=3;
return -att/Math.sqrt(target.countCards('h'));
}).set('goon',goon);
'step 1'
if(result.bool){
event.max_num=0;
var targets=result.targets.sortBySeat();
player.logSkill('nshanlang',targets);
player.chooseToCompare(targets).callback=lib.skill.nshanlang.callback;
}
else event.finish();
'step 2'
if(event.target){
player.chooseBool('是否令'+get.translation(target)+'获得一张牌?').set('goon',get.attitude(player,target)>0).set('ai',()=>_status.event.goon);
}
else event.finish();
'step 3'
if(result.bool){
var card=get.cardPile2(function(card){
return !lib.skill.nsxingyun.getSixiang(card);
});
if(card) target.gain(card,'gain2');
}
},
callback:function(){
var list=[[player,event.num1],[target,event.num2]],evt=event.getParent(2);
for(var i of list){
if(i[1]>evt.max_num){
evt.max_num=i[1];
evt.target=i[0];
}
else if(evt.target&&i[1]==evt.max_num&&i[0]!=evt.target){
delete evt.target;
}
}
},
},
//钟离牧
nskuanhuai:{
trigger:{player:'phaseUseBegin'},
@ -2283,6 +2640,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1'
if(get.position(result.card,true)=='o'){
var pos=event.positions.randomRemove();
event._first_pos=pos;
game.broadcastAll(function(card,id,player,pos){
lib.skill.yuuki_yicha.addCard(card,id,pos);
lib.skill.yuuki_yicha.changePrompt(get.translation(player)+'放置了'+get.translation(card),id);
@ -2296,7 +2654,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
});
'step 2'
if(get.position(result.card,true)=='o'){
var pos=event.positions.randomRemove();
var list=event.positions;
if(get.isLuckyStar(player)){
var index=(get.color(cards[0],false)==get.color(result.card,false)?0:1);
list=list.filter(function(i){
return Math.abs(i%2-event._first_pos%2)==index;
})
}
var pos=list.randomRemove();
game.broadcastAll(function(card,id,player,pos){
lib.skill.yuuki_yicha.addCard(card,id,pos);
lib.skill.yuuki_yicha.changePrompt(get.translation(player)+'放置了'+get.translation(card),id);
@ -15640,7 +16005,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
'step 0'
var card=target.getCards('hej').randomGet();
var cards=target.getCards('hej');
if(get.isLuckyStar(player)){
var cardx=ui.cardPile.firstChild;
if(cardx){
var color=get.color(card),cardsx=cards.filter(function(i){
return get.color(i)==color;
});
if(cardsx.length>0) cards=cardsx;
}
}
var card=cards.randomGet();
event.card=card;
player.gain(card,target,'giveAuto','bySelf');
player.draw();
@ -16283,6 +16658,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
kyou_zhidian_info:'你可以将一张锦囊牌当做【杀】使用(无距离限制)。当你使用【杀】指定第一个目标后,你选择一个与上次不同的选项:①此【杀】不可被响应。②此【杀】无视防具。③此【杀】伤害+1。④此【杀】不计入次数限制。',
kyou_duanfa:'断发',
kyou_duanfa_info:'限定技当你受到伤害时若伤害值不小于你的体力值则你可弃置所有手牌防止此伤害并回复1点体力且当你于你的下回合开始前成为【杀】或伤害性锦囊牌的目标后你摸一张牌。',
key_seira:'樱庭星罗',
seira_xinghui:'星辉',
seira_xinghui_info:'准备阶段你可以投掷一枚骰子观看牌堆顶的X张牌X为投掷点数并以任意顺序扣置于一名没有“星屑”的角色的武将牌上称为“星屑”。有“星屑”的角色造成的伤害+1且当其从牌堆顶摸牌或取得判定牌时改为从“星屑”中获取。',
seira_yuanying:'缘映',
seira_yuanying_info:'出牌阶段限一次,你可选择两名角色。这两名角色成为“姻缘者”且获得〖姻缘〗直到你下次发动〖缘映〗。',
seira_yinyuan:'姻缘',
seira_yinyuan_info:'你的手牌对其他“姻缘者”可见。出牌阶段限一次你可以获得一名其他“姻缘者”区域内的一张牌然后其回复1点体力。',
noname:"小无",
noname_zhuyuan:"祝愿",
@ -16610,6 +16992,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
nskuanhuai_info:'出牌阶段开始时,你可以从弃牌堆中获得一张非基本牌。若如此做:你本阶段内不能使用基本牌,且本回合的弃牌阶段结束时,你可以依次使用本阶段内弃置的基本牌。',
nsdingbian:'定边',
nsdingbian_info:'锁定技。当你于回合内使用锦囊牌或装备牌后,你令自己本回合的手牌上限-1且选择一项⒈从牌堆获得一张基本牌。⒉令一种基本牌于本回合内不计入手牌上限。',
prp_zhugeliang_ab:'诸葛亮',
prp_zhugeliang:'派对浪客',
nsxingyun:'星陨',
nsxingyun_info:'每回合限一次。你可以将一张手牌当做任意一张符合“四象天阵”的牌使用。然后若这两张牌的类型不同,则你删除此“四象天阵”并摸两张牌。当你删除“四象天阵”中的最后一个项目后,你获得技能〖八阵〗。',
nsxingyun_faq:'四象天阵',
nsxingyun_faq_info:'青龙:无标签普通锦囊牌<br>朱雀:延时锦囊牌<br>白虎:伤害类卡牌<br>玄武:【闪】/回复类卡牌',
nshanlang:'酣浪',
nshanlang_info:'准备阶段,你可以和至多三名角色拼点。然后若这些角色中有拼点牌唯一最大的角色,则你可以令该角色从牌堆中获得一张不符合“四象天阵”的牌。',
junk_zhangrang:'四花张让',
junktaoluan:'滔乱',

View File

@ -264,19 +264,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var list=[];
var equip3=target.getEquip(3);
var equip4=target.getEquip(4);
if(equip3&&evt.filterCard(get.autoViewAs({
name:'shan',
storage:{shouli:true},
},[equip3]),player,evt)) list.push('shan');
var sha=get.autoViewAs({
name:'sha',
storage:{shouli:true},
},[equip4]);
if(equip4&&evt.filterCard(sha,player,evt)){
if(!evt.filterTarget||game.hasPlayer(function(current){
return evt.filterTarget(sha,player,current);
})) list.push('sha');
};
var backupx=_status.event;
_status.event=evt;
try{
if(equip3){
var shan=get.autoViewAs({
name:'shan',
storage:{shouli:true},
},[equip3]);
if(evt.filterCard(shan,player,event)) list.push('shan');
}
if(equip4){
var sha=get.autoViewAs({
name:'sha',
storage:{shouli:true},
},[equip4]);
if(evt.filterCard(sha,player,evt)&&(!evt.filterTarget||game.hasPlayer(function(current){
return evt.filterTarget(sha,player,current);
}))) list.push('sha');
};
}catch(e){game.print(e)};
_status.event=backupx;
if(list.length==1) event._result={
bool:true,
links:[list[0]=='shan'?equip3:equip4],
@ -1003,7 +1011,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
group:'jiufa_count',
subSkill:{
count:{
trigger:{player:'useCard1'},
trigger:{player:['useCard1','respond']},
forced:true,
charlotte:true,
popup:false,
@ -6163,7 +6171,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
pinghe_info:'锁定技。①你的手牌上限基数等于你已损失的体力值。②当你受到其他角色造成的伤害时若你有牌且你的体力上限大于1则你防止此伤害减一点体力上限并将一张手牌交给一名其他角色。然后若你拥有〖英霸〗则伤害来源获得一个“平定”标记。',
shen_jiangwei:'神姜维',
jiufa:'九伐',
jiufa_info:'①当你声明使用牌时,你记录此牌的牌名。②当你使用或打出的牌结算结束后,若你的〖九伐〗记录中包含至少⑨种不同的牌名,则你可以展示牌堆顶的⑨张牌,选择并获得其中任意张点数各不相同且{这九张牌中存在未被选择且和已选择的牌点数相同}的牌,清除所有的记录,将其余牌置入弃牌堆。',
jiufa_info:'①当你声明使用或打出牌时,你记录此牌的牌名。②当你使用或打出的牌结算结束后,若你的〖九伐〗记录中包含至少⑨种不同的牌名,则你可以展示牌堆顶的⑨张牌,选择并获得其中任意张点数各不相同且{这九张牌中存在未被选择且和已选择的牌点数相同}的牌,清除所有的记录,将其余牌置入弃牌堆。',
tianren:'天任',
tianren_info:'锁定技。①当有一张基本牌或普通锦囊牌不因使用而进入弃牌堆后你获得一枚“天任”标记。②当你获得“天任”标记或体力上限变化后若你的“天任”数不小于X则你移去X枚“天任”加1点体力上限并摸两张牌X为你的体力上限。',
pingxiang:'平襄',

View File

@ -14673,15 +14673,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
"rw_tengjia4":{
rw_tengjia4:{
inherit:"tengjia3",
audio:"tengjia1",
},
"xinfu_pingcai":{
"wolong_card":function(){
xinfu_pingcai:{
subSkill:{backup:{}},
wolong_card:function(){
'step 0'
var ingame=game.hasPlayer(function(current){
return ['sp_zhugeliang','re_sp_zhugeliang','ol_sp_zhugeliang'].contains(current.name)||['sp_zhugeliang','re_sp_zhugeliang','ol_sp_zhugeliang'].contains(current.name2);
return ['sp_zhugeliang','re_sp_zhugeliang','ol_sp_zhugeliang','prp_zhugeliang'].contains(current.name)||['sp_zhugeliang','re_sp_zhugeliang','ol_sp_zhugeliang','prp_zhugeliang'].contains(current.name2);
})?true:false;
var prompt='请选择';
prompt+=ingame?'至多两名':'一名';
@ -14700,7 +14701,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
},
"fengchu_card":function(){
fengchu_card:function(){
'step 0'
var ingame=game.hasPlayer(function(current){
return ['re_pangtong','pangtong','ol_pangtong'].contains(current.name)||['re_pangtong','pangtong','ol_pangtong'].contains(current.name2);
@ -14722,10 +14723,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
},
"xuanjian_card":function(){
xuanjian_card:function(){
'step 0'
event.ingame=game.hasPlayer(function(current){
return ['re_xushu','xin_xushu','xushu'].contains(current.name)||['re_xushu','xin_xushu','xushu'].contains(current.name2);
return ['re_xushu','xin_xushu','xushu','dc_xushu'].contains(current.name)||['re_xushu','xin_xushu','xushu','dc_xushu'].contains(current.name2);
})?true:false;
var prompt='请选择一名角色,令其回复一点体力并摸一张牌';
prompt+=event.ingame?',然后你摸一张牌。':'。';
@ -14742,7 +14743,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(event.ingame) player.draw();
}
},
"shuijing_card":function(){
shuijing_card:function(){
'step 0'
event.ingame=game.hasPlayer(function(current){
return current.name=='simahui'||current.name2=='simahui';
@ -14850,70 +14851,264 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:true,
enable:"phaseUse",
usable:1,
content:function(){
"step 0"
var list=["wolong","fengchu","xuanjian","shuijing"];
var list2=[];
for(var i=0;i<list.length;i++){
list2.push(game.createCard(list[i]+'_card','',''))
}
//list2.randomSort();
event.time=get.utc();
player.chooseButton(['请选择要擦拭的宝物',list2],true).set('ai',function(button){
chooseButton:{
dialog:function(){
var list=["wolong","fengchu","xuanjian","shuijing"];
for(var i=0;i<list.length;i++){
list[i]=['','',list[i]+'_card'];
}
return ui.create.dialog('评才',[list,'vcard']);
},
check:function(button){
var name=button.link[2];
var player=_status.event.player;
if(button.link.name=='xuanjian_card'){
if(name=='xuanjian_card'){
if(game.hasPlayer(function(current){
return current.isDamaged()&&current.hp<3&&get.attitude(player,current)>1;
})) return 1+Math.random();
else return 1;
}
else if(button.link.name=='wolong_card'){
else if(name=='wolong_card'){
if(game.hasPlayer(function(current){
return get.damageEffect(current,player,player,'fire')>0;
})) return 1.2+Math.random();
else return 0.5;
}
else return 0.6;
});
},
backup:function(links,player){
return {
audio:'xinfu_pingcai',
filterCard:()=>false,
selectCard:-1,
takara:links[0][2],
content:lib.skill.xinfu_pingcai.contentx,
}
},
},
contentx:function(){
"step 0"
event.pingcai_delayed=true;
var name=lib.skill.xinfu_pingcai_backup.takara;
event.cardname=name;
event.videoId=lib.status.videoId++;
if(player.isUnderControl()){
game.swapPlayerAuto(player);
}
var switchToAuto=function(){
game.pause();
game.countChoose();
setTimeout(function(){
_status.imchoosing=false;
event._result={
bool:true,
};
game.resume();
},9000);
};
var createDialog=function(player,id,name){
if(player==game.me) return;
var dialog=ui.create.dialog('forcebutton','hidden');
var str=get.translation(player)+'正在擦拭宝物上的灰尘…';
var canSkip=(!_status.connectMode);
if(canSkip) str+='<br>点击宝物可以跳过等待AI操作';
dialog.textPrompt=dialog.add('<div class="text center">'+str+'</div>');
dialog.classList.add('fixed');
dialog.classList.add('scroll1');
dialog.classList.add('scroll2');
dialog.classList.add('fullwidth');
dialog.classList.add('fullheight');
dialog.classList.add('noupdate');
dialog.videoId=id;
var canvas2=document.createElement('canvas');
dialog.canvas_viewer=canvas2;
dialog.appendChild(canvas2);
canvas2.classList.add('grayscale');
canvas2.style.position="absolute";
canvas2.style.width='249px';
canvas2.style.height='249px';
canvas2.style['border-radius']='6px';
canvas2.style.left="calc(50% - 125px)";
canvas2.style.top="calc(50% - 125px)";
canvas2.width=249;
canvas2.height=249;
canvas2.style.border='3px solid';
var ctx2=canvas2.getContext('2d');
var img=new Image();
img.src=lib.assetURL+'image/card/'+name+'.png';
img.onload=function(){
ctx2.drawImage(this,0,0,this.width,this.height,0,0,canvas2.width,canvas2.height);
}
if(canSkip){
var skip=function(){
if(event.pingcai_delayed){
delete event.pingcai_delayed;
event._result={
bool:true,
};
game.resume();
canvas2.removeEventListener(lib.config.touchscreen?'touchend':'click',skip);
}
};
canvas2.addEventListener(lib.config.touchscreen?'touchend':'click',skip);
}
dialog.open();
};
var chooseButton=function(id,name){
var event=_status.event;
_status.xinfu_pingcai_finished=false;
var dialog=ui.create.dialog('forcebutton','hidden');
dialog.textPrompt=dialog.add('<div class="text center">擦拭掉宝物上的灰尘吧!</div>');
event.switchToAuto=function(){
event._result={
bool:_status.xinfu_pingcai_finished,
};
game.resume();
_status.imchoosing=false;
_status.xinfu_pingcai_finished=true;
};
dialog.classList.add('fixed');
dialog.classList.add('scroll1');
dialog.classList.add('scroll2');
dialog.classList.add('fullwidth');
dialog.classList.add('fullheight');
dialog.classList.add('noupdate');
dialog.videoId=id;
var canvas=document.createElement('canvas');
var canvas2=document.createElement('canvas');
dialog.appendChild(canvas2);
dialog.appendChild(canvas);
canvas.style.position="absolute";
canvas.style.width='249px';
canvas.style.height='249px';
canvas.style['border-radius']='6px';
canvas.style.left="calc(50% - 125px)";
canvas.style.top="calc(50% - 125px)";
canvas.width=249;
canvas.height=249;
canvas.style.border='3px solid';
canvas2.style.position="absolute";
canvas2.style.width='249px';
canvas2.style.height='249px';
canvas2.style['border-radius']='6px';
canvas2.style.left="calc(50% - 125px)";
canvas2.style.top="calc(50% - 125px)";
canvas2.width=249;
canvas2.height=249;
canvas2.style.border='3px solid';
var ctx=canvas.getContext('2d');
var ctx2=canvas2.getContext('2d');
var img=new Image();
img.src=lib.assetURL+'image/card/'+name+'.png';
img.onload=function(){
ctx2.drawImage(this,0,0,this.width,this.height,0,0,canvas2.width,canvas2.height);
}
ctx.fillStyle='lightgray';
ctx.fillRect(0,0,canvas.width,canvas.height);
canvas.onmousedown=function(ev){
//if(_status.xinfu_pingcai_finished) return;
canvas.onmousemove=function(e){
if(_status.xinfu_pingcai_finished) return;
ctx.beginPath();
ctx.clearRect(e.offsetX-16,e.offsetY-16,32,32);
var data=ctx.getImageData(canvas.width*0.1,canvas.height*0.1,canvas.width*0.8,canvas.height*0.8).data;
var sum=0;
for(var i=3;i<data.length;i+=4){
if(data[i]==0){
sum++;
}
}
if(sum>=(canvas.width*canvas.height)*0.6){
//ctx.clearRect(0,0,canvas.width,canvas.height);
if(!_status.xinfu_pingcai_finished){
_status.xinfu_pingcai_finished=true;
event.switchToAuto();
}
}
}
}
canvas.ontouchstart=function(ev){
//if(_status.xinfu_pingcai_finished) return;
canvas.ontouchmove=function(e){
if(_status.xinfu_pingcai_finished) return;
ctx.beginPath();
var rect=canvas.getBoundingClientRect();
var X=((e.touches[0].clientX-rect.left)/rect.width*canvas.width);
var Y=((e.touches[0].clientY-rect.top)/rect.height*canvas.height);
ctx.clearRect(X-16,Y-16,32,32);
var data=ctx.getImageData(canvas.width*0.1,canvas.height*0.1,canvas.width*0.8,canvas.height*0.8).data;
var sum=0;
for(var i=3;i<data.length;i+=4){
if(data[i]==0){
sum++;
}
}
if(sum>=(canvas.width*canvas.height)*0.6){
if(!_status.xinfu_pingcai_finished){
_status.xinfu_pingcai_finished=true;
event.switchToAuto();
}
}
}
}
canvas.onmouseup=function(ev){
canvas.onmousemove=null;
}
canvas.ontouchend=function(ev){
canvas.ontouchmove=null;
}
dialog.open();
game.pause();
game.countChoose();
};
//event.switchToAuto=switchToAuto;
game.broadcastAll(createDialog,player,event.videoId,name);
if(event.isMine()){
chooseButton(event.videoId,name);
}
else if(event.isOnline()){
event.player.send(chooseButton,event.videoId,name);
event.player.wait();
game.pause();
}
else{
switchToAuto();
}
"step 1"
var delay=8400-(get.utc()-event.time);
if(delay>0){
event.delay2=true;
event.dialog=ui.create.dialog(get.translation(player)+'正在擦拭宝物...'+(_status.connectMode?'':'<br>(点击屏幕可跳过等待)'));
event.videoId=lib.status.videoId++;
game.broadcast('createDialog',event.videoId,get.translation(player)+'正在擦拭宝物...');
game.pause();
event.pingcai_delayed=true;
setTimeout(function(){
if(event.pingcai_delayed==true){
delete event.pingcai_delayed;
game.resume();
}
},delay);
if(!_status.connectMode){
event.forceMine=true;
event.custom.replace.window=function(){
if(event.pingcai_delayed==true){
delete event.forceMine;
delete event.pingcai_delayed;
game.resume();
}
}
}
}
event.card=result.links[0];
var result=event.result||result;
if(!result) result={bool:false};
event._result=result;
game.broadcastAll(function(id,result,player){
_status.xinfu_pingcai_finished=true;
var dialog=get.idDialog(id);
if(dialog){
dialog.textPrompt.innerHTML='<div class="text center">'+(get.translation(player)+'擦拭宝物'+(result.bool?'成功!':'失败…'))+'</div>';
if(result.bool&&dialog.canvas_viewer) dialog.canvas_viewer.classList.remove('grayscale');
}
if(!_status.connectMode) delete event.pingcai_delayed;
},event.videoId,result,player);
game.delay(2.5);
"step 2"
if(event.delay2){
delete event.custom.replace.window;
event.dialog.close();
game.addVideo('cardDialog',null,event.videoId);
game.broadcast('closeDialog',event.videoId);
game.broadcastAll('closeDialog',event.videoId);
if(result.bool){
player.logSkill('pcaudio_'+event.cardname);
event.insert(lib.skill.xinfu_pingcai[event.cardname],{
player:player,
});
}
player.logSkill('pcaudio_'+event.card.name);
player.$throw(event.card);
event.insert(lib.skill.xinfu_pingcai[event.card.name],{
player:player,
});
},
ai:{
order:7,

View File

@ -584,7 +584,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ol_zhuran:'OL朱然',
ol_guansuo:'OL关索',
ol_manchong:'OL满宠',
old_fuhuanghou:'旧伏皇后',
old_fuhuanghou:'旧伏寿',
old_caochong:'旧曹冲',
old_guanqiujian:'旧毌丘俭',
old_huangfusong:'旧皇甫嵩',

View File

@ -526,6 +526,7 @@ window.noname_character_rank={
'dc_sunru',
'dc_wangchang',
'fengfang',
'prp_zhugeliang',
],
bp:[
'chess_diaochan',
@ -802,6 +803,10 @@ window.noname_character_rank={
'caohua',
'zhaoang',
'ns_zhonglimu',
'caoxiancaohua',
'dc_liuba',
'key_seira',
'lukai',
],
b:[
'diy_feishi',
@ -1039,6 +1044,7 @@ window.noname_character_rank={
'qinyilu',
'zhaoyǎn',
'zhangxun',
'xiahoulingnv',
],
bm:[
'diy_xizhenxihong',
@ -1415,6 +1421,7 @@ window.noname_character_rank={
'key_kyou',
'key_erika',
'key_satomi',
'key_seira',
'noname',
],
epic:[
@ -1597,6 +1604,7 @@ window.noname_character_rank={
'ol_xunyu',
'ns_zhonglimu',
'dc_sunru',
'prp_zhugeliang',
'key_kano',
'key_haruko',
'key_akiko',
@ -2006,6 +2014,8 @@ window.noname_character_rank={
'dc_jiling',
'dc_wangchang',
'jin_zhouchu',
'lukai',
'caoxiancaohua',
],
junk:[
'sunshao',
@ -2027,6 +2037,7 @@ window.noname_character_rank={
'fanjiangzhangda',
'wangxiang',
'duji',
'dc_liuba',
],
}
};

View File

@ -1886,6 +1886,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//徐晃
olduanliang:{
audio:2,
locked:false,
enable:'chooseToUse',
filterCard:function(card){
return (get.type2(card)!='trick'&&get.color(card)=='black');
@ -4203,12 +4204,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
residi2:{
onremove:true,
mod:{
cardEnabled2:function(card,player){
cardEnabled:function(card,player){
if(player.getStorage('residi2').contains(get.color(card,player))) return false;
},
cardRespondable:function(card,player){
if(player.getStorage('residi2').contains(get.color(card,player))) return false;
},
cardSavable:function(card,player){
if(player.getStorage('residi2').contains(get.color(card,player))) return false;
},
},
intro:{
content:'不能使用$的牌',
content:'不能使用或打出$牌',
},
marktext:'敌',
},

View File

@ -1393,7 +1393,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
order:11,
result:{
player:function(player){
if(game.countPlayer(function(current){return (current.countCards('h')>player.countCards('h')||current.countCards('e')>player.countCards('e'))&&get.attitude(player,current)<0&&!player.storage.nzry_feijun.contains(current)})>0||game.countPlayer(function(current){return current.countCards('h')>player.countCards('h')&&get.attitude(player,current)<0})>0||(player.countCards('h')>=2&&game.countPlayer(function(current){return current.countCards('e')>player.countCards('e')&&get.attitude(player,current)<0})>0)) return 1;
if(game.hasPlayer(function(current){
return (current.countCards('h')>player.countCards('h')||current.countCards('e')>player.countCards('e'))&&get.attitude(player,current)<0&&player.getStorage('nzry_feijun').contains(current);
})||game.hasPlayer(function(current){
return current.countCards('h')>player.countCards('h')&&get.attitude(player,current)<0;
})||(player.countCards('h')>=2&&game.hasPlayer(function(current){
return current.countCards('e')>player.countCards('e')&&get.attitude(player,current)<0;
}))) return 1;
},
},
},

View File

@ -5,7 +5,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
connect:true,
characterSort:{
sp:{
sp_tianji:["sunhao","liuxie","caoang","hetaihou","sunluyu",'ol_wangrong',"zuofen","ganfuren","ol_bianfuren","qinghegongzhu","tengfanglan","ruiji"],
sp_tianji:["sunhao","liuxie","caoang","hetaihou","sunluyu",'ol_wangrong',"zuofen","ganfuren","ol_bianfuren","qinghegongzhu","tengfanglan","ruiji",'caoxiancaohua'],
sp_sibi:["yangxiu","chenlin","chengyu","shixie","fuwan","wangyun","zhugejin","simalang","maliang","buzhi","dongyun","kanze","sunqian","xizhicai","sunshao",'duxi',"jianggan",'ol_dengzhi','ol_yangyi','ol_dongzhao','ol_chendeng','jin_yanghu','zhaoyǎn'],
sp_tianzhu:["wutugu","yanbaihu","shamoke","panfeng","zhugedan",'huangzu','gaogan',"tadun"],
sp_nvshi:["lingju","guanyinping","zhangxingcai","mayunlu","dongbai","zhaoxiang",'ol_zhangchangpu','ol_xinxianying',"daxiaoqiao"],
@ -28,6 +28,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
caoxiancaohua:['female','qun',3,['huamu','qianmeng','liangyuan','jisi']],
jin_zhouchu:['male','jin',4,['shanduan','yilie']],
zhaoyǎn:['male','wei',4,['tongxie']],
ol_puyuan:['male','shu',4,['olshengong','olqisi']],
@ -172,6 +173,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//kaisa:["male","western",4,["zhengfu"]],
},
characterIntro:{
caoxiancaohua:'此处为「曹宪」的相关介绍。关于「曹华」的部分请参考原本的介绍。<br>曹宪生卒年不详沛国谯县今安徽省亳州市人。东汉末年历史人物汉献帝刘协嫔妃魏武帝曹操女儿。建安十八年嫁给汉献帝刘协受封为贵人。黄初元年220年兄弟曹丕称帝后汉献帝成为山阳公不知所终。',
zhaoyǎn:'赵俨171~245年字伯然颍川阳翟今河南禹州市。东汉末年颍川“四大名士”之一三国时期魏国名臣。熟读经史精明强干。建安二年投靠大将军曹操之后起家朗陵县令历任司空府掾、司空主薄、都督护军、扶风太守等职。魏文帝曹丕继位后历任魏国侍中、驸马都尉、河东太守、典农中郎将、度支尚书封宜土亭侯。魏明帝曹睿时期历任大司农、骠骑将军、大司空等职。正始六年去世时年七十五谥号为穆。',
ruiji:'芮姬,芮玄之女,太子孙登妃,黄武五年卒。',
weizi:'卫兹(?-190年字子许《三国演义》中其名为卫弘当为误记陈留襄邑今河南睢县人。曾举孝廉先后被车骑将军何苗、司徒杨赐等召辟。中平六年189年十二月曹操在陈留己吾募兵而卫兹以家财资助曹操使曹操顺利募得五千士兵。此后卫兹与曹操共同讨伐董卓。初平元年190年卫兹在跟随曹操讨伐董卓途中于荥阳汴水遭遇董卓军徐荣力战终日失利身亡。',
@ -647,6 +649,348 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
//曹宪曹华
huamu:{
audio:2,
trigger:{player:'useCardAfter'},
filter:function(event,player){
var color=get.color(event.card);
if(color=='none') return false;
if(!player.hasHistory('lose',function(evt){
return evt.hs.length>0&&evt.getParent()==event;
})||!event.cards.filterInD('oe').length) return false;
var history=game.getGlobalHistory('useCard');
var index=history.indexOf(event);
if(index<1) return false;
var evt=history[index-1],color2=get.color(evt.card);
return color!=color2&&color2!='none';
},
prompt2:(event)=>'将'+get.translation(event.cards.filterInD('oe'))+'置于武将牌上',
check:function(event,player){
if(!game.hasPlayer(function(current){
return current.hasSkill('qianmeng',null,null,false)&&get.attitude(player,current)>0;
})) return false;
var cards=event.cards.filterInD('e');
if(!cards.length) return true;
var card=cards[0];
if(get.owner(card)==player){
if(get.value(card,player)<=0) return true;
var subtype=get.subtype(card);
if(player.hasCard('hs',function(card){
return get.subtype(card)==subtype&&player.canUse(card,player)&&get.effect(player,card,player,player)>0;
})) return true;
}
return false;
},
content:function(){
var cards=trigger.cards.filterInD('oe');
player.addToExpansion(cards,'gain2').gaintag.add('huamu');
},
ai:{
reverseOrder:true,
combo:'qianmeng',
},
mod:{
aiOrder:function(player,card,num){
if(typeof card=='object'){
var history=game.getGlobalHistory('useCard');
if(!history.length) return;
var evt=history[history.length-1];
if(evt&&evt.card&&get.color(evt.card)!='none'&&get.color(card)!='none'&&get.color(evt.card)!=get.color(card)){
return num+4;
}
}
},
},
marktext:'木',
intro:{
name:'灵杉&玉树',
markcount:function(storage,player){
var red=[],black=[];
var cards=player.getExpansions('huamu');
for(var i of cards){
var color=get.color(i,false);
(color=='red'?red:black).push(i);
}
return (''+black.length+'/'+red.length);
},
content:'expansion',
mark:function(dialog,storage,player){
var red=[],black=[];
var cards=player.getExpansions('huamu');
for(var i of cards){
var color=get.color(i,false);
(color=='red'?red:black).push(i);
}
if(black.length){
dialog.addText('灵杉');
dialog.addSmall(black);
}
if(red.length){
dialog.addText('玉树');
dialog.addSmall(red);
}
},
},
},
qianmeng:{
audio:2,
trigger:{
global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
},
filter:function(event,player){
if(event.name=='addToExpansion'){
if(event.gaintag.contains('huamu')){
var cards=event.player.getExpansions('huamu'),red=cards.filter(function(i){
return get.color(i,false)=='red';
});
if(cards.length==red.length||red.length==0||cards.length==red.length*2) return true;
}
}
if(event.name=='lose'&&event.getlx!==false){
for(var i in event.gaintag_map){
if(event.gaintag_map[i].contains('huamu')){
var cards=event.player.getExpansions('huamu'),red=cards.filter(function(i){
return get.color(i,false)=='red';
});
return (cards.length==red.length||red.length==0||cards.length==red.length/2);
}
}
return false;
}
return game.getGlobalHistory('cardMove',function(evt){
if(evt.name!='lose'||event!=evt.getParent()) return false;
for(var i in evt.gaintag_map){
if(evt.gaintag_map[i].contains('huamu')){
var cards=evt.player.getExpansions('huamu'),red=cards.filter(function(i){
return get.color(i,false)=='red';
});
return (cards.length==red.length||red.length==0||cards.length==red.length/2);
}
}
return false;
}).length>0;
},
forced:true,
content:function(){
player.draw();
},
ai:{combo:'huamu'},
},
liangyuan:{
enable:'chooseToUse',
hiddenCard:function(player,name){
if(name=='tao'){
return !player.hasSkill('liangyuan_tao',null,null,false)&&game.hasPlayer(function(current){
var storage=current.getExpansions('huamu');
return storage.length>0&&storage.filter(function(i){
return get.color(i,false)=='red';
}).length>0;
});
}
else if(name=='jiu'){
return !player.hasSkill('liangyuan_jiu',null,null,false)&&game.hasPlayer(function(current){
var storage=current.getExpansions('huamu');
return storage.length>0&&storage.filter(function(i){
return get.color(i,false)=='black';
}).length>0;
})
}
return false;
},
filter:function(event,player){
if(event.type=='wuxie') return false;
if(!player.hasSkill('liangyuan_tao',null,null,false)&&event.filterCard({name:'tao'},player,event)&&game.hasPlayer(function(current){
var storage=current.getExpansions('huamu');
return storage.length>0&&storage.filter(function(i){
return get.color(i,false)=='red';
}).length>0;
})) return true;
if(!player.hasSkill('liangyuan_jiu',null,null,false)&&event.filterCard({name:'jiu'},player,event)&&game.hasPlayer(function(current){
var storage=current.getExpansions('huamu');
return storage.length>0&&storage.filter(function(i){
return get.color(i,false)=='black';
}).length>0;
})) return true;
return false;
},
chooseButton:{
dialog:function(){
return ui.create.dialog('良缘',[['tao','jiu'],'vcard'],'hidden');
},
filter:function(button,player){
var evt=_status.event.getParent();
var name=button.link[2],color=(name=='tao')?'red':'black';
if(player.hasSkill('liangyuan_'+name,null,null,false)) return false;
var cards=[];
game.countPlayer(function(current){
cards.addArray(current.getExpansions('huamu').filter(function(i){
return get.color(i,false)==color;
}));
});
if(!cards.length) return false;
var card=get.autoViewAs({name:name},cards);
return evt.filterCard(card,player,evt);
},
check:function(button){
if(_status.event.getParent().type!='phase') return 1;
var player=_status.event.player;
var name=button.link[2],color=(name=='tao')?'red':'black';
var cards=[];
game.countPlayer(function(current){
cards.addArray(current.getExpansions('huamu').filter(function(i){
return get.color(i,false)==color;
}));
});
var card=get.autoViewAs({name:name},cards);
return player.getUseValue(card,null,true);
},
backup:function(links,player){
var name=links[0][2],color=(name=='tao')?'red':'black';
var cards=[];
game.countPlayer(function(current){
cards.addArray(current.getExpansions('huamu').filter(function(i){
return get.color(i,false)==color;
}));
});
if(!cards.length) return false;
var card=get.autoViewAs({name:name},cards);
return {
viewAs:card,
color:color,
selectCard:-1,
filterCard:()=>false,
precontent:function(){
player.addTempSkill('liangyuan_'+event.result.card.name,'roundStart');
player.logSkill('liangyuan');
var list=[],color=lib.skill.liangyuan_backup.color;
var cards=[];
game.countPlayer(function(current){
var cardsx=current.getExpansions('huamu').filter(function(i){
return get.color(i,false)==color;
});
if(cardsx.length){
cards.addArray(cardsx);
list.push([current,cardsx]);
current.$throw(cardsx);
game.log(current,'将',cardsx,'化作“'+(color==''?'':'')+'”良缘')
}
});
event.result.cards=cards;
delete event.result.skill;
event.result._apply_args={'throw':false};
game.loseAsync({
lose_list:list,
}).setContent('chooseToCompareLose');
},
}
},
prompt:function(links,player){
var name=links[0][2],color=(name=='tao')?'玉树':'灵杉';
return '将场上所有的“'+color+'”当做【'+get.translation(name)+'】使用';
},
},
subSkill:{
tao:{charlotte:true},
jiu:{charlotte:true},
},
ai:{
order:function(item,player){
if(!player) player=_status.event.player;
return get.order({name:lib.skill.liangyuan.hiddenCard(player,'jiu')?'jiu':'tao'})+4;
},
result:{
player:function(player){
if(_status.event.dying) return get.attitude(player,_status.event.dying);
return 1;
},
},
combo:'huamu',
threaten:3,
},
},
jisi:{
audio:2,
trigger:{player:'phaseZhunbeiBegin'},
direct:true,
limited:true,
skillAnimation:true,
animationColor:'metal',
filter:function(event,player){
var skills=player.getStockSkills('一!','五!').filter(function(skill){
if(skill=='jisi') return false;
var info=get.info(skill);
return info&&!info.charlotte;
});
var history=player.getAllHistory('useSkill');
for(var i of history){
if(skills.contains(i.sourceSkill)||skills.contains(i.skill)) return true;
}
return false;
},
content:function(){
'step 0'
var skills2=[];
var skills=player.getStockSkills('只!','因!').filter(function(skill){
if(skill=='jisi') return false;
var info=get.info(skill);
return info&&!info.charlotte;
});
var history=player.getAllHistory('useSkill');
for(var i of history){
if(skills.contains(i.sourceSkill)) skills2.add(i.sourceSkill);
if(skills.contains(i.skill)) skills2.add(i.skill);
if(skills.length==skills2.length) break;
}
event.skills2=skills2;
var str='令一名其他角色获得';
for(var i=0;i<skills2.length;i++){
str+=('〖'+get.translation(skills2[i])+'〗');
if(i!=skills2.length-1) str+=';';
}
if(skills2.length>1) str+='中的一个技能';
str+='然后你';
if(player.countCards('h')>0) str+='弃置所有手牌,并';
str+='视为对其使用一张【杀】';
player.chooseTarget(get.prompt('jisi'),str,lib.filter.notMe).set('ai',function(target){
if(!_status.event.goon) return false;
var att=get.attitude(player,target);
if(att<4) return false;
var eff=get.effect(target,{name:'sha',isCard:true},player,player);
if(eff>=0) return att+eff;
if(target.hp<=2) return false;
return att/Math.max(1,-eff);
}).set('goon',function(){
if(player.hasUnknown()||player.identity=='nei') return false;
var hs=player.getCards('h');
if(!hs.length||get.value(hs,player)<=9-player.hp) return true;
return false;
}());
'step 1'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('jisi',target);
player.awakenSkill('jisi');
var list=event.skills2;
if(list.length==0) event._result={control:list[0]};
player.chooseControl(list).set('prompt','令'+get.translation(target)+'获得一个技能').set(
'ai',()=>_status.event.choice
).set('choice',list.contains('qianmeng')?'qianmeng':list.randomGet());
}
else event.finish();
'step 2'
target.addSkill(result.control);
'step 3'
var num=player.countCards('h');
if(num>0) player.chooseToDiscard('h',num,true);
'step 4'
if(player.canUse('sha',target,false)) player.useCard(false,target,{
name:'sha',
isCard:true,
},'noai')
},
},
//周处
shanduan:{
audio:2,
@ -18888,7 +19232,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
spfengyin_info:'其他角色的回合开始时,若其体力值不少于你,你可以交给其一张【杀】,令其跳过出牌阶段和弃牌阶段。',
spchizhong:'持重',
spchizhong_info:'锁定技你的手牌上限等于体力上限其他角色死亡时你加1点体力上限。',
sp_fuhuanghou:'SP伏皇后',
sp_fuhuanghou:'SP伏寿',
spcangni:'藏匿',
spcangni_info:'弃牌阶段开始时你可以回复1点体力或摸两张牌然后将你的武将牌翻面其他角色的回合内当你获得每回合限一次/失去一次牌时,若你的武将牌背面朝上,你可以令该角色摸/弃置一张牌。',
spmixin:'密信',
@ -19077,6 +19421,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
shanduan_info:'①回合开始时你生成数组R=[1,2,3,4]。②摸牌阶段开始时你从数组R中选择并移除一个数字A。你本阶段的额定摸牌数改为A。③出牌阶段开始时你从数组R中选择并移除两个数字B和C。你将你本阶段内的攻击范围基数最小值和使用【杀】的次数上限基础值改为B和C。④弃牌阶段开始时你从数组R中选择并移除一个数字D。你令你本回合的手牌上限基数改为D。⑤当你于回合外受到伤害后你令下回合生成的R中最小的一个数字+1。',
yilie:'义烈',
yilie_info:'每轮每种牌名限一次。你可以将两张颜色相同的手牌当做任意一种基本牌使用。',
caoxiancaohua:'曹宪曹华',
huamu:'化木',
huamu_info:'当你使用手牌后,若此牌和本回合内上一张被使用的牌颜色不同,则你可以将此牌对应的所有{位于处理区或装备区}的实体牌置于你的武将牌上。这些牌中的黑色牌称为“灵杉”,红色牌称为“玉树”。',
qianmeng:'前盟',
qianmeng_info:'锁定技。当有牌移动事件结算结束后若有角色的“灵杉”和“玉树”数量发生了变化且二者数量相等或有一项为0则你摸一张牌',
liangyuan:'良缘',
liangyuan_info:'每轮每项各限一次。你可以将场上所有的“灵杉”/“玉树”置于处理区,然后将这些牌当做【酒】/【桃】使用。',
jisi:'羁肆',
jisi_info:'限定技。准备阶段,你可以令一名其他角色获得你武将牌上的一个已发动过的其他技能。然后你弃置所有手牌,并视为对其使用一张【杀】(无距离关系的限制)。',
sp_tianji:'天极·皇室宗亲',
sp_sibi:'四弼·辅国文曲',

View File

@ -4,6 +4,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
name:'sp2',
connect:true,
character:{
xiahoulingnv:['female','wei',4,['fuping','weilie']],
dc_liuba:['male','shu',3,['dczhubi','dcliuzhuan']],
zhangxun:['male','qun',4,['suizheng']],
zongyu:['male','shu',3,['zyqiao','chengshang']],
fengfang:['male','qun',3,['dcditing','dcbihuo']],
@ -169,10 +171,245 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp2_huangjia:['caomao','liubian','dc_liuyu'],
sp2_zhangtai:['guozhao','fanyufeng','ruanyu','yangwan','re_panshu'],
sp2_jinse:['caojinyu','re_sunyi','re_fengfangnv','caohua','laiyinger'],
sp_decade:['huaman','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','re_dongzhao','zhouyi','mamidi','dc_jiben','dc_luotong','guanning','dc_huangchengyan','dc_jiling','dc_sunru','zhaoang','dc_wangchang','fengfang','zhangxun'],
sp_decade:['huaman','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','re_dongzhao','zhouyi','mamidi','dc_jiben','dc_luotong','guanning','dc_huangchengyan','dc_jiling','dc_sunru','zhaoang','dc_wangchang','fengfang','zhangxun','xiahoulingnv','dc_liuba'],
}
},
skill:{
//夏侯令女
fuping:{
audio:2,
hiddenCard:function(player,name){
var list=player.getStorage('fuping').slice(0);
list.removeArray(player.getStorage('fuping_round'));
return list.contains(name)&&player.hasCard((card)=>(get.type(card)!='basic'),'ehs');
},
enable:'chooseToUse',
filter:function(event,player){
var list=player.getStorage('fuping').slice(0);
list.removeArray(player.getStorage('fuping_round'));
if(!list.length) return false;
if(!player.hasCard((card)=>(get.type(card)!='basic'),'ehs')) return false;
for(var i of list){
var type=get.type2(i,false);
if((type=='basic'||type=='trick')&&event.filterCard({name:i},player,event)) return true;
}
return false;
},
chooseButton:{
dialog:function(event,player){
var list=player.getStorage('fuping').slice(0);
list.removeArray(player.getStorage('fuping_round'));
var list2=[];
for(var i of list){
var type=get.type2(i,false);
if((type=='basic'||type=='trick')&&event.filterCard({name:i},player,event)) list2.push([type,'',i]);
}
return ui.create.dialog('浮萍',[list2,'vcard']);
},
check:function(button){
if(_status.event.getParent().type!='phase') return 1;
return _status.event.player.getUseValue({name:button.link[2]},null,true);
},
backup:function(links,player){
return {
audio:'fuping',
filterCard:(card)=>get.type(card)!='basic',
position:'he',
popname:true,
viewAs:{
name:links[0][2],
isCard:true,
},
check:function(card){
return 8-get.value(card);
},
precontent:function(){
player.addTempSkill('fuping_round');
player.markAuto('fuping_round',[event.result.card.name]);
},
}
},
prompt:function(links,player){
return '将一张非基本牌当做【'+get.translation(links[0][2])+'】使用';
},
},
ai:{
order:8,
result:{player:1},
respondSha:true,
skillTagFilter:function(player){
var list=player.getStorage('fuping').slice(0);
list.removeArray(player.getStorage('fuping_round'));
return list.contains('sha');
},
},
mod:{
targetInRange:function(card,player,target){
if(player.countDisabled()>=5) return true;
},
},
marktext:'萍',
intro:{content:'已记录$'},
group:'fuping_mark',
subSkill:{
mark:{
trigger:{global:'useCardAfter'},
filter:function(event,player){
return player!=event.player&&event.targets.contains(player)&&
player.countDisabled()<5&&!player.getStorage('fuping').contains(event.card.name);
},
logTarget:'player',
prompt2:(event)=>('废除一个装备栏并记录【'+get.translation(event.card.name)+'】'),
check:function(event,player){
var list=['tao','juedou','guohe','shunshou','wuzhong','xietianzi','yuanjiao','wanjian','nanman','huoshaolianying','chuqibuyi','zhujinqiyuan','lebu','bingliang'];
if(!list.contains(event.card.name)) return false;
if(['nanman','wanjian'].contains(event.card.name)&&!player.hasValueTarget({name:event.card.name})) return false;
var list=[3,5,4,1,2];
for(var i of list){
if(!player.isDisabled(i)){
var card=player.getEquip(i);
if(!card) return true;
if(get.value(card,player)<=0) return true;
}
}
return false;
},
content:function(){
player.markAuto('fuping',[trigger.card.name]);
game.log(player,'记录了','#y'+get.translation(trigger.card.name));
player.chooseToDisable().set('ai',function(event,player,list){
var list=[3,5,4,1,2];
for(var i of list){
if(!player.isDisabled(i)){
var card=player.getEquip(i);
if(!card) return 'equip'+i;
if(get.value(card,player)<=0) return 'equip'+i;
}
}
return list.randomGet();
});
},
},
backup:{audio:'fuping'},
round:{charlotte:true,onremove:true},
},
},
weilie:{
audio:2,
enable:'phaseUse',
filter:function(event,player){
return player.countMark('weilie')<=player.getStorage('fuping').length&&player.countCards('he')>0&&game.hasPlayer((current)=>current.isDamaged())
},
filterCard:true,
position:'he',
filterTarget:(card,player,target)=>target.isDamaged(),
check:function(card){
return 8-get.value(card);
},
content:function(){
'step 0'
player.addMark('weilie',1,false);
target.recover();
'step 1'
if(target.isDamaged()) target.draw();
},
onremove:true,
ai:{
order:1,
result:{
target:function(player,target){
var eff=get.recoverEffect(target,player,player);
if(target.getDamagedHp()>1) eff+=get.effect(target,{name:'wuzhong'},player,target)/2;
return eff;
},
},
},
},
//刘巴
dczhubi:{
audio:2,
trigger:{global:'loseAfter'},
filter:function(event,player){
if(event.type!='discard'||event.position!=ui.discardPile) return false;
for(var i of event.cards){
if(get.suit(i,event.player)=='diamond') return true;
}
return false;
},
prompt2:'检索一张【无中生有】并置于牌堆顶',
check:function(event,player){
return get.attitude(player,_status.currentPhase.next)>0;
},
content:function(){
var card=get.cardPile(function(card){
return card.name=='wuzhong'&&get.suit(card)!='diamond';
});
if(card){
game.log(player,'将',card,'置于牌堆顶');
card.fix();
ui.cardPile.insertBefore(card,ui.cardPile.firstChild);
game.updateRoundNumber();
game.delayx();
}
},
},
dcliuzhuan:{
audio:2,
group:['dcliuzhuan_mark','dcliuzhuan_gain'],
mod:{
targetEnabled:function(card){
if(card.cards){
for(var i of card.cards){
if(i.hasGaintag('dcliuzhuan_tag')) return false;
}
}
else if(get.itemtype(card)=='card'){
if(card.hasGaintag('dcliuzhuan_tag')) return false;
}
},
},
subSkill:{
gain:{
trigger:{global:'loseAfter'},
forced:true,
logTarget:'player',
filter:function(event,player){
if(event.type!='discard'||event.player!=_status.currentPhase) return false;
for(var i in event.gaintag_map){
if(event.gaintag_map[i].contains('dcliuzhuan_tag')) return true;
}
return false;
},
content:function(){
var cards=trigger.hs.filter(function(i){
return trigger.gaintag_map[i.cardid]&&trigger.gaintag_map[i.cardid].contains('dcliuzhuan_tag');
});
if(cards.length>0) player.gain(cards,'gain2');
},
},
mark:{
trigger:{global:'gainBegin'},
forced:true,
popup:false,
silent:true,
lastDo:true,
filter:function(event,player){
if(player==event.player||event.player!=_status.currentPhase) return false;
var evt=event.getParent('phaseDraw');
if(evt&&evt.name=='phaseDraw') return false;
return true;
},
content:function(){
trigger.gaintag.add('dcliuzhuan_tag');
trigger.player.addTempSkill('dcliuzhuan_tag');
},
},
tag:{
charlotte:true,
onremove:(player,skill)=>player.removeGaintag(skill),
},
},
},
//张勋
suizheng:{
audio:2,
@ -419,7 +656,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var num=lib.skill.dcpingxi.getNum()+ui.selected.cards.length;
if(num<game.countPlayer(function(current){
if(current==player||current.countCards('he')==0) return false;
return get.effect(target,{name:'guohe_copy2'},player,player)+get.effect(target,{name:'shanduan'},player,player)>0;
return get.effect(current,{name:'guohe_copy2'},player,player)+get.effect(current,{name:'sha'},player,player)>0;
})){
if(get.position(card)=='h'&&player.needsToDiscard()>ui.selected.cards.length) return 7+1/Math.max(1,get.value(card));
return 7-get.value(card);
@ -1292,6 +1529,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(event.card.name=='sha'&&event.card.nature) str+=get.translation(event.card.nature);
return (str+'【'+get.translation(event.card.name)+'】');
},
check:function(event,player){
return !get.tag(event.card,'norepeat')
},
content:function(){
player.addTempSkill('tongli_effect');
var evt=trigger.getParent('phaseUse');
@ -1700,7 +1940,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
'step 0'
event.num=player.getStat('damage');
event.num=Math.min(5,player.getStat('damage'));
player.chooseTarget('是否发动限定技【襄戍】?','令一名角色回复'+event.num+'点体力并摸'+get.cnNumber(event.num)+'张牌',function(card,player,target){
return target.isDamaged();
}).set('ai',function(target){
@ -4678,7 +4918,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.chooseButton(dialog,true).set('ai',function(button){
var player=_status.event.player;
var color=get.color(button.link),cards=player.getExpansions('syjiqiao');
var num1=cards.filter((card)=>get.color(card)==color),num2=cards.length-num1;
var num1=cards.filter((card)=>get.color(card)==color).length,num2=cards.length-num1;
if(num1>=num2) return get.value(button.link);
return 0;
});
@ -4810,7 +5050,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var list=[];
for(var name of lib.inpile){
if(get.type(name)!='basic') continue;
if(player.hasUseTarget({name:name},false)) list.push(['基本','',name]);
if(source.hasUseTarget({name:name},false)) list.push(['基本','',name]);
if(name=='sha'){
for(var nature of lib.inpile_nature){
if(source.hasUseTarget({name:name,nature:nature},false)) list.push(['基本','',name,nature]);
@ -7422,10 +7662,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
global:['phaseBefore'],
},
direct:true,
filter:function(event,player){
filter:function(event,player,name){
if(player.hasSkill('zhiwei2')) return false;
if(get.mode()=='guozhan') return event.name=='showCharacter'&&(event.toShow.contains('gz_luyusheng')||event.toShow.contains('luyusheng'));
return event.name!='showCharacter'&&(event.name!='phase'||game.phaseNumber==0);
return event.name!='showCharacter'&&(name!='phaseBefore'||game.phaseNumber==0);
},
content:function(){
'step 0'
@ -14450,6 +14690,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(event.card.name!='sha'&&get.type(event.card)!='trick') return false;
var info=get.info(event.card);
if(info.allowMultiple==false) return false;
var num=player.getHistory('useSkill',function(evt){
return evt.skill=='pyzhuren_club';
}).length;
if(num>=2) return false;
if(event.targets&&!info.multitarget){
if(game.hasPlayer(function(current){
return lib.filter.targetEnabled2(event.card,player,current)&&!event.targets.contains(current);
@ -14476,10 +14720,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!event.isMine()&&!event.isOnline()) game.delayx();
event.targets=result.targets;
}
else{
player.storage.counttrigger[event.name]--;
event.finish();
}
'step 2'
if(event.targets){
player.logSkill(event.name,event.targets);
@ -16623,6 +16863,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhaoang:'赵昂,字伟章(一作伟璋),天水冀人。汉末时曹操部下。初为羌道令,建安中转参军事徒居州治冀城。建安十八年,马超围冀城多天,城中饥困,凉州刺史韦康不愿百姓再受苦而打算投降,赵昂进劝但不为所纳。后马超背信弃义杀韦康并劫其子赵月为人质,把他送至南郑。欲以此要迫使赵昂为己所用。后与梁宽、赵衢、庞恭、杨阜等结谋为康报仇,并举兵讨伐马超。马超兵败遂弃城,投奔张鲁。得张鲁之援后马超于建安十九年复寇,赵昂与妻子王异坚守祁山三十天至夏侯渊的救兵解围,其子赵月终为马超斩杀。自冀城之难,至于祁山,赵昂出九奇策。',
fengfang:'冯方,其字不详,司隶人。初掌校事,监察京师及周边地区,刺探文武百官秘事。十常侍之乱后,董卓进京,掌控朝政。冯方认为他胸怀不臣之心,于是弃官携女儿冯妤至江南避祸。其后董卓果然乱政,京师之地生灵涂炭,更将洛阳付之一炬。冯方因其先见之明得以保全家人。<br>冯妤长大成人后,有倾国之貌。一日袁术登城观景,得见冯妤,心中非常喜欢,于是将其纳为夫人。冯方心忧自家女儿不谙世事,于是将可以让人更显妩媚的家传宝梳交给她,希望能借此使其获得袁术的宠爱。其后果然传来袁术偏爱冯夫人的消息,冯方因此宽心,接受了袁术的征辟,为其效力。然而好景不长,没过多久,冯妤自缢身亡的消息传出,冯方悲愤不已,弃官而走,自此销声匿迹。',
zhangxun:'张勋东汉末年军阀袁术帐下大将袁术称帝后受封大将军。初平四年公元193年袁术引兵入陈留被曹操、袁绍合力击败逃至雍丘。后入九江杀死扬州刺史陈温而自领之并任命张勋、桥蕤为大将。时孙策依附于袁术被表为怀义校尉张勋对其倾心敬服。袁术称帝后任命张勋为大将军攻打吕布大败而还。其后曹操又以袁术称帝为名南下进攻袁术闻之大惊即走度淮留张勋、桥蕤守蕲阳以拒曹。曹操破其军斩桥蕤张勋退走。建安四年公元199年袁术病死张勋率残军欲南投孙策途中被袁术旧部刘勋俘虏其后下落不明。',
xiahoulingnv:'夏侯令女字令女名不详。生卒年不详三国时期人物。夏侯文宁之女《三国演义》中为夏侯令之女曹文叔之妻。其事迹见于《三国志·魏书·诸夏侯曹传第九》裴松之注引皇甫谧《列女传》。而在《三国演义》中由于作者断句错误便认为“夏侯令女”是“夏侯令之女”之意见《三国演义》第107回“乃夏侯令女也”由其语气可推断。',
},
characterTitle:{
wulan:'#b对决限定武将',
@ -16755,6 +16996,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
luotong:['luotong','dc_luotong'],
mamidi:['mamidi','xin_mamidi'],
dc_wangchang:['dc_wangchang','tw_wangchang'],
liuba:['dc_liuba','liuba'],
},
translate:{
lijue:"李傕",
@ -17288,7 +17530,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
rexingluan:'兴乱',
rexingluan_info:'出牌阶段限一次,当你使用的仅指定一个目标的牌结算完成后,你可以获得场上一张与此牌点数相同的牌,或获得牌堆中随机一张点数与此牌相同的牌。',
xinxingluan:'兴乱',
xinxingluan_info:'出牌阶段限一次。当你使用牌结算结束后你可选择一项①观看牌堆中的两张点数为6的牌并获得其中一张没有则改为摸六张牌②令一名其他角色弃置一张点数为6的牌或交给你一张牌③获得场上的一张点数为6的牌。',
xinxingluan_info:'每回合限一次。当你于出牌阶段使用牌结算结束后你可选择一项①观看牌堆中的两张点数为6的牌并获得其中一张没有则改为摸六张牌②令一名其他角色弃置一张点数为6的牌或交给你一张牌③获得场上的一张点数为6的牌。',
zhouyi:'周夷',
zhukou:'逐寇',
zhukou_info:'①当你于一名角色的出牌阶段第一次造成伤害后你可以摸X张牌X为本回合你已使用的牌数。②你的结束阶段若你本回合没有造成伤害你可以对两名其他角色各造成1点伤害。',
@ -17575,6 +17817,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhangxun:'张勋',
suizheng:'随征',
suizheng_info:'结束阶段,你可以选择一名角色A,获得如下效果直到其下回合结束:①A于下回合出牌阶段内使用【杀】的次数上限+1且无距离限制下回合的出牌阶段结束时你可以选择一名此阶段内受到过造成的伤害的角色视为对使用一张【杀】。',
dc_liuba:'刘巴',
dczhubi:'铸币',
dczhubi_info:'当有♦牌因弃置而进入弃牌堆后,你可以令系统从牌堆/弃牌堆中检索一张【无中生有】,并将此牌置于牌堆顶。',
dcliuzhuan:'流转',
dcliuzhuan_tag:'转',
dcliuzhuan_info:'锁定技。①其他角色于其回合内不于摸牌阶段而获得的牌称为“转”。②你不能成为实体牌中包含“转”的牌的目标。③当有“转”因弃置而进入弃牌堆后,你获得之。',
xiahoulingnv:'夏侯令女',
fuping:'浮萍',
fuping_info:'①其他角色对你使用的结算结束后,若你未因此技能记录过此牌的名称且你有未废除的装备栏,则你可以废除一个装备栏,记录此牌的名称。②每回合每种牌名限一次。你可以将一张非基本牌当做〖浮萍①〗记录过的基本牌或锦囊牌使用或打出。③若你的所有装备栏均已被废除,则你使用牌无距离限制。',
weilie:'炜烈',
weilie_info:'每局游戏限X次。出牌阶段你可以弃置一张牌并选择一名已受伤的角色令该角色回复1点体力。然后若其体力值小于体力上限则其摸一张牌X为你〖浮萍①〗中的记录数+1。',
sp_whlw:"文和乱武",
sp_zlzy:"逐鹿中原",

View File

@ -12,10 +12,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yijiang_2014:['hanhaoshihuan','chenqun','caozhen','zhangsong','wuyi','zhoucang','zhuhuan','guyong','sunluban','yj_jushou','caifuren'],
yijiang_2015:['caoxiu','caorui','zhongyao','xiahoushi','liuchen','zhangyi','zhuzhi','quancong','sunxiu','gongsunyuan','guotufengji'],
yijiang_2016:['guohuanghou','sunziliufang','huanghao','liyan','sundeng','cenhun','zhangrang','liuyu'],
yijiang_2017:['xinxianying','jikang','wuxian','qinmi','xuezong','xushi','caiyong','caojie',],
yijiang_2017:['xinxianying','jikang','wuxian','qinmi','xuezong','xushi','caiyong','caojie'],
yijiang_2022:['lukai'],
},
},
character:{
lukai:['male','wu',4,['lkbushi','lkzhongzhuang']],
xin_fazheng:['male','shu',3,['xinenyuan','xinxuanhuo'],['die_audio']],
old_guanzhang:['male','shu',4,['old_fuhun']],
old_wangyi:['female','wei',3,['oldzhenlie','oldmiji']],
@ -99,6 +101,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yujin:["male","wei",4,["yizhong"],[]],
},
characterIntro:{
lukai:'陆凯198269年字敬风吴郡吴县今江苏省苏州市人。三国时期吴国重臣丞相陆逊的族侄大司马陆抗的族兄。黄武年间举孝廉出身曾任永兴县长、诸暨县长颇有治绩。拜建武都尉、儋耳太守与聂友率军讨伐朱崖和儋耳迁建武校尉。五凤二年255年讨斩零陵山贼陈毖拜偏将军、巴丘督册封都乡侯。迁武昌右部督随军进入寿春。后拜荡魏将军加号绥远将军。吴景帝孙休继位拜征北将军、假节、领豫州牧。孙皓即位迁任镇西大将军都督巴丘又领荆州牧进封嘉兴侯。宝鼎元年266年迁左丞相。以正直及屡次劝谏孙皓而闻名。建衡元年269年去世时年七十二。',
caozhi:'字子建,沛国谯人,三国曹魏著名文学家,建安文学代表人物。魏武帝曹操之子,魏文帝曹丕之弟,生前曾为陈王,去世后谥号“思”,因此又称陈思王。南朝宋文学家谢灵运更有“天下才有一石,曹子建独占八斗”的评价。王士祯尝论汉魏以来二千年间诗家堪称“仙才”者,曹植、李白、苏轼三人耳。',
gaoshun:'中国东汉末年将领,吕布帐下中郎将。史载高顺为人清白有威严,不好饮酒,所统率的部队精锐非常,号称“陷阵营”。屡进忠言于吕布,吕布虽知其忠而不能用。曹操击破吕布后,高顺被曹操所杀。',
chengong:'字公台东汉末年吕布帐下谋士东郡东武阳人。性情刚直足智多谋年少时与海内知名之士相互结交。192年陈宫等人主张曹操接任兖州牧。但此后陈宫因曹操杀害边让而与曹操反目并游说张邈等人背叛曹操迎吕布入兖州辅助吕布攻打曹操。吕布战败后随吕布等一同被曹操所擒决意赴死。',
@ -194,6 +197,184 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhonghui:['jiangwei'],
},
skill:{
//陆凯
lkbushi:{
audio:2,
getBushi:function(player){
if(!player.storage.lkbushi) return ['spade','heart','club','diamond'];
return player.storage.lkbushi;
},
onremove:true,
trigger:{player:'phaseZhunbeiBegin'},
direct:true,
locked:false,
content:function(){
'step 0'
var list=lib.skill.lkbushi.getBushi(player);
list=list.map(function(i){
return ['','','lukai_'+i];
});
var next=player.chooseToMove('卜筮:是否调整〖卜筮〗的花色顺序?');
next.set('list',[
['无次数限制/使用打出摸牌<br>可弃牌无效/结束阶段获得',[list,'vcard'],function(list){
var list2=list.map(function(i){
return get.translation(i[2].slice(6));
});
return '你使用'+list2[0]+'牌时无次数限制;使用或打出'+list2[1]+'时,摸一张牌;<br>成为'+list2[2]+'牌目标后可弃一张牌无效;结束阶段获得一张'+list2[3]+'牌';
}],
]);
next.set('processAI',function(){
var player=_status.event.player;
var list=lib.skill.lkbushi.getBushi(player);
var list2=[];
var hs=player.getCards('hs',function(card){
return player.hasValueTarget(card);
});
list.sort(function(a,b){
return hs.filter((i)=>get.suit(i)==b).length-hs.filter((i)=>get.suit(i)==a).length;
});
list2.push(list.shift());
hs=player.getCards('hs','sha');
list.sort(function(a,b){
return hs.filter((i)=>get.suit(i)==b).length-hs.filter((i)=>get.suit(i)==a).length;
});
list2.unshift(list.shift());
list.randomSort();
list2.addArray(list);
return [list2.map((i)=>['','','lukai_'+i])]
});
'step 1'
if(result.bool){
var list=lib.skill.lkbushi.getBushi(player),list2=result.moved[0].map(function(i){
return i[2].slice(6);
});
for(var i=0;i<4;i++){
if(list[i]!=list2[i]){
player.logSkill('lkbushi');
player.storage.lkbushi=list2;
var str='#g';
for(var j=0;j<4;j++){
str+=get.translation(list2[j]);
if(j!=3) str+='/';
}
game.log(player,'将','#g【卜筮】','的花色序列改为',str);
game.delayx();
break;
}
}
}
},
mark:true,
marktext:'筮',
intro:{
content:function(storage,player){
var list=lib.skill.lkbushi.getBushi(player).map((i)=>get.translation(i));
return '①你使用'+list[0]+'牌无次数限制。②当你使用或打出'+list[1]+'牌后,你摸一张牌。③当你成为'+list[2]+'牌的目标后,你可以弃置一张牌,令此牌对你无效。④结束阶段开始时,你从牌堆或弃牌堆获得一张'+list[3]+'牌。⑤准备阶段开始时,你可调整此技能中四种花色的对应顺序。';
},
},
group:['lkbushi_unlimit','lkbushi_draw','lkbushi_defend','lkbushi_gain'],
subSkill:{
unlimit:{
mod:{
cardUsable:function(card,player){
var list=lib.skill.lkbushi.getBushi(player);
if(list[0]==get.suit(card)) return Infinity;
},
},
trigger:{player:'useCard1'},
forced:true,
popup:false,
silent:true,
firstDo:true,
filter:function(event,player){
if(event.addCount===false) return true;
var list=lib.skill.lkbushi.getBushi(player);
return (list[0]==get.suit(event.card));
},
content:function(){
trigger.addCount=false;
var stat=player.getStat().card,name=trigger.card.name;
if(stat[name]&&typeof stat[name]=='number') stat[name]--;
},
},
draw:{
audio:'lkbushi',
trigger:{player:['useCard','respond']},
forced:true,
locked:false,
filter:function(event,player){
var list=lib.skill.lkbushi.getBushi(player);
return list[1]==get.suit(event.card);
},
content:function(){
player.draw();
},
},
defend:{
audio:'lkbushi',
trigger:{target:'useCardToTargeted'},
direct:true,
filter:function(event,player){
var list=lib.skill.lkbushi.getBushi(player);
return list[2]==get.suit(event.card)&&!event.excluded.contains(player)&&player.countCards('he')>0;
},
content:function(){
'step 0'
player.chooseToDiscard('he',get.prompt('lkbushi'),'弃置一张牌,令'+get.translation(trigger.card)+'对你无效').set('ai',function(card){
if(_status.event.eff>=0) return false;
return -_status.event.eff*1.1-get.value(card);
}).set('eff',get.effect(player,trigger.card,trigger.player,player)).logSkill=['lkbushi_defend',trigger.player];
'step 1'
if(result.bool){
trigger.excluded.add(player);
}
},
},
gain:{
audio:'lkbushi',
trigger:{player:'phaseJieshuBegin'},
forced:true,
locked:false,
content:function(){
var list=lib.skill.lkbushi.getBushi(player);
var card=get.cardPile(function(card){
return get.suit(card,false)==list[3];
});
if(card) player.gain(card,'gain2');
},
},
},
},
lkzhongzhuang:{
audio:2,
trigger:{source:'damageBegin1'},
forced:true,
filter:function(event,player){
if(!event.card||event.card.name!='sha'||event.getParent().type!='card') return false;
var range=player.getAttackRange();
if(range>3) return true;
return range<3&&event.num>1;
},
content:function(){
var range=player.getAttackRange();
if(range>3) trigger.num++;
else trigger.num=1;
},
global:'lkzhongzhuang_ai',
subSkill:{
ai:{
ai:{
filterDamage:true,
skillTagFilter:function(player,tag,arg){
if(arg&&arg.card&&arg.card.name=='sha'){
if(arg.player&&arg.player.hasSkill('lkzhongzhuang')&&arg.player.getAttackRange()<3) return true;
}
return false;
},
},
},
},
},
//顾雍
olbingyi:{
audio:'bingyi',
@ -3808,7 +3989,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1'
if(result.bool){
trigger.player.addSkill('xinsidi2');
trigger.player.storage.xinsidi2=get.color(result.cards[0],result.cards[0].original=='h'?player:false);
trigger.player.markAuto('xinsidi2',[get.color(result.cards[0],result.cards[0].original=='h'?player:false)]);
trigger.player.storage.xinsidi4=player;
trigger.player.syncStorage('xinsidi2');
}
@ -3843,8 +4024,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
mod:{
cardEnabled2:function(card,player){
if(get.color(card)==player.storage.xinsidi2) return false;
cardEnabled:function(card,player){
if(player.getStorage('xinsidi2').contains(get.color(card))) return false;
},
cardRespondable:function(card,player){
if(player.getStorage('xinsidi2').contains(get.color(card))) return false;
},
cardSavable:function(card,player){
if(player.getStorage('xinsidi2').contains(get.color(card))) return false;
},
},
intro:{
@ -10065,6 +10252,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhichi2:{
trigger:{target:'useCardToBefore'},
forced:true,
charlotte:true,
priority:15,
filter:function(event,player){
return get.type(event.card)=='trick'||event.card.name=='sha';
@ -12092,6 +12280,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
},
card:{
lukai_spade:{fullskin:true},
lukai_heart:{fullskin:true},
lukai_diamond:{fullskin:true},
lukai_club:{fullskin:true},
},
dynamicTranslate:{
rejueqing:function(player){
if(player.storage.rejueqing_rewrite) return '锁定技,你即将造成的伤害均视为失去体力。';
@ -12116,6 +12310,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(player.hasSkill('funan_jiexun')) return '其他角色使用或打出牌响应你使用的牌时,你可获得其使用或打出的牌。';
return '其他角色使用或打出牌响应你使用的牌时,你可令其获得你使用的牌(其本回合不能使用或打出这些牌),然后你获得其使用或打出的牌。';
},
lkbushi:function(player){
var list=lib.skill.lkbushi.getBushi(player).map((i)=>get.translation(i));
return '①你使用'+list[0]+'牌无次数限制。②当你使用或打出'+list[1]+'牌后,你摸一张牌。③当你成为'+list[2]+'牌的目标后,你可以弃置一张牌,令此牌对你无效。④结束阶段开始时,你从牌堆或弃牌堆获得一张'+list[3]+'牌。⑤准备阶段开始时,你可调整此技能中四种花色的对应顺序。';
},
},
characterReplace:{
caozhi:['re_caozhi','caozhi'],
@ -12754,6 +12952,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinzhaofu_info:'主公技,限定技。出牌阶段,你可选择至多两名其他角色。这两名角色视为在所有其他吴势力角色的攻击范围内。',
olbingyi:'秉壹',
olbingyi_info:'每阶段限一次。当你因弃置而失去牌后你可以展示所有手牌。若这些牌的颜色均相同则你可以与至多X名其他角色各摸一张牌X为你的手牌数。',
lukai:'陆凯',
lukai_spade:'♠',
lukai_spade_bg:'♠️',
lukai_heart:'♥',
lukai_heart_bg:'♥️',
lukai_club:'♣',
lukai_club_bg:'♣',
lukai_diamond:'♦',
lukai_diamond_bg:'♦️️',
lkbushi:'卜筮',
lkbushi_info:'①你使用♠牌无次数限制。②当你使用或打出♥牌后,你摸一张牌。③当你成为♣牌的目标后,你可以弃置一张牌,令此牌对你无效。④结束阶段开始时,你从牌堆或弃牌堆获得一张♦牌。⑤准备阶段开始时,你可调整此技能中四种花色的对应顺序。',
lkzhongzhuang:'忠壮',
lkzhongzhuang_info:'锁定技。当你因执行【杀】的效果而造成伤害时若你的攻击范围大于3则此伤害+1小于3则此伤害改为1。',
yijiang_2011:'一将成名2011',
yijiang_2012:'一将成名2012',
@ -12762,6 +12973,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yijiang_2015:'一将成名2015',
yijiang_2016:'原创设计2016',
yijiang_2017:'原创设计2017',
yijiang_2022:'原创设计2022',
},
};
});

BIN
font/suits.ttf Normal file

Binary file not shown.

View File

@ -1,5 +1,5 @@
window.noname_asset_list=[
'v1.9.115.3',
'v1.9.116',
'audio/background/aozhan_chaoming.mp3',
'audio/background/aozhan_online.mp3',
'audio/background/aozhan_rewrite.mp3',
@ -4630,6 +4630,10 @@ window.noname_asset_list=[
'image/card/sanlve.png',
'image/card/zhaogujing.png',
'image/card/changandajian_equip1.png',
'image/card/lukai_club.png',
'image/card/lukai_diamond.png',
'image/card/lukai_heart.png',
'image/card/lukai_spade.png',
'image/card/bagua.png',
'image/card/baihupifeng.png',
@ -5644,6 +5648,12 @@ window.noname_asset_list=[
'image/character/zhangxun.jpg',
'image/character/zhaoang.jpg',
'image/character/zhaoyǎn.jpg',
'image/character/caoxiancaohua.jpg',
'image/character/dc_liuba.jpg',
'image/character/key_seira.jpg',
'image/character/lukai.jpg',
'image/character/prp_zhugeliang.jpg',
'image/character/xiahoulingnv.jpg',
'image/character/baiwuchang.jpg',
'image/character/baosanniang.jpg',

View File

@ -1,6 +1,5 @@
window.config={
extension_sources:{
Coding:'https://nakamurayuri.coding.net/p/noname-extension/d/noname-extension/git/raw/master/',
GitHub:'https://raw.githubusercontent.com/libccy/noname-extension/master/',
},
extension_source:'Coding',
@ -134,7 +133,7 @@ window.config={
sort:'type_sort',
cards:['standard','extra'],
characters:['standard','shenhua','sp','sp2','yijiang','refresh','xinghuoliaoyuan','mobile','extra','yingbian','sb'],
characters:['standard','shenhua','sp','sp2','yijiang','refresh','xinghuoliaoyuan','mobile','extra','yingbian','sb','tw','offline'],
connect_characters:['diy'],
connect_cards:['huanlekapai','guozhan','sp','zhulu','yingbian','yongjian'],
plays:[],

View File

@ -21,6 +21,7 @@
globalHistory:[{
cardMove:[],
custom:[],
useCard:[],
}],
cardtag:{
yingbian_zhuzhan:[],
@ -35,7 +36,7 @@
configprefix:'noname_0.9_',
versionOL:27,
updateURLS:{
coding:'https://nakamurayuri.coding.net/p/noname/d/noname/git/raw',
coding:'https://ghproxy.com/https://raw.githubusercontent.com/libccy/noname',
github:'https://raw.githubusercontent.com/libccy/noname',
},
updateURL:'https://raw.githubusercontent.com/libccy/noname',
@ -540,7 +541,7 @@
init:'coding',
unfrequent:true,
item:{
coding:'Coding',
coding:'Github Proxy',
github:'GitHub',
},
onclick:function(item){
@ -7438,6 +7439,9 @@
}
lib.assetURL=noname_inited;
}
if(lib.assetURL.indexOf('com.widget.noname.qingyao')!='-1'){
alert('您正在一个不受信任的闭源客户端上运行《无名杀》。建议您更换为其他开源的无名杀客户端,避免给您带来不必要的损失。');
}
var config3=null;
var proceed=function(config2){
@ -7493,13 +7497,13 @@
var pack=window.noname_package;
delete window.noname_package;
for(i in pack.character){
if(lib.config.hiddenCharacterPack.indexOf(i)==-1){
if(lib.config.all.sgscharacters.contains(i)||lib.config.hiddenCharacterPack.indexOf(i)==-1){
lib.config.all.characters.push(i);
lib.translate[i+'_character_config']=pack.character[i];
}
}
for(i in pack.card){
if(lib.config.hiddenCardPack.indexOf(i)==-1){
if(lib.config.all.sgscards.contains(i)||lib.config.hiddenCardPack.indexOf(i)==-1){
lib.config.all.cards.push(i);
lib.translate[i+'_card_config']=pack.card[i];
}
@ -7580,8 +7584,10 @@
lib.configMenu.appearence.config.identity_font.item[i]=pack.font[i];
lib.configMenu.appearence.config.cardtext_font.item[i]=pack.font[i];
lib.configMenu.appearence.config.global_font.item[i]=pack.font[i];
ui.css.fontsheet.sheet.insertRule("@font-face {font-family: '"+i+"';src: url('"+lib.assetURL+"font/"+i+".ttf');}",0);
ui.css.fontsheet.sheet.insertRule("@font-face {font-family: '"+i+"'; src: url('"+lib.assetURL+"font/"+i+".ttf');}",0);
ui.css.fontsheet.sheet.insertRule("@font-face {font-family: '"+i+"'; src: url('"+lib.assetURL+"font/suits.ttf');}",0);
}
ui.css.fontsheet.sheet.insertRule("@font-face {font-family: 'Suits'; src: url('"+lib.assetURL+"font/suits.ttf');}",0);
lib.configMenu.appearence.config.cardtext_font.item.default='默认';
lib.configMenu.appearence.config.global_font.item.default='默认';
}
@ -10671,9 +10677,14 @@
buttons.classList.add('guanxing');
buttons._link=i;
if(list[i][1]){
var cardsb=ui.create.buttons(list[i][1],'card',buttons);
if(list[i][2]&&typeof list[i][2]=='string'){
for(var ij of cardsb) ij.node.gaintag.innerHTML=get.translation(list[i][2]);
if(get.itemtype(list[i][1])=='cards'){
var cardsb=ui.create.buttons(list[i][1],'card',buttons);
if(list[i][2]&&typeof list[i][2]=='string'){
for(var ij of cardsb) ij.node.gaintag.innerHTML=get.translation(list[i][2]);
}
}
else if(list[i][1].length==2){
ui.create.buttons(list[i][1][0],list[i][1][1],buttons);
}
}
if(list[i][2]&&typeof list[i][2]=='function') buttons.textPrompt=list[i][2];
@ -11255,6 +11266,7 @@
_status.globalHistory.push({
cardMove:[],
custom:[],
useCard:[],
});
game.countPlayer2(function(current){
current.actionHistory.push({useCard:[],respond:[],skipped:[],lose:[],gain:[],sourceDamage:[],damage:[],custom:[],useSkill:[]});
@ -12590,12 +12602,16 @@
var next=player.chooseControl(info.chooseButton.chooseControl(event,player));
next.dialog=dialog;
next.set('ai',info.chooseButton.check||function(){return 0;});
if(event.id) next._parent_id=event.id;
next.type='chooseToUse_button';
}
else{
var next=player.chooseButton(dialog);
next.set('ai',info.chooseButton.check||function(){return 1;});
next.set('filterButton',info.chooseButton.filter||function(){return true;});
next.set('selectButton',info.chooseButton.select||1);
if(event.id) next._parent_id=event.id;
next.type='chooseToUse_button';
}
event.buttoned=event.result.skill;
}
@ -14173,7 +14189,7 @@
choosePlayerCard:function(){
"step 0"
if(!event.dialog) event.dialog=ui.create.dialog('hidden');
else if(!event.isMine){
else if(!event.isMine()){
event.dialog.style.display='none';
}
if(event.prompt){
@ -14286,7 +14302,7 @@
return;
}
if(!event.dialog) event.dialog=ui.create.dialog('hidden');
else if(!event.isMine){
else if(!event.isMine()){
event.dialog.style.display='none';
}
if(event.prompt==undefined){
@ -14431,7 +14447,7 @@
return;
}
if(!event.dialog) event.dialog=ui.create.dialog('hidden');
else if(!event.isMine){
else if(!event.isMine()){
event.dialog.style.display='none';
}
if(event.prompt==undefined){
@ -14937,6 +14953,7 @@
event.oncard(event.card,event.player);
}
player.actionHistory[player.actionHistory.length-1].useCard.push(event);
game.getGlobalHistory().useCard.push(event);
if(event.addCount!==false){
if(player.stat[player.stat.length-1].card[card.name]==undefined){
player.stat[player.stat.length-1].card[card.name]=1;
@ -20266,6 +20283,11 @@
if(event.addCount===false){
next.addCount=false;
}
if(result._apply_args){
for(var i in result._apply_args){
next[i]=result._apply_args[i];
}
}
return next;
}
else if(result.skill){
@ -22117,6 +22139,7 @@
var info=get.info(card);
if(info.multicheck&&!info.multicheck(card,this)) return false;
if(!lib.filter.cardEnabled(card,this)) return false;
if(includecard&&!lib.filter.cardUsable(card,this)) return false;
if(distance!==false&&!lib.filter.targetInRange(card,this,target)) return false;
return lib.filter[includecard?'targetEnabledx':'targetEnabled'](card,this,target);
},
@ -25171,8 +25194,8 @@
}
var cardnum=card[1]||'';
if(parseInt(cardnum)==cardnum) cardnum=parseInt(cardnum);
if([1,11,12,13].contains(cardnum)){
cardnum={'1':'A','11':'J','12':'Q','13':'K'}[cardnum];
if(cardnum>0&&cardnum<14){
cardnum=['A','2','3','4','5','6','7','8','9','10','J','Q','K'][cardnum-1];
}
if(!lib.card[card[2]]){
lib.card[card[2]]={};
@ -25378,7 +25401,7 @@
this.node.info.innerHTML=info.modinfo;
}
else{
this.node.info.innerHTML=get.translation(card[0])+'<span> </span>'+cardnum;
this.node.info.innerHTML=get.translation(card[0])+'<span style="font-family:xinwei"> </span><span style="font-family:xinwei">'+cardnum+'</span>';
}
if(info.addinfo){
if(!this.node.addinfo){
@ -26805,6 +26828,7 @@
var info=get.info(card);
if(info.updateUsable=='phaseUse'){
event=event||_status.event;
if(event.type=='chooseToUse_button') event=event.getParent();
if(player!=_status.event.player) return true;
if(event.getParent().name!='phaseUse') return true;
if(event.getParent().player!=player) return true;
@ -26819,6 +26843,7 @@
card=get.autoViewAs(card,null,player);
var info=get.info(card);
event=event||_status.event;
if(event.type=='chooseToUse_button') event=event.getParent();
if(player!=_status.event.player) return true;
if(info.updateUsable=='phaseUse'){
if(event.getParent().name!='phaseUse') return true;
@ -29016,6 +29041,9 @@
}
},
cancel:function(id){
if(_status.event._parent_id==id&&_status.event.isMine()&&_status.paused&&_status.imchoosing){
ui.click.cancel();
}
if(_status.event.id==id&&_status.event.isMine()&&_status.paused&&_status.imchoosing){
ui.click.cancel();
if(ui.confirm){
@ -33746,6 +33774,7 @@
check:function(event){
var i,j,range;
if(event==undefined) event=_status.event;
event._checked=true;
var custom=event.custom||{};
var ok=true,auto=true;
var player=event.player;
@ -36590,7 +36619,7 @@
roundNumber:0,
shuffleNumber:0,
};
window['b'+'ann'+'e'+'dE'+'x'+'ten'+'s'+'i'+'o'+'ns']=[];
window['b'+'ann'+'e'+'dE'+'x'+'ten'+'s'+'i'+'o'+'ns']=['\u5047装\u65e0敌'];
var ui={
updates:[],
thrown:[],
@ -39104,14 +39133,19 @@
page.classList.add('menu-buttons');
page.classList.add('leftbutton');
if(!connectMenu){
if(mode.indexOf('mode_')!=0){
if(lib.config.all.sgscharacters.contains(mode)){
ui.create.div('.config.pointerspan','<span style="opacity:0.5">该武将包不可被隐藏</span>',page);
}
else if(mode.indexOf('mode_')!=0){
ui.create.div('.config.pointerspan','<span>隐藏武将包</span>',page,function(){
if(this.firstChild.innerHTML=='隐藏武将包'){
this.firstChild.innerHTML='武将包将在重启后隐藏';
lib.config.hiddenCharacterPack.add(mode);
if(!lib.config.prompt_hidepack){
alert('隐藏的扩展包可通过选项-其它-重置隐藏内容恢复');
game.saveConfig('prompt_hidepack',true);
if(confirm('真的要隐藏“'+get.translation(mode+'_character_config')+'”武将包吗?\n建议使用“关闭”而不是“隐藏”功能否则将会影响其他相关武将包的正常运行')){
this.firstChild.innerHTML='武将包将在重启后隐藏';
lib.config.hiddenCharacterPack.add(mode);
if(!lib.config.prompt_hidepack){
alert('隐藏的扩展包可通过选项-其它-重置隐藏内容恢复');
game.saveConfig('prompt_hidepack',true);
}
}
}
else{
@ -39315,7 +39349,7 @@
var list=[];
for(var i=0;i<info.length;i++){
if(!lib.card[info[i]]||(lib.card[info[i]].derivation&&mode!='mode_derivation')) continue;
list.push(['',get.translation(get.type(info[i],'trick')),info[i]]);
list.push([get.translation(get.type(info[i],'trick')),'',info[i]]);
}
var sortCard=function(card){
var type=lib.card[card[2]].type;
@ -39412,7 +39446,7 @@
}
page.classList.add('menu-buttons');
page.classList.add('leftbutton');
if(!connectMenu&&mode.indexOf('mode_')!=0){
if(!connectMenu&&!lib.config.all.sgscards.contains(mode)&&mode.indexOf('mode_')!=0){
ui.create.div('.config.pointerspan','<span>隐藏卡牌包</span>',page,function(){
if(this.firstChild.innerHTML=='隐藏卡牌包'){
this.firstChild.innerHTML='卡牌包将在重启后隐藏';
@ -48655,7 +48689,7 @@
if(_status.event.skill&&_status.event.name=='chooseToUse'){
ui.click.cancel();
}
else{
else if(_status.event._checked){
game.uncheck();
game.check();
}

View File

@ -38,6 +38,7 @@ window.noname_source_list=[
'character/yijiang.js',
'character/yingbian.js',
'character/yxs.js',
'font/suits.ttf',
'game/asset.js',
'game/codemirror.js',
'game/config.js',

View File

@ -1,26 +1,25 @@
window.noname_update={
version:'1.9.115.3',
update:'1.9.115.2.1',
version:'1.9.116',
update:'1.9.115.3',
changeLog:[
'钟离牧入选稿公布',
'OL周处、赵俨',
'十周年纪灵、孙茹、王昶、冯芳、张勋、赵昂',
'海外服神关羽',
'派对浪客、樱庭星罗入选稿公布',
'OL曹宪曹华、十周年刘巴、陆凯、夏侯令女',
'花色字体显示优化',
'技能调整与bug修复',
],
files:[
//'card/extra.js',
'card/extra.js',
//'card/gujian.js',
//'card/guozhan.js',
'card/guozhan.js',
//'card/gwent.js',
//'card/huanlekapai.js',
//'card/mtg.js',
//'card/sp.js',
'card/sp.js',
//'card/standard.js',
//'card/swd.js',
//'card/yunchou.js',
//'card/yingbian.js',
'card/yongjian.js',
//'card/yongjian.js',
//'card/zhenfa.js',
//'card/zhulu.js',
'character/diy.js',
@ -32,7 +31,7 @@ window.noname_update={
'character/mobile.js',
//'character/mtg.js',
//'character/offline.js',
//'character/old.js',
'character/old.js',
//'character/ow.js',
'character/rank.js',
'character/refresh.js',
@ -45,11 +44,12 @@ window.noname_update={
//'character/swd.js',
//'character/xianjian.js',
//'character/xinghuoliaoyuan.js',
'character/yingbian.js',
//'character/yingbian.js',
'character/yijiang.js',
//'character/yxs.js',
//'extension/boss/extension.js',
//'layout/default/layout.css',
'font/suits.ttf',
'layout/default/layout.css',
//'layout/newlayout/global.css',
//'layout/default/menu.css',
//'layout/nova/layout.css',
@ -59,7 +59,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',
@ -68,16 +68,16 @@ window.noname_update={
'game/game.js',
//'game/keyWords.js',
//'game/NoSleep.js',
//'game/config.js',
'game/config.js',
//'game/package.js',
//'game/asset.js',
//'game/source.js',
'game/source.js',
//'theme/style/hp/custom.css',
//'theme/style/hp/emotion.css',
//'theme/style/hp/glass.css',
//'theme/style/hp/image',
//'theme/style/hp/official.css',
//'theme/style/hp/ol.css',
'theme/style/hp/ol.css',
//'theme/style/hp/round.css',
//'theme/style/hp/xinglass.css',
//'theme/style/hp/xinround.css',

BIN
image/card/lukai_club.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
image/card/lukai_heart.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
image/card/lukai_spade.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
image/character/lukai.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

View File

@ -25,7 +25,7 @@ body {
overflow: hidden;
text-rendering: optimizeLegibility;
transform-origin: top left;
font-family: 'STHeiti','SimHei','Microsoft JhengHei','Microsoft YaHei','WenQuanYi Micro Hei',Helvetica,Arial,sans-serif
font-family: 'STHeiti','SimHei','Microsoft JhengHei','Microsoft YaHei','WenQuanYi Micro Hei','Suits',Helvetica,Arial,sans-serif;
}
div {
@ -1295,9 +1295,10 @@ body>.background.land {
/*overflow: hidden;*/
}
.card>.info {
right: 6px;
top: 9px;
top: 5.2px;
right: 7px;
white-space: nowrap;
word-spacing: -0.1em;
}
.card>.range {
bottom: 5px;
@ -4251,13 +4252,14 @@ div[data-decoration="bronze"]::after{
color: rgb(255,235,59);
}
.card.fullskin>.info {
top: 8px;
right: 6px;
top: 5.2px;
right: 7px;
color: rgba(0,0,0,0.8);
white-space: nowrap;
text-shadow: none;
}
.card.fullskin>.info.red {
color: #631515;
color: #A82424;
}
.config>.toggle.onoff {

View File

@ -3039,7 +3039,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
return player.countMark('gzsuzhi_count')<3;
},
content:function(){
player.addTempSkill('fankui',{player:'phaseBegin'});
player.addTempSkill('gzfankui',{player:'phaseBegin'});
},
group:['gzsuzhi_damage','gzsuzhi_draw','gzsuzhi_gain'],
preHidden:['gzsuzhi_damage','gzsuzhi_draw','gzsuzhi_gain'],
@ -3365,7 +3365,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
var evt=_status.event.getParent();
if(evt.name!='gzzhuhai'||!arg||!arg.target) return false;
if(!arg.target.getHistory('sourceDamage',function(evt){
return evt.player.sameIdentityAs(player);
return evt.player.isFriendOf(player);
}).length) return false;
return true;
},
@ -3998,14 +3998,19 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
gzxingzhao:{
audio:2,
getNum:function(){
var num=0;
var list=[];
game.countPlayer(function(current){
if(current.identity=='unknown'||current.isHealthy()) return;
if(current.identity=='ye') num++;
else list.add(current.identity);
});
return num+list.length;
var list=[],players=game.filterPlayer();
for(var target of players){
if(target.isUnseen()||target.isHealthy()) continue;
var add=true;
for(var i of list){
if(i.isFriendOf(target)){
add=false;
break;
}
}
if(add) list.add(target);
}
return list.length;
},
mod:{
maxHandcard:function(player,num){
@ -6588,7 +6593,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
silent:true,
filter:function(event){
if(event.player.isUnseen()) return false;
return event.getParent(2).skill=='new_luanji'&&event.player.sameIdentityAs(_status.currentPhase);
return event.getParent(2).skill=='new_luanji'&&event.player.isFriendOf(_status.currentPhase);
},
content:function(){
trigger.player.draw();
@ -7881,8 +7886,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
filterTarget:function(card,player,target){
if(target==player) return false;
if(player.isUnseen()) return target.isUnseen();
if(player.identity=='ye') return true;
return target.identity!=player.identity;
return !target.isFriendOf(player);
},
check:function(card){
if(card.name=='tao') return 0;
@ -7975,7 +7979,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
trigger:{global:'useCardToTarget'},
filter:function(event,player){
if(!['basic','trick'].contains(get.type(event.card,'trick'))) return false;
return event.target&&player.sameIdentityAs(event.target)&&event.targets.length==1&&player.getExpansions('qianhuan').length;
return event.target&&player.isFriendOf(event.target)&&event.targets.length==1&&player.getExpansions('qianhuan').length;
},
direct:true,
content:function(){
@ -8031,7 +8035,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}
trigger.cancel();
'step 1'
if(player.sameIdentityAs(trigger.player)){
if(player.isFriendOf(trigger.player)){
trigger.player.mayChangeVice();
}
}
@ -8507,7 +8511,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
audio:'yuejian',
preHidden:true,
filter:function(event,player){
if(player.sameIdentityAs(event.player)){
if(player.isFriendOf(event.player)){
return event.player.getHistory('useCard',function(evt){
if(evt.targets){
var targets=evt.targets.slice(0);
@ -12434,6 +12438,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
changeViceOnline:function(){
'step 0'
player.showCharacter(2);
var group=lib.character[player.name1][1];
_status.characterlist.randomSort();
var name=false;
@ -12450,16 +12455,19 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
event.toChange=name;
if(event.change) event.trigger('removeCharacterBefore');
'step 1'
var name=event.toChange;
game.log(player,'将副将变更为','#g'+get.translation(name));
player.viceChanged=true;
if(player.isUnseen(1)){
player.showCharacter(1,false);
if(event.hidden){
if(!player.isUnseen(1)) player.hideCharacter(1);
}
'step 2'
var name=event.toChange;
if(event.hidden) game.log(player,'替换了副将','#g'+get.translation(player.name2));
else game.log(player,'将副将从','#g'+get.translation(player.name2),'变更为','#g'+get.translation(name));
player.viceChanged=true;
player.reinit(player.name2,name,false);
},
changeVice:function(){
'step 0'
player.showCharacter(2);
if(!event.num) event.num=3;
var group=player.identity;
if(!lib.group.contains(group)) group=lib.character[player.name1][1];
@ -12491,12 +12499,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
event.toChange=name;
if(event.change) event.trigger('removeCharacterBefore');
if(event.hidden){
if(player.isUnseen(0)) player.showCharacter(0,false);
if(!player.isUnseen(1)) player.hideCharacter(1);
}
else if(player.isUnseen(1)){
player.showCharacter(1,false);
}
'step 2'
var name=event.toChange;
if(event.hidden) game.log(player,'替换了副将','#g'+get.translation(player.name2));

View File

@ -35,7 +35,7 @@
filter:grayscale(1) opacity(0.8);
-webkit-filter:grayscale(1) opacity(0.8);
}
.hp:not(.text):not(.actcount):not(.treasure)>.lost{
.hp:not(.text):not(.actcount):not(.treasure)>.shield{
background: url('image/shield.png');
box-shadow: none;
border: none;