diff --git a/extension.js b/extension.js index 3d11afb..d4faa6e 100644 --- a/extension.js +++ b/extension.js @@ -1,6 +1,3 @@ -/* -nonamexwapk::name::极略::version::2.3.xxxx::nonamexwapkend -*/ 'use strict'; game.import("extension", function (lib, game, ui, get, ai, _status) { return { @@ -25,6 +22,13 @@ const b = 1; } game.showExtensionChangeLog(pack.changelog); } + if (!_status.evaluatingExtension) { + fetch(lib.assetURL + "extension/极略/extension.js").catch(e => { + setTimeout(() => { + alert('万能导入/玄武版导入时需将拓展名设置为极略。请手动删除本拓展文件夹'); + }, 500); + }); + } if (config.simple_name === 'hide') { get.slimName = function (str) { @@ -61,7 +65,7 @@ const b = 1; var characterReplaceExclude = { jlsgsk_luzhi: 'yl_luzhi', jlsgsk_huangyueying: 'jsp_huangyueying', - // jlsgsk_simashi: 'jin_simashi', + jlsgsk_simashi: 'jin_simashi', jlsgsk_jiangqin: 'jiangqing', jlsgsk_guanyu: 'jsp_guanyu', jlsgsk_jiping: 'sp_jiben', @@ -188,6 +192,7 @@ const b = 1; 'jlsgsk_dongzhuo', 'jlsgsk_guonvwang', 'jlsgsoul_zhangliao', + 'jlsgsk_yuji', ], a: [ 'jlsgsoul_zhouyu', @@ -272,7 +277,6 @@ const b = 1; 'jlsgsk_wangping', 'jlsgsk_zhangbao', 'jlsgsr_xuzhu', - 'jlsgsk_yuji', ], bm: [ 'jlsgsr_huanggai', @@ -675,8 +679,11 @@ const b = 1; }, threaten: 1.3, respondSha: true, - respondShan: true, + // respondShan: true, fireattack: true, + skillTagFilter:function(player){ + return _status.currentPhase == player ? player.countCards('h') - player.hp == 1 : player.hp - player.countCards('h') == 1; + }, }, group: ['jlsg_zhengyi_shan'], subSkill: { @@ -1953,26 +1960,25 @@ const b = 1; direct: true, content: function () { 'step 0' - player.chooseToDiscard('h', `咒缚:是否弃置一张手牌,令${get.translation(trigger.player)}进行判定?`).set("ai", function (card) { + player.chooseToDiscard('h', get.prompt2(event.name, trigger.player)).set("ai", function (card) { return get.attitude(player, trigger.player) > -1 ? 0 : 6 - get.useful(card); // return 2 + get.effect(trigger.player, { name: 'sha' }, game.me) - get.value(card); - }).set('logSkill', 'jlsg_zhoufu'); + }).set('logSkill', event.name); 'step 1' - if (result.bool) { - trigger.player.judge(function (card) { - if (get.color(card) == 'black') return -1; - return 1; - }).callback = lib.skill.jlsg_zhoufu.callback; + if (!result.bool) { + event.finish(); + return; } - }, - callback: function () { - var target = _status.currentPhase; - if (event.judgeResult.suit == 'spade') { - // target.addTempSkill('jlsg_zhoufu2'); - target.addTempSkill('fengyin'); + trigger.player.judge(function (card) { + if (get.color(card) == 'black') return -1; + return 1; + }).set('judge2', result => !result.bool); + 'step 2' + if (result.suit === 'spade') { + trigger.player.addTempSkill('fengyin'); } - if (event.judgeResult.suit == 'club') { - target.chooseToDiscard(2, true); + if (result.suit === 'club') { + trigger.player.chooseToDiscard(2, true); } }, ai: { @@ -2168,7 +2174,7 @@ const b = 1; // if (!player.countCards('he')) return -get.attitude(player, target) && target.countCards('he'); // if (player.countCards('he') > 4) return get.attitude(player, target) && target.countCards('he'); // return 0; - return get.effect(target, { name: 'guohe' }, player, player) - get.effect(player, { name: 'guohe' }, target, player); + return get.effect(target, { name: 'guohe' }, player, player) - get.effect(player, { name: 'guohe' }, target, player) - 1; } 'step 1' if (result.bool) { @@ -4673,7 +4679,10 @@ const b = 1; } return suits.length > 0; }, - frequent: true, + check: function (event, player) { + return true; + }, + // frequent: true, content: function () { player.showHandcards(); var suits = ['heart', 'club', 'spade', 'diamond']; @@ -5834,36 +5843,7 @@ const b = 1; var choice, value = 0; for (let [_, __, cardName, nature] of list) { // choose button ai let card = { name: cardName, nature: nature } - let info = get.info(card); - let range; - if (info.notarget) { - continue; - } - { - let select = get.copy(info.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, target); - game.checkMod(card, target, range, 'selectTarget', target); - } - let newV = 0; - let targets = game.filterPlayer(); - let valueList = []; - for (var i = 0; i < targets.length; i++) { - if (target.canUse(card, targets[i], null, true)) { - var eff = get.effect_use(targets[i], card, target, player); - valueList.push(eff); - } - } - valueList.sort().reverse(); - for (var i = 0; i < valueList.length; i++) { - if (i >= range[0] && (i == range[1] || range[1] != -1 && valueList[i] <= 0)) break; - newV += valueList[i]; - } - console.log(newV, card); + let newV = player.getUseValue(card); if (newV > value) { choice = [cardName, nature]; value = newV; @@ -5888,42 +5868,7 @@ const b = 1; } var target = trigger.player; event.card = { name: result.links[0][2], nature: result.links[0][3] }; - var card = event.card; - var info = get.info(card); - var range; - if (!info.notarget) { - var select = get.copy(info.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, target); - game.checkMod(card, target, range, 'selectTarget', target); - } - if (info.notarget || range[1] == -1) { - target.chooseUseTarget(card, true); - event.finish(); - } else { - var next = player.chooseTarget(); - next.set('_get_card', card); - next.set('filterTarget', function (card, player, target) { - return lib.filter.targetInRange(card, _status.event.subject, target) - && lib.filter.targetEnabledx(card, _status.event.subject, target); - }); - next.set('ai', function (target, targets) { - return get.effect_use(target, [], _status.event.subject, _status.event.player); - }); - next.set('selectTarget', range); - // next.set('forced', true); - next.set('subject', target); - next.set('prompt', `选择${get.translation(card)}的目标`); - next.set('prompt2', `由${get.translation(target)}使用`); - } - 'step 3' - if(result.bool) { - trigger.player.useCard(event.card, result.targets, 'noai'); - } + player.chooseUseTarget(event.card, true); }, ai: { expose: 0.1, @@ -5997,7 +5942,7 @@ const b = 1; return event.source; }, content: function () { - player.storage.jlsg_fulu2.remove(trigger.source); + // player.storage.jlsg_fulu2.remove(trigger.source); player.storage.jlsg_fulu2.unshift(trigger.source); player.storage.jlsg_fulu2.splice(3); } @@ -6042,7 +5987,7 @@ const b = 1; var target = result.targets[0]; if (player.countCards('hej')) { let cards = player.getCards('hej'); - player.$give(cards,target,false); + player.$give(cards, target, false); player.lose(cards, ui.special, 'toStorage'); if (!target.storage.jlsg_yongjue2) { target.storage.jlsg_yongjue2 = []; @@ -6080,17 +6025,17 @@ const b = 1; name: "存嗣", content: 'cards', }, - trigger:{ - source:'dieAfter', + trigger: { + source: 'dieAfter', }, - filter:function(event,player,name){ + filter: function (event, player, name) { return player.storage.jlsg_yongjue2 && player.storage.jlsg_yongjue2.length; }, skillAnimation: true, animationColor: 'orange', locked: true, direct: true, - content: function() { + content: function () { 'step 0' { let gender = player.sex ? player.sex : ['male', 'female'].randomGet(); @@ -7113,7 +7058,7 @@ const b = 1; direct: true, content: function () { 'step 0' - player.chooseTarget('是否发动【虎步】?', function (card, player, target) { + player.chooseTarget(get.prompt(event.name), function (card, player, target) { return player != target && player.canUse('juedou', target); }).ai = function (target) { return get.effect(target, { name: 'juedou' }, player, target); @@ -7121,24 +7066,22 @@ const b = 1; 'step 1' if (result.bool) { event.target = result.targets[0]; + player.logSkill(event.name, event.target); event.target.judge(function (card) { if (get.suit(card) == 'spade') return 1; return -0.5; - }); + }).judge2 = result => !result.bool; } else { event.finish(); } 'step 2' - if (result.judge < 0) { - lib.skill.global.remove('_wuxie'); - player.useCard({ name: 'juedou' }, event.target); + if (!result.bool) { + player.useCard({ name: 'juedou' }, event.target, 'nowuxie'); } else { event.finish(); } - 'step 3' - lib.skill.global.push('_wuxie'); } }, }, @@ -7414,8 +7357,8 @@ const b = 1; jlsg_ruzong_info: '你可以将【闪】/【无懈可击】当【无懈可击】/【闪】使用或打出。', jlsg_leiji_info: '当其他角色使用【闪】时,你可以将牌堆或弃牌堆里的一张【闪电】置入一名角色的判定区。', jlsg_shanxi_info: '锁定技,你不能成为【闪电】的目标,其他角色的【闪电】的判定牌生效后,你获得之。', - jlsg_guhuo_info: '其他角色的回合开始时,你可以与其拼点:若你赢,你令其视为使用一张由你指定的基本牌或非延时锦囊,由你指定目标;若你没赢,其对你造成1点伤害。', - jlsg_fulu_info: '当你受到一点伤害后,你可以令最近三名对你造成伤害的角色随机弃置一张牌,最近三名令你回复体力的角色摸一张牌。', + jlsg_guhuo_info: '其他角色的回合开始时,你可以与其拼点:若你赢,你视为使用一张基本牌或非延时锦囊牌;若你没赢,其对你造成1点伤害。', + jlsg_fulu_info: '当你受到一点伤害后,你可以令最近三名对你造成伤害的角色随机弃置一张牌,你最近三次回复体力的来源(若有)各摸一张牌。', jlsg_guixiu_info: '若你于此回合内未造成过伤害,你可以跳过弃牌阶段并摸一张牌。', jlsg_cunsi_info: '当你死亡时,你可以将区域内的所有牌移出游戏,然后令一名角色获得〖勇决〗', jlsg_yongjue_info: '锁定技,你使用【杀】造成的伤害+1;你杀死一名角色后,你获得所有〖存嗣〗移出游戏的牌。', @@ -8610,7 +8553,7 @@ const b = 1; player.judge(function (card) { if (get.color(card) == 'black') return 2; return -2; - }) + }).judge2 = result => result.bool; "step 1" if (result.bool && trigger.source.countCards('he')) { player.gainPlayerCard(trigger.source, 'he', true); @@ -8648,7 +8591,7 @@ const b = 1; player.judge(function (card) { if (get.color(card) == 'black') return 2; return -2; - }) + }).judge2 = result => result.bool; "step 1" if (result.bool && trigger.player.countCards('he')) { player.gainPlayerCard(trigger.player, 'he', true); @@ -8855,11 +8798,10 @@ const b = 1; player.judge(function (card) { if (get.suit(card) == 'heart') return 2; return -2; - }) + }).judge2 = result => result.bool; "step 7" - if (result.judge > 0) { + if (result.bool) { player.recover(); - } }, ai: { @@ -8973,7 +8915,11 @@ const b = 1; selectTarget: function (card, player, range) { if (card.name != 'sha') return; if (range[1] == -1) return; - if (player.countCards('e') != 0 && (!card.cards || player.countCards('e', (eCard) => !card.cards.contains(eCard)) != 0)) return; + if (player.countCards('e') != 0) { + if (!card.cards || player.countCards('e', eCard => !card.cards.contains(eCard))) { + return; + } + } range[1] += 2; } }, @@ -9043,7 +8989,9 @@ const b = 1; srlose: true, trigger: { global: 'damageEnd' }, filter: function (event, player) { - return player.countDiscardableCards(player, 'he') != 0 && event.source && event.source.get('e', '1') != undefined && event.source != player; + return player.countDiscardableCards(player, 'he') && + event.source && event.source.get('e', '1') && + event.source != player; }, check: function (event, player) { return get.attitude(player, event.source) <= 0; @@ -10865,11 +10813,11 @@ const b = 1; order: 9, result: { player: function (player) { - return player.isTurnedOver() ? 4 : -3; + return player.isTurnedOver() ? 5 : -3.5; }, target: function (player, target) { if (target.hasSkillTag('noturn')) return 0; - return target.isTurnedOver() ? 4 : -3; + return target.isTurnedOver() ? 5 : -3.5; } } } @@ -12589,7 +12537,7 @@ const b = 1; player.judge(function (card) { if (get.color(card) == 'red') return 2; return -2; - }) + }).judge2 = result => result.bool; 'step 1' if (result.bool) { player.draw(); @@ -12673,17 +12621,18 @@ const b = 1; event.cards1 = get.cards(2); player.showCards(event.cards1); event.types = []; - for (var i = 0; i < event.cards1.length; i++) { - event.types.add(get.type(event.cards1[i], 'trick')); + for (var c of event.cards1) { + event.types.add(get.type(c, 'trick')); } event.types.sort(); - var prompt = '弃置一张与' + get.translation(player) + '弃置的牌类别均不同的牌,然后让' + get.translation(player) + '获得' + get.translation(event.cards1) + + var prompt = '弃置一张与展示牌类别均不同的牌,然后让' + get.translation(player) + '获得' + get.translation(event.cards1) + ',或受到来自' + get.translation(player) + '的1点伤害并获得其中一种类别的牌.'; event.dialog = ui.create.dialog(prompt, 'hidden'); event.dialog.classList.add('noselect'); event.dialog.add(event.cards1); player.line(target); target.chooseToDiscard(dialog, function (card) { + let event = _status.event.getParent(); return !event.types.contains(get.type(card, 'trick')); }).ai = function (card) { if (card.name == 'tao') return -1; @@ -12695,7 +12644,6 @@ const b = 1; if (result.bool) { player.gain(event.cards1, 'gain2'); event.finish(); - return; } else { target.damage(); } @@ -12707,8 +12655,24 @@ const b = 1; if (event.types.length == 1) { return; } + let values = {}; + for (var c of event.cards1) { + var type = get.type2(c); + values[type] = values[type] || 0; + values[type] += get.value(c, player) + (get.attitude(player, target) < -1 ? get.value(c, target) : 0); + } + if (values) { + event.choice = Object.keys(values)[0]; + for (var type in values) { + if (values[type] > values[event.choice]) { + event.choice = type; + } + } + } var dialog = ui.create.dialog('仇袭:选择一种类型的卡牌卡牌获得之', event.cards1); - target.chooseControl(event.types, dialog); + target.chooseControl(event.types, dialog, function (event, player) { + return event.choice; + }); 'step 3' var cards = [[], []]; if (event.types.length == 1) { @@ -13327,7 +13291,7 @@ const b = 1; jlsg_hemou_info: '其他角色的出牌阶段开始时,你可以将一张手牌正面朝上交给该角色,该角色本阶段限一次,可将一张与之相同花色的手牌按下列规则使用:黑桃【决斗】,梅花【借刀杀人】,红桃【顺手牵羊】,方片【火攻】。', jlsg_qicai_info: '每当你失去一次手牌时,你可以进行判定,若结果为红色,你摸一张牌。', jlsg_rende_info: '任一角色的回合结束阶段结束时,你可以将任意数量的手牌交给该角色,然后该角色进行1个额外的出牌阶段。', - jlsg_chouxi_info: '出牌阶段限一次,你可以弃置一张手牌并展示牌堆顶的两张牌,然后令一名其他角色选择一项:弃置一张与之均不同类别的牌,然后令你获得这些牌;或受到你造成的1点伤害并获得其中一种类别的所有牌,然后你获得其余的牌。', + jlsg_chouxi_info: '出牌阶段限一次,你可以弃置一张手牌并展示牌堆顶的两张牌,然后令一名其他角色选择一项:1. 弃置一张与展示牌类别均不同的牌,然后令你获得展示的牌;2. 受到你造成的1点伤害并获得其中一种类别的牌,然后你获得其余的牌。', jlsg_yongbing_info: '主公技,当一名其他蜀势力角色使用【杀】造成一次伤害后,该角色可令你摸一张牌。', jlsg_yinmeng_info: '出牌阶段限X次,若你有手牌,你可以展示一名其他男性角色的一张手牌,然后展示你的一张手牌,若两张牌类型相同,你与其各摸一张牌;若不同,你弃置其展示的牌,X为你所损失的体力且至少为1', jlsg_xiwu_info: '当你使用的【杀】被目标角色的【闪】响应后,你可以摸一张牌,然后弃置其一张手牌。', @@ -15997,6 +15961,7 @@ const b = 1; enable: 'phaseUse', skillAnimation: true, unique: true, + limited: true, animationColor: 'fire', init: function (player) { player.storage.jlsg_liangyuan = false; @@ -17408,10 +17373,10 @@ const b = 1; trigger.player.judge(function (card) { if (get.suit(card) == 'spade' && get.number(card) > 1 && get.number(card) < 10) return -6; return 0; - }, event.judgestr); - game.delay(2); + }, event.judgestr).judge2 = (result => result.bool === false); + game.delayx(1.5); 'step 1' - if (result.judge < 0) { + if (result.bool === false) { trigger.player.damage(3, 'thunder', 'nosource'); } else { @@ -17604,9 +17569,9 @@ const b = 1; player.judge(function (card) { if (get.color(card) == 'black') return 1; return 0; - }); + }).judge2 = result => result.bool; "step 1" - if (get.color(result.card) == 'black') { + if (result.bool) { player.gain(result.card); player.$gain2(result.card); if (player.getStat().card.sha >= 1) { @@ -20691,14 +20656,21 @@ onclick="if (lib.jlsg) lib.jlsg.showRepoElement(this)"> diskURL: "", forumURL: "", mirrorURL: "https://github.com/xiaoas/jilue", - version: "2.3.0905", + version: "2.3.1001", changelog: ` Visit Repository
小提示:可以试着用极略内置的更新beta功能更新了
-2021.09.05更新
+2021.10.01更新
+  接入无名杀最新判断生效框架的修改。
+  修复SR刘备 仇袭 AI。
+  优化SK于禁 整毅 UX
+  加强SK于吉 一二技能 上调评级。
+  优化SK司马昭 UX
  修复SK蒋钦 忘私 技能配音。
  修复SK孙策 昂扬 技能描述。
+  修复SK颜良 虎步。
+  修复SK神孙尚香 良缘。
  修复SR赵云 救主。
历史:
2021.08.31更新