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()); }
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); }