From c79cd4bea3c14d09651dfd8c5e286a393ee29a7a Mon Sep 17 00:00:00 2001 From: 157 <3619242020@qq.com> Date: Tue, 30 Jan 2024 11:13:37 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=AE=B5=E5=B7=A7?= =?UTF-8?q?=E7=AC=91=E3=80=90=E5=BD=A9=E5=A6=86=E3=80=91=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96ai?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- character/xianding.js | 87 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 76 insertions(+), 11 deletions(-) diff --git a/character/xianding.js b/character/xianding.js index af190e73a..2da3c4b94 100644 --- a/character/xianding.js +++ b/character/xianding.js @@ -3816,25 +3816,90 @@ game.import('character',function(lib,game,ui,get,ai,_status){ position:'he', filterCard:true, check:function(card){ - var player=_status.event.player; - var suit=get.suit(card); - if(get.position(card)!='h'&&player.countCards('h',{suit:suit})==1) return 0.1; - if(!player.hasCard(cardx=>cardx!=card&&get.suit(cardx)==suit)) return 7.5-get.value(card); - return 6-get.value(card); + let cache=lib.skill.dccaizhuang.tempCache(); + if(!cache||cache.no) return 0; + let player=_status.event.player,suit=get.suit(card); + if(ui.selected.cards.filter(i=>{ + return get.suit(i)===suit; + }).length<(cache[suit]||0)){ + if(get.position(card)==='h') return 15-get.value(card); + return 9-get.value(card); + } + return 0; + }, + tempCache(){ + let cache=_status.event.getTempCache('dccaizhuang','dsuits'); + if(cache) return cache; + cache={no:true}; + _status.event.putTempCache('dccaizhuang','dsuits',cache); + let player=_status.event.player,suits={}; + player.getCards('h',i=>{ + let suit=get.suit(i); + if(suits[suit]) suits[suit]++; + else suits[suit]=1; + }); + const sortedEntries=Object.entries(suits).sort((a,b)=>b[1]-a[1]); + let sortedSuits=Object.fromEntries(sortedEntries); + let dis=0,idx=0,dsuits=0,leave=0; + for(let i in sortedSuits){ + idx++; + if(!sortedSuits[i]) continue; + if(idx>2||sortedSuits[i]<3){ + cache[i]=sortedSuits[i]; + dis+=sortedSuits[i]; + suits[i]=0; + } + else{ + cache[i]++; + dis++; + suits[i]--; + } + dsuits++; + } + for(let i in suits){ + if(suits[i]) leave++; + } + player.getCards('e',i=>{ + let suit=get.suit(i); + if(!cache[suit]){ + dsuits++; + cache[suit]=1; + dis++; + } + }); + let draw=0,e=[0,1,4/3,2,4]; + dsuits=Math.min(4,dsuits); + if(dsuits<=leave) return false; + do{ + draw+=e[dsuits--]; + }while(dsuits>leave); + if(draw>dis){ + delete cache.no; + _status.event.putTempCache('dccaizhuang','dsuits',cache); + return cache; + } + return false; }, content:function(){ 'step 0' var suits=[]; + cards.forEach(i=>{ + if(suits.length>=4) return; + let suit=get.suit(i,player); + if(lib.suit.includes(suit)) suits.add(suit); + }); + event.num=suits.length; + 'step 1' + var suits=[]; player.countCards('h',card=>{ if(suits.length>=4) return; var suit=get.suit(card); - if(!lib.suit.includes(suit)) return; - suits.add(suit); + if(lib.suit.includes(suit)) suits.add(suit); }); - if(suits.length>=cards.length) event.finish(); - 'step 1' + if(suits.length>=event.num) event.finish(); + 'step 2' player.draw(); - event.goto(0); + event.goto(1); }, ai:{ order:2, @@ -14006,7 +14071,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcjijiao_info:'限定技。出牌阶段,你可以令一名角色获得所有弃牌堆中你于本局游戏内使用或弃置过的普通锦囊牌,且这些牌不能被【无懈可击】响应。一名角色的回合结束后,若本回合牌堆洗过牌或有角色死亡,你重置〖继椒〗。', duanqiaoxiao:'段巧笑', dccaizhuang:'彩妆', - dccaizhuang_info:'出牌阶段限一次,你可以弃置任意张牌。然后若你手牌中的花色数小于你以此法弃置的牌数,你摸一张牌并重复此流程。', + dccaizhuang_info:'出牌阶段限一次,你可以弃置任意张牌。然后若你手牌中的花色数小于你以此法弃置的牌的花色数,你摸一张牌并重复此流程。', dchuayi:'华衣', dchuayi_info:'结束阶段,你可以判定,然后你获得如下效果直到你下回合开始时:红色,一名角色的回合结束时,你摸一张牌;黑色,当你受到伤害后,你摸两张牌。', wu_zhugeliang:'武诸葛亮', From cfb05efec866df9dc231f6b07655d331cc7bd5e4 Mon Sep 17 00:00:00 2001 From: 157 <3619242020@qq.com> Date: Tue, 30 Jan 2024 11:30:39 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=9B=9E=E6=BB=9AhasSkillTag=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E4=BB=A3=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noname/library/element/player.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/noname/library/element/player.js b/noname/library/element/player.js index 11032e4ed..afd6e572d 100644 --- a/noname/library/element/player.js +++ b/noname/library/element/player.js @@ -8329,10 +8329,6 @@ export class Player extends HTMLDivElement { return false; } hasSkillTag(tag, hidden, arg, globalskill) { - let cache = CacheContext.getCacheContext(); - if(!cache){ - cache = new CacheContext(); - } var skills = this.getSkills(hidden); if (globalskill) { skills.addArray(lib.skill.global); @@ -8342,7 +8338,7 @@ export class Player extends HTMLDivElement { var info = lib.skill[skills[i]]; if (info && info.ai) { if (info.ai.skillTagFilter && info.ai[tag] && - info.ai.skillTagFilter(cache.delegate(this), tag, arg) === false) continue; + info.ai.skillTagFilter(this, tag, arg) === false) continue; if (typeof info.ai[tag] == 'string') { if (info.ai[tag] == arg) return true; } From 5ca2772452230c548b38b7d26c86dca78f3ca10b Mon Sep 17 00:00:00 2001 From: 157 <3619242020@qq.com> Date: Tue, 30 Jan 2024 16:02:40 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E3=80=90=E6=BD=9C=E9=BE=99=E3=80=91?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=B8=AA=E7=AE=80=E5=8D=95=E7=9A=84?= =?UTF-8?q?=E8=97=8F=E6=9D=80ai?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- character/xianding.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/character/xianding.js b/character/xianding.js index 2da3c4b94..ea93fb274 100644 --- a/character/xianding.js +++ b/character/xianding.js @@ -9492,11 +9492,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return true; }); next.set('processAI',function(list){ - var cards=list[0][1].slice(0).sort(function(a,b){ - if(b.name=='sha') return 1; - return get.value(b)-get.value(a); + let cards=list[0][1].slice(0),player=_status.event.player; + cards.sort((a,b)=>{ + return get.value(b,player)-get.value(a,player); }); - return [cards,cards.splice(0,_status.event.player.getDamagedHp())]; + if(!player.storage.juetao&&player.hasSkill('juetao')&&player.hasSha()){ + let gain,bottom,pai=cards.filter(card=>card.name!=='sha'); + pai.sort((a,b)=>{ + return get.value(b,player)-get.value(a,player); + }); + gain=pai.splice(0,player.getDamagedHp()); + bottom=pai; + return [bottom, gain]; + } + return [cards,cards.splice(0,player.getDamagedHp())]; }); 'step 1' game.broadcastAll('closeDialog',event.videoId); From 693f66db7e054d4f447cb4eecbd821d774475d01 Mon Sep 17 00:00:00 2001 From: 157 <3619242020@qq.com> Date: Tue, 30 Jan 2024 16:32:50 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E4=BC=98=E5=8C=96=E3=80=90=E5=8A=AB?= =?UTF-8?q?=E8=90=A5=E3=80=91=E7=BB=99=E6=A0=87=E8=AE=B0ai?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- character/extra.js | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/character/extra.js b/character/extra.js index 218b5fe09..6514ba2d3 100755 --- a/character/extra.js +++ b/character/extra.js @@ -7616,15 +7616,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.chooseTarget(get.prompt('drlt_jieying'),"将“营”交给一名角色;其摸牌阶段多摸一张牌,出牌阶段使用【杀】的次数上限+1且手牌上限+1。该角色回合结束后,其移去“营”标记,然后你获得其所有手牌。",function(card,player,target){ return target!=player; }).ai=function(target){ - if(get.attitude(player,target)>0) - return 0.1; - if(get.attitude(player,target)<1&&(target.isTurnedOver()||target.countCards('h')<1)) - return 0.2; - if(get.attitude(player,target)<1&&target.countCards('h')>0&&target.countCards('j',{name:'lebu'})>0) - return target.countCards('h')*0.8+target.getHandcardLimit()*0.7+2; - if(get.attitude(player,target)<1&&target.countCards('h')>0) - return target.countCards('h')*0.8+target.getHandcardLimit()*0.7; - return 1; + let th=target.countCards('h'),att=get.attitude(_status.event.player,target); + for(let i in target.skills){ + let info=get.info(i); + if(info&&info.shaRelated) return Math.abs(att); + } + if(att>0){ + if(th>3&&target.hp>2) return 0.6*th; + } + if(att<1){ + if(target.countCards('j',{name:'lebu'})) return 1+Math.min((1.5+th)*0.8,target.getHandcardLimit()*0.7); + if(!th||target.getEquip('zhangba')||target.getEquip('guanshi')) return 0; + if(!target.inRange(player)||player.countCards('hs',{name:'shan'})>1) return Math.min((1+th)*0.3,target.getHandcardLimit()*0.2); + } + return 0; }; 'step 1' if(result.bool){ @@ -7636,6 +7641,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.addMark('drlt_jieying_mark',mark); } }, + ai:{ + effect:{ + player(card,player,target){ + if(get.name(card)==='lebu'&&get.attitude(player,target)<0) return 1+Math.min((target.countCards('h')+1.5)*0.8,target.getHandcardLimit()*0.7); + } + } + } }, '3':{ audio:'drlt_jieying', From f3428a983e100128fdb010bae36745b426835e73 Mon Sep 17 00:00:00 2001 From: 157 <3619242020@qq.com> Date: Tue, 30 Jan 2024 16:44:12 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E7=BB=99=E8=A2=AB=E3=80=90=E5=8A=AB?= =?UTF-8?q?=E8=90=A5=E3=80=91=E7=9B=AE=E6=A0=87=E5=8A=A0=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E9=BC=93=E5=8A=B1=E5=87=BA=E7=89=8C=E7=9A=84ai?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- character/extra.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/character/extra.js b/character/extra.js index 6514ba2d3..afccdfdb7 100755 --- a/character/extra.js +++ b/character/extra.js @@ -7558,6 +7558,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return current.hasSkill('drlt_jieying'); }); }, + aiOrder(player,card,num){ + if(player.hasMark('drlt_jieying_mark')&&game.hasPlayer(current=>{ + return current.hasSkill('drlt_jieying')&&get.attitude(player,current)<=0; + })) return Math.max(num,0)+1; + } }, audio:'drlt_jieying', trigger:{ @@ -7577,8 +7582,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ai:{ nokeep:true, skillTagFilter(player){ - if(!player.hasMark('drlt_jieying_mark')) return false; - }, + return player.hasMark('drlt_jieying_mark')&&game.hasPlayer(current=>{ + return current.hasSkill('drlt_jieying')&&get.attitude(player,current)<=0; + }); + } }, }, 'drlt_jieying':{ From 9dfd3648f4566a3b335046429fb1bcd37374e502 Mon Sep 17 00:00:00 2001 From: 157 <3619242020@qq.com> Date: Tue, 30 Jan 2024 17:11:18 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E3=80=90=E5=BD=A9?= =?UTF-8?q?=E5=A6=86=E3=80=91ai=E7=AE=97=E6=B3=95=E4=B8=8A=E7=9A=84?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E9=80=BB=E8=BE=91=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- character/xianding.js | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/character/xianding.js b/character/xianding.js index ea93fb274..f4bead6f6 100644 --- a/character/xianding.js +++ b/character/xianding.js @@ -3833,27 +3833,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){ cache={no:true}; _status.event.putTempCache('dccaizhuang','dsuits',cache); let player=_status.event.player,suits={}; + lib.suit.forEach(i=>{ + suits[i]=0; + }); player.getCards('h',i=>{ let suit=get.suit(i); - if(suits[suit]) suits[suit]++; - else suits[suit]=1; + if(lib.suit.includes(suit)) suits[suit]++; }); - const sortedEntries=Object.entries(suits).sort((a,b)=>b[1]-a[1]); - let sortedSuits=Object.fromEntries(sortedEntries); + let sortedSuits=Object.fromEntries(Object.entries(suits).sort((a,b)=>b[1]-a[1])); let dis=0,idx=0,dsuits=0,leave=0; for(let i in sortedSuits){ idx++; if(!sortedSuits[i]) continue; - if(idx>2||sortedSuits[i]<3){ - cache[i]=sortedSuits[i]; - dis+=sortedSuits[i]; - suits[i]=0; - } - else{ - cache[i]++; - dis++; - suits[i]--; - } + let num=1; + if(idx>2||sortedSuits[i]<3) num=sortedSuits[i]; + cache[i]=num; + dis+=num; + suits[i]-=num; dsuits++; } for(let i in suits){ @@ -3868,7 +3864,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }); let draw=0,e=[0,1,4/3,2,4]; - dsuits=Math.min(4,dsuits); if(dsuits<=leave) return false; do{ draw+=e[dsuits--];