private void GiveGuildBattleRewardTo(int winnerGuildId)
        {
            GuildWarMapInfo mapInfo = CurrentMapInfo as GuildWarMapInfo;
            string          mailTitle;
            string          mailContent;
            int             rewardGold;

            CurrencyAmount[] rewardCurrencies;
            ItemAmount[]     rewardItems;
            Mail             tempMail;

            foreach (IPlayerCharacterData participant in ServerUserHandlers.GetPlayerCharacters())
            {
                if (participant.GuildId == winnerGuildId)
                {
                    mailTitle        = mapInfo.winMailTitle;
                    mailContent      = mapInfo.winMailContent;
                    rewardGold       = mapInfo.winRewardGold;
                    rewardCurrencies = mapInfo.winRewardCurrencies;
                    rewardItems      = mapInfo.winRewardItems;
                }
                else
                {
                    mailTitle        = mapInfo.participantMailTitle;
                    mailContent      = mapInfo.participantMailContent;
                    rewardGold       = mapInfo.participantRewardGold;
                    rewardCurrencies = mapInfo.participantRewardCurrencies;
                    rewardItems      = mapInfo.participantRewardItems;
                }
                tempMail = new Mail()
                {
                    SenderId   = guildWarMailSenderId,
                    SenderName = guildWarMailSenderName,
                    ReceiverId = participant.UserId,
                    Title      = mailTitle,
                    Content    = mailContent,
                    Gold       = rewardGold,
                };
                foreach (CurrencyAmount currencyAmount in rewardCurrencies)
                {
                    if (currencyAmount.currency == null)
                    {
                        continue;
                    }
                    tempMail.Currencies.Add(CharacterCurrency.Create(currencyAmount.currency.DataId, currencyAmount.amount));
                }
                foreach (ItemAmount itemAmount in rewardItems)
                {
                    if (itemAmount.item == null)
                    {
                        continue;
                    }
                    tempMail.Items.Add(CharacterItem.Create(itemAmount.item, 1, itemAmount.amount));
                }
                ServerMailHandlers.SendMail(tempMail);
            }
        }
        public void Update_GuildWar()
        {
            if (!IsServer || CurrentMapInfo == null || !(CurrentMapInfo is GuildWarMapInfo))
            {
                return;
            }

            GuildWarMapInfo mapInfo = CurrentMapInfo as GuildWarMapInfo;

            if (!GuildWarRunning && mapInfo.IsOn)
            {
                ServerSendSystemAnnounce(mapInfo.eventStartedMessage);
                DefenderGuildId   = 0;
                DefenderGuildName = string.Empty;
                ExpelLoserGuilds(DefenderGuildId);
                RegenerateMonsters();
                GuildWarRunning = true;
                SendGuildWarStatus();
            }

            if (GuildWarRunning && !mapInfo.IsOn)
            {
                ServerSendSystemAnnounce(mapInfo.eventEndedMessage);
                GuildWarRunning = false;
                if (DefenderGuildId > 0)
                {
                    ServerSendSystemAnnounce(string.Format(mapInfo.defenderWinMessage, DefenderGuildName));
                    GiveGuildBattleRewardTo(DefenderGuildId);
                    ExpelLoserGuilds(DefenderGuildId);
                    RegenerateMonsters();
                }
                SendGuildWarStatus();
            }

            if (GuildWarRunning)
            {
                if ((System.DateTime.Now - LastOccupyTime).TotalMinutes >= mapInfo.battleDuration)
                {
                    ServerSendSystemAnnounce(mapInfo.roundEndedMessage);
                    LastOccupyTime = System.DateTime.Now;
                    if (DefenderGuildId > 0)
                    {
                        ServerSendSystemAnnounce(string.Format(mapInfo.defenderWinMessage, DefenderGuildName));
                        GiveGuildBattleRewardTo(DefenderGuildId);
                        ExpelLoserGuilds(DefenderGuildId);
                        RegenerateMonsters();
                    }
                    SendGuildWarStatus();
                }
            }
        }
        public void CastleOccupied(int attackerGuildId)
        {
            GuildWarMapInfo mapInfo = CurrentMapInfo as GuildWarMapInfo;

            LastOccupyTime = System.DateTime.Now;
            GuildData guild;

            if (attackerGuildId > 0 && ServerGuildHandlers.TryGetGuild(attackerGuildId, out guild))
            {
                DefenderGuildId   = attackerGuildId;
                DefenderGuildName = guild.guildName;
                ServerSendSystemAnnounce(string.Format(mapInfo.attackerWinMessage, DefenderGuildName));
                GiveGuildBattleRewardTo(DefenderGuildId);
                ExpelLoserGuilds(DefenderGuildId);
                RegenerateMonsters();
            }
            SendGuildWarStatus();
        }