コード例 #1
0
ファイル: ConquestWar.cs プロジェクト: zxc2256143/mir3-zircon
        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);
        }
コード例 #2
0
ファイル: ConquestWar.cs プロジェクト: putao520/mir3
        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
                    });
                }
            }
        }