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

小白求助 当其他角色弃牌超过一张从中选择一张到自己手里

只看楼主收藏回复

如标题所示,想从lua技能手册里看,看的眼睛冒星星,实在看不懂,有好心人给一定的提示吗?


IP属地:海南1楼2022-05-29 20:46回复
    一个思路是用触发技嵌套视为技,事件是cardmoveontime,重写triggerable函数,在trigger里获取相关结构体并检测当前玩家是否为自己,是否在弃牌阶段,移动原因是否为弃牌,弃牌数是否超过一张,然后给玩家和弃牌设置一个标签,再使用视为技,其中的viewFilter通过前面的标签确定到卡牌,选择的那张牌视为相关技能卡,效果就是直接获得之,最后注意在回合结束清除相关标签。此技能可能相对复杂,涉及到tag和property,建议参考二张的固政和虞翻的纵玄。个人愚见,仅供参考,或许其他大佬有更优解。


    IP属地:湖南来自Android客户端3楼2022-05-29 23:45
    回复
      因为弃牌阶段可以不一次性弃置,所以需要特殊处理。
      二张固政是用tag存储当前角色的弃牌的,简单来说就是弃牌开始时设置tag为空,之后每弃一次牌就会写入一些,弃牌结束后再发动。


      IP属地:江苏来自Android客户端5楼2022-05-30 16:33
      收起回复
        楼主是想在弃牌阶段因为规则弃牌还是任何原因的弃牌?如果是前者,因为目前版本弃牌必须一次性弃完,所有写法就很简单了。
        new_skill=sgs.CreateTriggerSkill{
        name="new",
        events=sgs.CardsMoveOneTime,
        on_trigger=function(self,event,player,data,room)
        local move=data:toMoveOneTime()
        if move.to==sgs.Player_DiscardPile and move.from and move.from:objectName()~=player:objectName() and move.from:getPhase()==sgs.Player_Discard and move.reason.m_reason==sgs.CardMoveReason_S_REASON_RULEDISCARD and move.card_ids:length()>1 then
        room:fillAG(move.card_ids,player)
        local id=room:askForAG(player,move.card_ids,true,self:objectName())
        if id~=1 then
        room:takeAG(player,id)
        end
        room:clearAG(player)
        end
        end,
        }


        IP属地:江苏6楼2022-06-07 19:04
        收起回复