public void StartWar() { foreach (SConnection con in SEnvir.Connections) { con.ReceiveChat(string.Format(con.Language.ConquestStarted, Castle.Name), MessageType.System); } Map = SEnvir.GetMap(Castle.Map); //TODO - Instance for (int i = Map.NPCs.Count - 1; i >= 0; i--) { NPCObject npc = Map.NPCs[i]; // if (!Castle.CastleRegion.PointList.Contains(npc.CurrentLocation)) continue; npc.Visible = false; npc.RemoveAllObjects(); } foreach (GuildInfo guild in Participants) { guild.Conquest?.Delete(); } SEnvir.Broadcast(new S.GuildConquestStarted { Index = Castle.Index }); PingPlayers(); SpawnBoss(); SEnvir.ConquestWars.Add(this); }
public void EndWar() { foreach (SConnection con in SEnvir.Connections) { con.ReceiveChat(string.Format(con.Language.ConquestFinished, Castle.Name), MessageType.System); } Ended = true; for (int i = Map.NPCs.Count - 1; i >= 0; i--) { NPCObject npc = Map.NPCs[i]; // if (!Castle.CastleRegion.PointList.Contains(npc.CurrentLocation)) continue; npc.Visible = true; npc.AddAllObjects(); } PingPlayers(); DespawnBoss(); SEnvir.ConquestWars.Remove(this); SEnvir.Broadcast(new S.GuildConquestFinished { Index = Castle.Index }); GuildInfo ownerGuild = SEnvir.GuildInfoList.Binding.FirstOrDefault(x => x.Castle == Castle); if (ownerGuild != null) { foreach (SConnection con in SEnvir.Connections) { con.ReceiveChat(string.Format(con.Language.ConquestOwner, ownerGuild.GuildName, Castle.Name), MessageType.System); } UserConquest conquest = SEnvir.UserConquestList.Binding.FirstOrDefault(x => x.Castle == Castle && x.Castle == ownerGuild?.Castle); TimeSpan warTime = TimeSpan.MinValue; if (conquest != null) { warTime = (conquest.WarDate + conquest.Castle.StartTime) - SEnvir.Now; } foreach (GuildMemberInfo member in ownerGuild.Members) { if (member.Account.Connection?.Player == null) { continue; //Offline } member.Account.Connection.Enqueue(new S.GuildConquestDate { Index = Castle.Index, WarTime = warTime, ObserverPacket = false }); } } foreach (GuildInfo participant in Participants) { if (participant == ownerGuild) { continue; } foreach (GuildMemberInfo member in participant.Members) { if (member.Account.Connection?.Player == null) { continue; //Offline } member.Account.Connection.Enqueue(new S.GuildConquestDate { Index = Castle.Index, WarTime = TimeSpan.MinValue, ObserverPacket = false }); } } }