diff --git a/character/rank.js b/character/rank.js index 04ecef1a0..3ad34972e 100644 --- a/character/rank.js +++ b/character/rank.js @@ -1,6 +1,6 @@ window.noname_character_rank = { s: [ - 'sp_sunce', + "sp_sunce", "gjqt_bailitusu", "gjqt_beiluo", "gjqt_xieyi", @@ -1720,7 +1720,7 @@ window.noname_character_rank = { ], rarity: { legend: [ - 'sp_sunce', + "sp_sunce", "star_caoren", "dc_zhaoyun", "dc_caocao", diff --git a/character/sp.js b/character/sp.js index 0caadc3a3..fdad5ff70 100755 --- a/character/sp.js +++ b/character/sp.js @@ -143,7 +143,7 @@ game.import("character", function () { "sp_zhangliao", "sp_ol_zhanghe", "sp_menghuo", - 'sp_sunce', + "sp_sunce", ], sp_qifu: [ "ol_feiyi", @@ -184,12 +184,12 @@ game.import("character", function () { ol_mengda(mode) { return mode !== "guozhan"; }, - ol_mengda(mode){ - return mode!=='guozhan'; + ol_mengda(mode) { + return mode !== "guozhan"; }, }, character: { - sp_sunce:['male','qun',4,['olliantao']], + sp_sunce: ["male", "qun", 4, ["olliantao"]], ol_liupi: ["male", "qun", 4, ["olyicheng"]], ol_lukai: ["male", "wu", 3, ["olxuanzhu", "oljiane"]], liupan: ["male", "qun", 4, ["olpijing"]], @@ -968,117 +968,177 @@ game.import("character", function () { }, skill: { //SP孙策 - olliantao:{ - audio:2, - trigger:{player:'phaseUseBegin'}, - filter(event,player){ - return game.hasPlayer(target=>target!=player); + olliantao: { + audio: 2, + trigger: { player: "phaseUseBegin" }, + filter(event, player) { + return game.hasPlayer((target) => target != player); }, - async cost(event,trigger,player){ - event.result=await player.chooseTarget(get.prompt2('olliantao'),lib.filter.notMe).set('ai',target=>{ - const player=get.event('player'),att=get.attitude(player,target); - const colors=Object.keys(lib.color).filter(i=>i!='none'); - if(!colors.some(color=>player.hasCard(card=>{ - const juedou=get.autoViewAs({name:'juedou'},[card]); - return player.canUse(juedou,target,false); - },'h'))) return 20+(3-get.sgn(att))+Math.random(); - const effs=colors.reduce((list,color)=>{ - const cards=player.getCards('h',card=>{ - const juedou=get.autoViewAs({name:'juedou'},[card]); - return player.canUse(juedou,target,false); - }); - if(cards.length){ - list.push(cards.reduce((sum,card)=>{ - const juedou=get.autoViewAs({name:'juedou'},[card]); - return sum+get.effect(target,card,player,player); - },0)); - } - return list; - },[]); - return Math[att>0?'max':'min'].apply(Math,list); - }).forResult(); + async cost(event, trigger, player) { + event.result = await player + .chooseTarget(get.prompt2("olliantao"), lib.filter.notMe) + .set("ai", (target) => { + const player = get.event("player"), + att = get.attitude(player, target); + const colors = Object.keys(lib.color).filter((i) => i != "none"); + if ( + !colors.some((color) => + player.hasCard((card) => { + const juedou = get.autoViewAs({ name: "juedou" }, [card]); + return player.canUse(juedou, target, false); + }, "h") + ) + ) + return 20 + (3 - get.sgn(att)) + Math.random(); + const effs = colors.reduce((list, color) => { + const cards = player.getCards("h", (card) => { + const juedou = get.autoViewAs({ name: "juedou" }, [card]); + return player.canUse(juedou, target, false); + }); + if (cards.length) { + list.push( + cards.reduce((sum, card) => { + const juedou = get.autoViewAs({ name: "juedou" }, [card]); + return sum + get.effect(target, card, player, player); + }, 0) + ); + } + return list; + }, []); + return Math[att > 0 ? "max" : "min"].apply(Math, list); + }) + .forResult(); }, - async content(event,trigger,player){ - const target=event.targets[0]; - const colors=Object.keys(lib.color).filter(i=>i!='none'); - if(colors.length&&player.countCards('h')){ - const result=await target.chooseControl(colors) - .set('prompt','连讨:请选择一个颜色').set('ai',()=>{ - const player=get.event('player'),source=get.event().getParent().player; - let controls=get.event('controls').slice(); - if(controls.length==1) return controls[0]; - const getSum=function(color,player,source){ - return source.getCards('h',card=>{ - if(get.color(card)!=color) return false; - const juedou=get.autoViewAs({name:'juedou'},[card]); - return source.canUse(juedou,player,false); - }).reduce((num,card)=>{ - const juedou=get.autoViewAs({name:'juedou'},[card]); - return num+get.effect(player,card,source,player); - },0); - }; - return controls.sort((a,b)=>getSum(b,player,source)-getSum(a,player,source))[0]; - }).set('prompt2',get.translation(player)+'将对你依次使用由其手牌中所有此颜色的牌转化的【决斗】').forResult(); - const color=result.control; - game.broadcastAll((color,target)=>{ - lib.skill.olliantao_backup.filterCardx=[color,target]; - lib.skill.olliantao_backup.filterCard=function(card,player){ - const list=lib.skill.olliantao_backup.filterCardx; - if(get.color(card)!=list[0]) return false; - const juedou=get.autoViewAs({name:'juedou'},[card]); - return player.canUse(juedou,list[1],false); - }; - },color,target); - while(target.isIn()&&player.hasCard(card=>lib.skill.olliantao_backup.filterCard(card,player))&&!game.getGlobalHistory('everything',evt=>{ - return evt.name=='dying'&&[player,target].includes(evt.player)&&evt.getParent('olliantao')==event; - }).length){ - await player.chooseToUse().set('forced',true) - .set('openskilldialog','连讨:将一张'+get.translation(color)+'手牌当作【决斗】对'+get.translation(target)+'使用') - .set('norestore',true).set('_backupevent','olliantao_backup').set('custom',{ - add:{}, - replace:{window:function(){}}, - }).backup('olliantao_backup').set('targetRequired',true).set('complexSelect',true) - .set('filterTarget',function(card,player,target){ - if(target!=_status.event.sourcex&&!ui.selected.targets.includes(_status.event.sourcex)) return false; - return lib.filter.targetEnabled.apply(this, arguments); - }).set('sourcex',target).set('addCount',false); + async content(event, trigger, player) { + const target = event.targets[0]; + const colors = Object.keys(lib.color).filter((i) => i != "none"); + if (colors.length && player.countCards("h")) { + const result = await target + .chooseControl(colors) + .set("prompt", "连讨:请选择一个颜色") + .set("ai", () => { + const player = get.event("player"), + source = get.event().getParent().player; + let controls = get.event("controls").slice(); + if (controls.length == 1) return controls[0]; + const getSum = function (color, player, source) { + return source + .getCards("h", (card) => { + if (get.color(card) != color) return false; + const juedou = get.autoViewAs({ name: "juedou" }, [card]); + return source.canUse(juedou, player, false); + }) + .reduce((num, card) => { + const juedou = get.autoViewAs({ name: "juedou" }, [card]); + return num + get.effect(player, card, source, player); + }, 0); + }; + return controls.sort( + (a, b) => getSum(b, player, source) - getSum(a, player, source) + )[0]; + }) + .set( + "prompt2", + get.translation(player) + + "将对你依次使用由其手牌中所有此颜色的牌转化的【决斗】" + ) + .forResult(); + const color = result.control; + game.broadcastAll( + (color, target) => { + lib.skill.olliantao_backup.filterCardx = [color, target]; + lib.skill.olliantao_backup.filterCard = function (card, player) { + const list = lib.skill.olliantao_backup.filterCardx; + if (get.color(card) != list[0]) return false; + const juedou = get.autoViewAs({ name: "juedou" }, [card]); + return player.canUse(juedou, list[1], false); + }; + }, + color, + target + ); + while ( + target.isIn() && + player.hasCard((card) => lib.skill.olliantao_backup.filterCard(card, player)) && + !game.getGlobalHistory("everything", (evt) => { + return ( + evt.name == "dying" && + [player, target].includes(evt.player) && + evt.getParent("olliantao") == event + ); + }).length + ) { + await player + .chooseToUse() + .set("forced", true) + .set( + "openskilldialog", + "连讨:将一张" + + get.translation(color) + + "手牌当作【决斗】对" + + get.translation(target) + + "使用" + ) + .set("norestore", true) + .set("_backupevent", "olliantao_backup") + .set("custom", { + add: {}, + replace: { window: function () {} }, + }) + .backup("olliantao_backup") + .set("targetRequired", true) + .set("complexSelect", true) + .set("filterTarget", function (card, player, target) { + if ( + target != _status.event.sourcex && + !ui.selected.targets.includes(_status.event.sourcex) + ) + return false; + return lib.filter.targetEnabled.apply(this, arguments); + }) + .set("sourcex", target) + .set("addCount", false); } } - const num=player.getHistory('sourceDamage',evt=>{ - return evt.getParent(4)==event; - }).reduce((sum,evt)=>sum+evt.num,0); - if(num) await player.draw(num); - if(!game.hasPlayer2(current=>{ - return current.getHistory('damage',evt=>{ - return evt.getParent(4)==event; - }).length; - })){ + const num = player + .getHistory("sourceDamage", (evt) => { + return evt.getParent(4) == event; + }) + .reduce((sum, evt) => sum + evt.num, 0); + if (num) await player.draw(num); + if ( + !game.hasPlayer2((current) => { + return current.getHistory("damage", (evt) => { + return evt.getParent(4) == event; + }).length; + }) + ) { await player.draw(3); - player.addTempSkill('olliantao_buff'); - player.addMark('olliantao_buff',3,false); + player.addTempSkill("olliantao_buff"); + player.addMark("olliantao_buff", 3, false); } }, - subSkill:{ - backup:{ - viewAs:{name:'juedou'}, - position:'h', - check:()=>1+Math.random(), - precontent(){ + subSkill: { + backup: { + viewAs: { name: "juedou" }, + position: "h", + check: () => 1 + Math.random(), + precontent() { delete event.result.skill; }, }, - buff:{ - charlotte:true, - onremove:true, - mod:{ - maxHandcard(player,num){ - return num+player.countMark('olliantao_buff'); + buff: { + charlotte: true, + onremove: true, + mod: { + maxHandcard(player, num) { + return num + player.countMark("olliantao_buff"); }, - cardEnabled(card){ - if(card.name=='sha') return false; + cardEnabled(card) { + if (card.name == "sha") return false; }, }, - intro:{content:'手牌上限+#,不能使用【杀】'}, + intro: { content: "手牌上限+#,不能使用【杀】" }, }, }, }, @@ -3056,7 +3116,7 @@ game.import("character", function () { ? "" : `。若${get.translation( trigger.player - )}受到了此【杀】的伤害,你获得其一张牌。` + )}受到了此【杀】的伤害,你获得其一张牌。` }` ); next.set("norestore", true); @@ -3395,9 +3455,8 @@ game.import("character", function () { ]; [0, 1, 2].forEach((item, index) => { if (event.list.includes(item)) { - choiceList[ - index - ] = `${choiceList[index]}`; + choiceList[index] = + `${choiceList[index]}`; } else choices.push(`选项${get.cnNumber(index + 1, true)}`); }); game.me @@ -7028,7 +7087,7 @@ game.import("character", function () { delete stat.gushe; }, ai: { - combo: "gushe" + combo: "gushe", }, }, //OL刘老板 @@ -12778,10 +12837,13 @@ game.import("character", function () { (_status.connectMode || current.hasSha()) ) { current - .chooseToUse(function (card, player, event) { - if (get.name(card) != "sha") return false; - return lib.filter.filterCard.apply(this, arguments); - }, "同协:是否对" + get.translation(target) + "使用一张杀?") + .chooseToUse( + function (card, player, event) { + if (get.name(card) != "sha") return false; + return lib.filter.filterCard.apply(this, arguments); + }, + "同协:是否对" + get.translation(target) + "使用一张杀?" + ) .set("targetRequired", true) .set("complexSelect", true) .set("filterTarget", function (card, player, target) { @@ -17318,10 +17380,13 @@ game.import("character", function () { "step 0"; var target = trigger.targets[0]; target - .chooseToUse(function (card, player, event) { - if (get.name(card) != "sha") return false; - return lib.filter.filterCard.apply(this, arguments); - }, "武娘:是否对" + get.translation(player) + "使用一张杀?") + .chooseToUse( + function (card, player, event) { + if (get.name(card) != "sha") return false; + return lib.filter.filterCard.apply(this, arguments); + }, + "武娘:是否对" + get.translation(player) + "使用一张杀?" + ) .set("targetRequired", true) .set("complexSelect", true) .set("filterTarget", function (card, player, target) { @@ -21948,7 +22013,7 @@ game.import("character", function () { }, }, ai: { - combo: "wylianji" + combo: "wylianji", }, }, jingong: { @@ -28882,7 +28947,7 @@ game.import("character", function () { player.changeSkills(["xiaoji"], ["liangzhu"]); }, ai: { - combo: "liangzhu" + combo: "liangzhu", }, }, mingshi: { @@ -34505,10 +34570,11 @@ game.import("character", function () { olyicheng: "易城", olyicheng_info: "出牌阶段限一次,你可以亮出牌堆顶的三张牌,然后你可以以任意手牌交换这些牌,若这三张牌的点数和因此增加,则你可以选择用所有手牌交换这三张牌。最后你将这三张牌置于牌堆顶。", - sp_sunce:'SP孙策', - sp_sunce_prefix:'SP', - olliantao:'连讨', - olliantao_info:'出牌阶段开始时,你可以令一名其他角色选择一个颜色,然后你依次将此颜色的所有手牌当作【决斗】对其使用直到有一方进入濒死状态,然后你摸X张牌(X为你本次以此法造成的伤害数)。若没有角色因本次技能结算受到伤害,你摸三张牌,本回合手牌上限+3且本回合你不能使用【杀】。', + sp_sunce: "SP孙策", + sp_sunce_prefix: "SP", + olliantao: "连讨", + olliantao_info: + "出牌阶段开始时,你可以令一名其他角色选择一个颜色,然后你依次将此颜色的所有手牌当作【决斗】对其使用直到有一方进入濒死状态,然后你摸X张牌(X为你本次以此法造成的伤害数)。若没有角色因本次技能结算受到伤害,你摸三张牌,本回合手牌上限+3且本回合你不能使用【杀】。", sp_tianji: "天极·皇室宗亲", sp_sibi: "四弼·辅国文曲",