mirror of
https://github.com/Qsgs-Fans/FreeKill.git
synced 2024-11-16 03:32:34 +08:00
c3cdb8dc50
出牌策略仍然搞不定呀 - Qml: 新增leval函数可获得lua表达式的值 - 新增AbstractRoom类 去除冗余
88 lines
2.6 KiB
Lua
88 lines
2.6 KiB
Lua
-- TODO: 合法性的方便函数
|
|
-- TODO: 关于如何选择多个目标
|
|
-- TODO: 关于装备牌
|
|
|
|
-- 基本牌:杀,闪,桃
|
|
|
|
---@param from ServerPlayer
|
|
---@param to ServerPlayer
|
|
---@param card Card
|
|
local function tgtValidator(from, to, card)
|
|
return not from:prohibitUse(card) and
|
|
not from:isProhibited(to, card) and
|
|
true -- feasible
|
|
end
|
|
|
|
local function justUse(self, card_name, extra_data)
|
|
local slashes = self:getCards(card_name, "use", extra_data)
|
|
if #slashes == 0 then return nil end
|
|
|
|
return self:buildUseReply(slashes[1].id)
|
|
end
|
|
|
|
---@param self SmartAI
|
|
---@param card_name string
|
|
local function useToEnemy(self, card_name, extra_data)
|
|
local slashes = self:getCards(card_name, "use", extra_data)
|
|
if #slashes == 0 then return nil end
|
|
|
|
-- TODO: 目标合法性
|
|
local targets = {}
|
|
if self.enemies[1] then
|
|
table.insert(targets, self.enemies[1].id)
|
|
else
|
|
return nil
|
|
end
|
|
|
|
return self:buildUseReply(slashes[1].id, targets)
|
|
end
|
|
|
|
fk.ai_use_card["slash"] = function(self, pattern, prompt, cancelable, extra_data)
|
|
return useToEnemy(self, "slash", extra_data)
|
|
end
|
|
|
|
fk.ai_use_card["jink"] = function(self, pattern, prompt, cancelable, extra_data)
|
|
return justUse(self, "jink", extra_data)
|
|
end
|
|
|
|
fk.ai_use_card["peach"] = function(self, _, _, _, extra_data)
|
|
local cards = self:getCards("peach", "use", extra_data)
|
|
if #cards == 0 then return nil end
|
|
|
|
return self:buildUseReply(cards[1].id)
|
|
end
|
|
|
|
-- 自救见军争卡牌AI
|
|
fk.ai_use_card["#AskForPeaches"] = function(self)
|
|
local room = self.room
|
|
local deathEvent = room.logic:getCurrentEvent()
|
|
local data = deathEvent.data[1] ---@type DyingStruct
|
|
|
|
-- TODO: 关于救不回来、神关羽之类的更复杂逻辑
|
|
-- TODO: 这些逻辑感觉不能写死在此函数里面,得想出更加多样的办法
|
|
if self:isFriend(room:getPlayerById(data.who)) then
|
|
return fk.ai_use_card["peach"](self)
|
|
end
|
|
return nil
|
|
end
|
|
|
|
fk.ai_use_card["dismantlement"] = function(self, pattern, prompt, cancelable, extra_data)
|
|
return useToEnemy(self, "dismantlement", extra_data)
|
|
end
|
|
|
|
fk.ai_use_card["snatch"] = function(self, pattern, prompt, cancelable, extra_data)
|
|
return useToEnemy(self, "snatch", extra_data)
|
|
end
|
|
|
|
fk.ai_use_card["duel"] = function(self, pattern, prompt, cancelable, extra_data)
|
|
return useToEnemy(self, "duel", extra_data)
|
|
end
|
|
|
|
fk.ai_use_card["ex_nihilo"] = function(self, pattern, prompt, cancelable, extra_data)
|
|
return justUse(self, "ex_nihilo", extra_data)
|
|
end
|
|
|
|
fk.ai_use_card["indulgence"] = function(self, pattern, prompt, cancelable, extra_data)
|
|
return useToEnemy(self, "indulgence", extra_data)
|
|
end
|