Exemple #1
0
        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);
        }
Exemple #2
0
        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
            });
        }
Exemple #3
0
        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
                    });
                }
            }
        }
Exemple #4
0
        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();
        }