عرض مشاركة واحدة
قديم 2019-08-09, 03:37 PM
المشاركة 7
Adel Abd El Hay
.:: عضو نشيط ::.
  • غير متواجد
افتراضي رد: شرح تغير مكان التمثال لكويسته بطل السيرفر (Hero of Game)
السطر دا مش موجود عندي ف كلاس statue ولا ف السورس مع ان الحرب شغاله عادي ودا كل اللي موجود ف كلاس statue

كود:
using System;
using MoDY.Network.GamePackets;
using System.Collections.Concurrent;

namespace 
MoDY.Game
{
    public 
unsafe class Statue : Network.Writer
    
{
        public static 
ConcurrentDictionary<uint, Statue> Statues = new ConcurrentDictionary<uint, Statue>();
        public 
byte[] SpawnPacket = null;
        public 
uint UID;
        public 
Statue(byte[] array)
        {
            
UID = 105175;
            
SpawnPacket = new byte[array.Length];
            for (
ushort x = 0; x < array.Length; x++)
                
SpawnPacket[x] = array[x];
            
WriteByte(0, MsgPlayer.Facing, SpawnPacket);
            
WriteUInt32(0, MsgPlayer.Action, SpawnPacket);
            
WriteUInt16(1000, MsgPlayer.GuildRank, SpawnPacket);
            
WriteUInt32(105175, MsgPlayer.UID, SpawnPacket);
            
WriteUInt64(0, MsgPlayer.StatusFlag, SpawnPacket);
            
WriteUInt64(0, MsgPlayer.StatusFlag2, SpawnPacket);
            
WriteUInt64(0, MsgPlayer.StatusFlag3, SpawnPacket);
            
WriteUInt32(0, MsgPlayer.Hitpoints, SpawnPacket);
            
WriteUInt32(0, MsgPlayer.GuildID, SpawnPacket);
            
X = 328;
            
Y = 304;
            if (array.
Length > 200)
            {
                if (!
Statues.ContainsKey(105175))
                    
Statues.TryAdd(105175, this);
                else
                {
                    
Statues[105175] = this;
                }
            }
            foreach (var 
client in Kernel.GamePool.Values)
            {
                if (
Kernel.GetDistance(X, Y, client.Player.X, client.Player.Y) < 16 && client.Player.MapID == 1002)
                {
                    
client.Send(this.SpawnPacket);
                }
            }
        }
        
ushort _x, _y;
        public 
ushort X
        
{
            
get { return _x; }
            
set
            
{
                
_x = value;
                
WriteUInt16(value, MsgPlayer.X, SpawnPacket);
            }
        }
        public 
ushort Y
        
{
            
get { return _y; }
            
set
            
{
                
_y = value;
                
WriteUInt16(value, MsgPlayer.Y, SpawnPacket);
            }
        }
        public static 
bool operator >(Statue statue, Client.GameState client)
        {
            if (!
client.Screen.Statue.ContainsKey(statue.UID))
            {
                if (
Kernel.GetDistance(statue.X, statue.Y, client.Player.X, client.Player.Y) < 16 && client.Player.MapID == 1002)
                {
                    if (
statue.SpawnPacket.Length > 200)
                    {
                        
client.Send(statue.SpawnPacket);
                        return 
true;
                    }
                }
            }
            return 
false;
        }
        public static 
bool operator <(Statue statue, Client.GameState client)
        {
            if (
Kernel.GetDistance(statue.X, statue.Y, client.Player.X, client.Player.Y) >= 16 && client.Player.MapID == 1002)
            {
                return 
true;
            }
            return 
false;
        }
    }
}