太阳神三国杀lua吧 关注:2,643贴子:73,377
  • 9回复贴,共1

求AI继续扫盲:关于sgs.ai_skill_cardask

只看楼主收藏回复

各位大神好,我修改了一个“奉印”技能,添加了1点伤害,并且去掉了“目标体力大于你”的限制,代码如下,人手发动技能一切正常:
LuaFengyinCard = sgs.CreateSkillCard{
name = "LuaFengyinCard" ,
target_fixed = true ,
will_throw = false,
handling_method = sgs.Card_MethodNone ,
on_use = function(self, room, source, targets)
local target = room:getCurrent()
target:obtainCard(self)
local thedamage = sgs.DamageStruct()
thedamage.from = source
thedamage.to= target
thedamage.damage=1
thedamage.nature = sgs.DamageStruct_Normal
room:damage(thedamage)
room:setPlayerFlag(target, "LuaFengyin_target")
end
}
LuaFengyinVS = sgs.CreateViewAsSkill{
name = "LuaFengyin" ,
n = 1 ,
view_filter = function(self, selected, to_select)
return (#selected == 0) and to_select:isKindOf("Slash")
end ,
view_as = function(self, cards)
if #cards ~= 1 then return nil end
local card = LuaFengyinCard:clone()
card:addSubcard(cards[1])
return card
end ,
enabled_at_play = function()
return false
end ,
enabled_at_response = function(self, player, pattern)
return pattern == "@@LuaFengyin"
end
}
LuaFengyin = sgs.CreateTriggerSkill{
name = "LuaFengyin" ,
events = {sgs.EventPhaseChanging, sgs.EventPhaseStart} ,
view_as_skill = LuaFengyinVS ,
on_trigger = function(self, event, player, data)
local room = player:getRoom()
local splayer = room:findPlayerBySkillName(self:objectName())
if not splayer or splayer:objectName() == player:objectName() then return false end
if (event == sgs.EventPhaseChanging) and (data:toPhaseChange().to == sgs.Player_Start) then
room:askForUseCard(splayer, "@@LuaFengyin", "@fengyin-test", -1, sgs.Card_MethodNone)
end
if (event == sgs.EventPhaseStart) and player:hasFlag("LuaFengyin_target") then
player:skip(sgs.Player_Play)
player:skip(sgs.Player_Discard)
end
return false
end ,
can_trigger = function(self, target)
return target
end ,
}
然后根据原版奉印的代码,改出了一个AI,条件是只要伏完手中有杀,而且目标是敌人就发动:
sgs.ai_skill_cardask["@fengyin-test"] = function(self, data)
local cards = self.player:getHandcards()
local card
cards = sgs.QList2Table(cards)
for _,acard in ipairs(cards) do
if acard:isKindOf("Slash") then
card = acard
break
end
end
if not card then
return "."
end
local target = self.room:getCurrent()
local card_id = card:getEffectiveId()
if self:isEnemy(target) then
return "$" .. card_id
end
return "."
end
但实测AI在满足发动条件时,仍不会发动技能,请大神帮忙看看是哪里出错,谢谢!


IP属地:广东1楼2019-07-30 22:10回复
    AI的第三行孤零零的
    local card 应该是错的,但就算将它改成
    local card = nil
    仍然运行不了,请帮帮忙


    IP属地:广东2楼2019-07-30 22:28
    收起回复
      @@


      IP属地:福建来自Android客户端3楼2019-07-30 22:36
      收起回复
        askForUseCard要配ai_skill_use
        askForCard才配ai_skill_cardask
        要多看smart-ai.lua


        IP属地:北京4楼2019-07-31 18:06
        收起回复