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); 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); }
private void CheckVersionButton_Click(object sender, EventArgs e) { byte[] old = Config.ClientHash; Config.LoadVersion(); if (Functions.IsMatch(old, Config.ClientHash) || !SEnvir.Started) { return; } SEnvir.Broadcast(new S.Chat { Text = "A new version has been made available, please update when possible.", Type = MessageType.Announcement }); }
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 }); } } }
public override void Die() { if (War != null) { if (EXPOwner?.Node == null) { return; } if (EXPOwner.Character.Account.GuildMember == null) { return; } if (EXPOwner.Character.Account.GuildMember.Guild.Castle != null) { return; } if (War.Participants.Count > 0 && !War.Participants.Contains(EXPOwner.Character.Account.GuildMember.Guild)) { return; } #region Conquest Stats UserConquestStats conquest = SEnvir.GetConquestStats((PlayerObject)EXPOwner); if (conquest != null) { conquest.BossKillCount++; } #endregion GuildInfo ownerGuild = SEnvir.GuildInfoList.Binding.FirstOrDefault(x => x.Castle == War.Castle); if (ownerGuild != null) { ownerGuild.Castle = null; } EXPOwner.Character.Account.GuildMember.Guild.Castle = War.Castle; foreach (SConnection con in SEnvir.Connections) { con.ReceiveChat(string.Format(con.Language.ConquestCapture, EXPOwner.Character.Account.GuildMember.Guild.GuildName, War.Castle.Name), MessageType.System); } SEnvir.Broadcast(new S.GuildCastleInfo { Index = War.Castle.Index, Owner = EXPOwner.Character.Account.GuildMember.Guild.GuildName }); War.CastleBoss = null; War.PingPlayers(); War.SpawnBoss(); if (War.EndTime - SEnvir.Now < TimeSpan.FromMinutes(15)) { War.EndTime = SEnvir.Now.AddMinutes(15); } foreach (PlayerObject player in SEnvir.Players) { player.ApplyCastleBuff(); } War = null; } base.Die(); }