加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
tyj_xiliang.lua 94.01 KB
一键复制 编辑 原始数据 按行查看 历史
汤圆 提交于 2024-12-04 01:18 . 阉割
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138
local extension = Package:new("tyj_xiliang")
extension.extensionName = "tyj"
Fk:loadTranslationTable{
["tyj_xiliang"] = "汤圆西凉包",
["tyj"]='汤圆精品包',
}
local U = require "packages/utility/utility"
local tyj__machao = General:new(extension, "tyj__xi_machao", "qun", 4,4)
Fk:loadTranslationTable{
["tyj__xi_machao"] = "马超",
["#tyj__xi_machao"] = "凉州铁骑",
["designer:tyj__xi_machao"] = "汤圆",
["cv:tyj__xi_machao"] = "官方",
["illustrator:tyj__xi_machao"] = "青学",
["tyj__yuma"]="驭马",
[":tyj__yuma"]="锁定技,你计算到其他角色的距离-1。你不因使用失去坐骑牌后,你摸两张牌且本回合使用【杀】次数上限+1。",
}
local tyj__yuma = fk.CreateTriggerSkill{
name = "tyj__yuma",
anim_type = "drawcard",
frequency = Skill.Compulsory,
events = {fk.AfterCardsMove},
can_trigger = function(self, event, target, player, data)
if not player:hasSkill(self) then return end
for _, move in ipairs(data) do
if move.from == player.id and move.moveReason ~= fk.ReasonUse then
for _, info in ipairs(move.moveInfo) do
if (info.fromArea == Card.PlayerHand or info.fromArea == Card.PlayerEquip) and (Fk:getCardById(info.cardId).sub_type == Card.SubtypeDefensiveRide or Fk:getCardById(info.cardId).sub_type == Card.SubtypeOffensiveRide) then
return true
end
end
end
end
end,
on_trigger = function(self, event, target, player, data)
local n = 0
for _, move in ipairs(data) do
if move.from == player.id and move.moveReason ~= fk.ReasonUse then
for _, info in ipairs(move.moveInfo) do
if (info.fromArea == Card.PlayerHand or info.fromArea == Card.PlayerEquip) and (Fk:getCardById(info.cardId).sub_type == Card.SubtypeDefensiveRide or Fk:getCardById(info.cardId).sub_type == Card.SubtypeOffensiveRide) then
n = n + 1
end
end
end
end
for _ = 1, n do
if not player:hasSkill(self) then break end
self:doCost(event, target, player, data)
end
end,
on_use = function(self, event, target, player, data)
local room = player.room
player:drawCards(2, self.name)
room:addPlayerMark(player, MarkEnum.SlashResidue.."-turn")
end,
}
local tyj__yuma_mashu = fk.CreateDistanceSkill{
name = "#tyj__yuma_mashu",
frequency = Skill.Compulsory,
correct_func = function(self, from, to)
if from:hasSkill(self) then
return -1
end
end,
}
tyj__yuma:addRelatedSkill(tyj__yuma_mashu)
local tyj__tieji = fk.CreateTriggerSkill{
name = "tyj__tieji",
anim_type = "offensive",
events = {fk.TargetSpecified},
can_trigger = function(self, event, target, player, data)
return target == player and player:hasSkill(self) and
data.card.trueName == "slash" and not player.room:getPlayerById(data.to).dead
end,
on_cost = function(self, event, target, player, data)
local room = player.room
if room:askForSkillInvoke(player, self.name, nil, "#tyj__tieji-invoke") then
return true
end
end,
on_use = function(self, event, target, player, data)
local room = player.room
local tos = {}
for _, ts in ipairs(room.alive_players) do
if #table.filter(room.alive_players, function(p) return ts:canMoveCardsInBoardTo(p, 'e') end)>0 or not ts:isKongcheng() then
table.insert(tos,ts.id)
end
end
if #tos>0 then
local p2 = room:askForChoosePlayers(player, tos, 1, 1, "铁骑:选择要被移动牌的角色", self.name,false)
if #p2 ~= 0 then
local to = room:getPlayerById(p2[1])
local choices = {}
if not to:isKongcheng() then table.insert(choices, "tyj__tieji_hand") end
local targets = table.filter(room.alive_players, function(p) return to:canMoveCardsInBoardTo(p, 'e') end)
if #targets > 0 then table.insert(choices, "tyj__tieji_equip") end
if #choices == 0 then return end
local choice = room:askForChoice(player, choices, self.name)
if choice == "tyj__tieji_hand" then targets = room:getOtherPlayers(to) end
local t = room:askForChoosePlayers(player, table.map(targets, Util.IdMapper), 1, 1, "#tyj__tieji-move::"..to.id, self.name, false)
if #t > 0 then
if choice == "tyj__tieji_hand" then
local cid = room:askForCardChosen(player, to, "h", self.name)
room:moveCardTo(cid, Player.Hand, room:getPlayerById(t[1]), fk.ReasonJustMove, self.name, nil, false, player.id)
if to==player then
room:doIndicate(player.id, {data.to})
room:addPlayerMark(room:getPlayerById(data.to), "@@tyj__tieji-turn")
room:addPlayerMark(room:getPlayerById(data.to), MarkEnum.UncompulsoryInvalidity .. "-turn")
data.disresponsive = true
end
else
local move = room:askForMoveCardInBoard(player, to, room:getPlayerById(t[1]), self.name,'e', to, {})
if move and to==player then
room:doIndicate(player.id, {data.to})
room:addPlayerMark(room:getPlayerById(data.to), "@@tyj__tieji-turn")
room:addPlayerMark(room:getPlayerById(data.to), MarkEnum.UncompulsoryInvalidity .. "-turn")
data.disresponsive = true
end
end
end
end
end
--[[local to = room:askForChooseToMoveCardInBoard(player, "#tyj__tieji-choose", self.name, true, "e")
if #to == 2 then
local move=room:askForMoveCardInBoard(player, room:getPlayerById(to[1]), room:getPlayerById(to[2]), self.name, "e")
if move and to[1]==player.id then
room:doIndicate(player.id, {data.to})
room:addPlayerMark(room:getPlayerById(data.to), "@@tyj__tieji-turn")
room:addPlayerMark(room:getPlayerById(data.to), MarkEnum.UncompulsoryInvalidity .. "-turn")
data.disresponsive = true
end
end]]--
end,
}
tyj__machao:addSkill(tyj__tieji)
tyj__machao:addSkill(tyj__yuma)
Fk:loadTranslationTable{
["tyj__tieji"]="铁骑",
[":tyj__tieji"]="你使用【杀】指定目标后,可以移动一名角色的一张牌,若为你的牌则令目标不能响应此【杀】且其本回合非锁定技失效。",
["#tyj__tieji-invoke"]="是否发动 铁骑 移动一名角色的一张牌",
["#tyj__tieji-choose"]="铁骑:移动场上的一张牌,若为你的牌则令此【杀】不可响应且目标非锁定技失效。",
["@@tyj__tieji-turn"]="铁骑",
["$tyj__tieji1"]="良驹健儿,破营溃军!",
["$tyj__tieji2"]="整装列队,趁势破敌!",
["$tyj__yuma1"]="(激昂的马鸣)",
["$tyj__yuma2"]="(激昂的马鸣)",
["~tyj__xi_machao"]="马失,前蹄...",
["#tyj__tieji-move"] = "铁骑:选择一名角色,将 %dest 的一张牌移至目标角色区域",
["tyj__tieji_hand"] = "移动手牌",
["tyj__tieji_equip"] = "移动装备区牌",
}
local tyj__hansui = General:new(extension, "tyj__hansui", "qun", 4,4)
Fk:loadTranslationTable{
["tyj__hansui"] = "韩遂",
["#tyj__hansui"] = "雄踞北疆",
["designer:tyj__hansui"] = "汤圆",
["cv:tyj__hansui"] = "官方",
["illustrator:tyj__hansui"] = "木美人",
}
local tyj__niluan = fk.CreateViewAsSkill{
name = "tyj__niluan",
pattern = ".|.|.|.|.|basic",
prompt = function ()
return "#tyj__niluan-card"
end,
card_filter = Util.FalseFunc,
interaction = function()
local names = {}
for _, id in ipairs(Fk:getAllCardIds()) do
local card = Fk:getCardById(id)
if ((Fk.currentResponsePattern == nil and Self:canUse(card)) or
(Fk.currentResponsePattern and Exppattern:Parse(Fk.currentResponsePattern):match(card))) then
if card.type == Card.TypeBasic then
table.insertIfNeed(names, card.name)
end
end
end
if #names == 0 then return false end
return UI.ComboBox {choices = names}
end,
before_use = function (self, player, use)
local room = Self.room
local to = room.current
local choices = {}
if not to:isKongcheng() then table.insert(choices, "tyj__niluan_hand") end
local targets = table.filter(room.alive_players, function(p) return to:canMoveCardsInBoardTo(p, 'e') end)
if #targets > 0 then table.insert(choices, "tyj__niluan_equip") end
if #choices == 0 then return end
local choice = room:askForChoice(player, choices, self.name)
if choice == "tyj__niluan_hand" then targets = room:getOtherPlayers(to) end
local t = room:askForChoosePlayers(player, table.map(targets, Util.IdMapper), 1, 1, "#tyj__niluan-move::"..to.id, self.name,false)
if #t > 0 then
if choice == "tyj__niluan_hand" then
local cid = room:askForCardChosen(player, to, "h", self.name)
room:moveCardTo(cid, Player.Hand, room:getPlayerById(t[1]), fk.ReasonJustMove, self.name, nil, false, player.id)
else
room:askForMoveCardInBoard(player, to, room:getPlayerById(t[1]), self.name,'e', to, {})
end
end
room:setPlayerMark(player, "@@tyj__niluan", to.id)
end,
view_as = function(self, cards)
if not self.interaction.data then return end
local card = Fk:cloneCard(self.interaction.data)
card.skillName = self.name
return card
end,
enabled_at_play = function(self, player)
if player:getMark("tyj__niluan_current")==0 or player:getMark("@@tyj__niluan")~=0 then return false end
local current = Fk:currentRoom():getPlayerById(player:getMark("tyj__niluan_current"))
return current and (#table.filter(Fk:currentRoom().alive_players, function(p) return current:canMoveCardsInBoardTo(p, 'e') end)>0 or not current:isKongcheng())
end,
enabled_at_response = function(self, player, response)
if player:getMark("tyj__niluan_current")==0 or player:getMark("@@tyj__niluan")~=0 then return false end
local current = Fk:currentRoom():getPlayerById(player:getMark("tyj__niluan_current"))
return not response and current and (#table.filter(Fk:currentRoom().alive_players, function(p) return current:canMoveCardsInBoardTo(p, 'e') end)>0 or not current:isKongcheng())
end,
}
local tyj__niluan_back=fk.CreateTriggerSkill{
refresh_events={fk.Damaged,fk.AfterCardsMove,fk.BeforeTurnStart,fk.EventPhaseStart},
name = "#tyj__niluan_back",
can_refresh = function (self, event, target, player, data)
if event == fk.Damaged then
return player:getMark("@@tyj__niluan")~=0 and player:getMark("@@tyj__niluan") == target.id
else return player:hasSkill('tyj__niluan')
end
end,
on_refresh = function (self, event, target, player, data)
if event == fk.Damaged then
player.room:setPlayerMark(player, "@@tyj__niluan", 0)
else
player.room:setPlayerMark(player,"tyj__niluan_current",player.room.current.id)
end
end
}
tyj__niluan:addRelatedSkill(tyj__niluan_back)
local tyj__xiaoxi = fk.CreateTriggerSkill{
events = {fk.EventPhaseStart},
name="tyj__xiaoxi",
anim_type = "offensive",
can_trigger = function(self, event, target, player, data)
return player:hasSkill(self) and player ~= target and not target.dead and target.phase == Player.Start and player:usedSkillTimes(self.name, Player.HistoryRound) == 0
end,
on_cost = function (self, event, target, player, data)
return player.room:askForSkillInvoke(player, self.name, nil, "#tyj__xiaoxi-invoke:"..target.id)
end,
on_use = function (self, event, target, player, data)
local room = player.room
room:doIndicate(player.id, {target.id})
local mark = target:getTableMark("@@tyj__xiaoxi_add")
table.insert(mark,player.id)
room:setPlayerMark(target,"@@tyj__xiaoxi_add",mark)
local use = player.room:askForUseCard(player, "slash", "slash", "#tyj__xiaoxi-slash:"..target.id, true,{exclusive_targets = {target.id} , bypass_distances = true})
if use then
use.extraUse = true
room:useCard(use)
end
end
}
local tyj__xiaoxi_trigger = fk.CreateTriggerSkill{
events = {fk.DamageCaused},
anim_type = "offensive",
name="#tyj__xiaoxi_trigger",
mute=true,
can_trigger = function(self, event, target, player, data)
return target == player and data.to and ((#target:getTableMark("@@tyj__xiaoxi_add")>0 and table.contains(target:getTableMark("@@tyj__xiaoxi_add"),data.to.id))or((#data.to:getTableMark("@@tyj__xiaoxi_add")>0 and table.contains(data.to:getTableMark("@@tyj__xiaoxi_add"),target.id))))
end,
on_cost = Util.TrueFunc,
on_trigger = function(self, event, target, player, data)
local room = player.room
room:notifySkillInvoked(player,"tyj__xiaoxi")
player:broadcastSkillInvoke("tyj__xiaoxi",-1)
if #target:getTableMark("@@tyj__xiaoxi_add")>0 and table.contains(target:getTableMark("@@tyj__xiaoxi_add"),data.to.id) then
local mark = target:getTableMark("@@tyj__xiaoxi_add")
for i=#mark,1,-1 do
if mark[i]==data.to.id then
data.damage=data.damage+1
table.remove(mark,i)
end
end
if #mark == 0 then
room:setPlayerMark(target,"@@tyj__xiaoxi_add",0)
else
room:setPlayerMark(target,"@@tyj__xiaoxi_add",mark)
end
end
if #data.to:getTableMark("@@tyj__xiaoxi_add")>0 and table.contains(data.to:getTableMark("@@tyj__xiaoxi_add"),target.id) then
local mark = data.to:getTableMark("@@tyj__xiaoxi_add")
for i=#mark,1,-1 do
if mark[i]==target.id then
data.damage=data.damage+1
table.remove(mark,i)
end
end
if #mark == 0 then
room:setPlayerMark(data.to,"@@tyj__xiaoxi_add",0)
else
room:setPlayerMark(data.to,"@@tyj__xiaoxi_add",mark)
end
end
end
}
tyj__xiaoxi:addRelatedSkill(tyj__xiaoxi_trigger)
tyj__hansui:addSkill(tyj__niluan)
tyj__hansui:addSkill(tyj__xiaoxi)
Fk:loadTranslationTable{
["tyj__niluan"] = "逆乱",
[":tyj__niluan"] = "你需要使用基本牌时,可以移动当前回合角色的一张牌,视为使用之,然后此技能失效直到其受到伤害后。",
["#tyj__niluan-move"] = "逆乱:选择一名角色,将 %dest 的一张牌移至目标角色区域",
["#tyj__niluan-card"] = "逆乱:视为使用一张基本牌。",
["tyj__niluan_hand"] = "移动手牌",
["tyj__niluan_equip"] = "移动装备区牌",
["@@tyj__niluan"]="逆乱失效",
["$tyj__niluan1"]="胜者为王!败者为寇。",
["$tyj__niluan2"]="如果不能功成名就,那就干脆为祸一方。",
["$tyj__niluan3"]="哈哈哈哈哈哈!天下之势,皆无常!",
["$tyj__niluan4"]="绝地反击的时候到了!",
["tyj__xiaoxi"] = "骁袭",
["$tyj__xiaoxi1"]="(拔剑声),先吃我一剑!",
["$tyj__xiaoxi2"]="这是给你的下马威!",
["~tyj__hansui"]="哈..啊.英雄一世,奈何祸起萧墙...",
[":tyj__xiaoxi"] = "每轮限一次,其他角色的准备阶段,你可以令你们之间结算的下一次伤害的伤害值+1,然后你可以对其使用一张【杀】。",
["#tyj__xiaoxi-slash"] = "骁袭:你可以对 %src 使用一张【杀】",
["#tyj__xiaoxi-invoke"] = "是否对 %src 发动 骁袭 ?",
["@@tyj__xiaoxi_add"]="骁袭",
}
--[[local tyj__mateng = General:new(extension, "tyj__mateng", "qun", 4,4)
Fk:loadTranslationTable{
["tyj__mateng"] = "马腾",
["#tyj__mateng"] = "冠寇西凉",
["designer:tyj__mateng"] = "汤圆",
["cv:tyj__mateng"] = "官方",
["illustrator:tyj__mateng"] = "君桓文化",
}
local tyj__guankou = fk.CreateTriggerSkill{
events = {fk.Damage},
anim_type = "drawcard",
name = "tyj__guankou",
can_trigger = function(self, event, target, player, data)
return player:hasSkill(self) and target == player and data.to and not data.to:isNude() and player:usedSkillTimes("tyj__guankou", Player.HistoryPhase) == 0
end,
on_cost = function (self, event, target, player, data)
local room = player.room
return room:askForSkillInvoke(player, self.name, nil, "#tyj__guankou-invoke::"..data.to.id)
end,
on_use = function(self, event, target, player, data)
local room = player.room
local n = 1
for _, p in ipairs(room.alive_players) do
if player:inMyAttackRange(p) then
n = n + 1
end
end
local num = math.min(#data.to:getCardIds{Player.Hand, Player.Equip},n)
local cards = room:askForCardsChosen(player, data.to, num, num, "he", self.name)
if #cards~= 0 then
room:obtainCard(player, cards, false, fk.ReasonPrey,player.id,self.name)
for _, p in ipairs(room.alive_players) do
if player:inMyAttackRange(p) and not player:isNude() then
local cards1 = room:askForCardChosen(player, player, "he", self.name,"#tyj__guankou-give::"..p.id)
room:obtainCard(p.id, cards1, false, fk.ReasonGive,player.id,self.name)
end
end
end
end,
refresh_events = {fk.AfterCardsMove,fk.TurnEnd},
can_refresh = function (self, event, target, player, data)
if event == fk.AfterCardsMove then
for _, move in ipairs(data) do
if move.to == player.id and move.toArea == Player.Hand and move.skillName == self.name then
for _, info in ipairs(move.moveInfo) do
if Fk:getCardById(info.cardId).type == Card.TypeEquip then return true end
end
end
end
else return player:getMark("@@tyj__guankou_sha-turn")>0 end
end,
on_refresh = function (self, event, target, player, data)
if event == fk.AfterCardsMove then
player.room:setPlayerMark(player,"@@tyj__guankou_sha-turn",1)
else
local room = player.room
local use = room:askForUseCard(player, "tyj__guankou", "slash", "冠寇:你可以使用一张【杀】", true, {bypass_times = true})
if use then
room:notifySkillInvoked(player,"tyj__guankou")
room:useCard(use)
end
end
end
}
tyj__mateng:addSkill(tyj__guankou)
tyj__mateng:addSkill("tyj__yuma")
Fk:loadTranslationTable{
["debug"]="执行",
["tyj__guankou"]="冠寇",
[":tyj__guankou"]="每阶段限一次,你造成伤害后,可以获得受伤角色的X张牌(不足则全获得),然后依次交给攻击范围内角色各一张牌。因此获得装备牌的角色可以于本回合结束时使用一张【杀】(X为你攻击范围内的角色数+1)。",
["#tyj__guankou-give"]="冠寇:交给 %dest 一张牌,若为装备牌其可以在回合结束时使用【杀】",
["@@tyj__guankou_sha-turn"]="冠寇",
["#tyj__guankou-invoke"]="是否发动 冠寇 获得 %dest 的牌并分配给攻击范围内的角色",
["$tyj__guankou1"]="集众人之力,成群雄霸业!",
["$tyj__guankou2"]="将士们,随我起事!",
["$tyj__yuma_tyj__mateng1"]="是时候出击了!",
["$tyj__yuma_tyj__mateng2"]="兄弟们,冲啊!",
["~tyj__mateng"]="吾儿,勿忘父仇...",
}--]]
local tyj__mawan = General:new(extension, "tyj__mawan", "qun", 4,4)
Fk:loadTranslationTable{
["tyj__mawan"] = "马玩",
["#tyj__mawan"] = "联起芜北",
["designer:tyj__mawan"] = "汤圆",
["cv:tyj__mawan"] = "官方",
["illustrator:tyj__mawan"] = "官方",
}
local tyj__wulian = fk.CreateViewAsSkill{
name = "tyj__wulian",
anim_type = "offensive",
pattern = "slash",
card_filter = function(self, to_select, selected)
return true
end,
view_as = function(self, cards)
if #cards < 1 then return nil end
local c = Fk:cloneCard("slash")
c.skillName = self.name
c:addSubcards(cards)
return c
end,
before_use = function(self, player, use)
local damage = -1
damage=damage+#table.filter(use.card.subcards,function(c)
return Fk:getCardById(c).type == Card.TypeEquip
end)
use.additionalDamage = damage
end,
enabled_at_response = function(self, player, response)
return not response
end,
}
local tyj__wulian_target = fk.CreateTargetModSkill {
name = "#tyj__wulian_target",
extra_target_func = function(self, player, skill, card)
if card and table.contains(card.skillNames, "tyj__wulian") and card.subcards then
return #card.subcards-1
end
return 0
end,
}
local tyj__wulian_trigger = fk.CreateTriggerSkill{
events={fk.AfterCardTargetDeclared},
name = "#tyj__wulian_trigger",
mute=true,
can_trigger=function (self, event, target, player, data)
if target == player and player:hasSkill("tyj__wulian") then
return data.card and table.contains(data.card.skillNames, "tyj__wulian") and data.tos and #TargetGroup:getRealTargets(data.tos) >0
end
end,
on_cost = Util.TrueFunc,
on_use = function (self, event, target, player, data)
local room = player.room
room:doIndicate(player.id, TargetGroup:getRealTargets(data.tos))
local targets = table.filter(TargetGroup:getRealTargets(data.tos), function(p) return not room:getPlayerById(p):isNude() end)
local targetsx={}
for _, p in ipairs(targets) do
table.insert(targetsx,room:getPlayerById(p))
end
local extraData = {
num = 1,
min_num = 1,
include_equip = true,
pattern = ".|.|.|.|.|equip",
reason = self.name,
}
for _, p in ipairs(targets) do
room:getPlayerById(p).request_data = json.encode({"choose_cards_skill", "#tyj__wulian-card::"..player.id,true, extraData})
end
room:notifyMoveFocus(targetsx, self.name)
room:doBroadcastRequest("AskForUseActiveSkill", targetsx)
local changetarget={}
for _, p in ipairs(targetsx) do
if p.reply_ready then
local replyCard = json.decode(p.client_reply).card
local id = json.decode(replyCard).subcards[1]
if U.canMoveCardIntoEquip(player,id, true) then
room:doIndicate(p.id,{player.id})
U.moveCardIntoEquip(room,player, id, self.name, true, p)
local ptargets=table.clone(TargetGroup:getRealTargets(data.tos))
for i=1,#ptargets do
if ptargets[i] == p.id then
table.remove(ptargets,i)
end
end
if #ptargets > 0 then
local to = player.room:askForChoosePlayers(p,ptargets,
1, 1, "芜联:令一名其他目标代替你成为目标", self.name, false, true)
if #to > 0 then
table.insert(changetarget,{p.id,to[1]})
end
end
end
end
end
if #changetarget >0 then
for _, p in ipairs(changetarget) do
room:doIndicate(p[1],{p[2]})
TargetGroup:removeTarget(data.tos,p[1])
TargetGroup:pushTargets(data.tos,{p[2]})
end
end
end,
}
tyj__wulian:addRelatedSkill(tyj__wulian_target)
tyj__wulian:addRelatedSkill(tyj__wulian_trigger)
tyj__mawan:addSkill(tyj__wulian)
tyj__mawan:addSkill("tyj__yuma")
Fk:loadTranslationTable{
["tyj__wulian"]="芜联",
["#tyj__wulian_trigger"]="芜联",
[":tyj__wulian"]="你可以将任意张牌当作目标上限为牌数且伤害基数为X的【杀】使用,此【杀】指定目标时令此牌的目标同时选择是否将一张装备牌置于你的装备区以将自己的目标转移给一名其他目标(X为这些牌中的装备牌数)。",
["$tyj__wulian1"]="诸军并起,无终岁计。",
["$tyj__wulian2"]="自遭荒乱,率乏粮谷。",
["~tyj__mawan"]="楼班尚且年幼。",
["#tyj__wulian-card"]="芜联:你可以选择将一张装备牌置于 %dest 的装备区以转移自己的目标",
}
--[[ local tyj__maxiumatie = General:new(extension, "tyj__maxiumatie", "qun", 4,4)
Fk:loadTranslationTable{
["tyj__maxiumatie"] = "马休马铁",
["#tyj__maxiumatie"] = "西凉世胄",
["designer:tyj__maxiumatie"] = "汤圆",
["cv:tyj__maxiumatie"] = "官方",
["illustrator:tyj__maxiumatie"] = "Alien",
}
local tyj__juwang = fk.CreateViewAsSkill{
name="tyj__juwang",
prompt = "#tyj__juwang-viewas",
pattern = "slash,jink",
interaction = function()
local names = {}
if Fk.currentResponsePattern == nil and Self:canUse(Fk:cloneCard("slash")) then
table.insertIfNeed(names, "slash")
else
for _, name in ipairs({"slash", "jink"}) do
if Fk.currentResponsePattern and Exppattern:Parse(Fk.currentResponsePattern):match(Fk:cloneCard(name)) then
table.insertIfNeed(names, name)
end
end
end
if #names == 0 then return end
return UI.ComboBox {choices = names}
end,
card_filter = function(self, to_select, selected)
if #selected == 2 then return false end
return true
end,
view_as = function(self, cards)
if #cards ~= 2 or not self.interaction.data then return nil end
local c = Fk:cloneCard(self.interaction.data)
c.skillName = self.name
c:addSubcards(cards)
return c
end,
before_use = function(self, player, use)
local room = player.room
use.extraUse=true
if use.card.name == "slash" then
room:setPlayerMark(player,"@@tyj__juwang_sha-phase",1)
else
room:setPlayerMark(player,"@@tyj__juwang_jink-phase",1)
end
end,
enabled_at_response = function(self, player, response)
return not response
end,
}
local tyj__juwang_targetmod = fk.CreateTargetModSkill{
name = "#tyj__juwang_targetmod",
bypass_times = function(self, player, skill, scope, card)
return card and table.contains(card.skillNames,"tyj__juwang")
end,
}
local tyj__juwang_delay = fk.CreateTriggerSkill{
name="#tyj__juwang_delay",
refresh_events={fk.EventPhaseEnd},
can_refresh = function (self, event, target, player, data)
return player:getMark("@@tyj__juwang_sha-phase")~=0 or player:getMark("@@tyj__juwang_jink-phase")~=0
end,
on_refresh = function (self, event, target, player, data)
local room = player.room
local cards={}
local num = 0
if player:getMark("@@tyj__juwang_sha-phase")~=0 then
local events1 = player.room.logic:getEventsOfScope(GameEvent.MoveCards, 999, function(e)
for _, move in ipairs(e.data) do
if move.toArea == Card.DiscardPile then
for _, info in ipairs(move.moveInfo) do
if info.cardId and player.room:getCardArea(info.cardId) == Card.DiscardPile then
if(Fk:getCardById(info.cardId,true).trueName=='jink') then
table.insert(cards,info.cardId)
end
end
end
end
end
end, Player.HistoryTurn)
end
if player:getMark("@@tyj__juwang_jink-phase")~=0 then
local events1 = player.room.logic:getEventsOfScope(GameEvent.MoveCards, 999, function(e)
for _, move in ipairs(e.data) do
if move.toArea == Card.DiscardPile then
for _, info in ipairs(move.moveInfo) do
if info.cardId and player.room:getCardArea(info.cardId) == Card.DiscardPile then
if(Fk:getCardById(info.cardId,true).trueName=='slash') then
table.insert(cards,info.cardId)
end
end
end
end
end
end, Player.HistoryTurn)
end
if #cards>0 then
room:moveCards({
ids = cards,
to = player.id,
toArea = Card.PlayerHand,
moveReason = fk.ReasonPrey,
proposer = player.id,
skillName = self.name,
})
end
if player:getMark("@@tyj__juwang_sha-phase")~=0 then
num=0
local events2 = player.room.logic:getEventsOfScope(GameEvent.MoveCards, 999, function(e)
for _, move in ipairs(e.data) do
if move.toArea == Card.DiscardPile then
for _, info in ipairs(move.moveInfo) do
if info.cardId and player.room:getCardArea(info.cardId) == Card.DiscardPile then
if(Fk:getCardById(info.cardId,true).type==Card.TypeBasic) then
num=num+1
end
end
end
end
end
end, Player.HistoryTurn)
if num >0 then
local events = room.logic:getEventsOfScope(GameEvent.UseCard, 998, function(e)
local use = e.data[1]
return use.from == player.id and use.card and use.card.skillNames and table.contains(use.card.skillNames,"tyj__juwang")
end, Player.HistoryTurn)
local targets = {}
if #events > 0 then
table.forEach(events, function(e)
table.forEach(e.data[1].tos, function(pids)
table.insertIfNeed(targets, pids[1])
end)
end)
end
for _,p in ipairs(targets) do
local target=room:getPlayerById(p)
if target:isAlive() then
for i=1,num do
room:useVirtualCard("slash", nil, target,player,"tyj__juwang", true)
end
end
end
end
end
if player:getMark("@@tyj__juwang_jink-phase")~=0 then
num=0
local events2 = player.room.logic:getEventsOfScope(GameEvent.MoveCards, 999, function(e)
for _, move in ipairs(e.data) do
if move.toArea == Card.DiscardPile then
for _, info in ipairs(move.moveInfo) do
if info.cardId and player.room:getCardArea(info.cardId) == Card.DiscardPile then
if(Fk:getCardById(info.cardId,true).type==Card.TypeBasic) then
num=num+1
end
end
end
end
end
end, Player.HistoryTurn)
local target = room.current
if target and target:isAlive() and num>0 then
for i=1,num do
room:useVirtualCard("slash", nil, target,player,"tyj__juwang", true)
end
end
end
end
}
tyj__juwang:addRelatedSkill(tyj__juwang_delay)
--tyj__juwang:addRelatedSkill(tyj__juwang_targetmod)
tyj__maxiumatie:addSkill(tyj__juwang)
tyj__maxiumatie:addSkill("tyj__yuma")
Fk:loadTranslationTable{
["tyj__juwang"]="掬亡",
[":tyj__juwang"]="你可以将两张牌当不计入次数的[【杀】/【闪】]使用,本阶段结束时,你获得本阶段进入弃牌堆的[【闪】/【杀】],然后[目标/当前回合角色]视为对你使用X张【杀】(X为弃牌堆中本阶段进入的基本牌)。",
["#tyj__juwang-viewas"]="你可以将两张牌当无次数限制的【杀】/【闪】使用。",
["@@tyj__juwang_sha-phase"]="掬亡 杀",
["@@tyj__juwang_jink-phase"]="掬亡 闪",
["$tyj__juwang1"] = "择兵选将,一击而大白。",
["$tyj__juwang2"] = "纵横三辅,垦伤庸富。",
["~tyj__maxiumatie"] = "我兄弟,愿随父帅赴死。",
}--]]
--local tyj__madai = General:new(extension, "tyj__madai", "shu", 4,4)
Fk:loadTranslationTable{
["tyj__madai"] = "马岱",
["#tyj__madai"] = "从威侐斩",
["designer:tyj__madai"] = "汤圆",
["cv:tyj__madai"] = "官方",
["illustrator:tyj__madai"] = "Alien",
}
local tyj__qianzhan = fk.CreateViewAsSkill{
name="tyj__qianzhan",
prompt = "#tyj__qianzhan-viewas",
pattern = "stab__slash",
card_num = 1,
card_filter = function(self, to_select, selected)
return #selected == 0 and Fk:getCardById(to_select).type == Card.TypeEquip
end,
view_as = function(self, cards)
if #cards ~= 1 then return nil end
local c = Fk:cloneCard("stab__slash")
c.skillName = self.name
c:addSubcards(cards)
return c
end,
enabled_at_response = function(self, player, response)
return not response
end,
}
local tyj__qianzhan_trigger = fk.CreateTriggerSkill{
name = "#tyj__qianzhan_trigger",
mute = true,
events = {fk.CardEffectCancelledOut},
can_trigger = function(self, event, target, player, data)
return player:hasSkill(self) and data.to
end,
on_cost = function (self, event, target, player, data)
local room = player.room
local targets = {}
if target and target:isAlive() then
table.insert(targets,target.id)
end
if player.room:getPlayerById(data.to) and player.room:getPlayerById(data.to):isAlive() then
table.insert(targets,data.to)
end
local tos = room:askForChoosePlayers(player, targets, 1, 1, "是否对他们之一发动 黔斩 ?", self.name, true)
if #tos > 0 then
self.cost_data = tos
return true
end
end,
on_use = function(self, event, target, player, data)
local room = player.room
local use = room:askForUseCard(player, "slash",nil, "#tyj__qianzhan-slash:"..self.cost_data[1], true,{exclusive_targets = {self.cost_data[1]} , bypass_distances = true})
if use then
use.extraUse = true
room:useCard(use)
end
if target and target:isAlive() and player.room:getPlayerById(data.to) and player.room:getPlayerById(data.to):isAlive() then
local targets={data.to,target.id}
for _, p in ipairs(targets) do
local events = player.room.logic:getEventsOfScope(GameEvent.ChangeHp, 1, function(e)
local damage = e.data[5]
return damage and p == damage.to
end, Player.HistoryTurn)
if #events == 0 then
local choices={}
local to=nil
local playerx = nil
if p == target.id then
to = room:getPlayerById(data.to)
playerx=target
else
to = target
playerx = room:getPlayerById(data.to)
end
local targets = table.filter(room.alive_players, function(p) return to:canMoveCardsInBoardTo(p, 'e') end)
if #targets > 0 then table.insert(choices, "tyj__qianzhan_equip") end
if #choices == 0 then return end
local choice = room:askForChoice(playerx, choices, self.name)
if choice == "tyj__qianzhan_hand" then targets = room:getOtherPlayers(to) end
local t = room:askForChoosePlayers(playerx, table.map(targets, Util.IdMapper), 1, 1, "#tyj__qianzhan-move::"..to.id, self.name,false)
if #t > 0 then
if choice == "tyj__niluan_hand" then
local cid = room:askForCardChosen(playerx, to, "h", self.name)
room:moveCardTo(cid, Player.Hand, room:getPlayerById(t[1]), fk.ReasonJustMove, self.name, nil, false, playerx.id)
else
room:askForMoveCardInBoard(playerx, to, room:getPlayerById(t[1]), self.name,'e', to, {})
end
end
end
end
end
end,
}
--tyj__qianzhan:addRelatedSkill(tyj__qianzhan_trigger)
--tyj__madai:addSkill(tyj__qianzhan)
--tyj__madai:addSkill("tyj__yuma")
Fk:loadTranslationTable{
["tyj__qianzhan"]="黔斩",
[":tyj__qianzhan"]="你可以将装备牌当中刺【杀】使用。一名角色使用的牌被抵消后,你可以对其或抵消牌的角色使用一张【杀】,然后他们中本回合未受到过伤害的角色移动另一方的一张牌。",
["#tyj__qianzhan-slash"]="对 %src 使用一张【杀】",
["#tyj__qianzhan-viewas"]="将一张装备牌当作刺【杀】使用",
["#tyj__qianzhan-move"] = "逆乱:选择一名角色,将 %dest 的一张牌移至目标角色区域",
["tyj__qianzhan_equip"]="装备区",
["tyj__qianzhan_hand"]="手牌",
}
--[[local tyj__tufashujineng = General:new(extension, "tyj__tufashujineng", "qun", 4,4)
Fk:loadTranslationTable{
["tyj__tufashujineng"] = "秃发树机能",
["#tyj__tufashujineng"] = "旋荼三地",
["designer:tyj__tufashujineng"] = "汤圆",
["cv:tyj__tufashujineng"] = "官方",
["illustrator:tyj__tufashujineng"] = "率土之滨",
}
local tyj__zongtu = fk.CreateViewAsSkill{
name = "tyj__zongtu",
anim_type = "control",
pattern = "chasing_near",
prompt="纵荼:将一张牌当作【逐近弃远】对攻击范围内的角色使用",
card_filter = function(self, to_select, selected)
return #selected == 0
end,
view_as = function(self, cards)
if #cards ~= 1 then return end
local card = Fk:cloneCard("chasing_near")
card.skillName = self.name
card:addSubcard(cards[1])
return card
end,
after_use = function (self, player, use)
local room = player.room
for _, pId in ipairs(TargetGroup:getRealTargets(use.tos)) do
room:doIndicate(player.id,{pId})
local p = room:getPlayerById(pId)
local mark = p:getTableMark("@@tyj__zongtu")
table.insertIfNeed(mark,player.id)
room:setPlayerMark(p,"@@tyj__zongtu",mark)
end
end
}
local tyj__zongtu_clear = fk.CreateTriggerSkill{
name = "#tyj__zongtu_clear",
refresh_events = {fk.Damage},
can_refresh = function (self, event, target, player, data)
if data.to and target and target~=nil and(target==player or data.to == player) then
return table.contains(target:getTableMark("@@tyj__zongtu"),data.to.id) or table.contains(data.to:getTableMark("@@tyj__zongtu"),target.id)
end
end,
on_refresh = function (self, event, target, player, data)
local room = player.room
local to = data.to
if table.contains(to:getTableMark("@@tyj__zongtu"),target.id) then
local mark = to:getTableMark("@@tyj__zongtu")
for i=#mark,1,-1 do
if mark[i]==target.id then
table.remove(mark,i)
end
end
if #mark == 0 then
room:setPlayerMark(to,"@@tyj__zongtu",0)
else
room:setPlayerMark(to,"@@tyj__zongtu",mark)
end
end
if table.contains(target:getTableMark("@@tyj__zongtu"),data.to.id) then
local mark = target:getTableMark("@@tyj__zongtu")
for i=#mark,1,-1 do
if mark[i]==data.to.id then
table.remove(mark,i)
end
end
if #mark == 0 then
room:setPlayerMark(target,"@@tyj__zongtu",0)
else
room:setPlayerMark(target,"@@tyj__zongtu",mark)
end
end
end
}
local tyj__zongtu_prohibit = fk.CreateProhibitSkill{
name = "#tyj__zongtu_prohibit",
frequency = Skill.Compulsory,
is_prohibited = function (self, from, to, card)
if card.skillNames and table.contains(card.skillNames,"tyj__zongtu") and not from:inMyAttackRange(to) then return true
elseif not card.is_damage_card and (table.contains(from:getTableMark("@@tyj__zongtu"),to.id) or table.contains(to:getTableMark("@@tyj__zongtu"),from.id)) then
return true
end
end,
}
local tyj__wotu = fk.CreateDistanceSkill{
name = "tyj__wotu",
frequency = Skill.Compulsory,
correct_func = function(self, from, to)
if from:hasSkill(self) then
return -from:getMark("@tyj__wotu-phase")
end
end,
}
local tyj__wotu_refresh = fk.CreateTriggerSkill{
name = "#tyj__wotu_refresh",
refresh_events = {fk.AfterCardsMove},
can_refresh = function(self, event, target, player, data)
if player:hasSkill(tyj__wotu) then
for _, move in ipairs(data) do
if move.to == player.id and move.toArea == Player.Hand and move.skillName ~= self.name then
return #move.moveInfo and #move.moveInfo>0
end
end
end
end,
on_refresh = function(self, event, target, player, data)
local room = player.room
local mark = player:getMark("@tyj__wotu-phase")
for _, move in ipairs(data) do
if move.to == player.id and move.toArea == Player.Hand and move.skillName ~= self.name then
mark = mark+#move.moveInfo
end
end
room:setPlayerMark(player,"@tyj__wotu-phase",mark)
end,
}
tyj__zongtu:addRelatedSkill(tyj__zongtu_clear)
tyj__zongtu:addRelatedSkill(tyj__zongtu_prohibit)
tyj__tufashujineng:addSkill(tyj__zongtu)
tyj__wotu:addRelatedSkill(tyj__wotu_refresh)
tyj__tufashujineng:addSkill(tyj__wotu)
Fk:loadTranslationTable{
["tyj__zongtu"]="纵荼",
[":tyj__zongtu"]="你可以将一张牌当作【逐近弃远】对攻击范围内的角色使用,然后你与此牌的目标不能使用非伤害牌指定对方为目标直到你们之一对对方造成伤害后。",
["@@tyj__zongtu"]="纵荼",
["tyj__wotu"]="斡图",
[":tyj__wotu"]="锁定技,你计算与其他角色的距离-X(X为你本阶段获得的牌数)。",
["@tyj__wotu-phase"]="斡图",
["$tyj__zongtu1"]="天不予我活路,我何须尊此无道之天。",
["$tyj__zongtu2"]="闻窃珠者诛、窃国者侯,今吾欲乞活。",
["~tyj__tufashujineng"]="吾血战沙场,少有败绩,却落魄至此。",
}--]]
local tyj__xurong = General:new(extension, "tyj__xurong", "qun", 4,4)
Fk:loadTranslationTable{
["tyj__xurong"] = "徐荣",
["#tyj__xurong"] = "戾绝之狼",
["designer:tyj__xurong"] = "汤圆",
["cv:tyj__xurong"] = "官方",
["illustrator:tyj__xurong"] = "率土之滨",
}
local ty_askForUseVirtualCard = function(room, player, name, subcards, skillName, prompt, cancelable, bypass_times, bypass_distances, extraUse, extra_data, skipUse,extra_cardData)
if player.dead then return end
subcards = subcards or {}
extraUse = (extraUse == nil) and true or extraUse
skillName = skillName or "virtual_viewas"
local all_names = type(name) == "table" and name or {name}
if (cancelable == nil) then cancelable = true end
if (bypass_times == nil) then bypass_times = true end
extra_data = extra_data or {}
extra_data.selected_subcards = subcards
extra_data.skillName = skillName
extra_data.virtualuse_allnames = all_names
extra_data.bypass_times = bypass_times
extra_data.bypass_distances = bypass_distances
local names = table.filter(all_names, function (n)
local card = Fk:cloneCard(n)
card:addSubcards(subcards)
card.skillName = skillName
card.extra_data = extra_cardData or {}
return card.skill:canUse(player, card, extra_data) and not player:prohibitUse(card)
and table.find(room.alive_players, function (p)
return not player:isProhibited(p, card) and card.skill:modTargetFilter(p.id, {}, player.id, card, not bypass_distances)
end)
end)
extra_data.virtualuse_names = names
local dat
if #names > 0 then
if not prompt then
if #all_names == 1 then
prompt = ("#askForUseVirtualCard:::"..skillName..":"..all_names[1])
else
prompt = ("#askForUseVirtualCards:::"..skillName..":"..#names)
end
end
_, dat = room:askForUseViewAsSkill(player, "virtual_viewas", prompt, cancelable, extra_data)
end
if #names == 0 then return end
local card, tos
if dat then
tos = dat.targets
card = Fk:cloneCard(dat.interaction or all_names[1])
card:addSubcards(subcards)
card.skillName = skillName
card.extra_data = extra_cardData or {}
else
if cancelable then return end
for _, n in ipairs(names) do
card = Fk:cloneCard(n)
card:addSubcards(subcards)
card.skillName = skillName
card.extra_data = extra_cardData or {}
local temp = U.getDefaultTargets(player, card, bypass_times, bypass_distances)
if temp then
tos = temp
break
end
end
end
if not tos then return end
local use = {
from = player.id,
tos = table.map(tos, function(p) return {p} end),
card = card,
extraUse = extraUse,
}
if not skipUse then
room:useCard(use)
end
return use
end
local tyj__shajue = fk.CreateActiveSkill{
name = "tyj__shajue",
frequency=Skill.Recharge,
can_use = function(self, player)
local names={}
if Self:usedSkillTimes("tyj__shajue", Player.HistoryGame) == 0 then
table.insert(names,"#tyj__shajue-juedou")
elseif Self:usedSkillTimes("tyj__shajue", Player.HistoryTurn) == 0 and Self:usedSkillTimes(self.name, Player.HistoryGame) ~= 0 and Self:getMark("@recharge-"..self.name)~= 0 then
table.insert(names,"#tyj__shajue-recharge")
if #table.filter(Fk:currentRoom().alive_players,function(targetx) return #targetx:getCardIds('h')==1 or #targetx:getCardIds('e')==1 or #targetx:getCardIds('j')==1 end)>0 then
table.insert(names,"#tyj__shajue-spRecharge")
end
end
return #names~=0
end,
interaction = function(self)
local names={}
if Self:usedSkillTimes("tyj__shajue", Player.HistoryGame) == 0 then
table.insert(names,"#tyj__shajue-juedou")
elseif Self:usedSkillTimes("tyj__shajue", Player.HistoryTurn) == 0 and Self:usedSkillTimes(self.name, Player.HistoryGame) ~= 0 and Self:getMark("@recharge-"..self.name)~= 0 then
table.insert(names,"#tyj__shajue-recharge")
if #table.filter(Fk:currentRoom().alive_players,function(targetx) return #targetx:getCardIds('h')==1 or #targetx:getCardIds('e')==1 or #targetx:getCardIds('j')==1 end)>0 then
table.insert(names,"#tyj__shajue-spRecharge")
end
end
if #names == 0 then return end
return UI.ComboBox {choices = names}
end,
card_num = function (self)
if self.interaction.data ~= nil and self.interaction.data=="#tyj__shajue-recharge" then
return Self:getMark("@recharge-"..self.name) or 0
end
return 0
end,
card_filter = function (self, to_select, selected, selected_targets)
if self.interaction.data ~= nil and self.interaction.data == "#tyj__shajue-recharge" then
return #selected < Self:getMark("@recharge-"..self.name) and not Self:prohibitDiscard(Fk:getCardById(to_select))
else return false end
end,
min_target_num = function(self)
if self.interaction.data~= nil and (self.interaction.data == "#tyj__shajue-juedou" or self.interaction.data == "#tyj__shajue-spRecharge")then
return 1
else
return 0
end
end,
max_target_num = 1,
target_filter = function(self, to_select, selected, cards)
if #selected>0 or self.interaction.data== nil then return end
if self.interaction.data== "#tyj__shajue-recharge" then return false end
local targetx = Fk:currentRoom():getPlayerById(to_select)
if self.interaction.data == "#tyj__shajue-juedou" and targetx and #targetx:getCardIds("he") == 1 then
local card = Fk:cloneCard("duel")
card.skillName = "tyj__shajue"
card.subcards=targetx:getCardIds("he")
return Self:canUse(card) and not Self:prohibitUse(card) and #table.filter(Fk:currentRoom().alive_players, function (p)
return not Self:isProhibited(p, card)
end)>0
else
return self.interaction.data == "#tyj__shajue-spRecharge" and Self:getMark("@recharge-"..self.name)>0 and targetx and (#targetx:getCardIds('h')==1 or #targetx:getCardIds('e')==1 or #targetx:getCardIds('j')==1)
end
end,
on_use = function (self, room, effect)
local player = room:getPlayerById(effect.from)
if self.interaction.data ~= nil then
if self.interaction.data == "#tyj__shajue-recharge" then
player:addSkillUseHistory(self.name,-1)
if effect.cards and #effect.cards>0 then
room:throwCard(effect.cards,"@recharge-"..self.name, player, player)
local mark = player:getMark("@recharge-"..self.name)
mark = mark - #effect.cards
if mark <1 then
room:setPlayerMark(player,"@recharge-"..self.name,0)
player:setSkillUseHistory(self.name, 0,player.HistoryGame)
else room:setPlayerMark(player,"@recharge-"..self.name,mark) end
end
elseif self.interaction.data == "#tyj__shajue-spRecharge" then
player:addSkillUseHistory(self.name,-1)
local target = room:getPlayerById(effect.tos[1])
local str = ""
if #target:getCardIds("h") == 1 then
str=str.."h"
end
if #target:getCardIds("e") == 1 then
str=str.."e"
end
if #target:getCardIds("j") == 1 then
str=str.."j"
end
if str ~= "" then
local card = room:askForCardChosen(player, target, str, self.name)
if card then
room:throwCard({card}, "@recharge-"..self.name, target, player)
local mark = player:getMark("@recharge-"..self.name)
mark = mark - 1
if mark <1 then
room:setPlayerMark(player,"@recharge-"..self.name,0)
player:setSkillUseHistory(self.name, 0,player.HistoryGame)
else room:setPlayerMark(player,"@recharge-"..self.name,mark) end
end
end
else
room:setPlayerMark(player,"@recharge-"..self.name,3)
local target = room:getPlayerById(effect.tos[1])
room:doAnimate("InvokeUltSkill", {
name = "tyj__shajue",
player = player.id,
deputy = player.deputyGeneral and player.deputyGeneral ~= "" and table.contains(Fk.generals[player.deputyGeneral]:getSkillNameList(true),"tyj__shajue"),
})
if #target:getCardIds("he") == 1 then
local slash = Fk:cloneCard("duel")
slash.skillName = self.name
slash:addSubcard(target:getCardIds("he")[1])
slash.extra_data = slash.extra_data or {}
slash.extra_data.tyj__shajue = {target.id}
local max_num = slash.skill:getMaxTargetNum(player, slash)
local targets = {}
for _, p in ipairs(room.alive_players) do
if player ~= p and not player:isProhibited(p, slash) then
table.insert(targets, p.id)
end
end
if #targets>0 or max_num>0 then
local tos = room:askForChoosePlayers(player, targets, 1, max_num, "#tyj_heg__shajue-use:::"..slash:toLogString(), self.name, true)
if #tos > 0 then
room:useCard({
from = player.id,
tos = table.map(tos, function(pid) return { pid } end),
card = slash,
})
end
end
end
end
end
end,
}
local tyj__shajue_recharge = fk.CreateTriggerSkill{
name = "#tyj__shajue_recharge",
refresh_events = {fk.DamageInflicted,fk.AfterDrawPileShuffle},
can_refresh = function(self, event, target, player, data)
if event == fk.DamageInflicted then
if player.dead or data.card == nil or target ~= player then return false end
local room = player.room
local use = data.card
return use.extra_data and use.extra_data.tyj__shajue and not table.contains(use.extra_data.tyj__shajue, player.id)
else
return player:usedSkillTimes("tyj__shajue", Player.HistoryGame) ~= 0
end
end,
on_refresh = function(self, event, target, player, data)
if event == fk.DamageInflicted then
data.damage = data.damage + 1
else
player.room:setPlayerMark(player,"@recharge-tyj__shajue",0)
player:setSkillUseHistory("tyj__shajue", 0,player.HistoryGame)
end
end,
}
local tyj__huopeng = fk.CreateActiveSkill {
name = "tyj__huopeng",
frequency=Skill.Recharge,
can_use = function(self, player)
local names={}
if Self:usedSkillTimes("tyj__huopeng", Player.HistoryGame) == 0 then
table.insert(names,"#tyj__huopeng-fire_attack")
elseif Self:usedSkillTimes("tyj__huopeng", Player.HistoryTurn) == 0 and Self:usedSkillTimes(self.name, Player.HistoryGame) ~= 0 and Self:getMark("@recharge-"..self.name)~= 0 then
table.insert(names,"#tyj__huopeng-recharge")
end
return #names~=0
end,
interaction = function(self)
local names={}
if Self:usedSkillTimes("tyj__huopeng", Player.HistoryGame) == 0 then
table.insert(names,"#tyj__huopeng-fire_attack")
elseif Self:usedSkillTimes("tyj__huopeng", Player.HistoryTurn) == 0 and Self:usedSkillTimes(self.name, Player.HistoryGame) ~= 0 and Self:getMark("@recharge-"..self.name)~= 0 then
table.insert(names,"#tyj__huopeng-recharge")
end
if #names == 0 then return end
return UI.ComboBox {choices = names}
end,
card_num = function (self)
if self.interaction.data ~= nil and self.interaction.data=="#tyj__huopeng-recharge" then
return Self:getMark("@recharge-"..self.name) or 0
end
return 0
end,
card_filter = function (self, to_select, selected, selected_targets)
if self.interaction.data ~= nil and self.interaction.data == "#tyj__huopeng-recharge" then
return #selected < Self:getMark("@recharge-"..self.name) and not Self:prohibitDiscard(Fk:getCardById(to_select))
else return false end
end,
min_target_num = function(self)
if self.interaction.data~= nil and self.interaction.data == "#tyj__huopeng-fire_attack" then
return 1
else
return 0
end
end,
max_target_num = 1,
target_filter = function(self, to_select, selected, cards)
if #selected>0 or self.interaction.data== nil then return end
if self.interaction.data== "#tyj__huopeng-recharge" then return false end
local targetx = Fk:currentRoom():getPlayerById(to_select)
if targetx then
local slash = Fk:cloneCard("fire_attack")
slash.skillName = "tyj__huopeng"
return Self:canUse(slash) and not Self:isProhibited(targetx, slash) and slash.skill:targetFilter(to_select, {}, {}, slash)
else return false end
end,
on_use = function (self, room, effect)
local player = room:getPlayerById(effect.from)
if self.interaction.data ~= nil then
if self.interaction.data == "#tyj__huopeng-recharge" then
player:addSkillUseHistory(self.name,-1)
if effect.cards and #effect.cards>0 then
room:throwCard(effect.cards,"@recharge-"..self.name, player, player)
local mark = player:getMark("@recharge-"..self.name)
mark = mark - #effect.cards
if mark <1 then
room:setPlayerMark(player,"@recharge-"..self.name,0)
player:setSkillUseHistory(self.name, 0,player.HistoryGame)
else room:setPlayerMark(player,"@recharge-"..self.name,mark) end
end
else
room:setPlayerMark(player,"@recharge-"..self.name,3)
local target = room:getPlayerById(effect.tos[1])
room:doAnimate("InvokeUltSkill", {
name = "tyj__huopeng",
player = player.id,
deputy = player.deputyGeneral and player.deputyGeneral ~= "" and table.contains(Fk.generals[player.deputyGeneral]:getSkillNameList(true),"tyj__huopeng"),
})
room:delay(2000)
local has = {}
local card = Fk:cloneCard("fire_attack")
card.skillName = "tyj__huopeng"
for i=1,3 do
if U.canUseCardTo(room,player,target,card) then
room:setPlayerMark(target,"tyj__huopeng_shown-phase",0)
room:useVirtualCard("fire_attack", nil, player,target, self.name, true)
local mark = target:getTableMark("tyj__huopeng_shown-phase")
if #mark >0 then
local gain = {}
for _, cid in ipairs(mark) do
if not table.contains(has,cid) then
table.insert(has,cid)
else
table.insertIfNeed(gain,cid)
end
end
if #gain > 0 then
room:moveCardTo(gain, Player.Hand, player, fk.ReasonPrey, self.name, nil, true, player.id)
end
end
end
end
end
end
end,
}
local tyj__huopeng_recharge = fk.CreateTriggerSkill{
name = "#tyj__huopeng_recharge",
refresh_events = {fk.CardShown,fk.AfterDrawPileShuffle},
can_refresh = function(self, event, target, player, data)
if event == fk.CardShown then
return target == player
else
return player:usedSkillTimes("tyj__huopeng", Player.HistoryGame) ~= 0
end
end,
on_refresh = function(self, event, target, player, data)
if event == fk.CardShown then
local room = player.room
local mark = player:getTableMark("tyj__huopeng_shown-phase")
for _, id in ipairs(data.cardIds) do
table.insert(mark,id)
end
room:setPlayerMark(player,"tyj__huopeng_shown-phase",mark)
else
player.room:setPlayerMark(player,"@recharge-tyj__huopeng",0)
player:setSkillUseHistory("tyj__huopeng", 0,player.HistoryGame)
end
end,
}
tyj__shajue:addRelatedSkill(tyj__shajue_recharge)
tyj__xurong:addSkill(tyj__shajue)
tyj__huopeng:addRelatedSkill(tyj__huopeng_recharge)
tyj__xurong:addSkill(tyj__huopeng)
Fk:loadTranslationTable{
["tyj__shajue"]="杀绝",
[":tyj__shajue"]="蓄势技,出牌阶段,你可将一名角色的最后一张牌当【决斗】使用(对其以外角色造成的伤害+1)。此技能可用一名角色一个区域内的最后一张牌蓄势。",
["tyj__huopeng"]="镬烹",
[":tyj__huopeng"]="蓄势技,出牌阶段,你可视为对一名角色依次使用三张【火攻】,其重复展示一张牌后你获得之。<br/><font color='grey'>#<u><b>蓄势技</b></u>:使用次数上限为1的技能,于洗牌时重置;出牌阶段,你可以一次性弃置三张牌重置一个本回合未发动过的蓄势技。</font>",
["#tyj__shajue-juedou"]="使用决斗",
["#tyj__shajue-recharge"]="蓄势",
["#tyj__shajue-spRecharge"]="特殊蓄势",
["@recharge-tyj__shajue"]="杀绝蓄势",
["@recharge-tyj__huopeng"]="镬烹蓄势",
["#tyj__huopeng-fire_attack"]="使用火攻",
["#tyj__huopeng-recharge"]="蓄势",
["#tyj__shajue-use"] = "杀绝:使用 %arg ",
["#tyj__shajue_recharge"]="杀绝",
["$tyj__shajue1"]="除根斩尽,以绝后顾。",
["$tyj__shajue2"]="此敌,断不可留一人。",
["$tyj__huopeng1"]="哈哈哈哈!尝尝如镬亨之刑的厉害吧!",
["$tyj__huopeng2"]="这就是,你们要经历的镬汤地狱!",
["~tyj__xurong"]="吾血战沙场,少有败绩,却落魄至此。",
}
local tyj__zhangji = General:new(extension, "tyj__zhangji", "qun", 4,4)
tyj__zhangji.shield = 1
Fk:loadTranslationTable{
["tyj__zhangji"] = "张济",
["#tyj__zhangji"] = "屯豺掠京",
["designer:tyj__zhangji"] = "汤圆",
["cv:tyj__zhangji"] = "官方",
["illustrator:tyj__zhangji"] = "率土之滨",
}
local tyj__lueming = fk.CreateActiveSkill{
frequency=Skill.Recharge,
name = "tyj__lueming",
can_use = function(self, player)
local names={}
if Self:usedSkillTimes("tyj__lueming", Player.HistoryGame) == 0 then
table.insert(names,"#tyj__lueming-show")
elseif Self:usedSkillTimes("tyj__lueming", Player.HistoryTurn) == 0 and Self:usedSkillTimes(self.name, Player.HistoryGame) ~= 0 and Self:getMark("@recharge-"..self.name)~= 0 then
table.insert(names,"#tyj__lueming-recharge")
end
return #names~=0
end,
interaction = function(self)
local names={}
if Self:usedSkillTimes("tyj__lueming", Player.HistoryGame) == 0 then
table.insert(names,"#tyj__lueming-show")
elseif Self:usedSkillTimes("tyj__lueming", Player.HistoryTurn) == 0 and Self:usedSkillTimes(self.name, Player.HistoryGame) ~= 0 and Self:getMark("@recharge-"..self.name)~= 0 then
table.insert(names,"#tyj__lueming-recharge")
end
if #names == 0 then return end
return UI.ComboBox {choices = names}
end,
card_num = function (self)
if self.interaction.data ~= nil and self.interaction.data=="#tyj__lueming-recharge" then
return Self:getMark("@recharge-"..self.name) or 0
end
return 0
end,
card_filter = function (self, to_select, selected, selected_targets)
if self.interaction.data ~= nil and self.interaction.data == "#tyj__lueming-recharge" then
return #selected < Self:getMark("@recharge-"..self.name) and not Self:prohibitDiscard(Fk:getCardById(to_select))
else return false end
end,
min_target_num = function(self)
if self.interaction.data~= nil and self.interaction.data == "#tyj__lueming-show" then
return 1
else
return 0
end
end,
max_target_num = 1,
target_filter = function(self, to_select, selected, cards)
if #selected>0 or self.interaction.data== nil then return end
if self.interaction.data== "#tyj__lueming-recharge" then return false end
local targetx = Fk:currentRoom():getPlayerById(to_select)
if targetx and targetx ~= Self then
return #targetx:getCardIds("he")>2
else return false end
end,
on_use = function (self, room, effect)
local player = room:getPlayerById(effect.from)
if self.interaction.data ~= nil then
if self.interaction.data == "#tyj__lueming-recharge" then
player:addSkillUseHistory(self.name,-1)
if effect.cards and #effect.cards>0 then
room:throwCard(effect.cards,"@recharge-"..self.name, player, player)
local mark = player:getMark("@recharge-"..self.name)
mark = mark - #effect.cards
if mark <1 then
room:setPlayerMark(player,"@recharge-"..self.name,0)
player:setSkillUseHistory(self.name, 0,player.HistoryGame)
else room:setPlayerMark(player,"@recharge-"..self.name,mark) end
end
else
room:setPlayerMark(player,"@recharge-"..self.name,3)
local target = room:getPlayerById(effect.tos[1])
room:doAnimate("InvokeUltSkill", {
name = "tyj__lueming",
player = player.id,
deputy = player.deputyGeneral and player.deputyGeneral ~= "" and table.contains(Fk.generals[player.deputyGeneral]:getSkillNameList(true),"tyj__lueming"),
})
room:delay(2000)
if #target:getCardIds("he")>2 then
local cards = room:askForCard(target, 3, 3, true, self.name, false, ".", "#tyj__lueming-card:"..player.id)
target:showCards(cards)
room:delay(1200)
local cardsm = room:askForCard(player, 2, #player:getCardIds("he"), true, self.name, true, ".", "掠命:用至少两张牌交换 "..Fk:getCardById(cards[1]):toLogString()..Fk:getCardById(cards[2]):toLogString()..Fk:getCardById(cards[3]):toLogString())
player:showCards(cardsm)
room:delay(1200)
U.swapCards(room, player, player, target, table.clone(cardsm),
table.clone(cards), self.name)
local names={}
for _, cid in ipairs(cards) do
table.insert(names,Fk:getCardById(cid).trueName)
end
for i=#cardsm,1,-1 do
if table.contains(names,Fk:getCardById(cardsm[i]).trueName) then
table.removeOne(names,Fk:getCardById(cardsm[i]).trueName)
if not player:isNude() and not player.dead then
local card = room:askForCard(player, 1, 1, true, "self.name", true, ".", "#tyj__lueming-duel::"..target.id)
if #card > 0 then
local duel = Fk:cloneCard("duel")
duel.skillName = self.name
duel:addSubcard(card[1])
if not Self:isProhibited(target, duel) then
room:useVirtualCard("duel", card, player, target, self.name)
end
end
end
end
end
end
end
end
end,
}
local tyj__lueming_recharge = fk.CreateTriggerSkill{
name = "#tyj__lueming_recharge",
refresh_events = {fk.AfterDrawPileShuffle},
can_refresh = function(self, event, target, player, data)
return player:usedSkillTimes("tyj__lueming", Player.HistoryGame) ~= 0
end,
on_refresh = function(self, event, target, player, data)
player.room:setPlayerMark(player,"@recharge-tyj__lueming",0)
player:setSkillUseHistory("tyj__lueming", 0,player.HistoryGame)
end,
}
local tyj__xiongtun = fk.CreateTriggerSkill{
name="tyj__xiongtun",
anim_type = "control",
events = {fk.EventPhaseStart},
can_trigger= function(self, event, target, player, data)
if player:hasSkill(self) and target == player and player.phase == Player.Finish then
return #table.filter(player.room.alive_players, function(p)
return #p:getCardIds("e") > 0 end)>0
end
end,
on_cost = function (self, event, target, player, data)
local room = player.room
local cards={}
local events1 = player.room.logic:getEventsOfScope(GameEvent.MoveCards, 999, function(e)
for _, move in ipairs(e.data) do
if move.toArea == Card.DiscardPile then
for _, info in ipairs(move.moveInfo) do
if info.cardId and player.room:getCardArea(info.cardId) == Card.DiscardPile then
if(Fk:getCardById(info.cardId,true).trueName=='slash') then
table.insertIfNeed(cards,info.cardId)
end
end
end
end
end
end, Player.HistoryTurn)
if #cards>0 then
local tos=table.filter(room.alive_players, function(p)
return #p:getCardIds("e")>0 and #p:getCardIds("e") <=#cards end)
local targets = room:askForChoosePlayers(player,table.map(tos, Util.IdMapper),1,1,"凶囤:令一名角色获得【杀】,你获得其装备区的一张牌",self.name,true)
if #targets>0 then
self.cost_data=targets[1]
return true
else return false end
else
return false end
end,
on_use = function (self, event, target, player, data)
local room = player.room
local cards={}
local target = room:getPlayerById(self.cost_data)
if target then
local events1 = player.room.logic:getEventsOfScope(GameEvent.MoveCards, 999, function(e)
for _, move in ipairs(e.data) do
if move.toArea == Card.DiscardPile then
for _, info in ipairs(move.moveInfo) do
if info.cardId and player.room:getCardArea(info.cardId) == Card.DiscardPile then
if(Fk:getCardById(info.cardId,true).trueName=='slash') then
table.insertIfNeed(cards,info.cardId)
end
end
end
end
end
end, Player.HistoryTurn)
if #cards>=#target:getCardIds('e') then
local get = room:askForCardsChosen(player, player, #target:getCardIds('e'),#target:getCardIds('e'), {
card_data = {
{ "pile_discard", cards }
}
}, self.name, "#tyj__xiongtun-choose:::" .. tostring(#target:getCardIds('e')))
if #get>0 then
room:moveCardTo(get, Player.Hand, target, fk.ReasonJustMove, self.name, "", true, player.id)
if #get == #target:getCardIds('e') then
if not (player.dead or target.dead or #target:getCardIds("e") == 0) then
local id = room:askForCardChosen(player, target, "e", self.name)
room:obtainCard(player, id, true, fk.ReasonPrey)
end
end
end
end
end
end,
}
tyj__lueming:addRelatedSkill(tyj__lueming_recharge)
tyj__zhangji:addSkill(tyj__lueming)
tyj__zhangji:addSkill(tyj__xiongtun)
Fk:loadTranslationTable{
["tyj__lueming"]="掠命",
[":tyj__lueming"]="蓄势技,出牌阶段,你可令一名其他角色展示三张牌,然后你可展示至少两张牌交换,两者每有一对同名牌你便可将一张牌当【决斗】对其使用。",
["tyj__xiongtun"]="凶屯",
[":tyj__xiongtun"]="结束阶段,你可令一名角色获得本回合弃牌堆中的X张【杀】,若如此做,你获得其装备区内一张牌(X为其装备区内牌数)。",
["#tyj__lueming-card"] = "掠命:展示三张牌,%src 可用至少两张牌交换,若有与你展示的同名的牌则对你造成伤害。",
['#tyj__lueming-show']="掠命展示",
["#tyj__lueming-recharge"]="蓄势",
["@recharge-tyj__lueming"]="掠命蓄势",
["#tyj__xiongtun-choose"]="凶屯:选择 %arg 张【杀】令其获得",
["#tyj__lueming-duel"] = "掠命:你可以将一张牌当【决斗】对 %dest 使用",
["$tyj__lueming1"]="奉董公遗命,特此掠命。",
["$tyj__lueming2"]="长安财命,怎可少我参与?",
["$tyj__xiongtun1"]="今位轻势弱,才至屯军。",
["$tyj__xiongtun2"]="一时弱劣,待雄厚之势必出。",
["~tyj__zhangji"]="哪里来的乱箭?",
}
local tyj__fanchou = General:new(extension, "tyj__fanchou", "qun", 4,4)
Fk:loadTranslationTable{
["tyj__fanchou"] = "樊稠",
["#tyj__fanchou"] = "庸狼变难",
["designer:tyj__fanchou"] = "汤圆",
["cv:tyj__fanchou"] = "官方",
["illustrator:tyj__fanchou"] = "率土之滨",
}
local tyj__xingluan = fk.CreateActiveSkill{
name = "tyj__xingluan",
frequency=Skill.Recharge,
can_use = function(self, player)
local names={}
if Self:usedSkillTimes("tyj__xingluan", Player.HistoryGame) == 0 then
table.insert(names,"#tyj__xingluan-show")
elseif Self:usedSkillTimes("tyj__xingluan", Player.HistoryTurn) == 0 and Self:usedSkillTimes(self.name, Player.HistoryGame) ~= 0 and Self:getMark("@recharge-"..self.name)~= 0 then
table.insert(names,"#tyj__xingluan-recharge")
end
return #names~=0
end,
interaction = function(self)
local names={}
if Self:usedSkillTimes("tyj__xingluan", Player.HistoryGame) == 0 then
table.insert(names,"#tyj__xingluan-show")
elseif Self:usedSkillTimes("tyj__xingluan", Player.HistoryTurn) == 0 and Self:usedSkillTimes(self.name, Player.HistoryGame) ~= 0 and Self:getMark("@recharge-"..self.name)~= 0 then
table.insert(names,"#tyj__xingluan-recharge")
end
if #names == 0 then return end
return UI.ComboBox {choices = names}
end,
card_num = function (self)
if self.interaction.data ~= nil and self.interaction.data=="#tyj__xingluan-recharge" then
return Self:getMark("@recharge-"..self.name) or 0
end
return 0
end,
card_filter = function (self, to_select, selected, selected_targets)
if self.interaction.data ~= nil and self.interaction.data == "#tyj__xingluan-recharge" then
return #selected < Self:getMark("@recharge-"..self.name) and not Self:prohibitDiscard(Fk:getCardById(to_select))
else return false end
end,
min_target_num = function(self)
if self.interaction.data~= nil and self.interaction.data == "#tyj__xingluan-show" then
return 1
else
return 0
end
end,
max_target_num = 1,
target_filter = function(self, to_select, selected, cards)
if #selected>0 or self.interaction.data== nil then return end
if self.interaction.data== "#tyj__xingluan-recharge" then return false end
return true
end,
on_use = function (self, room, effect)
local player = room:getPlayerById(effect.from)
if self.interaction.data ~= nil then
if self.interaction.data == "#tyj__xingluan-recharge" then
player:addSkillUseHistory(self.name,-1)
if effect.cards and #effect.cards>0 then
room:throwCard(effect.cards,"@recharge-"..self.name, player, player)
local mark = player:getMark("@recharge-"..self.name)
mark = mark - #effect.cards
if mark <1 then
room:setPlayerMark(player,"@recharge-"..self.name,0)
player:setSkillUseHistory(self.name, 0,player.HistoryGame)
for _, p in ipairs(room.alive_players) do
if table.contains(p:getTableMark("@@tyj__xingluan_debuff"),player.id) then
local mark = p:getTableMark("@@tyj__xingluan_debuff")
table.removeOne(mark,player.id)
if #mark > 0 then
room:setPlayerMark(p,"@@tyj__xingluan_debuff",mark)
else
room:setPlayerMark(p,"@@tyj__xingluan_debuff",0)
end
end
end
else room:setPlayerMark(player,"@recharge-"..self.name,mark) end
end
else
room:setPlayerMark(player,"@recharge-"..self.name,3)
local target = room:getPlayerById(effect.tos[1])
room:doAnimate("InvokeUltSkill", {
name = "tyj__xingluan",
player = player.id,
deputy = player.deputyGeneral and player.deputyGeneral ~= "" and table.contains(Fk.generals[player.deputyGeneral]:getSkillNameList(true),"tyj__xingluan"),
})
room:delay(2000)
local mark = target:getTableMark("@@tyj__xingluan_debuff")
local markk = target:getMark("@tyj__xingluan_buff")
table.insert(mark,player.id)
markk=markk+1
room:setPlayerMark(target,"@@tyj__xingluan_debuff",mark)
room:setPlayerMark(target,"@tyj__xingluan_buff",markk)
end
end
end,
}
local tyj__xingluan_recharge = fk.CreateTriggerSkill{
name = "#tyj__xingluan_recharge",
refresh_events = {fk.AfterDrawPileShuffle,fk.DamageInflicted,fk.DrawNCards},
can_refresh = function(self, event, target, player, data)
if event == fk.AfterDrawPileShuffle then
return player:usedSkillTimes("tyj__xingluan", Player.HistoryGame) ~= 0
elseif event == fk.DrawNCards then
return target == player and player:getMark("@tyj__xingluan_buff")~=0
else
return target == player and #player:getTableMark("@@tyj__xingluan_debuff")>0
end
end,
on_refresh = function(self, event, target, player, data)
if event == fk.AfterDrawPileShuffle then
player.room:setPlayerMark(player,"@recharge-tyj__xingluan",0)
player:setSkillUseHistory("tyj__xingluan", 0,player.HistoryGame)
elseif event == fk.DrawNCards then
data.n = data.n+player:getMark("@tyj__xingluan_buff")
else
data.damage = data.damage+#player:getTableMark("@@tyj__xingluan_debuff")
end
end,
}
local tyj__xingluan_slash = fk.CreateTargetModSkill{
name = "#tyj__xingluan_slash",
anim_type = "offensive",
residue_func = function(self, player, skill, scope, card)
return (player:getMark("@tyj__xingluan_buff")~=0 and skill.trueName == "slash_skill") and player:getMark("@tyj__xingluan_buff") or 0
end,
}
local tyj__zhuocheng = fk.CreateActiveSkill{
name = "tyj__zhuocheng",
anim_type = "offensive",
can_use = function(self, player)
return --[[Self:usedSkillTimes(self.name, Player.HistoryPhase) == 0 and--]] not Self:isKongcheng() and #table.filter(Fk:currentRoom().alive_players,function(p) return p~=Self and not p:isKongcheng() end)>0
end,
card_num = 1,
target_num = 1,
card_filter = function (self, to_select, selected, selected_targets)
local card = Fk:getCardById(to_select)
return Fk:currentRoom():getCardArea(to_select) == Player.Hand and #selected == 0 and card.number and #table.filter(Fk:currentRoom().alive_players,function(p) return #table.filter(p:getCardIds("ej"),function(c) return Fk:getCardById(c).number and Fk:getCardById(c).number == card.number end)>0 end)>0
end,
target_filter = function (self, to_select, selected, selected_cards, card, extra_data)
if #selected ~= 0 or #selected_cards~= 1 then return false end
local card = Fk:getCardById(selected_cards[1])
local target = Fk:currentRoom():getPlayerById(to_select)
return target and #table.filter(target:getCardIds("ej"),function(cid) return Fk:getCardById(cid).number and Fk:getCardById(cid).number==card.number end)>0
end,
on_use = function (self, room, effect)
local player = room:getPlayerById(effect.from)
local target = room:getPlayerById(effect.tos[1])
local card = Fk:getCardById(effect.cards[1])
local cards = table.filter(target:getCardIds("ej"),function(cid) return Fk:getCardById(cid).number and Fk:getCardById(cid).number==card.number end)
if #cards>0 then
local get = room:askForCardsChosen(player, player, 1,1, {
card_data = {
{ "pile_discard", cards }
}
}, self.name, "浊城:选择要被加入你的【趁火打劫】的牌")
if #get>0 then
local ucards = {effect.cards[1],get[1]}
local looting = Fk:cloneCard('looting')
looting.skillName=self.name
looting:addSubcards(ucards)
if U.getDefaultTargets(player, looting, true)~=nil then
U.askForUseVirtualCard(room, player, "looting", ucards, self.name, "#tyj__zhuocheng-use:::"..looting:toLogString(), false, false, false, false, nil, false)
end
end
end
end,
}
tyj__xingluan:addRelatedSkill(tyj__xingluan_recharge)
tyj__xingluan:addRelatedSkill(tyj__xingluan_slash)
tyj__fanchou:addSkill(tyj__xingluan)
tyj__fanchou:addSkill(tyj__zhuocheng)
Fk:loadTranslationTable{
["tyj__xingluan"]="兴乱",
[":tyj__xingluan"]="蓄势技,出牌阶段,你可令一名角色摸牌阶段摸牌数与使用【杀】的次数上限+1,然后其受到的伤害+1直到此技能蓄势完成。",
["tyj__zhuocheng"]="浊城",
[":tyj__zhuocheng"]="出牌阶段,你可将一张手牌与场上一张点数相同的牌当【趁火打劫】使用。",
["#tyj__xingluan-recharge"]="蓄势",
["#tyj__xingluan-show"]="兴乱效果",
["@@tyj__xingluan_debuff"]="兴乱受伤+1",
["@tyj__xingluan_buff"]="兴乱",
["@recharge-tyj__xingluan"]="兴乱蓄势",
["#tyj__zhuocheng-use"] = "浊城:使用 %arg。",
["$tyj__xingluan1"]="此地已战乱如此,不如再加一把,哈哈哈哈哈哈哈哈哈哈!",
["$tyj__xingluan2"]="乱战之中,吾自有妙计",
["$tyj__zhuocheng1"]="挥军入城,拨乱长安!",
["$tyj__zhuocheng2"]="大兴兵争,长安当乱。",
["~tyj__fanchou"]="李稚然,你这是何意?",
}
Fk:loadTranslationTable{
["tyj__henglian"]="横敛",
[":tyj__henglian"]="蓄势技,出牌阶段,你可令所有本回合受到过伤害的角色选择:1.对你使用【杀】;2.交给你两张牌。结束阶段,若未蓄势完成,你须用一点体力值或上限蓄势。蓄势完成后,所需蓄势牌数+1。",
["tyj__qianhao"]="褰豪",
[":tyj__qianhao"]="出牌阶段限一次,你可将一名角色的一张牌移动给对应区域牌数小于其的一名角色,然后其须将一张牌当【决斗】对你与后者使用。",
}
local tyj__xielu = fk.CreateTriggerSkill{
name="tyj__xielu",
events={fk.CardUseFinished,fk.CardUsing},
can_trigger = function (self, event, target, player, data)
if target == player and player:hasSkill(self) then
if event == fk.CardUseFinished then
return data.card and not data.card.is_damage_card
else
return U.getDefaultTargets(player,data.card)~=nil and U.getDefaultTargets(player,data.card)==1 end
end
end,
on_cost = function (self, event, target, player, data)
local tos = {}
local room=player.room
if event == fk.CardUseFinished then
for _, p in ipairs(room.alive_players) do
if player:distanceTo(p) == 1 then
table.insert(tos,p.id)
end
end
if #tos >0 then
local result room:askForChoosePlayers(player,tos,1,1,"是否对一名距离1以内的角色发动 挟掳 ?",self.name,true)
if result~= nil and #result>0 then
self.cost_data=result[1]
return true
end
else
return false
end
else
return true end
end,
on_use = function (self, event, target, player, data)
local room = player.room
if event == fk.CardUseFinished then
local target = room:getPlayerById(self.cost_data)
room:setPlayerMark(target, "@@lure_tiger-turn", 1)
room:setPlayerMark(target, MarkEnum.PlayerRemoved .. "-turn", 1)
room:handleAddLoseSkills(target, "#lure_tiger_hp|#lure_tiger_prohibit", nil, false, true) -- global...
room.logic:trigger("fk.RemoveStateChanged", target, nil)
else
data.additionalEffect = (data.additionalEffect or 0) + 1
end
end,
}
local tyj__sidao = fk.CreateActiveSkill{
name = "tyj__sidao",
frequency=Skill.Recharge,
can_use = function(self, player)
local names={}
if Self:usedSkillTimes("tyj__sidao", Player.HistoryGame) == 0 then
table.insert(names,"#tyj__sidao-snatch")
elseif Self:usedSkillTimes("tyj__xingluan", Player.HistoryTurn) == 0 and Self:usedSkillTimes(self.name, Player.HistoryGame) ~= 0 and Self:getMark("@recharge-"..self.name)~= 0 then
table.insert(names,"#tyj__xingluan-recharge")
end
return #names~=0
end,
interaction = function(self)
local names={}
if Self:usedSkillTimes("tyj__xingluan", Player.HistoryGame) == 0 then
table.insert(names,"#tyj__sidao-snatch")
elseif Self:usedSkillTimes("tyj__xingluan", Player.HistoryTurn) == 0 and Self:usedSkillTimes(self.name, Player.HistoryGame) ~= 0 and Self:getMark("@recharge-"..self.name)~= 0 then
table.insert(names,"#tyj__xingluan-recharge")
end
if #names == 0 then return end
return UI.ComboBox {choices = names}
end,
card_num = function (self)
if self.interaction.data ~= nil and self.interaction.data=="#tyj__xingluan-recharge" then
return Self:getMark("@recharge-"..self.name) or 0
end
return 0
end,
card_filter = function (self, to_select, selected, selected_targets)
if self.interaction.data ~= nil and self.interaction.data == "#tyj__xingluan-recharge" then
return #selected < Self:getMark("@recharge-"..self.name) and not Self:prohibitDiscard(Fk:getCardById(to_select))
else return false end
end,
min_target_num = function(self)
if self.interaction.data~= nil and self.interaction.data == "#tyj__sidao-snatch" then
return 1
else
return 0
end
end,
max_target_num = 1,
target_filter = function(self, to_select, selected, cards)
if #selected>0 or self.interaction.data== nil then return end
if self.interaction.data== "#tyj__xingluan-recharge" then return false end
return true
end,
on_use = function (self, room, effect)
local player = room:getPlayerById(effect.from)
if self.interaction.data ~= nil then
if self.interaction.data == "#tyj__xingluan-recharge" then
player:addSkillUseHistory(self.name,-1)
if effect.cards and #effect.cards>0 then
room:throwCard(effect.cards,"@recharge-"..self.name, player, player)
local mark = player:getMark("@recharge-"..self.name)
mark = mark - #effect.cards
if mark <1 then
room:setPlayerMark(player,"@recharge-"..self.name,0)
player:setSkillUseHistory(self.name, 0,player.HistoryGame)
for _, p in ipairs(room.alive_players) do
if table.contains(p:getTableMark("@@tyj__xingluan_debuff"),player.id) then
local mark = p:getTableMark("@@tyj__xingluan_debuff")
table.removeOne(mark,player.id)
if #mark > 0 then
room:setPlayerMark(p,"@@tyj__xingluan_debuff",mark)
else
room:setPlayerMark(p,"@@tyj__xingluan_debuff",0)
end
end
end
else room:setPlayerMark(player,"@recharge-"..self.name,mark) end
end
else
room:setPlayerMark(player,"@recharge-"..self.name,3)
local target = room:getPlayerById(effect.tos[1])
room:doAnimate("InvokeUltSkill", {
name = "tyj__xingluan",
player = player.id,
deputy = player.deputyGeneral and player.deputyGeneral ~= "" and table.contains(Fk.generals[player.deputyGeneral]:getSkillNameList(true),"tyj__xingluan"),
})
room:delay(2000)
local mark = target:getTableMark("@@tyj__xingluan_debuff")
local markk = target:getMark("@tyj__xingluan_buff")
table.insert(mark,player.id)
markk=markk+1
room:setPlayerMark(target,"@@tyj__xingluan_debuff",mark)
room:setPlayerMark(target,"@tyj__xingluan_buff",markk)
end
end
end,
}
Fk:loadTranslationTable{
["tyj__xielu"]="狭掳",
[":tyj__xielu"]="你使用非伤害牌后,可以令一名距离你1以内的角色视为被【调虎离山】至本回合结束。你使用一张牌时,若此牌仅有一名合法目标,则额外结算一次。",
["tyj__sidao"]="伺盗",
[":tyj__sidao"]="蓄势技,出牌阶段,你可视为使用【顺手牵羊】。若未蓄势完成,你可将【杀】当【火攻】使用并蓄势展示的【闪】。",
}
local tyj__lijueguosi = General:new(extension, "tyj__lijueguosi", "qun", 4,4)
Fk:loadTranslationTable{
["tyj__lijueguosi"] = "李傕郭汜",
["#tyj__lijueguosi"] = "狼狈为奸",
["designer:tyj__lijueguosi"] = "汤圆",
["cv:tyj__lijueguosi"] = "官方",
["illustrator:tyj__lijueguosi"] = "旭",
}
local tyj__langxi = fk.CreateActiveSkill{
name = "tyj__langxi",
anim_type = "offensive",
can_use = function(self, player)
return not player:isKongcheng() and player:usedSkillTimes(self.name, Player.HistoryPhase) == 0
end,
card_num = 0,
card_filter = Util.FalseFunc,
target_num = 1,
target_filter = function(self, to_select, selected)
return #selected == 0 and to_select ~= Self.id and Self:canPindian(Fk:currentRoom():getPlayerById(to_select),true,true)
end,
on_use = function(self, room, effect)
local player = room:getPlayerById(effect.from)
local to = room:getPlayerById(effect.tos[1])
local pindian = player:pindian({to}, self.name)
local num = 0
if pindian.tyj__langxi_num and pindian.tyj__langxi_num>0 then
num=num+pindian.tyj__langxi_num
end
if pindian.results[to.id].winner == player then
room:damage{
from = player,
to = to,
damage = num,
damageType = fk.NormalDamage,
skillName = self.name,
}
elseif pindian.results[to.id].winner == to then
room:damage{
from = player,
to = player,
damage = num,
damageType = fk.NormalDamage,
skillName = self.name,
}
else
local dmgto= {effect.from,effect.tos[1]}
room:sortPlayersByAction(dmgto)
for _, pid in ipairs(dmgto) do
room:damage{
from = player,
to = room:getPlayerById(pid),
damage = num,
damageType = fk.NormalDamage,
skillName = self.name,
}
end
end
end,
}
local tyj__langxi_tianbian = fk.CreateTriggerSkill{
name = "#tyj__langxi_tianbian",
refresh_events ={fk.StartPindian},
can_refresh = function (self, event, target, player, data)
if player == data.from or table.contains(data.tos, player) then
return #player.room.draw_pile>0 and data.reason and data.reason == "tyj__langxi"
end
end,
on_refresh = function (self, event, target, player, data)
local room = player.room
local can = false
if #player:getCardIds('h')>0 then
can = player.room:askForSkillInvoke(player, "tyj__langxi", nil, "#tyj__langxi-invoke")
else
can = true
end
if can then
local datan = data.tyj__langxi_num or 0
datan = datan+1
data.tyj__langxi_num = datan
local ids = room:getNCards(1)
if ids then
if player == data.from then
data.fromCard = Fk:getCardById(ids[1])
else
data.results[player.id] = data.results[player.id] or {}
data.results[player.id].toCard = Fk:getCardById(ids[1])
end
end
end
end,
}
local tyj__tanbei = fk.CreateActiveSkill{
name = "tyj__tanbei",
frequency=Skill.Recharge,
can_use = function(self, player)
local names={}
if Self:usedSkillTimes(self.name, Player.HistoryGame) == 0 then
table.insert(names,"#tyj__tanbei-snatch")
elseif Self:usedSkillTimes(self.name, Player.HistoryTurn) == 0 and Self:usedSkillTimes(self.name, Player.HistoryGame) ~= 0 and Self:getMark("@recharge-"..self.name)~= 0 then
table.insert(names,"#tyj__tanbei-recharge")
end
return #names~=0
end,
interaction = function(self)
local names={}
if Self:usedSkillTimes(self.name, Player.HistoryGame) == 0 then
table.insert(names,"#tyj__tanbei-snatch")
elseif Self:usedSkillTimes(self.name, Player.HistoryTurn) == 0 and Self:usedSkillTimes(self.name, Player.HistoryGame) ~= 0 and Self:getMark("@recharge-"..self.name)~= 0 then
table.insert(names,"#tyj__tanbei-recharge")
end
if #names == 0 then return end
return UI.ComboBox {choices = names}
end,
min_card_num = function (self)
if self.interaction.data ~= nil and self.interaction.data=="#tyj__tanbei-recharge" then
return Self:getMark("@recharge-"..self.name) or 0
elseif self.interaction.data ~= nil and self.interaction.data=="#tyj__tanbei-snatch" then
return 0
end
return 0
end,
max_card_num = function (self)
if self.interaction.data ~= nil and self.interaction.data=="#tyj__tanbei-recharge" then
return Self:getMark("@recharge-"..self.name) or 0
elseif self.interaction.data ~= nil and self.interaction.data=="#tyj__tanbei-snatch" then
return #Self:getCardIds('he')
end
return 0
end,
card_filter = function (self, to_select, selected, selected_targets)
if self.interaction.data ~= nil and self.interaction.data == "#tyj__tanbei-recharge" then
return #selected < Self:getMark("@recharge-"..self.name) and not Self:prohibitDiscard(Fk:getCardById(to_select))
else return true end
end,
min_target_num = function(self)
if self.interaction.data~= nil and self.interaction.data == "#tyj__tanbei-snatch" then
return 1
else
return 0
end
end,
max_target_num = 1,
target_filter = function(self, to_select, selected, cards)
if #selected>0 or self.interaction.data== nil then return end
if self.interaction.data== "#tyj__tanbei-recharge" then return false end
local slash = Fk:cloneCard("snatch")
slash.skillName = "tyj__tanbei"
return Self:canUse(slash) and not Self:isProhibited(targetx, slash) and slash.skill:targetFilter(to_select, {}, {}, slash)
end,
on_use = function (self, room, effect)
local player = room:getPlayerById(effect.from)
if self.interaction.data ~= nil then
if self.interaction.data == "#tyj__tanbei-recharge" then
player:addSkillUseHistory(self.name,-1)
if effect.cards and #effect.cards>0 then
room:throwCard(effect.cards,"@recharge-"..self.name, player, player)
local mark = player:getMark("@recharge-"..self.name)
mark = mark - #effect.cards
if mark <1 then
room:setPlayerMark(player,"@recharge-"..self.name,0)
player:setSkillUseHistory(self.name, 0,player.HistoryGame)
else room:setPlayerMark(player,"@recharge-"..self.name,mark) end
end
else
room:setPlayerMark(player,"@recharge-"..self.name,3)
local duelc = 0
if effect.cards and #effect.cards>0 then
duelc = #effect.cards
room:moveCards({
ids = effect.cards,
from = player.id,
fromArea = Player.Hand,
toArea = Card.DrawPile,
moveReason = fk.ReasonPut,
skillName = self.name,
moveVisible = false,
})
end
local target = room:getPlayerById(effect.tos[1])
room:doAnimate("InvokeUltSkill", {
name = "tyj__tanbei",
player = player.id,
deputy = player.deputyGeneral and player.deputyGeneral ~= "" and table.contains(Fk.generals[player.deputyGeneral]:getSkillNameList(true),"tyj__tanbei"),
})
room:delay(2000)
room:useVirtualCard("snatch", nil, player, target, self.name)
local use = nil
if duelc>0 then
local card = room:askForCard(target, duelc, duelc, true, self.name, true, ".", "#tyj__tanbei-duel:::"..duelc)
if #card > 0 and #card == duelc then
use = room:useVirtualCard("duel", card, target, player, self.name)
end
end
if duelc == 0 then
local can = player.room:askForSkillInvoke(target, self.name, nil, "#tyj__tanbei-duel0::"..player.id)
if can then
use = room:useVirtualCard("duel", nil, target, player, self.name)
end
end
if use==nil or (not (use and use.damageDealt and use.damageDealt[player.id])) then
local skills = table.filter(player.player_skills, function(s)
return s:isPlayerSkill(player)
end)
if #skills >0 then
local skillNames = table.map(skills, function(s)
return s.name
end)
local skill = room:askForChoice(player, skillNames, self.name, "#tyj__tanbei-reset::" .. player.id)
if skill then
local sk = Fk.skills[skill]
room:setPlayerMark(player,"@recharge-"..sk.name,0)
if player:usedSkillTimes(skill, Player.HistoryGame) ~= 0 then
player:setSkillUseHistory(skill,0,Player.HistoryGame)
end
if player:usedSkillTimes(skill, Player.HistoryRound) ~= 0 then
player:setSkillUseHistory(skill,0,Player.HistoryRound)
end
if player:usedSkillTimes(skill, Player.HistoryPhase) ~= 0 then
player:setSkillUseHistory(skill,0,Player.HistoryPhase)
end
if player:usedSkillTimes(skill, Player.HistoryTurn) ~= 0 then
player:setSkillUseHistory(skill,0,Player.HistoryTurn)
end
end
end
end
end
end
end,
}
tyj__langxi:addRelatedSkill(tyj__langxi_tianbian)
tyj__lijueguosi:addSkill(tyj__langxi)
tyj__lijueguosi:addSkill(tyj__tanbei)
Fk:loadTranslationTable{
["tyj__langxi"]="狼袭",
[":tyj__langxi"]="出牌阶段限一次,你可拼点,并对没赢的角色造成0点伤害。双方皆可用牌堆顶的牌拼点令此伤害+1(可令没有手牌的角色拼点,且其必须如此做)。",
["#tyj__langxi-invoke"] = "狼袭:是否用牌堆顶牌拼点令此次拼点输的角色受到的伤害+1?",
["tyj__tanbei"]="贪狈",
[":tyj__tanbei"]="蓄势技,出牌阶段,你可将至少0张牌置于牌堆顶,视为使用【顺手牵羊】,目标可将等量张牌(0则视为)当【决斗】对你使用,若你未受到伤害,你重置一个技能。",
["#tyj__tanbei-duel0"]="贪狈:你可视为对 %dest 使用【决斗】。",
["#tyj__tanbei-duel"]="贪狈:你可将 %arg 张牌当【决斗】对偷了你的牌的角色使用。",
["#tyj__tanbei-snatch"]="使用【顺手牵羊】",
["#tyj__tanbei-recharge"]="蓄势",
["@recharge-tyj__tanbei"]="贪狈蓄势",
["#tyj__tanbei-reset"] = "贪狈:重置一个技能",
["~tyj__lijueguosi"]="文和之计,非周全之策。",
["$tyj__langxi1"]="今日之战,必非死即伤之局。",
["$tyj__langxi2"]="谋算计策,吾二人尚有险招。",
["$tyj__tanbei1"]="长安易主,吾乃众望所归。",
["$tyj__tanbei2"]="此战虽凶,得益颇高。",
}
return extension
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化