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

This commit is contained in:
nonameShijian 2024-04-06 16:17:02 +08:00 committed by GitHub
commit c3fc7ae7e6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
38 changed files with 3826 additions and 254 deletions

BIN
audio/die/caofang.mp3 Normal file

Binary file not shown.

BIN
audio/die/tw_wenchou.mp3 Normal file

Binary file not shown.

BIN
audio/die/tw_yanliang.mp3 Normal file

Binary file not shown.

BIN
audio/die/tw_yuantan.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcjujian1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcjujian2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dczhimin1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dczhimin2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twbaizu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twbaizu2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twduwang1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twduwang2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twjuexing1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twjuexing2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twqiaosi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twqiaosi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twxiayong1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twxiayong2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/twylyanshi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/twylyanshi2.mp3 Normal file

Binary file not shown.

View File

@ -157,11 +157,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(target.hasSkillTag('useShan',null,event)) return true;
if(target.isLinked()&&game.hasNature(event.card)&&get.attitude(target,player._trueMe||player)>0) return false;
if(event.baseDamage+event.extraDamage<=0&&!game.hasNature(event.card,'ice')) return false;
if(target.hasSkillTag('freeShan',false,event,true)) return true;
if(event.shanRequired>1&&target.mayHaveShan(target,'use',null,'count')<event.shanRequired-(event.shanIgnored||0)) return false;
if(event.baseDamage+event.extraDamage>=target.hp+
((player.hasSkillTag('jueqing',false,target)||target.hasSkill('gangzhi'))?target.hujia:0)) return true;
if(!game.hasNature(event.card,'ice')&&get.damageEffect(target,player,target,get.nature(event.card))>=0) return false;
if(event.shanRequired>1&&target.mayHaveShan(target,'use',null,'count')<event.shanRequired-(event.shanIgnored||0)) return false;
return true;
})());
//next.autochoose=lib.filter.autoRespondShan;
@ -2911,14 +2910,19 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
audio:true,
check:function(event,player){
if(event&&(event.ai||event.ai1)){
var ai=event.ai||event.ai1;
if(!event) return true;
if(event.ai){
var ai=event.ai;
var tmp=_status.event;
_status.event=event;
var result=ai({name:'shan'},_status.event.player,event);
_status.event=tmp;
return result>0;
}
let evt=event.getParent();
if(player.hasSkillTag('noShan',null,evt)) return false;
if(!evt||!evt.card||!evt.player||player.hasSkillTag('useShan',null,evt)) return true;
if(evt.card&&evt.player&&player.isLinked()&&game.hasNature(evt.card)&&get.attitude(player,evt.player._trueMe||evt.player)>0) return false;
return true;
},
content:function(){
@ -2943,8 +2947,6 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(!arg||!arg.player) return true;
if(arg.player.hasSkillTag('unequip',false,{
target:player
})||arg.player.hasSkillTag('unequip_ai',false,{
target:player
})) return false;
return true;
},

View File

@ -7228,11 +7228,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
delay:false,
check:function(card){
var player=_status.event.player;
if(!player.storage.jueyong||player.storage.jueyong[0].length<Math.max(1,player.getDamagedHp())||!player.storage.jueyong[0].filter(function(card){
return get.effect(player,card,player.storage.jueyong[1][player.storage.jueyong[0].indexOf(card)],player)<0;
}).length||(player.hp<=1&&!player.storage.jueyong[0].filter(function(card){
if(!player.storage.jueyong||!player.storage.jueyong[0].length||player.hp<=1&&!player.storage.jueyong[0].some(function(card){
return get.tag(card,'damage')>0;
}).length)) return -1;
})||!player.storage.jueyong[0].some(function(card){
return get.effect(player,card,player.storage.jueyong[1][player.storage.jueyong[0].indexOf(card)],player)<0;
})) return -1;
return 20-get.value(card);
},
content:function(){

View File

@ -137,6 +137,7 @@ window.noname_character_rank={
'xia_yuzhenzi',
'dc_simashi',
'dc_sb_simayi',
'caofang',
],
a:[
'star_caoren',
@ -2179,6 +2180,7 @@ window.noname_character_rank={
'xia_shitao',
'bailingyun',
'dc_sb_simayi',
'caofang',
],
rare:[
're_wangyi',

View File

@ -13572,7 +13572,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
rejianxiong_old:{
audio:2,
audio:'rejianxiong',
trigger:{player:'damageEnd'},
direct:true,
content:function(){
@ -15581,6 +15581,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_lidian_prefix:'界',
re_xushu:'界徐庶',
re_xushu_prefix:'界',
rejianxiong_old:'奸雄',
rejianxiong_old_info:'当你受到伤害后,你可以摸一张牌或获得对你造成伤害的牌。',
refresh_standard:'界限突破·标',
refresh_feng:'界限突破·风',

View File

@ -985,7 +985,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dialog(){
var dialog=ui.create.dialog('放逐:请选择你要执行的一项','hidden');
dialog.add([[
[1,'移去1个“颂”标记令一名其他角色于手牌中只能使用装备牌直到其回合结束'],
[1,'移去1个“颂”标记令一名其他角色于手牌中只能使用基本牌直到其回合结束'],
[2,'移去2个“颂”标记令一名其他角色的非Charlotte技能失效直到其回合结束'],
[3,'移去2个“颂”标记令一名其他角色不能响应除其外的角色使用的牌直到其回合结束'],
[4,'移去3个“颂”标记令一名其他角色将武将牌翻面'],

View File

@ -5441,8 +5441,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!arg||!arg.player) return true;
if(arg.player.hasSkillTag('unequip',false,{
target:player
})||arg.player.hasSkillTag('unequip_ai',false,{
target:player
})) return false;
return true;
},

View File

@ -3038,6 +3038,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
olcangxin:{
audio:2,
trigger:{player:'damageBegin4'},
filter(event,player){
return game.getGlobalHistory('everything',evt=>{
return evt.name=='damage'&&evt.player==player;
},event).indexOf(event)==0;
},
checkx:function(event,player){
var target=event.source;
return get.damageEffect(player,target,target)<=0;
@ -3046,17 +3051,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
'step 0'
var cards=get.bottomCards(3,true);
player.chooseButton(['###藏心:请选择要弃置的牌###若以此法弃置了红桃牌,则防止此伤害',cards],[1,cards.length],true).set('ai',function(button){
player.chooseButton(['###藏心:请选择要弃置的牌###若以此法弃置了红桃牌,则减少弃置红桃牌数的伤害',cards],[1,cards.length],true).set('ai',function(button){
if(!_status.event.bool&&get.suit(button.link,false)=='heart') return 0;
if(get.suit(button.link,false)!='heart') return 1;
if(!ui.selected.buttons.some(but=>get.suit(but.link,false)=='heart')) return 1;
const num=get.event().getTrigger().num;
if(num>ui.selected.buttons.filter(but=>get.suit(but.link,false)=='heart').length) return 1;
return 0;
}).set('bool',lib.skill.olcangxin.checkx(trigger,player));
'step 1'
if(result.bool){
player.$throw(result.links,1000);
game.cardsDiscard(result.links);
if(result.links.some(card=>get.suit(card,false)=='heart')) trigger.cancel();
const num=result.links.filter(card=>get.suit(card,false)=='heart').length;
if(num) trigger.num-=Math.min(trigger.num,num);
}
else event.finish();
'step 2'
@ -20121,8 +20128,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!arg||!arg.player) return true;
if(arg.player.hasSkillTag('unequip',false,{
target:player
})||arg.player.hasSkillTag('unequip_ai',false,{
target:player
})) return false;
return true;
},
@ -27676,7 +27681,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ol_luyusheng:'OL陆郁生',
ol_luyusheng_prefix:'OL',
olcangxin:'藏心',
olcangxin_info:'锁定技。①当你受到伤害时,你观看牌堆底的三张牌并弃置其中任意张牌,若你以此法弃置了红桃牌,则防止此伤害。②摸牌阶段开始时你展示牌堆底的三张牌然后摸X张牌X为其中红桃牌的数量。',
olcangxin_info:'锁定技。①当你每回合第一次受到伤害时,你观看牌堆底的三张牌并弃置其中任意张牌,然后此伤害-X。②摸牌阶段开始时你展示牌堆底的三张牌然后摸X张牌X为其中红桃牌的数量。',
olrunwei:'润微',
olrunwei_info:'其他角色的弃牌阶段开始时,若其已受伤,则你可以选择一项:①令其弃置一张牌,其本回合手牌上限+1②令其摸一张牌其本回合手牌上限-1。',
caoxi:'曹羲',

View File

@ -136,12 +136,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ai:{
order:9,
result:{
player(player,target){
let res=2*get.effect(player,{name:'draw',player,player});
if(player!==target) res+=get.effect(player,{name:'losehp'},player,player);
return res;
},
target(player,target){
if(player.getHp()+player.countCards('hs',card=>player.canSaveCard(card,player))<=1) return 0;
const num=get.sgn(get.attitude(player,target));
if(num*get.damageEffect(target,player,player)>0) return num*get.damageEffect(target,player,player);
if(target==player) return 0.00001;
return 0;
return get.damageEffect(target,player,target);
},
},
},
@ -292,7 +293,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
},
},
//星袁绍
starxiaoyan:{

View File

@ -693,32 +693,47 @@ game.import('character',function(lib,game,ui,get,ai,_status){
twxiayong:{
audio:2,
audioname:['tw_yanliang'],
trigger:{global:'damageBegin1'},
filter(event,player){
if(event.getParent().type!='card'||event.card.name!='juedou'||!event.player.isIn()) return false;
const evt=game.getGlobalHistory('useCard',evt=>evt.card==event.card)[0];
if(evt&&evt.targets&&(event.player!=player||player.countCards('h'))){
if(evt.player==player){
return evt.targets.includes(event.player)&&event.player!=player;
}
return evt.targets.includes(player)&&evt.player!=player;
}
return false;
},
forced:true,
logTarget:'player',
async content(event,trigger,player){
if(trigger.player===player){
const cards=player.getCards('h',card=>{
return lib.filter.cardDiscardable(card,player,'twxiayong');
});
if(cards.length>0) player.discard(cards.randomGet());
}
else{
trigger.increase('num');
}
locked:true,
group:'twxiayong_effect',
subSkill:{
effect:{
trigger:{global:'damageBegin1'},
filter(event,player){
if(event.getParent().type!='card'||event.card.name!='juedou'||!event.player.isIn()) return false;
const evt=game.getGlobalHistory('useCard',evt=>evt.card==event.card)[0];
if(evt&&evt.targets&&(event.player!=player||player.countCards('h'))){
if(evt.player==player){
return evt.targets.includes(event.player)&&event.player!=player;
}
return evt.targets.includes(player)&&evt.player!=player;
}
return false;
},
forced:true,
popup:false,
async content(event,trigger,player){
player.logSkill('twxiayong'+(trigger.player===player?'1':'2'),trigger.player);
if(trigger.player===player){
const cards=player.getCards('h',card=>{
return lib.filter.cardDiscardable(card,player,'twxiayong');
});
if(cards.length>0) player.discard(cards.randomGet());
}
else{
trigger.increase('num');
}
},
},
},
},
twxiayong1:{
audio:true,
audioname:['tw_yanliang'],
sourceSkill:'twxiayong',
},
twxiayong2:{
inherit:'twxiayong1',
},
//袁谭
twqiaosi:{
audio:2,

View File

@ -4,6 +4,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
name:'xianding',
connect:true,
character:{
caofang:['male','wei',4,['dczhimin','dcjujian'],['zhu']],
dc_sb_simayi:['male','wei',3,['dcsbquanmou','dcsbpingliao']],
chendong:['male','wu',4,['dcduanxie','fenming']],
lvfan:['male','wu',3,['diaodu','diancai']],
@ -103,7 +104,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp2_huben:['chendong','wangshuang','wenyang','re_liuzan','dc_huangzu','wulan','leitong','chentai','dc_duyu','dc_wangjun','dc_xiahouba','old_huangfusong','huzun'],
sp2_shengun:["puyuan","guanlu","gexuan",'wufan','re_zhangbao','dukui','zhaozhi','zhujianping','dc_zhouxuān','zerong'],
sp2_bizhe:['dc_luotong','dc_wangchang','chengbing','dc_yangbiao','ruanji','cuimao'],
sp2_huangjia:['caomao','liubian','dc_liuyu','quanhuijie','dingshangwan','yuanji','xielingyu','sunyu','ganfurenmifuren','dc_ganfuren','dc_mifuren','dc_shixie'],
sp2_huangjia:['caomao','liubian','dc_liuyu','quanhuijie','dingshangwan','yuanji','xielingyu','sunyu','ganfurenmifuren','dc_ganfuren','dc_mifuren','dc_shixie','caofang'],
sp2_zhangtai:['guozhao','fanyufeng','ruanyu','yangwan','re_panshu'],
sp2_jinse:['caojinyu','re_sunyi','re_fengfangnv','caohua','laiyinger','zhangfen','zhugeruoxue','caoxian','dc_qinghegongzhu','zhugemengxue'],
sp2_yinyu:['zhouyi','luyi','sunlingluan','caoyi'],
@ -122,6 +123,143 @@ game.import('character',function(lib,game,ui,get,ai,_status){
],
},
skill:{
//曹芳
dczhimin:{
audio:2,
trigger:{global:'roundStart'},
filter(event,player){
return game.hasPlayer(current=>current!=player&&current.countCards('h'))&&player.getHp()>0;
},
forced:true,
group:['dczhimin_mark','dczhimin_draw'],
async content(event,trigger,player){
const targets = await player.chooseTarget(`置民:请选择至多${get.cnNumber(player.getHp())}名其他角色`, '你获得这些角色各自手牌中的随机一张点数最小的牌', (card, player, target) => {
return target !== player && target.countCards('h');
}, [1, player.getHp()], true).set('ai', target => {
const player = get.player();
return get.effect(target, {name:'shunshou_copy', position: 'h'}, player, player) + 0.1;
}).forResultTargets();
if (!targets || !targets.length) return;
targets.sortBySeat(trigger.player);
player.line(targets, 'thunder');
const toGain = [];
for (const target of targets) {
const cards = target.getCards('h'), minNumber = cards.map(card => get.number(card)).sort((a, b) => a - b)[0];
const gainableCards = cards.filter(card => {
return get.number(card) === minNumber && lib.filter.canBeGained(card, player, target);
}).randomSort();
toGain.push(gainableCards[0]);
}
if (toGain.length) await player.gain(toGain, 'giveAuto');
await game.asyncDelayx();
},
ai:{
threaten:5.8,
},
mod:{
aiOrder(player,card,num){
if(num>0&&get.itemtype(card)==='card'&&card.hasGaintag('dczhimin_tag')&&player.countCards('h',cardx=>{
return cardx.hasGaintag('dczhimin_tag')&&cardx!==card;
})<player.maxHp) return num/10;
}
},
subSkill:{
mark:{
audio:'dczhimin',
trigger:{
player:'gainAfter',
global:'loseAsyncAfter',
},
forced:true,
filter(event,player){
if(_status.currentPhase===player||!event.getg(player).some(card=>get.position(card)==='h'&&get.owner(card)===player)) return false;
return true;
},
async content(event,trigger,player){
player.addGaintag(trigger.getg(player).filter(card=>get.position(card)==='h'&&get.owner(card)===player), 'dczhimin_tag');
},
},
draw:{
audio:'dczhimin',
trigger:{
player:'loseAfter',
global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
},
forced:true,
filter(event,player){
const evt=event.getl(player);
if(!evt.hs.length) return false;
return Object.values(evt.gaintag_map).flat().includes('dczhimin_tag');
},
async content(event,trigger,player){
const count = player.maxHp - player.countCards('h');
if (count <= 0) return;
await player.draw(count);
}
},
},
},
dcjujian:{
audio:2,
enable:'phaseUse',
usable:1,
zhuSkill:true,
filter(event,player){
return game.hasPlayer(current=>{
return player.hasZhuSkill('dcjujian',current)&&current.group==='wei'&&current!==player;
});
},
filterTarget(_,player,target){
return player.hasZhuSkill('dcjujian',target)&&target.group==='wei'&&target!==player;
},
async content(event,trigger,player){
const target = event.targets[0];
await target.draw();
target.addTempSkill('dcjujian_forbid', 'roundStart');
target.markAuto('dcjujian_forbid', player);
},
ai:{
result:{
target(player,target){
const num=target.countCards('hs',card=>{
return get.type(card)=='trick'&&target.canUse(card,player)&&get.effect(player,card,target,player)<-2;
}),att=get.attitude(player,target);
if(att<0) return -0.74*num;
return 1.5;
},
},
},
subSkill:{
forbid:{
audio:'dcjujian',
trigger:{
player:'useCardToBefore',
},
filter(event,player){
if(get.type(event.card)!=='trick') return false;
return player.getStorage('dcjujian_forbid').includes(event.target);
},
forced:true,
charlotte:true,
onremove:true,
direct:true,
async content(event,trigger,player){
await trigger.target.logSkill('dcjujian_forbid', player);
trigger.cancel();
},
intro:{
content:'使用普通锦囊牌对$无效',
},
ai:{
effect:{
player(card,player,target,current){
if(get.type(card)=='trick'&&player.getStorage('dcjujian_forbid').includes(target)) return 'zeroplayertarget';
},
},
},
},
},
},
//谋司马懿
dcsbquanmou:{
audio:2,
@ -9529,7 +9667,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(changed2.includes(from.link)) return true;
return changed.includes(to.link);
});
next.set('max',Math.min(hs.length,ts.length,player.getDamagedHp()));
next.set('processAI',function(list){
if(_status.event.max){
let gain=list[0][1].sort((a,b)=>{
return player.getUseValue(b,null,true)-player.getUseValue(a,null,true);
}).slice(0,_status.event.max),give=list[1][1].sort((a,b)=>{
return get.value(a,player)-get.value(b,player);
}).slice(0,_status.event.max);
for(let i of gain){
if(get.value(i,player)<get.value(give[0],player)) continue;
let j=give.shift();
list[0][1].remove(i);
list[0][1].push(j);
list[1][1].remove(j);
list[1][1].push(i);
if(!give.length) break;
}
}
return [list[0][1],list[1][1]];
});
}
@ -14472,6 +14627,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
guozhao:['guozhao','xin_guozhao','jsrg_guozhao'],
dingshangwan:['dingshangwan','ol_dingshangwan'],
qinghegongzhu:['qinghegongzhu','dc_qinghegongzhu'],
caofang:['caofang','jsrg_caofang'],
},
translate:{
puyuan:'蒲元',
@ -15030,6 +15186,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcsbquanmou_info:'转换技。出牌阶段每名角色限一次你可以令一名攻击范围内的其他角色交给你一张牌。阴当你于本阶段内下次对其造成伤害时取消之当你于本阶段内下次对其造成伤害后你可以选择除其外的至多三名其他角色对这些角色依次造成1点伤害。',
dcsbpingliao:'平辽',
dcsbpingliao_info:'锁定技。当你声明使用【杀】时,你令此【杀】的目标对其他角色不可见,且你令攻击范围内的其他角色依次选择是否打出一张红色基本牌。所有角色选择完成后,此牌的目标角色中没有以此法打出牌的角色本回合内无法使用或打出手牌;若有不为此牌目标的角色以此法打出了牌,则你摸两张牌,且你本回合使用【杀】的次数上限+1。',
caofang:'曹芳',
dczhimin:'置民',
dczhimin_tag:'民',
dczhimin_info:'锁定技。①一轮游戏开始时你选择至多X名其他角色X为你的体力值获得这些角色各自手牌中的随机一张点数最小的牌。②当你于你的回合外得到牌后你将这些牌标记为“民”。③当你失去“民”后你将手牌补至体力上限。',
dcjujian:'拒谏',
dcjujian_info:'主公技。出牌阶段限一次,你可以令一名其他魏势力角色摸一张牌,然后你令其于本轮内使用的普通锦囊牌对你无效。',
sp2_yinyu:'隐山之玉',
sp2_huben:'百战虎贲',

View File

@ -2295,7 +2295,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return get.distance(player,current)>1;
})) return false;
if(tag=='directHit_ai') return arg.card.name=='sha';
if(arg.card.name!='sha'&&arg.card.name!='chuqibuyi') return false;
if(!arg||!arg.card||arg.card.name!='sha'&&arg.card.name!='chuqibuyi') return false;
var card=arg.target.getEquip(2);
if(card&&card.name.indexOf('bagua')!=-1) return true;
if(player._xinbenxi_ai) return false;
@ -11837,6 +11837,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true});
event.given_map = {};
event._forcing = false;
event.aicheck = function () {
let res = {
bool: true,
cards: []
}, cards = player.getCards('he'), tars = game.filterPlayer(i => player !== i);
cards.forEach(i => {
let o = get.value(i, player), max = o, temp, t;
tars.forEach(tar => {
temp = get.value(i, tar);
if (temp > max) {
max = temp;
t = tar;
}
});
if (t) res.cards.push([i, t, max - o]);
});
if (res.cards.length < event.num) res.bool = false;
else if (res.cards.length > event.num) res.cards.sort((a, b) => {
return b[2] - a[2];
}).slice(0, event.num);
return res;
}();
'step 1'
player.chooseCardTarget({
filterCard(card){
@ -11847,17 +11869,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
prompt:'请选择要分配的卡牌和目标',
forced: event._forcing,
ai1(card){
//if(!ui.selected.cards.length) return 1;
if (!_status.event.res.bool || ui.selected.cards.length) return 0;
for (let arr of _status.event.res.cards) {
if (arr[0] === card) return arr[2];
}
return 0;
},
ai2(target){
return 0;
//wait for PZ157 to change
var player=_status.event.player,card=ui.selected.cards[0];
var val=target.getUseValue(card);
let card = ui.selected.cards[0];
for (let arr of _status.event.res.cards) {
if (arr[0] === card) return get.attitude(player, target);
}
let val=target.getUseValue(card);
if(val>0) return val*get.attitude(player,target)*2;
return get.value(card,target)*get.attitude(player,target);
},
res: event.aicheck
});
'step 2'
if(result.bool){

BIN
image/character/caofang.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

File diff suppressed because it is too large Load Diff

View File

@ -362,6 +362,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(_status.connectMode&&lib.configOL.change_card) game.replaceHandcards(game.players.slice(0));
'step 4'
game.phaseLoop(game.zhu);
game.countPlayer(current=>current.showGiveup(),true);
},
game:{
canReplaceViewpoint:()=>true,
@ -550,7 +551,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
ui.wuxianhuoliProgress.innerHTML='任务进度(0/3)';
const showTasks=()=>{
if(ui.wuxianhuoliInfo) return;
ui.wuxianhuoliInfo=ui.create.system('无限火力·信息',null,true);
ui.wuxianhuoliInfo=ui.create.system('无限火力',null,true);
ui.wuxianhuoliInfo.currentProgress=0;
ui.wuxianhuoliInfo.currentLevel=0;
lib.setPopped(ui.wuxianhuoliInfo,()=>{
@ -943,7 +944,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
ui.wuxianhuoliProgress.innerHTML='任务进度(0/3)';
const showTasks=()=>{
if(ui.wuxianhuoliInfo) return;
ui.wuxianhuoliInfo=ui.create.system('无限火力·信息',null,true);
ui.wuxianhuoliInfo=ui.create.system('无限火力',null,true);
ui.wuxianhuoliInfo.currentProgress=0;
ui.wuxianhuoliInfo.currentLevel=0;
lib.setPopped(ui.wuxianhuoliInfo,()=>{

View File

@ -57,8 +57,8 @@ export class Get extends Uninstantable {
* @param {number | Player} seat
*/
static seatTranslation(seat) {
if (get.itemtype(seat) === 'player') seat = seat.getSeatNum();
return `${get.cnNumber(seat, true)}号位`;
if (get.itemtype(seat) === 'player') seat = seat.getSeatNum() - 1;
return `${get.cnNumber(seat + 1, true)}号位`;
}
/**
* @param {number} numberOfPlayers

View File

@ -3267,7 +3267,7 @@ export const Content = {
event.result._sendskill = event._sendskill;
}
if ((!event.result || !event.result.bool || event.result._noHidingTimer) && (event.result.skill || event.logSkill)) {
var info = get.info(event.result.skill || event.logSkill);
var info = get.info(event.result.skill || (Array.isArray(event.logSkill) ? event.logSkill[0] : event.logSkill));
if (info.direct && !info.clearTime) {
_status.noclearcountdown = 'direct';
}
@ -3454,11 +3454,11 @@ export const Content = {
if (event.result._sendskill) {
lib.skill[event.result._sendskill[0]] = event.result._sendskill[1];
}
var info = get.info(event.result.skill);
if (event.onresult) {
event.onresult(event.result);
}
if ((!event.result || !event.result.bool || event.result._noHidingTimer) && (event.result.skill || event.logSkill)) {
var info = get.info(event.result.skill || (Array.isArray(event.logSkill) ? event.logSkill[0] : event.logSkill));
if (info.direct && !info.clearTime) {
_status.noclearcountdown = 'direct';
}