الموضوع: KingsWar By Mr.khled
عرض مشاركة واحدة
احصائياتى

الردود
13

المشاهدات
2398
 
SourceDanger
.:: عضو نشيط ::.

SourceDanger is on a distinguished road

    غير متواجد

المشاركات
237

+التقييم
0.13

تاريخ التسجيل
Apr 2019

الاقامة

نظام التشغيل

رقم العضوية
111
2020-02-19, 01:43 PM
المشاركة 1
افتراضي KingsWar By Mr.khled
مبدائيا نصلي على حضرت النبي

انا كنت قايل اني هنزل المسابقه هنا وانا لم بقول بعمل علطول

الحمد الله انا مش بى ابص لى اي شئ حتها لو كبير لانو بختصار الدنيا فنيه

يالا نبداء موضعنا بقا على بركه الله

اول حاجه شرح المسابقه علشان الى معندهوش فكره عنها






جميل جدا نخش بقا على التركيب

دة شرح التركيب كامل !! يالا علشان خاطر محدش يتعب نفسو فى حاجه انا عملتلكو ولله شرح جميل قوي مده 17 دقيقه بس هتستفيدو منو قوي






اول شئ نصلي على حضرت النبي

اول شئ هنعمل كلاس جديد باسم

KingsWar.cs


كود:
using Conquer_Online_Server.Network.GamePackets;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 
Conquer_Online_Server.Events
{
    public class 
KingsWar
    
{
        public static 
System.DateTime StartTime;
        public static 
Time32 ScoreSendStamp;
        public static 
int StartHour 18StartMinute 00EndMinute 30;
        public static 
bool IsWar false;
        public static 
bool FirstRound false;
        public static 
bool Claim
        
{
            
get { return Program.Vars["KingsWarClaim"]; }
            
set Program.Vars["KingsWarClaim"] = value; }
        }
        public static 
uint KeeperID
        
{
            
get { return Program.Vars["KingsWarID"]; }
            
set Program.Vars["KingsWarID"] = value; }
        }
        public static 
SobNpcSpawn Pole;
        public static 
Client.GameState PoleKeeperCurrentTop;
        private static 
bool changed false;
        private static 
string[] scoreMessages;
        public static 
SafeDictionary<uintClient.GameStateScores = new SafeDictionary<uintClient.GameState>();
        public static 
void Initiate()
        {
            var 
Map Kernel.Maps[1500];
            
Pole = (SobNpcSpawn)Map.Npcs[1500];
        }
        public static 
void Start()
        {
            
StartTime System.DateTime.Now;
            
Scores = new SafeDictionary<uintClient.GameState>(100);
            
Pole.Hitpoints Pole.MaxHitpoints;
            
Kernel.SendWorldMessage(new Message("KingsWar war has began!"System.Drawing.Color.RedMessage.Center), Program.Values);
            
FirstRound true;
            foreach (var 
Client in Kernel.GamePool.Values)
            {
                
Client.KingsWarScore 0;
            }
            
Claim false;
            
IsWar true;
            foreach (var 
client in Program.Values)
                
client.MessageBox("KingsWar has started. JOIN NOW ?",
                          (
p) => { p.Player.Teleport(1002301160); }, null60);
        }
        public static 
void End()
        {
            if (
PoleKeeper != null)
            {
                
Kernel.SendWorldMessage(new Message(PoleKeeper.Player.Name " has won KingsWar!---KingsWar has ended! Go clime Your Prize"System.Drawing.Color.WhiteMessage.Center), Program.Values);
            }
            else
            {
                
Kernel.SendWorldMessage(new Message("KingsWar has ended and there was no winner!"System.Drawing.Color.RedMessage.Center), Program.Values);
            }
            
IsWar false;
            
Claim true;
        }
        public static 
void Reset()
        {
            
Scores = new SafeDictionary<uintClient.GameState>(100);
            
Pole.MaxHitpoints Pole.MaxHitpoints;
            
Pole.Hitpoints Pole.MaxHitpoints;
            foreach (var 
Client in Kernel.GamePool.Values)
            {
                
Client.KingsWarScore 0;
            }
            
IsWar true;
        }
        public static 
void FinishRound()
        {
            
FirstRound false;
            
SortScores(out PoleKeeper);
            if (
PoleKeeper != null)
            {
                
KeeperID PoleKeeper.Player.UID;
                
Kernel.SendWorldMessage(new Message(PoleKeeper.Player.Name ", has won this KingWar Round!"System.Drawing.Color.RedMessage.Center), Program.Values);
                
Pole.Name PoleKeeper.Player.Name;
            }
            
Pole.MaxHitpoints Pole.MaxHitpoints;
            
Pole.Hitpoints Pole.MaxHitpoints;
            
Kernel.SendWorldMessage(PoleProgram.Values, (ushort)1500);
            
Reset();
        }
        public static 
void AddScore(uint addScoreClient.GameState client)
        {
            if (
client != null)
            {
                
client.KingsWarScore += addScore;
                
changed true;
                if (!
Scores.ContainsKey(client.Player.UID))
                    
Scores.Add(client.Player.UIDclient);
                if ((int)
Pole.Hitpoints <= 0)
                {
                    
FinishRound();
                    return;
                }
            }
        }
        public static 
void SendScores()
        {
            if (
scoreMessages == null)
                
scoreMessages = new string[0];
            if (
Scores.Count == 0) return;
            if (
changed)
                
SortScores(out CurrentTop);
            for (
int c 0scoreMessages.Lengthc++)
            {
                
Message msg = new Message(scoreMessages[c], System.Drawing.Color.Red== Message.FirstRightCorner Message.ContinueRightCorner);
                
Kernel.SendWorldMessage(msgProgram.Values, (ushort)1500);
            }
        }
        private static 
void SortScores(out Client.GameState winner)
        {
            
winner null;
            List<
stringret = new List<string>();

            
int Place 0;
            foreach (var 
client in Scores.Values.OrderByDescending((p) => p.KingsWarScore))
            {
                if (
Place == 0)
                    
winner client;
                
string str "No  " + (Place 1).ToString() + ": " client.Player.Name "(" client.KingsWarScore ")";
                
ret.Add(str);
                
Place++;
                if (
Place == 4)
                    break;
            }

            
changed false;
            
scoreMessages ret.ToArray();
        }
    }


ونضيفو بالشكل دة

بعد كدا

هتغير طبعا اسم البروجكت شوف مثلان انت عندك اسمو اي وهتضيفو زي عندي


كود:
Conquer_Online_Server 

هتخليه اسم البروجكت بتاعك

جميل جدا بعد كدا هنخش على Handle

هنبحث عن

كود:
public static void ReceiveAttack(Game.Entity attackerSobNpcSpawn 

هتنزل تحت شوية

وهتضيف الكود دة

كود:
     #region KingsWar
            
if (Events.KingsWar.IsWar)
            {
                if (
attacker.MapID == 1500)
                {
                    if (
attacked.UID == 1500)
                    {
                        if (
Events.KingsWar.PoleKeeper != null)
                        {
                            if (
Events.KingsWar.PoleKeeper.Player.UID == attacker.UID)
                            {
                                return;
                            }
                        }
                        if (
attacked.Hitpoints <= damage)
                        {
                            
attacked.Hitpoints 0;
                        }
                        
Events.KingsWar.AddScore(damageattacker.Owner);
                    }
                }
            }
            
#endregion 

بعد كدا هنضيف الاني بى سى دة


كود:
  #region InNpc
                    
case 15000:
                        {
                            switch (
npcRequest.OptionID)
                            {
                                case 
0:
                                    {
                                        
dialog.Text("Kings war starts at xx:20. Inside your nobility rank will be promoted to be king and all the players will be equivalent. You'll have the chace of beating up your rivals.");
                                        
dialog.Option("Lemme in."1);
                                        if (
Events.KingsWar.KeeperID != 0)
                                        {
                                            if (
Events.KingsWar.KeeperID == client.Player.UID)
                                            {
                                                
dialog.Option("Lemme claim."2);
                                            }
                                        }
                                        
dialog.Option("Later."255);
                                        
dialog.Send();
                                        break;
                                    }
                                case 
1:
                                    {
                                        if (
Events.KingsWar.IsWar)
                                        {
                                            
client.Player.Teleport(1500141134);
                                        }
                                        else
                                        {
                                            
dialog.Text("The War hasn't started yet it starts at (00:20)");
                                            
dialog.Send();
                                        }
                                        break;
                                    }
                                case 
2:
                                    {
                                        if (
Events.KingsWar.Claim == true)
                                        {
                                            
Events.KingsWar.Claim false;
                                            
client.Player.ConquerPoints += 5000000;
                                            
client.Player.Money += 5000000;
                                            
uint random = (ushort)Conquer_Online_Server.Kernel.Random.Next(1300);
                                            
client.ChampionPoints += random;
                                            
//client.Inventory.Add(723720, 0, 1);
                                            
client.Player.AddTopStatus((ulong)Conquer_Online_Server.Network.GamePackets.Update.Flags3.jaspr3DateTime.Now.AddHours(1));
                                            
Kernel.SendWorldMessage(new Message(client.Player.Name " has won [" random "]Champion points . From KingsWar ! and Got 5m [Cps-Gold]"System.Drawing.Color.WhiteMessage.Center), Program.Values);
                                            
//client.Inventory.Add(3009003, 0, 1);
                                            //client.Inventory.Add(3009003, 0, 1);
                                            //client.Inventory.Add(3009003, 0, 1);
                                        
}
                                        else
                                        {
                                            
dialog.Text("You already claimed your prize");
                                            
dialog.Send();
                                        }
                                        break;
                                    }
                            }
                            break;
                        }
                    
#endregion 

بعد كدا هنخش على

World.cs

وهنبحث عن


كود:
private void BuffersCallback(GameState clientint time


هننزل تحت شوية لحد الكود دة كدا

بعد كدا هنضيف الكود دة


كود:
 #region KingsWar
            
if (client.Player.MapID == 1500)
            {
                if (
client.Player.NobilityRank != NobilityRank.King)
                {
                    
client.TempNobilityInformation = new NobilityInformation();
                    
client.TempNobilityInformation.Rank client.NobilityInformation.Rank;
                    
client.NobilityInformation.Rank NobilityRank.King;
                    
NobilityInfo update = new NobilityInfo(true);
                    
update.Type NobilityInfo.Icon;
                    
update.dwParam client.Player.UID;
                    
update.UpdateString(client.NobilityInformation);
                    
client.SendScreen(updatetrue);
                    
client.Player.NobilityRank client.NobilityInformation.Rank;
                }
            }
            else
            {
                if (
client.TempNobilityInformation != null)
                {
                    
client.NobilityInformation.Rank client.TempNobilityInformation.Rank;
                    
NobilityInfo update = new NobilityInfo(true);
                    
update.Type NobilityInfo.Icon;
                    
update.dwParam client.Player.UID;
                    
update.UpdateString(client.NobilityInformation);
                    
client.SendScreen(updatetrue);
                    
client.Player.NobilityRank client.NobilityInformation.Rank;
                    
client.TempNobilityInformation null;
                }
            }
            if (
client.Player.MapID == 1500)
            {
                if (
Events.KingsWar.IsWar == false)
                {
                    
client.Player.Teleport(1002299285);
                }
            }
            
#endregion 

بعد كدا هننزل على

كود:
private void WorldTournaments(int time

ونضيف الرساله علشان لم يشتغل التوب


كود:
            #region KingsWar[xx:20 - xx:40]

            
if (Events.KingsWar.IsWar)
            {
                if (
Time32.Now Events.KingsWar.ScoreSendStamp.AddSeconds(57))
                {
                    
Events.KingsWar.ScoreSendStamp Time32.Now;
                    
Events.KingsWar.SendScores();
                }
            }
            if (
Now64.Minute == 25 && !Events.KingsWar.IsWar)
            {
                
Events.KingsWar.Start();
            }
            if (
Events.KingsWar.IsWar)
            {
                if (
Now64.Minute == 40 && Events.KingsWar.IsWar)
                    
Events.KingsWar.End();
            }

            
#endregion 

في Program

هتبحث عن



كود:
if (DMaps.LoadMap(1038)) 

هتضيف تحت

كود:
Game.Guildwar 

الكود دة

كود:
  if (DMaps.LoadMap(1500))
                
Events.KingsWar.Initiate(); 

بس بكدا نكون انتيها وطبعا علشان مننسيش هنضيف الاني بى سي فى نافي كات


هنفتح Npcs ونضيف بقا الكود

طبعا هنا بيقولك علشان اسم البروجكيت !!

طبعا دة كود توب ملهوش لازمه

فا احنا هنقفل عليه

برضو دة هنشيلو ملهوش لازمه

تمم قوي

بعد كدا هنخش على GameState.cs

او ممكن تكون عندك فى سورسك GameClient.cs
المهمه بعد كدا هننزل تحت خلص

كود:
   public uint KingsWarScore;
        public 
Game.ConquerStructures.NobilityInformation TempNobilityInformation

هنضيفو تحت اي كود هنا !!

كدا تمم بعد كدا بقا

هنحل الايرورات التافه دي !!

طبعا لو ما اتحلتش حتها بعد الحل دة

بختصار هنعمل كدا _^_

بس كدا !!

يعني انت هتضيف اسم البروجكت بتعاك بس مش كدا :*

كدا تم الانتهاء من الاضافه

دة كود الفلوس

اول حاجه نحط ايدي

وبعد كدا الاسم

التب 2

طبعا ناس هتسائل ليه ال تب 2 علشان خاطر دة Npc لو مثلان

شوب هيبقا بدل 2 1

وكدا يعني ^_^

زي Shoping Mail كدا

اللوك فيس اي لوك يعجبك

مش كميه

هنا هنضيف في التون ستي

بعد كدا الارقام فى التون

انا هحط مثلان

كدا كدا دة تجربه !! يعني

نجرب كدا بقا !!

طبعا لو حصل ايرور زي دة انا بعتذر فيه شئ نسيت اضيفو فى القاعده

هنخش على SobNpcs

وهنضيف الايدي بتاع البوله

1500 بعد كدا اسم البوله KingsWar بعد كدا التب 10

10

وبعد كدا Look face 1137

بعد كدا ايدي المابه

كود:
84

99

5000000 


دة هلس العمود

نجرب بقا نفتح تاني ^ كدا

جميل جدا

نفتح بقا العبه

ونشوف كدا !!

اسف فى التطويل

بس دة شرح مفصل

ما علينا بعد كدا هنفتح التوب بتعنا :*

طبعا كنت هنسها حاجه مهمه اقولكم عليه

لم تنزلو الاني بى سى فى التون طبعا انتو عايزنا الرساله توصلكو فى وش الراجل

هنروح على الكود دة

هنعدل هنا هنكتب الارقام الى هي زي كدا

نجرب كدا بقا

هنفتح التوب من جديد علشان نشوف كدا !!



زي ما انتو شايفين كدا

اه جبنا فى وش الراجل

نخش بقا التوب

طبعا انا مش كنج فا من الطبيعي اني مش هعرف اضرب العمود ^_^

مش قصه يعني

قصدي انا اكونتي نوب

هلبس اسطفه

طبعا زي ما انتو شايفين كدا المهمه شغاله هنقفل التوب علشنا نشوف الجايزه بتعتنا

طبعا زي ما قولت فوق لو عايز تزبط السباس هتعدلو من ConquerPoints

بس كدا

واسف لو اطلت فى الشرح بس دة هيفيدكو كثير قوي

ونسيت انوها على شئ لو حصل وجبلك مشكله فى كلمه .Player.

هتخليه .Entity.

بس كدا على حساب يعني السورس بتعاك علشان محدش يجي يقولي انا مقولتهلوش حاجه

:* يالا اشوف وشكو بخير فى شروحات تانيه وسلام عليكم ورحمه الله وبركاته

كان معاكو خالد محمد


ودة التكسيت الى فيه اضافه التوب

عفواً لايمكن عرض الرابط إلا بعد الرد على الموضوع

مش طلب غير انو كل الناس تفيد غيرها يعني استفيد وفيد غيرك وخير الناس انفعهم للناس متبصوش لى العاب ولا سورسات كلوها ريح وشكرا