From d6f686e51515ce3c03f18b32d9763bf74cd89793 Mon Sep 17 00:00:00 2001 From: copcap Date: Mon, 8 Apr 2024 05:58:54 +0800 Subject: [PATCH 01/59] =?UTF-8?q?=E6=97=8F=E7=8E=8B=E6=98=8E=E5=B1=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- character/clan.js | 171 +++++++++++++++++++++++++- character/rank.js | 2 + game/pinyinjs.js | 1 + image/character/clan_wangmingshan.jpg | Bin 0 -> 75775 bytes 4 files changed, 172 insertions(+), 2 deletions(-) create mode 100644 image/character/clan_wangmingshan.jpg diff --git a/character/clan.js b/character/clan.js index 368646427..94459f6d4 100644 --- a/character/clan.js +++ b/character/clan.js @@ -24,18 +24,178 @@ game.import('character',function(lib,game,ui,get,ai,_status){ clan_xunyou:['male','wei',3,['clanbaichu','clandaojie'],['clan:颍川荀氏']], clan_wuqiao:['male','jin',4,['clanqiajue','clanmuyin'],['clan:陈留吴氏']], clan_wangguang:['male','wei',3,['clanlilun','clanjianji','clanzhongliu'],['clan:太原王氏']], + clan_wangmingshan:['male','wei',3,['clantanque','clanshengmo','clanzhongliu'],['clan:太原王氏']], }, characterSort:{ clan:{ clan_wu:['clan_wuxian','clan_wuban','clan_wukuang','clan_wuqiao'], clan_xun:['clan_xunshu','clan_xunchen','clan_xuncai','clan_xuncan','clan_xunyou'], clan_han:['clan_hanshao','clan_hanrong'], - clan_wang:['clan_wangling','clan_wangyun','clan_wanghun','clan_wanglun','clan_wangguang'], + clan_wang:['clan_wangling','clan_wangyun','clan_wanghun','clan_wanglun','clan_wangguang','clan_wangmingshan'], clan_zhong:['clan_zhongyan','clan_zhonghui','clan_zhongyu'], }, }, /** @type { importCharacterConfig['skill'] } */ skill:{ + //族王明山 + clantanque:{ + audio:2, + trigger:{player:'useCardAfter'}, + usable:1, + filter(event,player){ + const evt=lib.skill.dcjianying.getLastUsed(player,event); + if(!evt||!evt.card) return false; + const curCard=event.card,prevCard=evt.card; + const curNum=get.number(curCard),prevNum=get.number(prevCard); + if(typeof curNum!='number'||typeof prevNum!='number') return false; + const delNum=Math.abs(curNum-prevNum); + if(delNum===0) return false; + return game.hasPlayer(current=>{ + return current.getHp()===delNum; + }); + }, + locked:false, + async cost(event,trigger,player){ + const evt=lib.skill.dcjianying.getLastUsed(player,trigger); + const curCard=trigger.card,prevCard=evt.card; + const curNum=get.number(curCard),prevNum=get.number(prevCard); + const delNum=Math.abs(curNum-prevNum); + event.result=await player.chooseTarget(get.prompt('clantanque'),`对一名体力值为${delNum}的角色造成1点伤害`,(card,player,target)=>{ + return target.getHp()===get.event('delNum'); + }).set('delNum',delNum).set('ai',target=>{ + return get.damageEffect(target,get.player(),get.player()); + }).forResult(); + }, + async content(event,trigger,player){ + const target=event.targets[0]; + await target.damage(); + await game.asyncDelayx(); + }, + mod:{ + aiOrder(player,card,num){ + if(typeof card!='object') return; + const evt=lib.skill.dcjianying.getLastUsed(player); + if(!evt||!evt.card) return; + const curNum=get.number(card),prevNum=get.number(evt.card); + if(typeof curNum!='number'||typeof prevNum!='number') return; + const pairs=game.filterPlayer().map(current=>{ + return [current.getHp(),get.damageEffect(current,player,player)]; + }).filter(pair=>pair[1]>0); + if(!pairs.length) return; + const delNum=Math.abs(curNum-prevNum); + for(const [hp,eff] of pairs){ + if(hp!=delNum) continue; + return num+10+(pairs.filter(pair=>pair[0]===hp).sort((a,b)=>b[1]-a[1])[0][1])/20; + } + }, + } + }, + clanshengmo:{ + audio:2, + enable:'chooseToUse', + hiddenCard(player,name){ + if((get.event(`clanshengmo_${player.playerid}_enabled_names`)||[]).includes(name)&&(get.event('clanshengmo_cards')||[]).length>0) return true; + }, + filter(event,player){ + if(event.responded) return false; + const names=get.event(`clanshengmo_${player.playerid}_enabled_names`)||[],cards=get.event('clanshengmo_cards')||[]; + return cards.length>0&&names.some(name=>{ + return event.filterCard({name,isCard:true},player,event); + }); + }, + onChooseToUse(event){ + if(game.online) return; + const player=event.player,propName=`clanshengmo_${player.playerid}_enabled_names`; + if(!event[propName]){ + event.set(propName,lib.inpile.filter(name=>get.type(name)=='basic').removeArray(player.getAllHistory('useCard',evt=>{ + return evt.card.storage&&evt.card.storage.clanshengmo; + }).map(evt=>get.name(evt.card,false)))); + } + if(!event.clanshengmo_cards){ + let cards=[]; + game.checkGlobalHistory('cardMove',evt=>{ + if(evt.name!='cardsDiscard'&&(evt.name!='lose'||evt.position!=ui.discardPile)) return; + cards.addArray(evt.cards.filter(card=>get.position(card,true)=='d')); + }); + const numbers=cards.map(card=>get.number(card,false)).unique(); + const [min,max]=[Math.min(...numbers),Math.max(...numbers)]; + event.set('clanshengmo_cards',cards.filter(card=>{ + const num=get.number(card,false); + return num>min&&num { + return get.value(button.link); + }).forResultLinks(); + if (!links || !links.length) return; + const list = []; + for (const name of names) { + const card = { name, isCard: true }; + if (evt.filterCard(card, player, evt)) { + list.push(['基本', '', name]); + } + if (name == 'sha') { + for (const nature of lib.inpile_nature) { + card.nature = nature; + if (evt.filterCard(card, player, evt)) { + list.push(['基本', '', name, nature]); + } + } + } + } + if (!list.length) return; + const links2 = await player.chooseButton(['视为使用一张未以此法使用过的基本牌', [list, 'vcard']], true).set('ai', button => { + return get.player().getUseValue(button.link) + 1; + }).forResultLinks(); + const name = links2[0][2], nature = links2[0][3]; + game.broadcastAll((name, nature, toGain) => { + lib.skill.clanshengmo_backup.viewAs = { + name, + nature, + isCard: true, + }; + lib.skill.clanshengmo_backup.prompt = `选择${get.translation(nature)}【${get.translation(name)}】的目标`; + lib.skill.clanshengmo_backup.cardToGain = toGain; + }, name, nature, links[0]); + evt.set('_backupevent', 'clanshengmo_backup'); + evt.backup('clanshengmo_backup'); + evt.set('openskilldialog', `选择${get.translation(nature)}【${get.translation(name)}】的目标`); + evt.set('norestore', true); + evt.set('custom', { + add: {}, + replace: { window() { } } + }); + evt.goto(0); + }, + subSkill:{ + backup:{ + precontent(){ + delete event.result.skill; + event.result.card.storage.clanshengmo = true; + player.gain(lib.skill.clanshengmo_backup.cardToGain, 'gain2'); + }, + filterCard:()=>false, + selectCard:-1, + }, + }, + ai:{ + order:3, + result:{ + player(player){ + if(get.event().dying) return get.attitude(player, get.event().dying); + if(get.event().type!='phase') return 1; + const names=get.event(`clanshengmo_${player.playerid}_enabled_names`); + return names.some(name=>{ + return player.getUseValue({name})>0; + }); + } + } + } + }, //族贝斯塔[doge] clanlilun:{ audio:2, @@ -1396,7 +1556,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, clanzhongliu:{ audio:2, - audioname:['clan_wangling','clan_wangyun','clan_wanghun','clan_wanglun','clan_wangguang'], + audioname:['clan_wangling','clan_wangyun','clan_wanghun','clan_wanglun','clan_wangguang','clan_wangmingshan'], trigger:{player:'useCard'}, forced:true, clanSkill:true, @@ -2829,6 +2989,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wanglun:'王沦(233年-257年)字太冲,出身太原晋阳王姓世族(今山西省太原市),王昶三子,王浑、王深之弟,王湛之兄。醇粹简远,崇尚老庄之学,心思平淡。二十多时被举荐为孝廉,没有前往,后任大将军参军。257年,诸葛诞不满司马氏篡权而在寿春起义,王沦跟随司马昭征讨,遭遇疾疫去世,时年二十五,时人惜之,司马昭为他流泪。其兄著诔文《表德论》,表述其德行,说“因为畏惧帝王的典章制度,不能写墓志铭,于是撰写过往的事迹,刻在墓的背面。”', wuqiao:'吴乔,西晋人物,蜀车骑将军吴懿之孙。李雄建立成汉政权,他沦落益州,长达三十年,始终不向李雄屈服。', clan_wangguang:'王广,三国时期曹魏太原祁县人,哲学家。东汉司徒王允从孙,魏太尉王凌之子。有志尚学,官至尚书。魏时随父亲在朝作官,屯骑校尉,机智有谋。当得知司马懿篡夺曹魏政权时,王凌与外甥令狐愚合谋立楚王为魏主,王广劝其父不可,王凌没有接受儿子的谏言,结果计谋泄而被害。', + wangmingshan:'王明山,王凌的小儿子,太原祁(今山西省祁县)人,三国魏书法家,最知名善画,多技艺,人得其书,皆以为法。太尉王凌参与谋划废立,事情泄露,被太傅司马懿领兵平定。', }, dynamicTranslate:{ clanlianzhu(player){ @@ -2965,6 +3126,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ clanlilun_info:'出牌阶段限一次,你可以重铸两张手牌(不能是你本回合以此法重铸过的牌名的牌),然后使用其中的一张牌。', clanjianji:'见机', clanjianji_info:'限定技,一名角色的结束阶段,若其上下家均未于本回合:使用过牌,则你可以与其各摸一张牌;成为过牌的目标,则你可以视为使用一张【杀】。', + clan_wangmingshan:'族王明山', + clan_wangmingshan_prefix:'族', + clantanque:'弹雀', + clantanque_info:'每回合限一次。当你使用牌结算结束后,你可以对一名体力值为X且不为0的角色造成1点伤害(X为此牌点数与你上一张使用的牌的点数之差)', + clanshengmo:'剩墨', + clanshengmo_info:'当你需要使用一张未以此法使用过的基本牌时,你可以获得一张于本回合进入弃牌堆且点数不为这些牌中最大且不为这些牌中最小的牌,视为你使用需要使用的牌。', clan_wu:'陈留·吴氏', clan_xun:'颍川·荀氏', diff --git a/character/rank.js b/character/rank.js index 1c658a254..79c784dd6 100644 --- a/character/rank.js +++ b/character/rank.js @@ -1402,6 +1402,7 @@ window.noname_character_rank={ 'jsrg_liuyong', 'jsrg_sunjun', 'xia_shie', + 'clan_wangmingshan', ], bm:[ 'kongrong', @@ -2670,6 +2671,7 @@ window.noname_character_rank={ 'ol_dingshangwan', 'ol_liwan', 'dc_sb_lusu', + 'clan_wangmingshan', ], junk:[ 'ol_sb_guanyu', diff --git a/game/pinyinjs.js b/game/pinyinjs.js index 18071ddb5..64ffe88c2 100644 --- a/game/pinyinjs.js +++ b/game/pinyinjs.js @@ -66,6 +66,7 @@ var pinyin_dict_polyphone = { "库特莉亚芙卡": " kǎ", "露娜": "lù ", // 技能名 + "弹雀": "tán ", "重身": "chóng ", "畜鸣": "chù ", "聆乐": " yuè", diff --git a/image/character/clan_wangmingshan.jpg b/image/character/clan_wangmingshan.jpg new file mode 100644 index 0000000000000000000000000000000000000000..84a7cb600727cbc7e6fae83962213591088d5e95 GIT binary patch literal 75775 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 T)2e-BlY##LRPSHA3LpR3 Date: Mon, 8 Apr 2024 09:18:20 +0800 Subject: [PATCH 02/59] =?UTF-8?q?=E5=AD=99=E7=B6=9D=E3=80=81=E5=A4=8F?= =?UTF-8?q?=E4=BE=AF=E5=BE=BDbugfix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mode/guozhan.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mode/guozhan.js b/mode/guozhan.js index 9ae298bf2..6481a0a58 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -1449,7 +1449,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } if(goon){ event.tochange.push(_status.characterlist[i]); - if(event.tochange.length==event.num) break; } } event.tochange=event.tochange.filter(character=>{ @@ -1457,7 +1456,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ const doublex=get.is.double(character,true); const group=(doublex?doublex:[get.character(character,1)]); return !group.some(j=>groups.includes(j)); - }); + }).randomGets(event.num); if(!event.tochange.length) event.finish(); else{ if(event.tochange.length==1) event._result={ @@ -3330,7 +3329,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ const {result:{bool,links}}=await player.chooseButton(['宝箧:是否使用其中一张宝物牌?',cards]).set('ai',button=>{ return get.equipValue(button.link,get.event('player')); }); - if(bool) await player.chooseUseTarget(card,true); + if(bool) await player.chooseUseTarget(links[0],true); } }, ai:{mingzhi_no:true}, @@ -18462,7 +18461,7 @@ return event.junling=='junling5'?1:0;}); fakepaiyi:'排异', fakepaiyi_info:'出牌阶段限一次,你可以选择一名角色,然后选择一个军令令其选择是否执行。若其执行,则你摸X张牌,然后将一张“权”置入弃牌堆;若其不执行,则你可以对至多X名与其势力相同的角色各造成1点伤害,然后将等量的“权”置入弃牌堆。(X为你武将牌上的“权”数)', fakeshilu:'嗜戮', - fakeshilu_info:'①出牌阶段结束时,若你有副将且本阶段未发动过副将武将牌上的非锁定技,则你更换副将并将原副将称为“戮”置于武将牌上。②准备阶段,你弃置X张手牌,然后摸X张牌(X为你武将牌上的“戮”数,少牌全弃,无牌不弃)。', + fakeshilu_info:'①出牌阶段结束时,若你有副将且本阶段未发动过副将武将牌上的非锁定技,则你更换副将至你武将牌上的“戮”未包含的势力并将原副将称为“戮”置于武将牌上。②准备阶段,你弃置X张手牌,然后摸X张牌(X为你武将牌上的“戮”数,少牌全弃,无牌不弃)。', fakexiongnve:'凶虐', fakexiongnve_info:'①当你使用【杀】造成伤害时或受到【杀】造成的伤害时,若你武将牌上的“戮”包含伤害来源的势力,则你令此伤害+1。②当你受到不为【杀】造成的伤害时,若你武将牌上的“戮”包含伤害来源的势力,则此伤害-1。', fakehuaiyi:'怀异', From 7f8ceeafccb62868f51ecc9dc27a8e59a4408615 Mon Sep 17 00:00:00 2001 From: mengxinzxz <2223529500@qq.com> Date: Mon, 8 Apr 2024 09:22:40 +0800 Subject: [PATCH 03/59] =?UTF-8?q?=E7=8E=8B=E5=9F=BAbugfix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mode/guozhan.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/mode/guozhan.js b/mode/guozhan.js index 6481a0a58..c07d82e77 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -2328,7 +2328,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ fakeqizhi:{ audio:'qizhi', inherit:'qizhi', - trigger:{player:'useCard'}, + trigger:{player:'useCard1'}, filter(event,player){ if(!event.targets||!event.targets.length) return false; if(_status.currentPhase!=player) return false; @@ -2349,11 +2349,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ async content(event,trigger,player){ const target=event.targets[0]; const {result:{bool,cards}}=await player.discardPlayerCard(target,'he',true); - if(get.is.yingbianConditional(trigger.card)&&bool){ + if(get.yingbianConditions(trigger.card).length&&bool){ if(cards.some(i=>get.suit(i,target)==get.suit(trigger.card))){ - player.when('yingbian') - .filter(evt=>evt.card==trigger.card) - .then(()=>trigger.forceYingbian=true); + trigger.forceYingbian=true; } } }, @@ -18495,7 +18493,7 @@ return event.junling=='junling5'?1:0;}); fakemibei:'秘备', fakemibei_info:'①准备阶段,若你的手牌数不为全场最多,则你须选择一名手牌数为全场最多的角色,令其对你发起军令。②当你执行军令后,你将手牌数摸至与发起者相同(至多摸五张)。③当你拒绝执行军令后,你展示一至三张牌,然后你本回合可以将其中一张牌当作另一张基本牌或非延时锦囊牌使用一次。', fakeqizhi:'奇制', - fakeqizhi_info:'当你于回合内使用非装备牌A时,你可以弃置不是此牌目标的一名角色的一张牌B,然后其摸一张牌。若A具有应变效果,且A和B的花色相同,则你无视条件触发A的应变效果。', + fakeqizhi_info:'当你于回合内声明使用非装备牌A时,你可以弃置不是此牌目标的一名角色的一张牌B,然后其摸一张牌。若A具有应变效果,且A和B的花色相同,则你无视条件触发A的应变效果。', fakejinqu:'进趋', fakejinqu_info:'结束阶段,你可以摸两张牌,然后你将手牌弃置至X张(X为你本回合发动过〖奇制〗的次数)。', fakejuzhan:'拒战', From e7985bb3af402b368e55ec6614be7b19e0ee1b0a Mon Sep 17 00:00:00 2001 From: mengxinzxz <2223529500@qq.com> Date: Mon, 8 Apr 2024 09:28:06 +0800 Subject: [PATCH 04/59] =?UTF-8?q?=E7=BE=A4=E6=9D=9C=E9=A2=84bugfix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mode/guozhan.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mode/guozhan.js b/mode/guozhan.js index c07d82e77..b96c965a7 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -2157,13 +2157,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, forced:true, content(){ + const list=player.getStorage('fakezhufu_effect').filter(list=>!list[1]); + for(const i of list){ + player.storage.fakezhufu_effect[player.getStorage('fakezhufu_effect').indexOf(i)][1]=true; + } if(!Array.isArray(trigger.temporaryYingbian)) trigger.temporaryYingbian=[]; trigger.forceYingbian=true - trigger.temporaryYingbian.addArray(player.getStorage('fakezhufu_effect').filter(list=>{ - return !list[1]; - }).map(list=>{ - return get.info('fakezhufu').YingBianMap[list[0]]; - })); + trigger.temporaryYingbian.addArray(list.map(i=>get.info('fakezhufu').YingBianMap[i[0]])); }, }, }, From 7c02c72a8d3e4595235f963fab24d85f53bdd804 Mon Sep 17 00:00:00 2001 From: mengxinzxz <2223529500@qq.com> Date: Mon, 8 Apr 2024 13:33:11 +0800 Subject: [PATCH 05/59] bugfix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OL陆凯分包调整; OL谋姜维【燃己】计算阶段数bugfix; 国战王基,国战群杜预bugfix; --- character/onlyOL.js | 16 +++++++---- character/sp.js | 4 +-- mode/guozhan.js | 68 +++++++++++++++++++++++++++++++++++---------- 3 files changed, 67 insertions(+), 21 deletions(-) diff --git a/character/onlyOL.js b/character/onlyOL.js index d19a3af1a..f5f2e18d4 100644 --- a/character/onlyOL.js +++ b/character/onlyOL.js @@ -1093,7 +1093,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'phaseJieshuBegin'}, prompt2:function(event,player){ var str='获得技能'; - var num=lib.skill.olsbranji.getNum(event,player); + var num=lib.skill.olsbranji.getNum(player); if(num>=player.getHp()) str+='【困奋】'; if(num==player.getHp()) str+='和'; if(num<=player.getHp()) str+='【诈降】'; @@ -1109,7 +1109,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return str; }, check:function(event,player){ - var num=lib.skill.olsbranji.getNum(event,player); + var num=lib.skill.olsbranji.getNum(player); if(num==player.getHp()) return true; return player.getHandcardLimit()-player.countCards('h')>=3||player.getDamagedHp()>=2; }, @@ -1120,7 +1120,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var player=map.player; var trigger=map.trigger; player.awakenSkill('olsbranji'); - var num=lib.skill.olsbranji.getNum(trigger,player); + var num=lib.skill.olsbranji.getNum(player); const skills = []; if(num>=player.getHp()){ skills.push('kunfen'); @@ -1159,8 +1159,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ getList:function(event){ return event.getParent().phaseList.map(list=>list.split('|')[0]); }, - getNum:function(event,player){ - return lib.skill.olsbranji.getList(event).slice(0,event.getParent().num).filter(name=>player.getHistory('useCard',evt=>evt.getParent(name).name==name).length).length; + getNum:function(player){ + return player.getHistory('useCard',evt=>{ + return lib.phaseName.some(name=>{ + return evt.getParent(name).name==name; + }); + }).reduce((list,evt)=>{ + return list.add(evt.getParent(lib.phaseName.find(name=>evt.getParent(name).name==name))); + },[]).length; }, subSkill:{ norecover:{ diff --git a/character/sp.js b/character/sp.js index acfcf080f..7f7b7568c 100755 --- a/character/sp.js +++ b/character/sp.js @@ -6,7 +6,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ characterSort:{ sp:{ sp_tianji:["sunhao","liuxie","caoang","hetaihou","sunluyu",'ol_wangrong',"zuofen","ol_bianfuren","qinghegongzhu","tengfanglan","ruiji",'caoxiancaohua'], - sp_sibi:["yangxiu",'guotu',"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','wangyan','xiahouxuan','quhuang','zhanghua','wangguan','sunhong','caoxi','tianchou'], + sp_sibi:['ol_lukai',"yangxiu",'guotu',"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','wangyan','xiahouxuan','quhuang','zhanghua','wangguan','sunhong','caoxi','tianchou'], sp_tianzhu:['liyi','zhangyan','niujin','hejin','hansui',"wutugu","yanbaihu","shamoke","zhugedan",'huangzu','gaogan',"tadun","fanjiangzhangda","ahuinan","dongtuna",'ol_wenqin'], sp_nvshi:['ol_dingshangwan',"lingju","guanyinping","zhangxingcai","mayunlu","dongbai","zhaoxiang",'ol_zhangchangpu',"daxiaoqiao","jin_guohuai",'ol_hujinding'], sp_shaowei:["simahui","zhangbao","zhanglu","zhugeguo","xujing","zhangling",'huangchengyan','zhangzhi','lushi'], @@ -18,7 +18,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_zhongdan:["cuiyan","huangfusong"], sp_guozhan2:["sp_dongzhuo","liqueguosi","zhangren"], sp_others:["hanba","caiyang"], - sp_waitforsort:['ol_luyusheng','ol_pengyang','ol_tw_zhangji','ol_liwan','ol_liuyan','caoyu','liupan','ol_lukai','ol_liupi'], + sp_waitforsort:['ol_luyusheng','ol_pengyang','ol_tw_zhangji','ol_liwan','ol_liuyan','caoyu','liupan','ol_liupi'], }, }, characterFilter:{ diff --git a/mode/guozhan.js b/mode/guozhan.js index b96c965a7..86e4f304c 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -2117,20 +2117,24 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ return lib.filter.cardDiscardable(card,player)&&!player.getStorage('fakezhufu_effect').includes(get.suit(card)); }, position:'he', + /* check(card){ const player=get.event('player'); if(player.hasUseTarget(card,true,true)) return 0; return 5+3*Math.random()-get.value(card); }, + */ async content(event,trigger,player){ const suit=get.suit(event.cards[0],player); player.addTempSkill('fakezhufu_effect','phaseUseAfter'); player.markAuto('fakezhufu_effect',[[suit,false]]); }, + /* ai:{ order:7, result:{player:1}, }, + */ subSkill:{ effect:{ charlotte:true, @@ -2143,7 +2147,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ let str=''; str+='

  • 已弃置过的花色:'; str+=suits; - if(used.length){ + if(usedSuits.length){ str+='
  • 已触发过的花色:'; str+=usedSuits; } @@ -2156,22 +2160,57 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ return player.getStorage('fakezhufu_effect').some(list=>!list[1]); }, forced:true, - content(){ - const list=player.getStorage('fakezhufu_effect').filter(list=>!list[1]); - for(const i of list){ - player.storage.fakezhufu_effect[player.getStorage('fakezhufu_effect').indexOf(i)][1]=true; + firstDo:true, + async content(event,trigger,player){ + const list=player.getStorage('fakezhufu_effect').filter(i=>!i[1]); + const forced=(function(trigger,player){ + if(trigger.forceYingbian||player.hasSkillTag('forceYingbian')) return true; + const list=(trigger.temporaryYingbian||[]); + return list.includes('force')||get.cardtag(trigger.card,'yingbian_force'); + }(trigger,player)); + if(forced){ + player.popup('yingbian_force_tag',lib.yingbian.condition.color.get('force')); + game.log(player,'触发了','#g【注傅】','为',trigger.card,'添加的应变条件'); + } + const hasYingBian=(trigger.temporaryYingbian||[]),map=get.info('fakezhufu').YingBianMap; + for(const j of list){ + player.storage.fakezhufu_effect[player.getStorage('fakezhufu_effect').indexOf(j)][1]=true; + const tag=map[j[0]][0],eff=map[j[0]][1]; + if(get.cardtag(trigger.card,`yingbian_${tag}`)) continue; + if(j[0]=='heart'){ + if(!forced&&!hasYingBian.includes('add')){ + const {result}=await lib.yingbian.condition.complex.get('zhuzhan')(trigger); + if(result.bool){ + game.log(player,'触发了','#g【注傅】','为',trigger.card,'添加的应变条件(','#g'+get.translation(j[0]),')'); + trigger.yingbian_addTarget=true; + player.addTempSkill('yingbian_changeTarget'); + } + } + else{ + if(!forced){ + game.log(player,'触发了','#g【注傅】','为',trigger.card,'添加的应变条件(','#g'+get.translation(j[0]),')'); + } + trigger.yingbian_addTarget=true; + player.addTempSkill('yingbian_changeTarget'); + } + } + else{ + const goon=(hasYingBian.includes(eff)||lib.yingbian.condition.simple.get(tag)(trigger)); + if(!forced&&goon){ + player.popup('yingbian_force_tag',lib.yingbian.condition.color.get(eff)); + game.log(player,'触发了','#g【注傅】','为',trigger.card,'添加的应变条件(','#g'+get.translation(j[0]),')'); + } + if(forced||goon) await game.yingbianEffect(trigger,lib.yingbian.effect.get(eff)); + } } - if(!Array.isArray(trigger.temporaryYingbian)) trigger.temporaryYingbian=[]; - trigger.forceYingbian=true - trigger.temporaryYingbian.addArray(list.map(i=>get.info('fakezhufu').YingBianMap[i[0]])); }, }, }, YingBianMap:{ - 'heart':'yingbian_zhuzhan', - 'diamond':'yingbian_fujia', - 'spade':'yingbian_canqu', - 'club':'yingbian_kongchao', + 'heart':['zhuzhan','add'], + 'diamond':['fujia','hit'], + 'spade':['canqu','draw'], + 'club':['kongchao','damage'], }, }, fakeguishu:{ @@ -2349,7 +2388,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ async content(event,trigger,player){ const target=event.targets[0]; const {result:{bool,cards}}=await player.discardPlayerCard(target,'he',true); - if(get.yingbianConditions(trigger.card).length&&bool){ + if(bool){ + await target.draw(); if(cards.some(i=>get.suit(i,target)==get.suit(trigger.card))){ trigger.forceYingbian=true; } @@ -18485,7 +18525,7 @@ return event.junling=='junling5'?1:0;}); fakedujin:'独进', fakedujin_info:'①摸牌阶段,你可以额外摸X张牌(X为你装备区的牌数的一半,向上取整)。②当你首次明置此武将牌时,若你为你们势力第一个明置武将牌的角色,则你获得1个“先驱”标记。', fakezhufu:'注傅', - fakezhufu_info:'出牌阶段,你可以弃置一张本阶段未以此法弃置过的花色的牌,然后根据此牌的花色为你使用的下一张牌添加对应的应变效果(无视条件触发):红桃——助战;方片——富甲;黑桃——残躯;草花——空巢。', + fakezhufu_info:'出牌阶段,你可以弃置一张本阶段未以此法弃置过的花色的牌,然后根据此牌的花色为你使用的下一张牌添加对应的应变效果:红桃,助战、目标+1;方片,富甲、不可被响应;黑桃,残躯、摸一张牌;草花,空巢、伤害+1。', fakeguishu:'鬼术', fakeguishu_info:'出牌阶段限一次,你可以将一张黑桃手牌当作【知己知彼】或【远交近攻】使用。若你本局游戏内已经发动过了〖鬼术〗,则你必须选择与上次不同的选项。', fakeyuanyu:'远域', From 21fa80a94cfca06c936d05f846a2f5ea15ca6c38 Mon Sep 17 00:00:00 2001 From: mengxinzxz <2223529500@qq.com> Date: Mon, 8 Apr 2024 15:48:59 +0800 Subject: [PATCH 06/59] =?UTF-8?q?=E5=9B=BD=E6=88=98=E6=9D=9C=E9=A2=84ai?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mode/guozhan.js | 111 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 103 insertions(+), 8 deletions(-) diff --git a/mode/guozhan.js b/mode/guozhan.js index 86e4f304c..9ee362846 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -2114,27 +2114,112 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ },'he'); }, filterCard(card,player){ + if(!lib.suit.includes(get.suit(card))) return false; return lib.filter.cardDiscardable(card,player)&&!player.getStorage('fakezhufu_effect').includes(get.suit(card)); }, position:'he', - /* check(card){ const player=get.event('player'); - if(player.hasUseTarget(card,true,true)) return 0; - return 5+3*Math.random()-get.value(card); + let cards=player.getCards('hs',card=>player.hasValueTarget(card,true,true)); + let discards=player.getCards('he',card=>get.info('fakezhufu').filterCard(card,player)); + for(let i=1;iget.suit(card)==get.suit(discards[i]))) discards.splice(i--,1); + } + cards.removeArray(discards); + if(!cards.length||!discards.length) return 0; + cards.sort((a,b)=>{ + return (player.getUseValue(b,true,true)>0?get.order(b):0)-(player.getUseValue(a,true,true)>0?get.order(a):0); + }); + const cardx=cards[0]; + if(get.order(cardx,player)>0&&discards.includes(card)){ + if((get.suit(card)=='heart'&&get.type(cardx)!='equip'&&(function(card,player){ + const num=get.info('fakezhufu').getMaxUseTarget(card,player); + return num!=-1&&game.countPlayer(target=>player.canUse(card,target,true,true)&&get.effect(target,card,player,player)>0)>num; + }(cardx,player))&&game.hasPlayer(target=>{ + return target.isFriendOf(player)&&target.hasCard(cardy=>{ + return lib.filter.cardDiscardable(cardy,target)&&get.type2(cardy)==get.type2(cardx); + },'h'); + }))||(get.suit(card)=='diamond'&&get.type(cardx)!='equip'&&!game.hasPlayer(target=>{ + return target.countCards('h')>player.countCards('h')-(get.position(card)=='h'?1:0)-(get.position(cardx)=='h'?1:0); + }))||(get.suit(card)=='spade'&&player.getHp()==1)||(get.suit(card)=='club'&&get.tag(cardx,'damage')&&player.countCards('h')-(get.position(card)=='h'?1:0)-(get.position(cardx)=='h'?1:0)==0)) return 1/(getvalue(card)||0.5); + } + return 0; }, - */ async content(event,trigger,player){ const suit=get.suit(event.cards[0],player); player.addTempSkill('fakezhufu_effect','phaseUseAfter'); player.markAuto('fakezhufu_effect',[[suit,false]]); }, - /* ai:{ - order:7, - result:{player:1}, + order(item,player){ + let cards=player.getCards('hs',card=>player.hasValueTarget(card,true,true)); + let discards=player.getCards('he',card=>get.info('fakezhufu').filterCard(card,player)); + for(let i=1;iget.suit(card)==get.suit(discards[i]))) discards.splice(i--,1); + } + cards.removeArray(discards); + if(!cards.length||!discards.length) return 0; + cards.sort((a,b)=>{ + return (player.getUseValue(b,true,true)>0?get.order(b):0)-(player.getUseValue(a,true,true)>0?get.order(a):0); + }); + const cardx=cards[0]; + return (get.order(cardx,player)>0&&((discards.some(card=>{ + return get.suit(card)=='heart'; + })&&get.type(cardx)!='equip'&&(function(card,player){ + const num=get.info('fakezhufu').getMaxUseTarget(card,player); + return num!=-1&&game.countPlayer(target=>player.canUse(card,target,true,true)&&get.effect(target,card,player,player)>0)>num; + }(cardx,player))&&game.hasPlayer(target=>{ + return target.isFriendOf(player)&&target.hasCard(cardy=>{ + return lib.filter.cardDiscardable(cardy,target)&&get.type2(cardy)==get.type2(cardx); + },'h'); + }))||(get.type(cardx)!='equip'&&discards.some(card=>{ + return get.suit(card)=='diamond'&&!game.hasPlayer(target=>{ + return target.countCards('h')>player.countCards('h')-(get.position(card)=='h'?1:0)-(get.position(cardx)=='h'?1:0); + }); + }))||(discards.some(card=>{ + return get.suit(card)=='spade'; + })&&player.getHp()==1)||(get.tag(cardx,'damage')&&discards.some(card=>{ + return get.suit(card)=='club'&&player.countCards('h')-(get.position(card)=='h'?1:0)-(get.position(cardx)=='h'?1:0)==0; + }))))?(get.order(cardx,player)+0.00001):0; + }, + result:{ + player(player,target){ + let cards=player.getCards('hs',card=>player.hasValueTarget(card,true,true)); + let discards=player.getCards('he',card=>get.info('fakezhufu').filterCard(card,player)); + discards=discards.sort((a,b)=>get.value(a)-get.value(b)); + for(let i=1;iget.suit(card)==get.suit(discards[i]))) discards.splice(i--,1); + } + cards.removeArray(discards); + if(!cards.length||!discards.length) return 0; + if((discards.some(card=>{ + return get.suit(card)=='heart'; + })&&cards.some(card=>{ + return get.type(card)!='equip'&&(function(card,player){ + const num=get.info('fakezhufu').getMaxUseTarget(card,player); + return num!=-1&&game.countPlayer(target=>player.canUse(card,target,true,true)&&get.effect(target,card,player,player)>0)>num; + }(card,player))&&game.hasPlayer(target=>{ + return target.isFriendOf(player)&&target.hasCard(cardx=>{ + return lib.filter.cardDiscardable(cardx,target)&&get.type2(cardx)==get.type2(card); + },'h'); + }); + }))||discards.some(card=>{ + return get.suit(card)=='diamond'&&cards.some(cardx=>{ + return get.type(cardx)!='equip'&&!game.hasPlayer(target=>{ + return target.countCards('h')>player.countCards('h')-(get.position(card)=='h'?1:0)-(get.position(cardx)=='h'?1:0); + }); + }); + })||(discards.some(card=>{ + return get.suit(card)=='spade'; + })&&player.getHp()==1)||discards.some(card=>{ + return get.suit(card)=='club'&&cards.some(cardx=>{ + return get.tag(cardx,'damage')&&player.countCards('h')-(get.position(card)=='h'?1:0)-(get.position(cardx)=='h'?1:0)==0; + }); + })) return 1; + return 0; + }, + }, }, - */ subSkill:{ effect:{ charlotte:true, @@ -2212,6 +2297,16 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ 'spade':['canqu','draw'], 'club':['kongchao','damage'], }, + getMaxUseTarget(card,player){ + let range; + const select=get.copy(get.info(card).selectTarget); + if(select==undefined) range=[1,1]; + else if(typeof select=='number') range=[select,select]; + else if(get.itemtype(select)=='select') range=select; + else if(typeof select=='function') range=select(card,player); + game.checkMod(card,player,range,'selectTarget',player); + return range; + }, }, fakeguishu:{ inherit:'hmkguishu', From b7118e3708500b222bbfeb52178dd4fbbd67bc9c Mon Sep 17 00:00:00 2001 From: mengxinzxz <2223529500@qq.com> Date: Mon, 8 Apr 2024 16:06:27 +0800 Subject: [PATCH 07/59] gzwanyi_info_guozhan_yingbian --- mode/guozhan.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mode/guozhan.js b/mode/guozhan.js index 9ee362846..efbe4d9a2 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -18470,7 +18470,7 @@ return event.junling=='junling5'?1:0;}); gzcaiyuan_info:'锁定技。结束阶段开始时,若你的手牌数大于本回合开始时的手牌数,则你摸两张牌或回复1点体力。', gzwanyi:'婉嫕', gzwanyi_info:'出牌阶段每项各限一次。你可以将一张带有“合纵”标签的牌当做【联军盛宴】/【火烧连营】/【挟天子以令诸侯】/【戮力同心】使用。', - gzwanyi_info_yingbian:'出牌阶段每项各限一次。你可以将一张带有“应变”标签的牌当做【逐近弃远】/【洞烛先机】/【水淹七军】/【出其不意】使用。', + gzwanyi_info_guozhan_yingbian:'出牌阶段每项各限一次。你可以将一张带有“应变”标签的牌当做【逐近弃远】/【洞烛先机】/【水淹七军】/【出其不意】使用。', gzmaihuo:'埋祸', gzmaihuo_info:'限定技。当有己方角色成为【杀】的目标时,你可以取消此【杀】的所有目标。然后此【杀】的使用者下回合开始时,其视为对你使用一张【杀】。若此【杀】对你造成伤害,则你防止此伤害,摸两张牌并移除此武将牌(若此武将牌为副将则改为变更副将)。', gzzhenxi:'震袭', From 95d44a86f9f5a7e23e8d4a59b2995269895de362 Mon Sep 17 00:00:00 2001 From: mengxinzxz <2223529500@qq.com> Date: Mon, 8 Apr 2024 17:55:56 +0800 Subject: [PATCH 08/59] =?UTF-8?q?=E6=B7=BB=E5=8A=A0player.getRoundHistory?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E8=8E=B7=E5=8F=96=E6=9F=90=E4=B8=80=E8=BD=AE?= =?UTF-8?q?=E7=9A=84=E5=8E=86=E5=8F=B2=EF=BC=8C=E7=AE=80=E5=8C=96=E9=83=A8?= =?UTF-8?q?=E5=88=86=E6=8A=80=E8=83=BD=E5=86=99=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ①添加player.getRoundHistory函数: 第一个参数填写获取的动作 第二个参数填写获取历史的筛选条件 第三个参数填写数字(不填默认为0),获取上X轮的历史(X为0则为本轮历史),第四个参数若为true,则获取从上X轮开始至现在 第四个参数若为true,则获取从上X轮开始至现在所有符合条件的历史 第五个参数填写event,获取此event之前所有符合条件的历史 ②简化族荀谌【三恇】、族荀采【点盏】、族钟会【迂志】技能写法 --- character/clan.js | 116 ++++++++++++++----------------- noname/library/element/player.js | 38 ++++++++++ 2 files changed, 92 insertions(+), 62 deletions(-) diff --git a/character/clan.js b/character/clan.js index 368646427..e349b1473 100644 --- a/character/clan.js +++ b/character/clan.js @@ -575,21 +575,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content(){ 'step 0' player.unmarkSkill('clanyuzhi'); - var num1=0,num2=0,num3=0,bool=true; - var history=player.actionHistory; - for(var i=history.length-2;i>=0;i--){ - for(var evt of history[i].gain){ - if(evt.getParent().name=='draw'&&evt.getParent(2).name=='clanyuzhi'){ - if(bool) num1+=evt.cards.length; - else num2+=evt.cards.length; - } - } - if(bool) num3+=history[i].useCard.length; - if(history[i].isRound){ - if(bool) bool=false; - else break; - } - } + var num1=player.getRoundHistory('gain',evt=>{ + return evt.getParent().name=='draw'&&evt.getParent(2).name=='clanyuzhi'; + },1).reduce((sum,evt)=>sum+evt.cards.length,0); + var num2=player.getRoundHistory('gain',evt=>{ + return evt.getParent().name=='draw'&&evt.getParent(2).name=='clanyuzhi'; + },2).reduce((sum,evt)=>sum+evt.cards.length,0); + var num3=player.getRoundHistory('useCard',evt=>{ + return evt.cards&&evt.cards.length; + },1).reduce((sum,evt)=>sum+evt.cards.length,0); event.num1=num1; if(num1>0&&(num2>0&&num1>num2)||num1>num3){ player.logSkill('clanyuzhi'); @@ -607,15 +601,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 2' if(!player.countCards('h')) event.finish(); 'step 3' - player.chooseToDiscard('迂志:请弃置一张手牌','摸此牌牌名字数的牌。下一轮开始时,若本轮你使用的牌数或上一轮你以此法摸的牌数小于此牌牌名字数,则你失去1点体力。',true,function(card,player){ + player.chooseCard('迂志:请展示一张手牌','摸此牌牌名字数的牌。下一轮开始时,若本轮你使用的牌数或上一轮你以此法摸的牌数小于此牌牌名字数,则你失去1点体力。',function(card,player){ var num=get.cardNameLength(card); return typeof num=='number'&&num>0; - }).set('logSkill','clanyuzhi').set('ai',function(card){ + },true).set('logSkill','clanyuzhi').set('ai',function(card){ if(_status.event.dying&&_status.event.num>0&&get.cardNameLength(card)>_status.event.num) return 1/get.cardNameLength(card);//怂 return get.cardNameLength(card);//勇 }).set('dying',player.hp+player.countCards('hs',{name:['tao','jiu']})<1).set('num',event.num1); 'step 4' if(result.bool){ + player.logSkill('clanyuzhi'); + player.showCards(result.cards,get.translation(player)+'发动了【迂志】'); player.draw(get.cardNameLength(result.cards[0])); player.storage.clanyuzhi=get.cardNameLength(result.cards[0]); player.markSkill('clanyuzhi'); @@ -632,7 +628,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'damageEnd',source:'damageSource'}, filter(event,player){ - if(!event.card||player.isLinked()) return false; + if(!event.card/*||player.isLinked()*/) return false; if(game.getGlobalHistory('everything',evt=>{ if(evt.name!='damage'||!evt.card) return false; return evt.player==player||(evt.source&&evt.source==player); @@ -645,7 +641,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' var num=get.cardNameLength(trigger.card),str=''; if(player.getDamagedHp()>0) str+=('并摸'+get.cnNumber(player.getDamagedHp())+'张牌'); - player.chooseToDiscard(get.prompt('clanxieshu'),'横置武将牌,弃置'+get.cnNumber(num)+'张牌'+str,'he',num).set('ai',function(card){ + player.chooseToDiscard(get.prompt('clanxieshu'),/*'横置武将牌,'+*/'弃置'+get.cnNumber(num)+'张牌'+str,'he',num).set('ai',function(card){ var player=_status.event.player; var num=_status.event.num; var num2=player.getDamagedHp(); @@ -655,7 +651,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }).set('num',num).logSkill='clanxieshu'; 'step 1' if(result.bool){ - player.link(true); + //player.link(true); if(player.getDamagedHp()>0) player.draw(player.getDamagedHp()); } }, @@ -1989,16 +1985,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, filter(event,player){ if(!game.hasPlayer(current=>current!=player)) return false; - var card=event.card,type=get.type2(card); - for(var i=player.actionHistory.length-1; i>=0; i--){ - var history=player.actionHistory[i].useCard; - for(var evt of history){ - if(evt==event) continue; - if(get.type2(evt.card)==type) return false; - } - if(player.actionHistory[i].isRound) break; - } - return true; + const type=get.type2(event.card); + return player.getRoundHistory('useCard',evt=>get.type2(evt.card)==type).indexOf(event)==0; }, getNum(player){ return (player.countCards('ej')>0)+(player.isDamaged())+(Math.max(0,player.hp)=0; i--){ - var history=player.actionHistory[i].useCard; - for(var evt of history){ - if(evt==event) continue; - if(get.suit(evt.card)==suit) return false; - } - if(player.actionHistory[i].isRound) break; - } - return event.targets&&event.targets.length==1&&!event.targets[0].isLinked()|| - player.hasCard(card=>get.suit(card)==get.suit(event.card)&&player.canRecast(card),'h'); + const suit=get.suit(event.card); + if(player.getRoundHistory('useCard',evt=>get.suit(evt.card)==type).indexOf(event)!=0) return false; + return event.targets&&event.targets.length==1&&!event.targets[0].isLinked()||player.hasCard(card=>get.suit(card)==get.suit(event.card)&&player.canRecast(card),'h'); }, content(){ 'step 0' @@ -2514,37 +2494,49 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(event.link&&event.recast) player.draw(); }, - group:['clandianzhan_count','clandianzhan_clear'], + group:'clandianzhan_count', subSkill:{ count:{ + charlotte:true, trigger:{player:'useCardAfter'}, filter(event,player){ let suit=get.suit(event.card); return lib.suits.includes(suit)&&!player.getStorage('clandianzhan').includes(suit); }, + forced:true, silent:true, - charlotte:true, content(){ - player.storage.clandianzhan=[]; - for(let i=player.actionHistory.length-1; i>=0; i--){ - let history=player.actionHistory[i].useCard; - for(let evt of history){ - player.storage.clandianzhan.add(get.suit(evt.card)); - } - if(player.actionHistory[i].isRound) break; + let suits=player.getRoundHistory('useCard',evt=>{ + return lib.suits.includes(get.suit(evt.card)); + }).reduce((list,evt)=>{ + return list.add(get.suit(evt.card)); + },[]).sort((a,b)=>lib.suits.indexOf(a)-lib.suits.indexOf(b)); + if(!player.storage.clandianzhan){ + player.when({global:'roundStart'}).then(()=>{ + delete player.storage.clandianzhan; + player.unmarkSkill('clandianzhan'); + }); } + player.storage.clandianzhan=suits; player.markSkill('clandianzhan'); }, - sub:true }, - clear:{ - trigger:{global:'roundStart'}, - silent:true, - charlotte:true, - content(){ - player.unmarkSkill('clandianzhan'); - }, - sub:true + }, + init(player){ + let suits=player.getRoundHistory('useCard',evt=>{ + return lib.suits.includes(get.suit(evt.card)); + }).reduce((list,evt)=>{ + return list.add(get.suit(evt.card)); + },[]).sort((a,b)=>lib.suits.indexOf(a)-lib.suits.indexOf(b)); + if(suits.length){ + if(!player.storage.clandianzhan){ + player.when({global:'roundStart'}).then(()=>{ + delete player.storage.clandianzhan; + player.unmarkSkill('clandianzhan'); + }); + } + player.storage.clandianzhan=suits; + player.markSkill('clandianzhan'); } } }, @@ -2940,9 +2932,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ clanchenya_info:'当一名角色发动“出牌阶段限一次”的技能后,你可以令其重铸任意张牌名字数为X的牌(X为其手牌数)。', clan_zhonghui:'族钟会', clanyuzhi:'迂志', - clanyuzhi_info:'锁定技。新的一轮开始时,你依次执行以下项:①若你上一轮使用的牌数或你上上轮因〖迂志〗摸的牌数小于你上轮因〖迂志〗摸的牌数,你失去1点体力或失去〖保族〗。②你弃置一张手牌,然后摸X张牌(X为此牌牌名字数)。', + clanyuzhi_info:'锁定技。新的一轮开始时,你依次执行以下项:①若你上一轮使用的牌数或你上上轮因〖迂志〗摸的牌数小于你上轮因〖迂志〗摸的牌数,你失去1点体力或失去〖保族〗。②你展示一张手牌,然后摸X张牌(X为此牌牌名字数)。', clanxieshu:'挟术', - clanxieshu_info:'当你每回合首次因牌造成或受到伤害后,你可以横置武将牌,然后弃置Y张牌并摸你已损失体力值张牌(Y为此牌牌名字数)。', + clanxieshu_info:'当你每回合首次因牌造成或受到伤害后,你可以弃置Y张牌并摸你已损失体力值张牌(Y为此牌牌名字数)。', clan_zhongyu:'族钟毓', clanjiejian:'捷谏', clanjiejian_info:'当你于一回合使用第X张牌指定第一个目标后,若此牌不为装备牌,则你可以令一名目标角色摸X张牌。(X为此牌牌名字数)', diff --git a/noname/library/element/player.js b/noname/library/element/player.js index c401366a6..0307122c3 100644 --- a/noname/library/element/player.js +++ b/noname/library/element/player.js @@ -8116,6 +8116,44 @@ export class Player extends HTMLDivElement { } } } + /** + * 快速获取一名角色当前轮次/前X轮次的历史 + * + * 第一个参数填写获取的动作 + * + * 第二个参数填写获取历史的筛选条件 + * + * 第三个参数填写数字(不填默认为0),获取上X轮的历史(X为0则为本轮历史),第四个参数若为true,则获取从上X轮开始至现在 + * + * 第四个参数若为true,则获取从上X轮开始至现在所有符合条件的历史 + * + * 第五个参数填写event,获取此event之前所有符合条件的历史 + * + * @param { string | function | number | boolean | object } map + */ + getRoundHistory(key, filter, num, keep, last) { + if (!num) num = 0; + const player = this; + let evts = [], history = player.actionHistory; + for (let i = history.length - 1; i >= 0; i--) { + if (keep === true || num == 0) { + let currentHistory = history[i]; + if (key) currentHistory = currentHistory[key]; + if (filter) currentHistory = currentHistory.filter(filter); + evts.addArray(currentHistory.reverse()); + } + if (history[i].isRound) { + if (num > 0) num--; + else break; + } + } + evts.reverse(); + if (last && evts.includes(last)) { + const lastIndex = evts.indexOf(last); + return evts.filter(evt => evts.indexOf(evt) <= lastIndex); + } + return evts; + } getHistory(key, filter, last) { if (!key) return this.actionHistory[this.actionHistory.length - 1]; if (!filter) return this.actionHistory[this.actionHistory.length - 1][key]; From 92c49d31d027a4e49d8cd9582b524ac97602527c Mon Sep 17 00:00:00 2001 From: mengxinzxz <2223529500@qq.com> Date: Mon, 8 Apr 2024 18:14:52 +0800 Subject: [PATCH 09/59] =?UTF-8?q?=E5=BD=AD=E7=BE=95=E3=80=90=E4=BE=BB?= =?UTF-8?q?=E5=A4=B1=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- character/sp.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/character/sp.js b/character/sp.js index 7f7b7568c..9e7b3cf24 100755 --- a/character/sp.js +++ b/character/sp.js @@ -3473,13 +3473,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return order; }, }, - trigger:{player:'useCard'}, - filter:function(event){ + trigger:{player:['useCard','useCardAfter']}, + filter:function(event,player,name){ + if(name=='useCardAfter'){ + if(player.isTempBanned('olqifan')) return false; + return player.getHistory('useCard',evt=>{ + return !player.getHistory('sourceDamage',evt2=>{ + return evt2.card&&evt2.card==evt.card; + }).length&&get.tag(evt.card,'damage'); + }).indexOf(event)>=2; + } return [1,11,12,13].includes(get.number(event.card)); }, forced:true, content:function(){ 'step 0' + if(event.triggername=='useCardAfter'){ + player.tempBanSkill('olqifan'); + event.finish(); + return; + } trigger.targets.length=0; trigger.all_excluded=true; game.log(trigger.card,'被无效了'); @@ -27700,7 +27713,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ olxiaofan:'嚣翻', olxiaofan_info:'当你需要使用不为【无懈可击】的牌时,你可以观看牌堆底的X+1张牌并使用其中的一张。此牌结算结束时,你依次弃置以下前X个区域中的所有牌:⒈判定区、⒉装备区、⒊手牌区(X为本回合你使用过的牌中包含的类型数)。', oltuishi:'侻失', - oltuishi_info:'锁定技。①你不能使用【无懈可击】。②当你使用点数为字母的牌时,你令此牌无效并摸一张牌,且你对手牌数小于你的角色使用的下一张牌无距离和次数限制。', + oltuishi_info:'锁定技。①你不能使用【无懈可击】。②当你使用点数为字母的牌时,你令此牌无效并摸一张牌,且你对手牌数小于你的角色使用的下一张牌无距离和次数限制。③当你使用伤害类卡牌结算完毕后,若此牌为你本回合使用的第三张或以上未造成伤害的卡牌,则你令本回合〖器翻〗失效。', ol_tw_zhangji:'张既', skill_zhangji_A:'技能', skill_zhangji_A_info:'出牌阶段限X次(X为你的体力值),当你使用牌指定一名其他角色为目标后,你可以观看其手牌,然后你选择一项:
    1.弃置其一张牌,然后若弃置的牌是能造成火焰伤害的牌,你摸一张牌。
    2.重铸其手牌中的所有【杀】和【决斗】。
    3.若其没有【闪】,你与其互相对对方造成1点伤害。', From da340e183c90dea7fae214945da4a9c4a970a8c2 Mon Sep 17 00:00:00 2001 From: mengxinzxz <2223529500@qq.com> Date: Mon, 8 Apr 2024 19:35:28 +0800 Subject: [PATCH 10/59] =?UTF-8?q?=E5=9B=BD=E6=88=98=E6=9B=B9=E6=B4=AA?= =?UTF-8?q?=E3=80=90=E6=8A=A4=E6=8F=B4=E3=80=91=E3=80=81=E5=9B=BD=E6=88=98?= =?UTF-8?q?=E9=99=86=E6=8A=97=E3=80=90=E6=81=AA=E5=AE=88=E3=80=91=E6=8A=80?= =?UTF-8?q?=E8=83=BD=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mode/guozhan.js | 166 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 140 insertions(+), 26 deletions(-) diff --git a/mode/guozhan.js b/mode/guozhan.js index efbe4d9a2..9e37fd2cc 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -518,7 +518,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_zoushi:['female','qun',3,['huoshui','new_qingcheng']], gz_dengai:['male','wei',4,['tuntian','ziliang','gzjixi'],['gzskin','die_audio']], - gz_caohong:['male','wei',4,['gzhuyuan','heyi'],['gzskin']], + gz_caohong:['male','wei',4,['fakehuyuan','heyi'],['gzskin']], gz_jiangfei:['male','shu',3,['shengxi','gzshoucheng']], gz_jiangwei:['male','shu',4,['tiaoxin','yizhi','tianfu'],['gzskin']], gz_xusheng:['male','wu',4,['fakeyicheng'],['gzskin']], @@ -569,7 +569,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_wangping:['male','shu',4,['jianglue'],['gzskin']], gz_fazheng:['male','shu',3,['gzxuanhuo','gzenyuan'],['gzskin']], gz_wuguotai:['female','wu',3,['gzbuyi','ganlu'],['gzskin']], - gz_lukang:['male','wu',4,['fakejueyan','keshou'],['gzskin']], + gz_lukang:['male','wu',4,['fakejueyan','fakekeshou'],['gzskin']], gz_yuanshu:['male','qun',4,['gzweidi','gzyongsi'],['gzskin']], gz_zhangxiu:['male','qun',4,['gzfudi','gzcongjian'],['gzskin']], gz_jun_caocao:['male','wei',4,['jianan','huibian','gzzongyu','wuziliangjiangdao'],[]], @@ -4178,6 +4178,116 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, }, + fakehuyuan:{ + audio:'yuanhu', + trigger:{player:'phaseJieshuBegin'}, + filter(event,player){ + return player.countCards('he',card=>{ + if(get.position(card)=='h'&&_status.connectMode) return true; + return get.type(card)=='equip'; + })>0; + }, + async cost(event,trigger,player){ + event.result=await player.chooseCardTarget({ + prompt:get.prompt2('yuanhu'), + filterCard(card){ + return get.type(card)=='equip'; + }, + position:'he', + filterTarget(card,player,target){ + return target.canEquip(card); + }, + ai1(card){ + return 6-get.value(card); + }, + ai2(target){ + return get.attitude(_status.event.player,target)-3; + }, + }).set('hiddenSkill','fakehuyuan').forResult(); + }, + preHidden:true, + async content(event,trigger,player){ + const card=event.cards[0],target=event.targets[0]; + if(target!=player) player.$give(card,target,false); + await target.equip(thisCard); + }, + group:'fakehuyuan_discard', + subSkill:{ + discard:{ + trigger:{global:'equipEnd'}, + filter(event,player){ + return _status.currentPhase==player&&game.hasPlayer(target=>{ + return get.distance(event.player,target)<=1&&target!=event.player&&target.countCards('hej'); + }); + }, + async cost(event,trigger,player){ + event.result=await player.chooseTarget(get.prompt('fakehuyuan'),'弃置一名与'+get.translation(trigger.player)+'距离为1以内的另一名角色区域里的一张牌',(card,player,target)=>{ + const trigger=get.event().getTrigger(); + return get.distance(trigger.player,target)<=1&&target!=trigger.player&&target.countCards('hej'); + }).set('ai',target=>{ + const player=get.event('player'); + return get.effect(target,{name:'guohe'},player,player); + }).set('hiddenSkill','fakehuyuan').forResult(); + }, + popup:false, + async content(event,trigger,player){ + const target=event.targets[0]; + player.logSkill('fakehuyuan',target); + await player.discardPlayerCard(target,'hej',true); + }, + }, + }, + }, + fakekeshou:{ + audio:'keshou', + trigger:{player:'damageBegin3'}, + filter(event,player){ + return event.num>0; + }, + preHidden:true, + async cost(event,trigger,player){ + event.result=await player.chooseCard(get.prompt('fakekeshou'),'弃置两张颜色相同的牌,令即将受到的伤害-1','he',2,card=>{ + return !ui.selected.cards.length||get.color(card)==get.color(ui.selected.cards[0]); + }).set('logSkill','fakekeshou').set('complexCard',true).set('ai',card=>{ + if(!_status.event.check) return 0; + var player=_status.event.player; + if(player.hp==1){ + if(!player.countCards('h',function(card){return get.tag(card,'save')})&&!player.hasSkillTag('save',true)) return 10-get.value(card); + return 7-get.value(card); + } + return 6-get.value(card); + }).set('check',(player.countCards('h',{color:'red'})>1||player.countCards('h',{color:'black'})>1)).setHiddenSkill('fakekeshou'); + }, + popup:false, + async content(event,trigger,player){ + trigger.num--; + }, + group:'fakekeshou_draw', + subSkill:{ + draw:{ + audio:'keshou', + trigger:{ + player:'loseAfter', + global:'loseAsyncAfter', + }, + filter(event,player){ + if(event.type!='discard'||event.getlx===false) return false; + if(!(!player.isUnseen()&&!game.hasPlayer(current=>{ + return current!=player&¤t.isFriendOf(player); + }))) return false; + const evt=event.getl(player); + return evt&&evt.cards2&&evt.cards2.length>1; + }, + prompt2:'进行一次判定,若为红色,则你摸一张牌', + async content(event,trigger,player){ + const result=await player.judge(card=>{ + return get.color(card)=='red'?1:0; + }).forResult(); + if(result.judge>0) await player.draw(); + }, + }, + }, + }, //国战典藏2023补充 //吕范 gzdiaodu:{ @@ -14657,7 +14767,7 @@ return event.junling=='junling5'?1:0;}); if(content&&content.length){ dialog.addSmall(content); } - dialog.addText('