عرض مشاركة واحدة
احصائياتى

الردود
2

المشاهدات
2567
 
محمد ياسر

محمد ياسر is on a distinguished road

    غير متواجد

المشاركات
1,940

+التقييم
0.86

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

الاقامة
https://www.facebook.com/daany

نظام التشغيل

رقم العضوية
1
2019-07-11, 10:03 AM
المشاركة 1 
#1  
افتراضي ضيف رنك الوحش في سيرفيرك

السلام عليكم ورحمة الله وبركاته
معانا اليوم اضافة رنك الوحش في السيرفير صوره علشان نفهم

اعمل كلاس جديد باسم MsgBossHarmRanking.cs
وحط فيه الاكواد ده

كود:
using ProtoBuf;
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Collections.Concurrent;
using System.Text;
using VirusX;
using VirusX.Database;
using System.Threading.Tasks;
 
namespace 
VirusX.Network.GamePackets
{
    public class 
MsgBossHarmRanking
    
{
        public 
MsgBossHarmRanking() { }
        public 
MsgBossHarmRankingProto Info;
        [
ProtoContract]
        public class 
MsgBossHarmRankingProto
        
{
            [
ProtoMember(1IsRequired true)]
            public 
uint Type;
            [
ProtoMember(2IsRequired true)]
            public 
uint BossUID;
            [
ProtoMember(3IsRequired true)]
            public 
Hunter[] Hunters;
        }
        [
ProtoContract]
        public class 
Hunter
        
{
            [
ProtoMember(1IsRequired true)]
            public 
uint Rank;
            [
ProtoMember(2IsRequired true)]
            public 
uint ServerID;
            [
ProtoMember(3IsRequired true)]
            public 
uint UID;
            [
ProtoMember(4IsRequired true)]
            public 
string Name;
            [
ProtoMember(5IsRequired true)]
            public 
uint Damage;
        }
        public 
bool Read(byte[] packet)
        {
            
using (var memoryStream = new MemoryStream(packet))
            {
                
Info Serializer.DeserializeWithLengthPrefix<MsgBossHarmRankingProto>(memoryStreamPrefixStyle.Fixed32);
            }
            return 
true;
        }
        public 
void Ready(VirusX.Client.GameState client)
        {
            var 
proto = new MsgBossHarmRankingProto();
            
proto.BossUID Info.BossUID;
            
proto.Type 1;
            
/* var scores = client.Map.Entities.Where(i => i.Key == proto.BossUID).FirstOrDefault().Value.MonsterInfo.Score.OrderByDescending(i => i.Value).ToArray();
             if (scores.Length != 0)
             {
                 proto.Hunters = new Hunter[scores.Length];
                 for (int i = 0; i < proto.Hunters.Length; i++)
                 {
                     proto.Hunters[i] = new Hunter();
                     proto.Hunters[i].UID = scores[i].Key.UID;
                     proto.Hunters[i].Name = scores[i].Key.Name;
                     proto.Hunters[i].Damage = scores[i].Value;
                     proto.Hunters[i].ServerID = scores[i].Key.ServerID;
                     proto.Hunters[i].Rank = (uint)(i + 1);
                 }
             } */
            
client.Send(Kernel.FinalizeProtoBuf(proto1044));
            
//client.Send(Kernel.FinalizeProtoBuf(Info, 3282));
        
}
        public 
void Handle(VirusX.Client.GameState client)
        {
            switch (
Info.Type)
            {
                case 
0:
                    {
                        var 
proto = new MsgBossHarmRankingProto();
                        
proto.BossUID Info.BossUID;
                        
proto.Type 1;
                        var 
scores client.Map.Entities.Where(=> i.Key == proto.BossUID).FirstOrDefault().Value.MonsterInfo.Score.OrderByDescending(=> i.Value).ToArray();
                        if (
scores.Length != 0)
                        {
                            
proto.Hunters = new Hunter[scores.Length];
                            for (
int i 0proto.Hunters.Lengthi++)
                            {
                                
proto.Hunters[i] = new Hunter();
                                
proto.Hunters[i].UID scores[i].Key.UID;
                                
proto.Hunters[i].Name scores[i].Key.Name;
                                
proto.Hunters[i].Damage scores[i].Value;
                                
proto.Hunters[i].ServerID scores[i].Key.ServerID;
                                
proto.Hunters[i].Rank = (uint)(1);
                            }
                        }
                        
client.Send(Kernel.FinalizeProtoBuf(proto1044));
                        break;
                    }
            }
        }
    }


متنساش تغير كلمه VirusX بإسم الكلاس بتاعك
طبعا هايجيب إيرور ف كلمه Score هنقوم رايحين علي MonsterTable.cs و نضيف الكود ده


كود:
        public Dictionary<Game.EntityuintScore = new Dictionary<Game.Entityuint>(); 

و بكده الإريور هايروح تمام نضيف بقي الباكت نروح ع الPacketHandler.cs و نضيف ده

كود:
 #region MsgBossHarmRanking
                
case 1044:
                    {
                        var 
pkt = new VirusX.Network.GamePackets.MsgBossHarmRanking();
                        var 
myPacket = new byte[packet.Length 8];
                        for (
int i 0myPacket.Lengthi++)
                        {
                            
myPacket[i] = packet[i];
                        }
                        if (
pkt.Read(myPacket))
                            
pkt.Handle(client);
                        break;
                    }
                
#endregion 

تمام أخر حاجه بقي عشان الرانك يشتغل تمام هنروح ع Monster.cs و نضيف الكود ده

كود:
#region Monster Score
            
if (monster.EntityFlag == EntityFlag.Monster)
            {
                
//if (attacked.Boss > 0)
                
{
                    if (
monster.MonsterInfo != null)
                    {
                        if (
monster.MonsterInfo.Score.ContainsKey(client.Entity))
                            
monster.MonsterInfo.Score[client.Entity] += obj.Damage;
                        else 
monster.MonsterInfo.Score.Add(client.Entityobj.Damage);
 
                        
//new VirusX.Network.GamePackets.MsgBossHarmRanking().Ready(attacker.Owner);
                    
}
                }
            }
            
#endregion 

الاضافه من الاخ VirusX