كونكر عرب

كونكر عرب (https://conquer-arab.com/index.php)
-   تطوير سيرفرات كونكر (https://conquer-arab.com/forumdisplay.php?f=11)
-   -   MsgBossHarmRanking For Source Alex Any Version (https://conquer-arab.com/showthread.php?t=5961)

Uchiha T3Alo 2020-08-27 04:15 AM

MsgBossHarmRanking For Source Alex Any Version
 
بسم الله الرحمن الرحيم وبه نستعين على الصراط المستقيم


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


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


كود PHP:

MsgBossHarmRanking 

هترمى فيه الكلام الى ملهوش لازمه ده


كود PHP:

using ProtoBuf;

namespace 
GameServer.Game.MsgServer
{
    public static 
unsafe partial class MsgBuilder
    
{
        public static 
unsafe ServerSockets.Packet CreateBossHarmRankList(this ServerSockets.Packet stream, MsgBossHarmRankingProto obj)
        {
            
stream.InitWriter();
            
stream.ProtoBufferSerialize(obj);
            
stream.Finalize(GamePackets.MsgBossHarmRanking);
            return 
stream;
        }
    }
    [
ProtoContract]
    public 
struct MsgBossHarmRankingProto
    
{
        [
ProtoMember(1, IsRequired = true)]
        public 
byte Type;
        [
ProtoMember(2, IsRequired = true)]
        public 
uint BossUID;
        [
ProtoMember(3, IsRequired = true)]
        public 
Hunter[] Hunters;
    }
    [
ProtoContract]
    public class 
Hunter
    
{
        [
ProtoMember(1, IsRequired = true)]
        public 
uint Rank;
        [
ProtoMember(2, IsRequired = true)]
        public 
uint ServerID;
        [
ProtoMember(3, IsRequired = true)]
        public 
uint UID;
        [
ProtoMember(4, IsRequired = true)]
        public 
string Name;
        [
ProtoMember(5, IsRequired = true)]
        public 
uint Damage;
    }
} 

ما تنساش تغير الاسم بتاع البروجكت من GameServer الى Project_Terror_v2 تمام


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


كود PHP:

public Dictionary<uint, Hunter> Hunters = new Dictionary<uint, Hunter>(); 

وتنزل تحت كدا وترمى الفويد ده فى اى حته


كود PHP:

   public void SendScore(ServerSockets.Packet stream, Client.GameClient killer, uint Damage)
        {
            try
            {
                if (!
Program.RankableFamilyIds.Contains(Family.ID))
                    return;
                if (
Hunters == null)
                    
Hunters = new Dictionary<uint, Hunter>();
                if (
Hunters.ContainsKey(killer.Player.UID))
                {
                    
Hunters[killer.Player.UID].Damage += Damage;
                }
                else if (!
Hunters.ContainsKey(killer.Player.UID))
                {
                    
Hunters.Add(killer.Player.UID, new Hunter() { UID = killer.Player.UID, Damage = Damage, Rank = 0, Name = killer.Player.Name, ServerID = killer.Player.ServerID });
                }
                if (
Hunters.Count == 0)
                    return;
                var array = 
this.Hunters.Values.OrderByDescending(p => p.Damage).ToArray();
                for (
int x = 0; x < array.Length; x++)
                {
                    array[
x].Rank = (uint)(x + 1);
                }
                
MsgServer.MsgBossHarmRankingProto Rank = new MsgServer.MsgBossHarmRankingProto();
                
Rank.BossUID = Family.ID;
                
Rank.Type = 1;
                
Rank.Hunters = array;
                
Send(stream.CreateBossHarmRankList(Rank));
                array = 
null;
            }
            catch (
Exception ex)
            {
                
MyConsole.WriteException(ex);
                
MyConsole.SaveException(ex);
            }
        } 

كدا مافيش اى مشاكل غير ليسته جاميلة تحط فيها كل اى دى الوحوش الكبيره الى حابب الرنك يشتغل فيها


كود PHP:

  public static List<uint> RankableFamilyIds = new List<uint>() { 20300, 20160, 20070, 29370, 29360, 29300, 29363, 3976 }; 

كدا الرنك اضافته خلصت


حته تحنيكه منى كدا للناس المحنكه الى بتحب تشغل دماغها هتقولى افرض دلوقتى يا تع تع يا محنك انا عاوز ادى جوايز لاول 3 فى الرنكات ايه الدنيا هقولك يا صديقى المحنك شديد الحناكه هتروح عند اى وحش انت حاطه فى الليست بتاعت الوحوش وتعمل الكود ده وهشرحهولك


كود PHP:

    var array = Hunters.Values.OrderBy(p => p.Damage).Take(3).ToArray();
                            for (
int x = 0, y = 3; x < array.Length; x++, y--)
                            {
                                if (
x > array.Length)
                                    break;
                                
Database.Server.GamePoll[array[x].UID].Player.ConquerPoints += (uint)(y * 1000);
                            }
                            
uint Score = Hunters.ContainsKey(killer.Player.UID) == true ? Hunters[killer.Player.UID].Damage : 0;
                            
Hunters.Clear(); 


var array = Hunters.Values.OrderBy(p => p.Damage).Take(3).ToArray(); هنا انا بعمل فريبول اسمه مصفوفه وبطلب من الديكشنرى الى اسمها هانتر الى عملنها فوق انها ترتب الديكشنرى من حيث اعلى الدمج وتاخد 3 من الناس دول الى هما اول 3 بعد كدا بتبعتها


for (int x = 0, y = 3; x < array.Length; x++, y--)
{
if (x > array.Length)
break;
Database.Server.GamePoll[array[x].UID].Player.ConquerPoints += (uint)(y * 1000);
} هنا فور لوب وعملنا فريبول اسمه x وقولنا ان اكس ب0 وعوضنا عن فريبول y بتساوى 3 وقولنا ان ان المتغير اكس اخره الرقم الى حددناه فوق الى هو ال3 تمام ولو عملنا ان x<3 هيمشى عادى بس الاحسن تعمل السطر بتاع المصفوفه علشان ما تتلخفنش بعد كد قولنا ان يزود قيمه اكس بمقدار 1 الى هو ++ وينقص قيمه المتغير y بمقدر 1 الى هو -- تمام لغيت هنا وبعد كدا بنقول ان لو اكس قيمته اكبر من عدد المصفوفه يحصل بريك ويلغيها وبعد كدا كود الجوايز بقا الى تحت خالص الى هو قمنا باستدعاء المصفوفه الى عملنها فوق وشرطنا ان المصفوفه قيمتها تكون من اكس وربطنها بالميمبر uid وحددنا الجايزه سى بى وضربنا السى بى ده فى عدد القيم الى اختارنها من المصفوفه الى هما فى الاصل 3 وضربنهم فى 1000


uint Score = Hunters.ContainsKey(killer.Player.UID) == true ? Hunters[killer.Player.UID].Damage : 0;
Hunters.Clear(); هنا كل الحوار اننا عملنا متغير اسمه اسكور وعملين الكودين دول علشان يمسح الاسكور نفسه الى يخص الوحش علشان حضرتك ما تلبسش ان الوحش يفضل يضاعف الجوايز بسبب ان حضرتك نسيت تمسح القيم بعد ما يستلموا علشان ما يحصلش اى ثغره



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

ElSaher 2020-08-27 04:19 AM

رد: MsgBossHarmRanking For Source Alex Any Version
 
جميل جدا يا قلبي تسلم ايدك

neno2052 2020-08-27 04:39 AM

رد: MsgBossHarmRanking For Source Alex Any Version
 
thanks

Hazem 2020-08-27 09:37 AM

رد: MsgBossHarmRanking For Source Alex Any Version
 
عاش والله ياحوده تسلم ايدك

waelsoliman 2020-08-27 11:10 AM

رد: MsgBossHarmRanking For Source Alex Any Version
 
عاش انا مبستخدمش اليكس بس لازم اشجعك انك نزلت حاجه نضيفة وبتفيد الناس عاش فعلا

neno2052 2020-08-27 12:08 PM

رد: MsgBossHarmRanking For Source Alex Any Version
 
رقم الباكت لان مش موجود عندي بنفس الاسم في الجيم باكتس بعد ازنك ؟

Uchiha T3Alo 2020-08-27 12:19 PM

رد: MsgBossHarmRanking For Source Alex Any Version
 
اقتباس:

المشاركة الأصلية كتبت بواسطة neno2052 (المشاركة 57894)
رقم الباكت لان مش موجود عندي بنفس الاسم في الجيم باكتس بعد ازنك ؟

اتفضل يا حج نادر الرقم قديم 1044 وفى الجديد رقموا 2001 اى حاجه تانى يا حج نادر ؟

Lucifer 2020-08-27 12:24 PM

رد: MsgBossHarmRanking For Source Alex Any Version
 
عاش

abdohazem96 2020-08-27 01:22 PM

رد: MsgBossHarmRanking For Source Alex Any Version
 
مش شغالة 2دي

Uchiha T3Alo 2020-08-27 01:42 PM

رد: MsgBossHarmRanking For Source Alex Any Version
 
اقتباس:

المشاركة الأصلية كتبت بواسطة abdohazem96 (المشاركة 57901)
مش شغالة 2دي

هو ايه الى مش شغاله تو دى ؟ حضرتك الباكت ده يشتغل فى اى نسخه التو دى ولا الثرى دى العادى ولا حته البروتو ازاى مش شغال ولا انت بتسال ؟!


الساعة الآن 01:52 PM

مرحبا بكم في منتدي اكواد لتطوير الالعاب
new notificatio by 9adq_ala7sas