diff --git a/audio/death/lingcao.mp3 b/audio/death/lingcao.mp3 deleted file mode 100644 index 993573afc9c632f75b09444634d075ea5b4e22bd..0000000000000000000000000000000000000000 Binary files a/audio/death/lingcao.mp3 and /dev/null differ diff --git a/audio/death/liuzan.mp3 b/audio/death/liuzan.mp3 deleted file mode 100644 index 157f4e344084f804ed70c0e2f6ad61973eb69a18..0000000000000000000000000000000000000000 Binary files a/audio/death/liuzan.mp3 and /dev/null differ diff --git a/audio/death/luotong.mp3 b/audio/death/luotong.mp3 deleted file mode 100644 index ee49dcbc3ea7c25f7bf09be3f7170770a6ff7689..0000000000000000000000000000000000000000 Binary files a/audio/death/luotong.mp3 and /dev/null differ diff --git a/audio/death/wangji.mp3 b/audio/death/wangji.mp3 deleted file mode 100644 index 1f47d8002f013b25ab5bc103c049410d5536c602..0000000000000000000000000000000000000000 Binary files a/audio/death/wangji.mp3 and /dev/null differ diff --git a/audio/skill/dujin1.mp3 b/audio/skill/dujin1.mp3 deleted file mode 100644 index 537905bc576a182e1e0eef4767db295c16a93f36..0000000000000000000000000000000000000000 Binary files a/audio/skill/dujin1.mp3 and /dev/null differ diff --git a/audio/skill/dujin2.mp3 b/audio/skill/dujin2.mp3 deleted file mode 100644 index 42b3b346e8b15c8cebefb70e567e634b1177b8c6..0000000000000000000000000000000000000000 Binary files a/audio/skill/dujin2.mp3 and /dev/null differ diff --git a/audio/skill/fenyin1.mp3 b/audio/skill/fenyin1.mp3 deleted file mode 100644 index 60fc6239a11d8ac3f55ecc02bea05090a100f532..0000000000000000000000000000000000000000 Binary files a/audio/skill/fenyin1.mp3 and /dev/null differ diff --git a/audio/skill/fenyin2.mp3 b/audio/skill/fenyin2.mp3 deleted file mode 100644 index fb8da0f82e8fc02b1bd70404f56c0819415ad610..0000000000000000000000000000000000000000 Binary files a/audio/skill/fenyin2.mp3 and /dev/null differ diff --git a/audio/skill/jinqu1.mp3 b/audio/skill/jinqu1.mp3 deleted file mode 100644 index 6f057b31d2f443f95650d020c2c07a1a9bf4b2c4..0000000000000000000000000000000000000000 Binary files a/audio/skill/jinqu1.mp3 and /dev/null differ diff --git a/audio/skill/jinqu2.mp3 b/audio/skill/jinqu2.mp3 deleted file mode 100644 index b082d780629184bd6da1db3fb10db1556db39213..0000000000000000000000000000000000000000 Binary files a/audio/skill/jinqu2.mp3 and /dev/null differ diff --git a/audio/skill/qinzheng1.mp3 b/audio/skill/qinzheng1.mp3 deleted file mode 100644 index 3a2be5c90f11c40a6a248887de04fed615c16dcf..0000000000000000000000000000000000000000 Binary files a/audio/skill/qinzheng1.mp3 and /dev/null differ diff --git a/audio/skill/qinzheng2.mp3 b/audio/skill/qinzheng2.mp3 deleted file mode 100644 index f79af8557340517a54350d332b08297953a884d8..0000000000000000000000000000000000000000 Binary files a/audio/skill/qinzheng2.mp3 and /dev/null differ diff --git a/audio/skill/qizhi1.mp3 b/audio/skill/qizhi1.mp3 deleted file mode 100644 index 82b77b54755d1171c99048be49774ee60efd0b8e..0000000000000000000000000000000000000000 Binary files a/audio/skill/qizhi1.mp3 and /dev/null differ diff --git a/audio/skill/qizhi2.mp3 b/audio/skill/qizhi2.mp3 deleted file mode 100644 index 4a1e77edd7f0db4f286da1c983a7f71c73a19d1f..0000000000000000000000000000000000000000 Binary files a/audio/skill/qizhi2.mp3 and /dev/null differ diff --git a/image/generals/lingcao.jpg b/image/generals/lingcao.jpg deleted file mode 100644 index ab46ae78e1c967cc7553341440f66b5bbb0db4f8..0000000000000000000000000000000000000000 Binary files a/image/generals/lingcao.jpg and /dev/null differ diff --git a/image/generals/liuzan.jpg b/image/generals/liuzan.jpg deleted file mode 100644 index 1ce4c12b80ae30163d58faa5c70489c736e320de..0000000000000000000000000000000000000000 Binary files a/image/generals/liuzan.jpg and /dev/null differ diff --git a/image/generals/luotong.jpg b/image/generals/luotong.jpg deleted file mode 100644 index 7f26838e58d24e60aca554490af6db38375f5506..0000000000000000000000000000000000000000 Binary files a/image/generals/luotong.jpg and /dev/null differ diff --git a/image/generals/wangji.jpg b/image/generals/wangji.jpg deleted file mode 100644 index 6fff7d27cb2474c985a07d03d57bc2c2999de3e9..0000000000000000000000000000000000000000 Binary files a/image/generals/wangji.jpg and /dev/null differ diff --git a/init.lua b/init.lua index ef0351f2a15482137f7a6dd075d7532071825774..fa63250d215667f86ef5b757add3daff393d212f 100644 --- a/init.lua +++ b/init.lua @@ -2,140 +2,9 @@ local extension = Package("joy") Fk:loadTranslationTable{ -- TODO: move them - ["joy"] = "热门武将", ["m_ex"] = "手杀界", } -local liuzan = General(extension, "liuzan", "wu", 4) -local fenyin = fk.CreateTriggerSkill{ - name = "fenyin", - anim_type = "drawcard", - events = {fk.CardUsing}, - can_trigger = function(self, event, target, player, data) - return target == player and player:hasSkill(self.name) and - player.phase < Player.NotActive and self.can_fenyin - end, - on_use = function(self, event, target, player, data) - player:drawCards(1, self.name) - end, - - refresh_events = {fk.CardUsing, fk.EventPhaseStart}, - can_refresh = function(self, event, target, player, data) - if not (target == player and player:hasSkill(self.name)) then return end - if event == fk.EventPhaseStart then - return player.phase == Player.NotActive - else - return player.phase < Player.NotActive -- FIXME: this is a bug of FK 0.0.2!! - end - end, - on_refresh = function(self, event, target, player, data) - local room = player.room - if event == fk.EventPhaseStart then - room:setPlayerMark(player, self.name, 0) - room:setPlayerMark(player, "@" .. self.name, 0) - else - self.can_fenyin = data.card.color ~= player:getMark(self.name) and player:getMark(self.name) ~= 0 - room:setPlayerMark(player, self.name, data.card.color) - room:setPlayerMark(player, "@" .. self.name, data.card:getColorString()) - end - end, -} -liuzan:addSkill(fenyin) -Fk:loadTranslationTable{ - ["liuzan"] = "留赞", - ["fenyin"] = "奋音", - [":fenyin"] = "你的回合内,当你使用和上一张牌颜色不同的牌时,你可以摸一张牌。", - ["@fenyin"] = "奋音", - - ["$fenyin1"] = "吾军杀声震天,则敌心必乱!", - ["$fenyin2"] = "阵前亢歌,以振军心!", - ["~liuzan"] = "贼子们,来吧!啊…………", -} - -local wangji = General(extension, "wangji", "wei", 3) -local qizhi = fk.CreateTriggerSkill{ - name = "qizhi", - anim_type = "control", - events = { fk.TargetSpecified }, - can_trigger = function(self, event, target, player, data) - return - target == player and - player:hasSkill(self.name) and - player.phase < Player.NotActive and - data.firstTarget and - table.contains({ Card.TypeBasic, Card.TypeTrick }, data.card.type) - end, - on_cost = function(self, event, target, player, data) - local room = player.room - local alivePlayers = room:getAlivePlayers() - local availableTargets = {} - for _, p in ipairs(alivePlayers) do - if not p:isNude() and not table.contains(AimGroup:getAllTargets(data.tos), p.id) then - table.insert(availableTargets, p.id) - end - end - - if #availableTargets == 0 then - return false - end - - local result = room:askForChoosePlayers(player, availableTargets, 1, 1, "#qizhi-ask", self.name) - if #result > 0 then - self.cost_data = result - return true - end - end, - on_use = function(self, event, target, player, data) - local room = player.room - local skillTarget = room:getPlayerById(self.cost_data[1]) - local card = room:askForCardChosen(player, skillTarget, "he", self.name) - room:throwCard(card, self.name, skillTarget, skillTarget) - skillTarget:drawCards(1, self.name) - room:addPlayerMark(player, "@" .. self.name) - end, - - refresh_events = {fk.EventPhaseStart}, - can_refresh = function(self, event, target, player, data) - if not (target == player and player:hasSkill(self.name)) then return end - return player.phase == Player.NotActive - end, - on_refresh = function(self, event, target, player, data) - player.room:setPlayerMark(player, "@" .. self.name, 0) - end, -} -local jinqu = fk.CreateTriggerSkill{ - name = "jinqu", - anim_type = "drawcard", - events = { fk.EventPhaseStart }, - can_trigger = function(self, event, target, player, data) - return target == player and player:hasSkill(self.name) and player.phase == Player.Finish - end, - on_use = function(self, event, target, player, data) - player:drawCards(2, self.name) - local diff = #player:getCardIds(Player.Hand) - player:getMark("@" .. qizhi.name) - if diff > 0 then - player.room:askForDiscard(player, diff, diff, false, self.name) - end - end, -} -wangji:addSkill(qizhi) -wangji:addSkill(jinqu) -Fk:loadTranslationTable{ - ["wangji"] = "王基", - ["qizhi"] = "奇制", - [":qizhi"] = "当你使用基本牌或锦囊牌指定第一个目标后,你可以弃置一名不为目标的角色的一张牌,然后令其摸一张牌。", - ["jinqu"] = "进趋", - [":jinqu"] = "结束阶段开始时,你可以摸两张牌,然后将手牌弃置至X张(X为你于本回合内发动过“奇制”的次数。", - ["@qizhi"] = "奇制", - ["#qizhi-ask"] = "奇制:你可以弃置一名非目标角色的一张牌,然后令其摸一张牌", - - ["$qizhi1"] = "声东击西,敌寇一网成擒。", - ["$qizhi2"] = "吾意不在此地,已遣别部出发。", - ["$jinqu1"] = "建上昶水城,以逼夏口!", - ["$jinqu2"] = "通川聚粮,伐吴之业,当步步为营。", - ["~wangji"] = "天下之势,必归大魏,可恨,未能得见呐!", -} - local m_ex__xusheng = General(extension, "m_ex__xusheng", "wu", 4) local m_ex__pojun_clean = fk.CreateTriggerSkill{ name = "#m_ex__pojun_clean", @@ -673,146 +542,15 @@ Fk:loadTranslationTable{ ["1v1 choose general"] = "请选择出战的武将", } -local dujin = fk.CreateTriggerSkill{ - name = "dujin", - anim_type = "drawcard", - events = {fk.DrawNCards}, - on_use = function(self, event, target, player, data) - data.n = data.n + 1 + #player:getCardIds(Player.Equip) // 2 - end, -} -local lingcao = General(extension, "lingcao", "wu", 4) -lingcao:addSkill(dujin) -Fk:loadTranslationTable{ - ["lingcao"] = "凌操", - ["dujin"] = "独进", - [":dujin"] = "摸牌阶段,你可以多摸X+1张牌,X为你装备区内牌数的一半(向下取整)", - ["$dujin1"] = "带兵十万,不如老夫多甲一件!", - ["$dujin2"] = "轻舟独进,破敌先锋!", - ["~lingcao"] = "呃啊!(扑通)此箭……何来……", -} - -local qinzheng = fk.CreateTriggerSkill{ - name = "qinzheng", - anim_type = "drawcard", - frequency = Skill.Compulsory, - events = {fk.CardUsing, fk.CardResponding}, - can_trigger = function(self, event, target, player, data) - return - target == player and - player:hasSkill(self.name) and - not table.every({ 3, 5, 8 }, function(num) - return player:getMark("@" .. self.name) % num ~= 0 - end) - end, - on_use = function(self, event, player, target, data) - local randCard = function(cardName) - local cardNum = #player.room.draw_pile - local randNum = math.random(1, cardNum) - - for i = randNum, cardNum do - local card = Fk:getCardById(player.room.draw_pile[i]) - - if table.contains(cardName, card.name) then - return card - end - end - - for i = 1, randNum do - local card = Fk:getCardById(player.room.draw_pile[i]) - - if table.contains(cardName, card.name) then - return card - end - end - - return nil - end - - local loopList = table.filter({ 3, 5, 8 }, function(num) - return player:getMark("@" .. self.name) % num == 0 - end) - - local toObtain = {} - for _, count in ipairs(loopList) do - local cardList = {"slash", "jink"} - if count == 5 then - cardList = {"peach", "analeptic"} - elseif count == 8 then - cardList = {"ex_nihilo", "duel"} - end - - local randomCard = randCard(cardList) - if randomCard then - table.insert(toObtain, randomCard.id) - end - end - - if #toObtain > 0 then - player.room:moveCards({ - ids = toObtain, - to = player.id, - toArea = Player.Hand, - moveReason = fk.ReasonPrey, - proposer = player.id, - skillName = self.name, - }) - end - end, - - refresh_events = {fk.PreCardUse, fk.PreCardRespond}, - can_refresh = function(self, event, target, player, data) - return player:hasSkill(self.name) and target == player - end, - on_refresh = function(self, event, target, player, data) - player.room:addPlayerMark(player, "@" .. self.name, 1) - end, +local ol_variation_mode = fk.CreateGameMode{ + name = "ol_variation_mode", + minPlayer = 2, + maxPlayer = 8, + package_whitelist = {"variation"}, } - -local luotong = General:new(extension, "luotong", "wu", 4) -luotong:addSkill(qinzheng) - +extension:addGameMode(ol_variation_mode) Fk:loadTranslationTable{ - ["luotong"] = "骆统", - ["qinzheng"] = "勤政", - [":qinzheng"] = "锁定技,你每使用或打出:三张牌时,你随机获得一张【杀】或【闪】;五张牌时,你随机获得一张【桃】或【酒】;八张牌时,你随机获得一张【无中生有】或【决斗】。", - ["@qinzheng"] = "勤政", - - ["$qinzheng1"] = "夫国之有民,犹水之有舟,停则以安,扰则以危。", - ["$qinzheng2"] = "治疾及其未笃,除患贵其莫深。", - ["~luotong"] = "臣统之大愿,足以死而不朽矣。", + ["ol_variation_mode"] = "应变测试版", } - ----@param pattern string ----@param fromPiles integer[] ----@return integer[] | nil -function getCardByPattern(room, pattern, fromPiles) - pattern = pattern or "." - fromPiles = fromPiles or room.draw_pile - - --THIS IS STUPID! - if pattern == "damage_card" then - pattern = "slash,duel,savage_assault,archery_attack,fire_attack,thunder" - elseif pattern == "nondamage_card" then - pattern = "jink,peach,dismantlement,snatch,ex_nihilo,collateral,nullification,indulgence,amazing_grace,god_salvation".. - "crossbow,double_swords,qinggang_sword,ice_sword,axe,spear,blade,halberd,kylin_bow,eight_diagram,nioh_shield,chitu,dayuan,dilu,jueying,zixing,zhuahuangfeidian".. - "analeptic,iron_chain,supply_shortage".. - "guding_blade,fan,silver_lion,vine,hualiu" - end - - local cards = {} - for i = 1, #fromPiles, 1 do - local card = Fk:getCardById(fromPiles[i]) - if card:matchPattern(pattern) then - table.insertIfNeed(cards, fromPiles[i]) - end - end - if #cards > 0 then - return(cards[math.random(1, #cards)]) - else - return nil - end -end - return {extension}