Exemplo n.º 1
0
 public override TriggerStruct Cost(TriggerEvent trigger_event, Room room, Player player, ref object data, Player target, TriggerStruct trigger_struct)
 {
     foreach (string skill in player.GetSkills(true, false))
     {
         Skill real_skill = Engine.GetSkill(skill);
         if (real_skill != null && real_skill is BattleArraySkill baskill && room.AskForSkillInvoke(player, Name))
         {
             room.ShowGeneral(player, RoomLogic.InPlayerHeadSkills(player, skill));
             baskill.SummonFriends(room, player);
             break;
         }
     }
     return(new TriggerStruct());
 }
Exemplo n.º 2
0
        public override bool IsEnabledAtPlay(Room room, Player player)
        {
            if (room.AliveCount() < 4)
            {
                return(false);
            }
            if (player.HasFlag("Global_SummonFailed"))
            {
                return(false);
            }
            if (!player.CanShowGeneral(RoomLogic.InPlayerHeadSkills(player, Name) ? "h" : "d"))
            {
                return(false);
            }
            if (!player.HasShownOneGeneral() && Hegemony.WillbeRole(room, player) == "careerist")
            {
                return(false);
            }
            BattleArraySkill skill = (BattleArraySkill)Engine.GetTriggerSkill(Name);

            if (skill != null)
            {
                ArrayType type = skill.Type;
                switch (type)
                {
                case ArrayType.Siege:
                {
                    if (RoomLogic.WillBeFriendWith(room, player, room.GetNextAlive(player)) &&
                        RoomLogic.WillBeFriendWith(room, player, room.GetLastAlive(player)))
                    {
                        return(false);
                    }
                    if (!RoomLogic.WillBeFriendWith(room, player, room.GetNextAlive(player)))
                    {
                        if (!room.GetNextAlive(player, 2).HasShownOneGeneral() && room.GetNextAlive(player).HasShownOneGeneral())
                        {
                            return(true);
                        }
                    }
                    if (!RoomLogic.WillBeFriendWith(room, player, room.GetLastAlive(player)))
                    {
                        return(!room.GetLastAlive(player, 2).HasShownOneGeneral() && room.GetLastAlive(player).HasShownOneGeneral());
                    }
                    break;
                }

                case ArrayType.Formation:
                {
                    int n     = room.AliveCount(false);
                    int asked = n;
                    for (int i = 1; i < n; ++i)
                    {
                        Player target = room.GetNextAlive(player, i);
                        if (RoomLogic.IsFriendWith(room, player, target))
                        {
                            continue;
                        }
                        else if (!target.HasShownOneGeneral())
                        {
                            return(true);
                        }
                        else
                        {
                            asked = i;
                            break;
                        }
                    }
                    n -= asked;
                    for (int i = 1; i < n; ++i)
                    {
                        Player target = room.GetLastAlive(player, i);
                        if (RoomLogic.IsFriendWith(room, player, target))
                        {
                            continue;
                        }
                        else
                        {
                            return(!target.HasShownOneGeneral());
                        }
                    }
                    break;
                }
                }
            }
            return(false);
        }