Better trigger (#45)
* set gamerule a refresh trigger skill * cost and use of trigger skill
This commit is contained in:
parent
1dd9abda14
commit
2ab79a26fb
|
@ -41,15 +41,42 @@ function TriggerSkill:triggerable(event, target, player, data)
|
|||
and (self.global or (target:isAlive() and target:hasSkill(self)))
|
||||
end
|
||||
|
||||
---Trigger this skill
|
||||
-- Determine how to cost this skill.
|
||||
---@param event Event @ TriggerEvent
|
||||
---@param target ServerPlayer @ Player who triggered this event
|
||||
---@param player ServerPlayer @ Player who is operating
|
||||
---@param data any @ useful data of the event
|
||||
---@return boolean @ returns true if trigger is broken
|
||||
function TriggerSkill:trigger(event, target, player, data)
|
||||
return self:doCost(event, target, player, data)
|
||||
end
|
||||
|
||||
-- do cost and skill effect.
|
||||
-- DO NOT modify this function
|
||||
function TriggerSkill:doCost(event, target, player, data)
|
||||
local ret = self:cost(event, target, player, data)
|
||||
if ret then
|
||||
local room = player.room
|
||||
room:notifySkillInvoked(player, self.name)
|
||||
ret = self:use(event, target, player, data)
|
||||
return ret
|
||||
end
|
||||
end
|
||||
|
||||
-- ask player how to use this skill.
|
||||
---@param event Event @ TriggerEvent
|
||||
---@param target ServerPlayer @ Player who triggered this event
|
||||
---@param player ServerPlayer @ Player who is operating
|
||||
---@param data any @ useful data of the event
|
||||
---@return boolean @ returns true if trigger is broken
|
||||
function TriggerSkill:cost(event, target, player, data)
|
||||
local ret = false
|
||||
if self.frequency == Skill.Compulsory then
|
||||
return true
|
||||
end
|
||||
|
||||
if player.room:askForSkillInvoke(player, self.name) then
|
||||
return self:use(event, target, player, data)
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
|
|
@ -26,6 +26,8 @@ _, Weapon, Armor, DefensiveRide, OffensiveRide, Treasure = table.unpack(Equip)
|
|||
---@field priority number | table<Event, number>
|
||||
---@field on_trigger TrigFunc
|
||||
---@field can_trigger TrigFunc
|
||||
---@field on_cost TrigFunc
|
||||
---@field on_use TrigFunc
|
||||
---@field on_refresh TrigFunc
|
||||
---@field can_refresh TrigFunc
|
||||
|
||||
|
@ -59,6 +61,9 @@ function fk.CreateTriggerSkill(spec)
|
|||
skill.triggerable = spec.can_trigger
|
||||
end
|
||||
|
||||
if spec.on_cost then skill.cost = spec.on_cost end
|
||||
if spec.on_use then skill.use = spec.on_use end
|
||||
|
||||
if spec.can_refresh then
|
||||
skill.canRefresh = spec.can_refresh
|
||||
end
|
||||
|
|
|
@ -38,7 +38,7 @@ end
|
|||
|
||||
GameRule = fk.CreateTriggerSkill{
|
||||
name = "game_rule",
|
||||
events = {
|
||||
refresh_events = {
|
||||
fk.GameStart, fk.DrawInitialCards, fk.TurnStart,
|
||||
fk.EventPhaseProceeding, fk.EventPhaseEnd, fk.EventPhaseChanging,
|
||||
fk.AskForPeaches, fk.AskForPeachesDone,
|
||||
|
@ -46,11 +46,11 @@ GameRule = fk.CreateTriggerSkill{
|
|||
},
|
||||
priority = 0,
|
||||
|
||||
can_trigger = function(self, event, target, player, data)
|
||||
can_refresh = function(self, event, target, player, data)
|
||||
return (target == player) or (target == nil)
|
||||
end,
|
||||
|
||||
on_trigger = function(self, event, target, player, data)
|
||||
on_refresh = function(self, event, target, player, data)
|
||||
if RoomInstance.tag["SkipGameRule"] then
|
||||
RoomInstance.tag["SkipGameRule"] = false
|
||||
return false
|
||||
|
|
|
@ -31,16 +31,14 @@ local fankui = fk.CreateTriggerSkill{
|
|||
local from = room:getPlayerById(data.from)
|
||||
return from ~= nil and
|
||||
target == player and
|
||||
target:hasSkill(self.name)
|
||||
target:hasSkill(self.name) and
|
||||
not target.dead
|
||||
end,
|
||||
on_trigger = function(self, event, target, player, data)
|
||||
on_use = function(self, event, target, player, data)
|
||||
local room = player.room
|
||||
local from = room:getPlayerById(data.from)
|
||||
if (not from) or from:isNude() then return false end
|
||||
if room:askForSkillInvoke(player, self.name) then
|
||||
local card = room:askForCardChosen(player, from, "he", self.name)
|
||||
room:obtainCard(player.id, card, false, fk.ReasonPrey)
|
||||
end
|
||||
local card = room:askForCardChosen(player, from, "he", self.name)
|
||||
room:obtainCard(player.id, card, false)
|
||||
end
|
||||
}
|
||||
local simayi = General:new(extension, "simayi", "wei", 3)
|
||||
|
|
Loading…
Reference in New Issue