clan war impluse source 5517

01/03/2013 13:16 zoro7070#1
i make clanwar for my server
but there is some problem
clans score don't appear at screen
clan name don't change at the clan pole
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Conquer_Online_Server.Database;
using Conquer_Online_Server.Network.GamePackets;
using Conquer_Online_Server.ServerBase;

namespace Conquer_Online_Server.Game.Tournaments
{
    class ClanWar
    {
        private static bool changed = false;
        public static int Claim = 0;
        public static SobNpcSpawn ClanFlag, ClanFlag2;
        public static Conquer_Online_Server.Game.Clans CurrentTopLeader;
        public static bool FirstRound = false;
        public static bool IsWar = false;
        public static Time32 LastWin;
        public static Conquer_Online_Server.Game.Clans PoleKeeper;
        private static string[] scoreMessages;
        public static SafeDictionary<uint, Conquer_Online_Server.Game.Clans> Scores = new SafeDictionary<uint, Conquer_Online_Server.Game.Clans>(100);
        public static Time32 ScoreSendStamp;
        public static DateTime StartTime;

        public static void AddScore(uint addScore, Conquer_Online_Server.Game.Clans clan)
        {
            if (clan != null)
            {
                clan.WarScore += addScore;
                if ((int)ClanFlag.Hitpoints <= 0)
                {
                    FinishRound();
                    return;
                }
                else
                {
                    changed = true;
                    if (!Scores.ContainsKey(clan.ClanId))
                    {
                        Scores.Add(clan.ClanId, clan);
                        SendScores();
                    }
                }
            }
        }

        public static void End()
        {
            if (ClanFlag != null)
            {
                Kernel.SendWorldMessage(new Message("The Clan, " + PoleKeeper.ClanName + ", owned by " + PoleKeeper.ClanLider + " has won this Clan war!---Clan war has ended!", System.Drawing.Color.White, 0x7db), Kernel.GamePool.Values);
            }
            else
            {
                Kernel.SendWorldMessage(new Message("Clan war has ended and there was no winner!", System.Drawing.Color.Red, 0x7db), Kernel.GamePool.Values);
            }
            IsWar = false;
            UpdatePole(ClanFlag);
        }

        public static void FinishRound()
        {
            if (!((PoleKeeper == null) || FirstRound))
            {
            }
            LastWin = Time32.Now;
            FirstRound = false;
            SortScores(out PoleKeeper);
            if (PoleKeeper != null)
            {
                Kernel.SendWorldMessage(new Message("The Clan, " + PoleKeeper.ClanName + ", owned by " + PoleKeeper.ClanLider + " has won this Clan war round!", System.Drawing.Color.Red, Message.Center), ServerBase.Kernel.GamePool.Values);
                ClanFlag.Name = PoleKeeper.ClanName;
            }
            ClanFlag.Hitpoints = ClanFlag.MaxHitpoints;
            Kernel.SendWorldMessage(ClanFlag, Kernel.GamePool.Values, (ushort)0x5e5);
            Reset();
            UpdatePole(ClanFlag);
        }

        public static void Initiate()
        {
            var Map = Kernel.Maps[1509];
            ClanFlag = (SobNpcSpawn)Map.Npcs[812];
        }

        public static void Reset()
        {
            Scores = new SafeDictionary<uint, Conquer_Online_Server.Game.Clans>(100);
            ClanFlag.Hitpoints = ClanFlag.MaxHitpoints;
            IsWar = true;
        }

        public static void SendScores()
        {
            if (scoreMessages == null)
            {
                scoreMessages = new string[0];
            }
            if (Scores.Count == 0)
            {
                return;
            }

            if (changed)
            {
                SortScores(out CurrentTopLeader);

                for (int i = 0; i < scoreMessages.Length; i++)
                {
                    Message message = new Message(scoreMessages[i], System.Drawing.Color.Red, i == 0 ? Message.FirstRightCorner : Message.ContinueRightCorner);
                    Kernel.SendWorldMessage(message, ServerBase.Kernel.GamePool.Values, (ushort)1509);
                }
            }
        }

        private static void SortScores(out Conquer_Online_Server.Game.Clans winner)
        {
            winner = null;
            List<string> list = new List<string>();
            string item = Constants.ServerName + " ClanWar:";
            list.Add(item);
            SortedDictionary<uint, SortEntry<uint, Conquer_Online_Server.Game.Clans>> source = new SortedDictionary<uint, SortEntry<uint, Conquer_Online_Server.Game.Clans>>();
            foreach (Conquer_Online_Server.Game.Clans clans in Scores.Values)
            {
                if (Kernel.ServerClans.ContainsKey(clans.ClanId))
                {
                    if (source.ContainsKey(clans.WarScore))
                    {
                        source[clans.WarScore].Values.Add(clans.ClanId, clans);
                    }
                    else
                    {
                        source.Add(clans.WarScore, new SortEntry<uint, Conquer_Online_Server.Game.Clans>());
                        source[clans.WarScore].Values = new Dictionary<uint, Conquer_Online_Server.Game.Clans>();
                        source[clans.WarScore].Values.Add(clans.ClanId, clans);
                    }
                }
            }
            int num = 0;
            foreach (KeyValuePair<uint, SortEntry<uint, Conquer_Online_Server.Game.Clans>> pair in source.Reverse<KeyValuePair<uint, SortEntry<uint, Conquer_Online_Server.Game.Clans>>>())
            {
                foreach (Conquer_Online_Server.Game.Clans clans in pair.Value.Values.Values)
                {
                    if (num == 0)
                    {
                        winner = clans;
                    }
                    object[] objArray = new object[] { "No  ", (num + 1).ToString(), ": ", clans.ClanName, "(", pair.Key, ")" };
                    string str2 = string.Concat(objArray);
                    list.Add(str2);
                    num++;
                    if (num == 4)
                    {
                        break;
                    }
                }
                if (num == 4)
                {
                    break;
                }
            }
            changed = false;
            scoreMessages = list.ToArray();
        }

        public static void Start()
        {
            Scores = new SafeDictionary<uint, Conquer_Online_Server.Game.Clans>(100);
            StartTime = DateTime.Now;
            Kernel.SendWorldMessage(new Message("Clan war has began!", System.Drawing.Color.Red, 0x7db), Kernel.GamePool.Values);
            FirstRound = true;
            IsWar = true;
        }

        public static void UpdatePole(SobNpcSpawn ClanFlag)
        {
            new Database.MySqlCommand(Conquer_Online_Server.Database.MySqlCommandType.UPDATE)
            .Update("sobnpcs").Set("name", ClanFlag.Name)
            .Set("life", (long)ClanFlag.Hitpoints).Where("id", (long)ClanFlag.UID).Execute();
        }
    }
}
01/04/2013 05:15 amr69940#2
very good:mofo:
01/05/2013 15:21 zoro7070#3
can anyone help with that