عرض مشاركة واحدة
قديم 2020-04-20, 09:48 PM
المشاركة 3
AliNasser
.:: عضو مميز ::.
  • غير متواجد
افتراضي رد: مشكله في سورس سلاير المنزلو ميدو عزوز
دورت في سكرين كلو مش عارف المشكله منين


كود:
using System;
using System.Linq;
using MohamedAyman.Client;
using System.Threading;
using System.Diagnostics;
using MohamedAyman.Interfaces;
using System.Threading.Generic;
using System.Collections.Generic;
using MohamedAyman.Network.GamePackets;
using System.Collections.Concurrent;
using MohamedAyman.Poker.Structures;

namespace 
MohamedAyman.Game
{
    public 
unsafe class Screen
    
{
        private static 
TimerRule<GameStateMonsterBuffersGuardsAliveMonstersItemsFloorSpells;
        public static 
void CreateTimerFactories()
        {
            
MonsterBuffers = new TimerRule<GameState>(monsterBuffersCallback500);
            
Guards = new TimerRule<GameState>(guardsCallback700);
            
AliveMonsters = new TimerRule<GameState>(aliveMonstersCallback500);
            
Items = new TimerRule<GameState>(itemsCallback1000);
            
FloorSpells = new TimerRule<GameState>(FloorSpellsCallBack100);
        }
        private static 
void FloorSpellsCallBack(GameState clientint time)
        {
            if (!
client.Socket.Alive)
            {
                
client.Screen.DisposeTimers();
                return;
            }
            if (
client.Entity == null) return;
            if (
client.Map == null) return;
            
Time32 Now = new Time32(time);
            if (
client.Entity.FloorSpells.Count != 0)
            {
                foreach (var 
ID in client.Entity.FloorSpells)
                {
                    switch (
ID.Key)
                    {

                        
#region Habilidad AuroraLotus
                        
case 12370://AuroraLouts:
                            
{
                                var 
spellclient ID.Value;
                                
Queue<Game.Attacking.FloorSpellRemoveSpells = new Queue<Game.Attacking.FloorSpell>();
                                foreach (var 
spell in spellclient.Spells)
                                {
                                    if (
spellclient.CheckInvocke(Nowspell))
                                    {
                                        
RemoveSpells.Enqueue(spell);
                                        
spellclient.CreateMsgSpell(100);
                                        var 
attack = new Attack(true);
                                        
attack.Attacker client.Entity.UID;
                                        
attack.AttackType Attack.Melee;
                                        foreach (
Interfaces.IMapObject _obj in client.Screen.Objects)
                                        {
                                            if (
_obj == null) continue;
                                            if (
_obj.MapObjType == MapObjectType.Player)
                                            {
                                                var 
attacked _obj as Entity;
                                                if (
Kernel.GetDistance(spell.FloorPacket.Xspell.FloorPacket.Yattacked.Xattacked.Y) <= 15)
                                                {
                                                    
attacked.BringToLifeLotus();

                                                }
                                            }
                                        }
                                        
spellclient.SendView(client);

                                        
spell.FloorPacket.Type FloorItem.RemoveEffect;
                                        
client.SendScreen(spell.FloorPackettrue);
                                    }
                                }
                                while (
RemoveSpells.Count 0)
                                    
spellclient.RemoveItem(RemoveSpells.Dequeue());
                                if (
spellclient.Spells.Count == 0)
                                {
                                    
Game.Attacking.FloorSpell.ClientFloorSpells FloorSpell;
                                    
client.Entity.FloorSpells.TryRemove(spellclient.DBSkill.IDout FloorSpell);
                                }
                                break;
                            }
                        
#endregion

                        #region Habilidad FlameLotus
                        
case 12380://FlameLouts:
                            
{
                                var 
spellclient ID.Value;
                                
Queue<Game.Attacking.FloorSpellRemoveSpells = new Queue<Game.Attacking.FloorSpell>();
                                foreach (var 
spell in spellclient.Spells)
                                {
                                    if (
spellclient.CheckInvocke(Nowspell))
                                    {
                                        
RemoveSpells.Enqueue(spell);
                                        
spellclient.CreateMsgSpell(100);
                                        var 
attack = new Attack(true);
                                        
attack.Attacker client.Entity.UID;
                                        
attack.AttackType Attack.Melee;
                                        foreach (
Interfaces.IMapObject _obj in client.Screen.Objects)
                                        {
                                            if (
_obj == null) continue;
                                            if (
_obj.MapObjType == MapObjectType.Monster)
                                            {
                                                var 
attacked _obj as Entity;
                                                if (
Kernel.GetDistance(spell.FloorPacket.Xspell.FloorPacket.Yattacked.Xattacked.Y) <= 15)
                                                {
                                                    if (!
Game.Attacking.Handle.CanAttack(client.Entityattackedspell.DBSkillfalse)) continue;
                                                    
attack.Effect Attack.AttackEffects.None;
                                                    
uint damage Game.Attacking.Calculate.Magic(client.Entityattackedspell.DBSkillref attack);
                                                    
attack.Damage damage 2;
                                                    
#region Ataque Montruos & Boss
                                                    /*   if (attacked.EntityFlag == EntityFlag.Boss)
                                                    {
                                                        damage = 1;
                                                    }*/
                                                    
if (attacked.EntityFlag == EntityFlag.Monster)
                                                    {
                                                        
damage = (damage 3);
                                                    }
                                                    
#endregion
                                                    
spellclient.SpellPacket.Effect attack.Effect;
                                                    
Game.Attacking.Handle.ReceiveAttack(client.Entityattackedattackref damagespell.DBSkill);
                                                    
spellclient.SpellPacket.AddTarget(attacked.UIDdamageattack);
                                                }
                                            }
                                            if (
_obj.MapObjType == MapObjectType.Player)
                                            {
                                                var 
attacked _obj as Entity;
                                                if (
Kernel.GetDistance(spell.FloorPacket.Xspell.FloorPacket.Yattacked.Xattacked.Y) <= 15)
                                                {
                                                    if (!
Game.Attacking.Handle.CanAttack(client.Entityattackedspell.DBSkillfalse)) continue;
                                                    
attack.Effect Attack.AttackEffects.None;
                                                    
uint damage Game.Attacking.Calculate.Magic(client.Entityattacked,spell.DBSkillref attack);
                                                    
attack.Damage damage 2;
                                                    
spellclient.SpellPacket.Effect attack.Effect;
                                                    
Game.Attacking.Handle.ReceiveAttack(client.Entityattackedattackref damagespell.DBSkill);
                                                    
spellclient.SpellPacket.AddTarget(attacked.UIDdamageattack);
                                                }
                                            }
                                        }
                                        
spellclient.SendView(client);

                                        
spell.FloorPacket.Type FloorItem.RemoveEffect;
                                        
client.SendScreen(spell.FloorPackettrue);
                                    }
                                }
                                while (
RemoveSpells.Count 0)
                                    
spellclient.RemoveItem(RemoveSpells.Dequeue());
                                if (
spellclient.Spells.Count == 0)
                                {
                                    
Game.Attacking.FloorSpell.ClientFloorSpells FloorSpell;
                                    
client.Entity.FloorSpells.TryRemove(spellclient.DBSkill.IDout FloorSpell);
                                }
                                break;
                            }
                        
#endregion

                    
}
                }
            }
            foreach (var 
Cloud in client.Map.Clouds.Values)
            {
                if (
Cloud == null) continue;
                if (
Kernel.GetDistance(Cloud.XCloud.Yclient.Entity.Xclient.Entity.Y) > 16) continue;
                if (
DateTime.Now Cloud.EndTime || Cloud.Owner == null)
                {
                    
Cloud.DisposeCloud(client);
                    return;
                }
                
#region ThunderCloud
                
if (!Cloud.Dead && Time32.Now Cloud.LastCloudAttack.AddSeconds(1))
                {
                    var 
spell Database.SpellTable.GetSpell(12970client);
                    
SpellUse suse = new SpellUse(true);
                    
////suse.Attacker = client.Player.Cloud.UID;
                    
suse.SpellID 13190;
                    
suse.SpellLevel 0;
                    
suse.client.Entity.Cloud.X;
                    
suse.client.Entity.Cloud.Y;
                    
Entity attacked null;
                    foreach (
Interfaces.IMapObject _obj in client.Screen.Objects)
                    {
                        if (
_obj == null) continue;
                        if (
_obj.MapObjType == MapObjectType.Monster )
                        {
                            
Cloud.LastCloudAttack Time32.Now;
                            
attacked _obj as Entity;
                            if (
Kernel.GetDistance(Cloud.XCloud.Yattacked.Xattacked.Y) <= 15)
                            {
                                
Attack attack = new Attack(true);
                                if (
Game.Attacking.Handle.CanAttack(Cloud.Owner.Entityattackedspellattack.AttackType == Attack.Melee))
                                {
                                    
attack.Effect Attack.AttackEffects.None;
                                    
uint damage Game.Attacking.Calculate.Melee(Cloud.Owner.Entityattackedspellref attack);
                                    if (
Cloud.ThunderBolt)
                                        
damage += Game.Attacking.Calculate.Melee(Cloud.Owner.EntityattackedDatabase.SpellTable.GetSpell(12970client), ref attack);
                                    
suse.Effect attack.Effect;
                                    
Game.Attacking.Handle.ReceiveAttack(Cloud.Owner.Entityattackedattackref damagespell);
                                    
suse.AddTarget(attacked.UIDdamageattack);
                                    break;
                                }
                            }
                        }
                        if (
_obj == null) continue;
                        if (
_obj.MapObjType == MapObjectType.Player)
                        {
                            
Cloud.LastCloudAttack Time32.Now;
                            
attacked _obj as Entity;
                            if (
Kernel.GetDistance(Cloud.XCloud.Yattacked.Xattacked.Y) <= 15)
                            {
                                
Attack attack = new Attack(true);
                                if (
Game.Attacking.Handle.CanAttack(Cloud.Owner.Entityattackedspellattack.AttackType == Attack.Melee))
                                {
                                    
attack.Effect Attack.AttackEffects.None;
                                    
uint damage Game.Attacking.Calculate.Melee(Cloud.Owner.Entityattackedspellref attack)/5;
                                    
damage = (uint)(damage 1.3);
                                    if (
Cloud.ThunderBolt)
                                        
damage += Game.Attacking.Calculate.Melee(Cloud.Owner.EntityattackedDatabase.SpellTable.GetSpell(12970client), ref attack)/5;                                    
                                    
suse.Effect attack.Effect;
                                    
Game.Attacking.Handle.ReceiveAttack(Cloud.Owner.Entityattackedattackref damagespell);
                                    
suse.AddTarget(attacked.UIDdamageattack);
                                    break;
                                }
                            }
                        }
                    }
                    
client.SendScreen(susetrue);
                }
                
#endregion
            
}
        }
        private static 
ConcurrentDictionary<uintNetwork.GamePackets.FloorItemFloorItems;
        private static 
void monsterBuffersCallback(GameState clientint time)
        {
            if (!
client.Socket.Alive)
            {
                
client.Screen.DisposeTimers(); return;
            }
            if (
client.Entity == null) return;
            if (
client.Map == null) return;
            if (
client.Map.FreezeMonsters) return;
            
#region Stamina
            
if (client.Entity.StaminaStamp.Next(500timetime))
            {
                if (
client.Vigor client.MaxVigor)
                {
                    
ushort amount = (ushort)(+ (client.Entity.Action == Game.Enums.ConquerAction.Sit 0));
                    if (
client.Vigor amount client.MaxVigor)
                    {
                        
amount client.MaxVigor;
                        
client.Vigor amount;
                    }
                    else
                    {
                        
client.Vigor += amount;
                    }
                    
Vigor vigor = new Vigor(true);
                    
vigor.Amount client.Vigor;
                    
vigor.Send(client);
                }
                if (
client.Entity.ContainsFlag((ulong)FlagsUpdate.Flags.FrostArrows))
                    return;
                if (!
client.Entity.ContainsFlag((ulong)FlagsUpdate.Flags.Ride) && !client.Entity.ContainsFlag((ulong)FlagsUpdate.Flags.Fly) || client.Equipment.TryGetItem(18) != null)
                {
                    
int limit 0;
                    if (
client.Entity.HeavenBlessing 0)
                        
limit 60;
                    if (
client.Entity.Stamina != 100 limit)
                    {
                        if (
client.Entity.Action == Enums.ConquerAction.Sit)
                        {
                            if (
client.Entity.Stamina <= 90 limit)
                            {
                                
client.Entity.Stamina += 10;
                            }
                            else
                            {
                                if (
client.Entity.Stamina != 100 limit)
                                    
client.Entity.Stamina = (byte)(100 limit);
                            }
                        }
                        else
                        {
                            if (
client.Entity.Stamina <= 95 limit)
                            {
                                
client.Entity.Stamina += 90;
                            }
                            else
                            {
                                if (
client.Entity.Stamina != 100 limit)
                                    
client.Entity.Stamina = (byte)(100 limit);
                            }
                        }
                    }
                    
client.Entity.StaminaStamp = new Time32(time);
                }
            }
            
#endregion
            #region Flooritems
            
foreach (var f in Database.FloorItemTable.FloorItems)
            {
                if (
== null) continue;
                if (
Kernel.GetDistance(f.Xf.Yclient.Entity.Xclient.Entity.Y) <= Constants.pScreenDistance)
                {
                    if (
f.MapID == client.Entity.MapID)
                    {
                        if (!
FloorItems.ContainsKey(f.UID))
                        {
                            
FloorItems.Add(f.UIDf);
                            
f.Send(client);
                        }
                    }
                    else { 
FloorItems.Remove(f.UID); }
                }
                else { 
FloorItems.Remove(f.UID); }
            }
            
#endregion
            #region Energia Epica Taoista Agua/Fuego
            
if (Database.DataHolder.IsTaoist(client.Entity.Class))
            {
                var 
Date DateTime.Now;
                if (
client.Entity.LastGetEnergy.AddSeconds(1) <= Date)
                {
                    if (
client.Entity.EpicTaoist())
                    {
                        if (
client.Entity.Class >= 130 && client.Entity.Class <= 135)
                        {
                            if (
220 client.Entity.Energy)
                            {
                                
client.Entity.Energy += 4;
                            }
                        }
                        else
                        {
                            if (
client.Entity.Energy 330)
                            {
                                
client.Entity.Energy += 7;
                            }
                        }
                        
client.Entity.LastGetEnergy Date;
                    }
                    else
                    {
                        if (
client.Entity.ContainsFlag((ulong)FlagsUpdate.Flags.AuroraLotus))
                        {
                            
client.Entity.RemoveFlag((ulong)FlagsUpdate.Flags.AuroraLotus);
                        }
                        if (
client.Entity.ContainsFlag((ulong)FlagsUpdate.Flags.FlameLotus))
                        {
                            
client.Entity.RemoveFlag((ulong)FlagsUpdate.Flags.FlameLotus);
                        }
                        if (
client.Entity.Energy 0)
                        {
                            
client.Entity.Energy 0;
                        }
                    }
                }
            }
            
#endregion
            #region Sistema AutoCps Libres
            
if (Time32.Now client.CpsStamp.AddSeconds(3))
            {
                if (
client.Entity.MapID == 19989)
                {
                    if (
client.Entity.Hitpoints != 0)
                    {
                        if (
client.Entity.BoundCps <= 2000000000)
                        {
                            
client.Entity.BoundCps += 2;
                            
client.CpsStamp Time32.Now;
                            
client.Send(new Message("Ha obtenido 2 Cps por estar aqui!."System.Drawing.Color.RedMessage.TopLeft));
                        }
                        else
                        {
                            
client.Send(new Message("Ya tienes 2.000.000.000 Cps, no puedes obtener más!."System.Drawing.Color.RedMessage.TopLeft));
                        }
                    }
                }
            }
            
#endregion
            
foreach (IMapObject obj in client.Screen.Objects)
            {
                if (
obj != null)
                {
                    if (
obj.MapObjType == MapObjectType.Monster)
                    {
                        
Entity monster obj as Entity;
                        if (
monster == null) continue;

                        if (
monster.ContainsFlag((ulong)FlagsUpdate.Flags.Stigma))
                        {
                            if (
monster.StigmaStamp.AddSeconds(monster.StigmaTime).Next(timetime) || monster.Dead)
                            {
                                
monster.StigmaTime 0;
                                
monster.StigmaIncrease 0;
                                
monster.RemoveFlag((ulong)FlagsUpdate.Flags.Stigma);
                            }
                        }
                        if (
monster.ContainsFlag((ulong)FlagsUpdate.Flags.Dodge))
                        {
                            if (
monster.DodgeStamp.AddSeconds(monster.DodgeTime).Next(timetime) || monster.Dead)
                            {
                                
monster.DodgeTime 0;
                                
monster.DodgeIncrease 0;
                                
monster.RemoveFlag((ulong)Network.GamePackets.FlagsUpdate.Flags.Dodge);
                            }
                        }
                        if (
monster.ContainsFlag((ulong)FlagsUpdate.Flags.Invisibility))
                        {
                            if (
monster.InvisibilityStamp.AddSeconds(monster.InvisibilityTime).Next(timetime) || monster.Dead)
                            {
                                
monster.RemoveFlag((ulong)FlagsUpdate.Flags.Invisibility);
                            }
                        }
                        if (
monster.ContainsFlag((ulong)FlagsUpdate.Flags.StarOfAccuracy))
                        {
                            if (
monster.StarOfAccuracyTime != 0)
                            {
                                if (
monster.StarOfAccuracyStamp.AddSeconds(monster.StarOfAccuracyTime).Next(timetime) || monster.Dead)
                                {
                                    
monster.RemoveFlag((ulong)FlagsUpdate.Flags.StarOfAccuracy);
                                }
                            }
                            else
                            {
                                if (
monster.AccuracyStamp.AddSeconds(monster.AccuracyTime).Next(timetime) || monster.Dead)
                                {
                                    
monster.RemoveFlag((ulong)FlagsUpdate.Flags.StarOfAccuracy);
                                }
                            }
                        }
                        if (
monster.ContainsFlag((ulong)FlagsUpdate.Flags.MagicShield))
                        {
                            if (
monster.MagicShieldTime != 0)
                            {
                                if (
monster.MagicShieldStamp.AddSeconds(monster.MagicShieldTime).Next(timetime) || monster.Dead)
                                {
                                    
monster.MagicShieldIncrease 0;
                                    
monster.MagicShieldTime 0;
                                    
monster.RemoveFlag((ulong)FlagsUpdate.Flags.MagicShield);
                                }
                            }
                            else
                            {
                                if (
monster.ShieldStamp.AddSeconds(monster.ShieldTime).Next(timetime) || monster.Dead)
                                {
                                    
monster.ShieldIncrease 0;
                                    
monster.ShieldTime 0;
                                    
monster.RemoveFlag((ulong)FlagsUpdate.Flags.MagicShield);
                                }
                            }
                        }
                        if (
monster.Dead || monster.Killed)
                        {
                            if (!
monster.ContainsFlag((ulong)FlagsUpdate.Flags.Ghost) || monster.Killed)
                            {
                                
monster.Killed false;
                                
monster.MonsterInfo.InSight 0;
                                
monster.AddFlag((ulong)Network.GamePackets.FlagsUpdate.Flags.Ghost,StatusFlagsBigVector32.PermanentFlag,false);
                                
monster.AddFlag((ulong)Network.GamePackets.FlagsUpdate.Flags.DeadStatusFlagsBigVector32.PermanentFlagfalse);
                                
monster.AddFlag((ulong)Network.GamePackets.FlagsUpdate.Flags.FadeAwayStatusFlagsBigVector32.PermanentFlagfalse);
                                
Network.GamePackets.Attack attack = new Network.GamePackets.Attack(true);
                                
attack.Attacker monster.Killer.UID;
                                
attack.Attacked monster.UID;
                                
attack.AttackType Network.GamePackets.Attack.Kill;
                                
attack.monster.X;
                                
attack.monster.Y;
                                
client.Map.Floor[monster.Xmonster.YMapObjectType.Monstermonster] = true;
                                
attack.KOCount = ++monster.Killer.KOCount;
                                if (
monster.Killer.EntityFlag == EntityFlag.Player)
                                {
                                    
monster.MonsterInfo.ExcludeFromSend monster.Killer.UID;
                                    
monster.Killer.Owner.Send(attack);
                                }
                                
monster.MonsterInfo.SendScreen(attack);
                                
monster.MonsterInfo.ExcludeFromSend 0;
                            }
                            if (
monster.DeathStamp.AddSeconds(4).Next(timetime))
                            {
                                
Data data = new Data(true);
                                
data.UID monster.UID;
                                
data.ID Network.GamePackets.Data.RemoveEntity;
                                
monster.MonsterInfo.SendScreen(data);
                            }
                        }
                    }
                }
            }
        }
        private static 
void guardsCallback(GameState clientint time)
        {
            if (!
client.Socket.Alive)
            {
                
client.Screen.DisposeTimers(); return;
            }
            if (
client.Entity == null) return;
            if (
client.Map == null) return;
            if (
client.Map.FreezeMonsters) return;
            
Time32 Now = new Time32(time);
            foreach (
IMapObject obj in client.Screen.Objects)
            {
                if (
obj != null)
                {
                    if (
obj.MapObjType == MapObjectType.Monster)
                    {
                        
Entity monster obj as Entity;
                        if (!
monster.Companion && !monster.Dead && !monster.Killed && monster.MonsterInfo.Guard && !monster.MonsterInfo.Boss && monster.Name != "NemesisTirano" && monster.Name != "SwordMaster" && monster.Name != "ThrillingSpook" && monster.Name != "LavaBeast" && monster.Name != "SnowBanshee" && monster.Name != "PurpleBanshee" && monster.Name != "SnowBansheeSoul" && monster.Name != "TeratoDragon" && Now >= monster.MonsterInfo.LastMove.AddMilliseconds(monster.MonsterInfo.MinimumSpeed))
                        {
                            if (
Now >= monster.MonsterInfo.LastMove.AddMilliseconds(monster.MonsterInfo.MinimumSpeed))
                            {
                                if (
monster.MonsterInfo.InSight == 0)
                                {
                                    if (
monster.!= monster.MonsterInfo.BoundX || monster.!= monster.MonsterInfo.BoundY)
                                    {
                                        
monster.monster.MonsterInfo.BoundX;
                                        
monster.monster.MonsterInfo.BoundY;
                                        
TwoMovements jump = new TwoMovements();
                                        
jump.monster.MonsterInfo.BoundX;
                                        
jump.monster.MonsterInfo.BoundY;
                                        
jump.EntityCount 1;
                                        
jump.FirstEntity monster.UID;
                                        
jump.MovementType TwoMovements.Jump;
                                        
client.SendScreen(jumptrue);
                                    }
                                    if (
client.Entity.ContainsFlag((ulong)Network.GamePackets.FlagsUpdate.Flags.FlashingName))
                                        
monster.MonsterInfo.InSight client.Entity.UID;
                                }
                                else
                                {
                                    if (
client.Entity.ContainsFlag((ulong)Network.GamePackets.FlagsUpdate.Flags.FlashingName))
                                    {
                                        if (
monster.MonsterInfo.InSight == client.Entity.UID)
                                        {
                                            if (!
client.Entity.Dead)
                                            {
                                                if (
Now >= monster.MonsterInfo.LastMove.AddMilliseconds(monster.MonsterInfo.AttackSpeed))
                                                {
                                                    
short distance Kernel.GetDistance(monster.Xmonster.Yclient.Entity.Xclient.Entity.Y);

                                                    if (
distance <= monster.MonsterInfo.AttackRange)
                                                    {
                                                        
monster.MonsterInfo.LastMove Time32.Now;
                                                        new 
Game.Attacking.Handle(nullmonsterclient.Entity);
                                                    }
                                                    else
                                                    {
                                                        if (
distance <= monster.MonsterInfo.ViewRange)
                                                        {
                                                            
TwoMovements jump = new TwoMovements();
                                                            
jump.client.Entity.X;
                                                            
jump.client.Entity.Y;
                                                            
monster.client.Entity.X;
                                                            
monster.client.Entity.Y;
                                                            
jump.EntityCount 1;
                                                            
jump.FirstEntity monster.UID;
                                                            
jump.MovementType TwoMovements.Jump;
                                                            
client.SendScreen(jumptrue);
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        if (
monster.MonsterInfo.InSight == client.Entity.UID)
                                        {
                                            
monster.MonsterInfo.InSight 0;
                                        }
                                    }
                                }

                                foreach (
IMapObject obj2 in client.Screen.Objects)
                                {
                                    if (
obj2 == null) continue;
                                    if (
obj2.MapObjType == MapObjectType.Monster)
                                    {
                                        
Entity monster2 obj2 as Entity;

                                        if (
monster2 == null) continue;
                                        if (
monster2.Dead) continue;

                                        if (
Now >= monster.MonsterInfo.LastMove.AddMilliseconds(monster.MonsterInfo.AttackSpeed))
                                        {
                                            if (!
monster2.MonsterInfo.Guard && (!monster2.Companion || monster2.Owner.Entity.ContainsFlag((ulong)FlagsUpdate.Flags.FlashingName)))
                                            {
                                                
short distance Kernel.GetDistance(monster.Xmonster.Ymonster2.Xmonster2.Y);

                                                if (
distance <= monster.MonsterInfo.AttackRange)
                                                {
                                                    
monster.MonsterInfo.LastMove Time32.Now;
                                                    new 
Game.Attacking.Handle(nullmonstermonster2);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        private static 
void aliveMonstersCallback(GameState clientint time)
        {
            if (!
client.Socket.Alive)
            {
                
client.Screen.DisposeTimers();
                return;
            }
            if (
client.Entity == null) return;
            if (
client.Map == null) return;
            if (
client.Map.FreezeMonsters) return;
            
Time32 Now = new Time32(time);
            foreach (
IMapObject obj in client.Screen.Objects)
            {
                if (
obj != null)
                {
                    if (
obj.MapObjType == MapObjectType.Monster)
                    {
                        
Entity monster obj as Entity;
                        if (
monster == null) continue;
                        if (
monster.MonsterInfo.Guard || monster.Companion || monster.Dead) continue;
                        if (
monster.MonsterInfo.Reviver)
                        {
                            if (
client.Entity.Dead && Now client.Entity.DeathStamp.AddSeconds(5))
                            {
                                
client.Entity.BringToLife();
                                
SpellUse use = new SpellUse(true);
                                use.
Attacker monster.UID;
                                use.
client.Entity.X;
                                use.
client.Entity.Y;
                                use.
SpellID 1100;
                                use.
AddTarget(client.Entity.UID0null);
                                
Kernel.SendWorldMessage(use, Server.GamePoolmonster.MapID);
                            }
                            return;
                        }
                        
short distance Kernel.GetDistance(monster.Xmonster.Yclient.Entity.Xclient.Entity.Y);
                        if (
distance Constants.pScreenDistance)
                        {
                            
client.Screen.Remove(obj);
                            continue;
                        }
                        if (
monster.MonsterInfo.InSight != && monster.MonsterInfo.InSight != client.Entity.UID)
                        {
                            if (
monster.MonsterInfo.InSight 1000000)
                            {
                                
GameState cl;
                                if (
Kernel.GamePool.TryGetValue(monster.MonsterInfo.InSightout cl))
                                {
                                    
short dst Kernel.GetDistance(monster.Xmonster.Ycl.Entity.Xcl.Entity.Y);
                                    if (
dst Constants.pScreenDistance)
                                        
monster.MonsterInfo.InSight 0;
                                }
                                else
                                    
monster.MonsterInfo.InSight 0;
                            }
                            else
                            {
                                
Entity companion client.Map.Companions[monster.MonsterInfo.InSight];
                                if (
companion != null)
                                {
                                    
short dst Kernel.GetDistance(monster.Xmonster.Ycompanion.Xcompanion.Y);
                                    if (
dst Constants.pScreenDistance)
                                        
monster.MonsterInfo.InSight 0;
                                }
                                else
                                    
monster.MonsterInfo.InSight 0;
                            }
                        }
                        if (
Now >= monster.MonsterInfo.LastMove.AddMilliseconds(monster.MonsterInfo.MinimumSpeed))
                        {
                            if (
distance <= Constants.pScreenDistance)
                            {
                                
#region Companions
                                
if (client.Pet != null)
                                {
                                    if (
client.Pet.Pets != null)
                                    {
                                        foreach (var 
pet in client.Pet.Pets.Values)
                                        {
                                            if (
pet != null)
                                            {
                                                
#region Pets
                                                
if (pet.Entity.Companion && !pet.Entity.Dead)
                                                {
                                                    
short distance2 Kernel.GetDistance(monster.Xmonster.Ypet.Entity.Xpet.Entity.Y);
                                                    if (
distance distance2 || client.Entity.ContainsFlag((ulong)FlagsUpdate.Flags.Invisibility) || client.Entity.ContainsFlag((ulong)FlagsUpdate.Flags.Fly))
                                                    {
                                                        if (
monster.MonsterInfo.InSight == 0)
                                                        {
                                                            
monster.MonsterInfo.InSight pet.Entity.UID;
                                                        }
                                                        else
                                                        {
                                                            if (
monster.MonsterInfo.InSight == pet.Entity.UID)
                                                            {
                                                                if (
distance2 Constants.pScreenDistance)
                                                                {
                                                                    
monster.MonsterInfo.InSight 0;
                                                                }
                                                                else
                                                                {
                                                                    if (
distance2 <= monster.MonsterInfo.AttackRange)
                                                                    {
                                                                        if (
Now >= monster.MonsterInfo.LastMove.AddMilliseconds(monster.MonsterInfo.AttackSpeed))
                                                                        {
                                                                            
monster.MonsterInfo.LastMove Time32.Now;
                                                                            new 
Game.Attacking.Handle(nullmonsterpet.Entity);
                                                                            if (
Time32.Now >= monster.MonsterInfo.Lastpop.AddSeconds(30))
                                                                            {
                                                                                
monster.MonsterInfo.Lastpop Time32.Now;

                                                                                continue;
                                                                            }
                                                                        }
                                                                    }
                                                                    else
                                                                    {
                                                                        if (
distance2 monster.MonsterInfo.ViewRange 2)
                                                                        {
                                                                            if (
distance2 Constants.pScreenDistance)
                                                                            {
                                                                                if (
Now >= monster.MonsterInfo.LastMove.AddMilliseconds(monster.MonsterInfo.RunSpeed))
                                                                                {
                                                                                    
monster.MonsterInfo.LastMove Time32.Now;

                                                                                    
Enums.ConquerAngle facing Kernel.GetAngle(monster.Xmonster.Ypet.Entity.Xpet.Entity.Y);
                                                                                    if (!
monster.Move(facing))
                                                                                    {
                                                                                        
facing = (Enums.ConquerAngle)Kernel.Random.Next(7);
                                                                                        if (
monster.Move(facing))
                                                                                        {
                                                                                            
monster.Facing facing;
                                                                                            
GroundMovement move = new GroundMovement(true);
                                                                                            
move.Direction facing;
                                                                                            
move.UID monster.UID;
                                                                                            
move.GroundMovementType GroundMovement.Run;
                                                                                            
monster.MonsterInfo.SendScreen(move);
                                                                                            continue;
                                                                                        }
                                                                                    }
                                                                                    else
                                                                                    {
                                                                                        
monster.Facing facing;
                                                                                        
GroundMovement move = new GroundMovement(true);
                                                                                        
move.Direction facing;
                                                                                        
move.UID monster.UID;
                                                                                        
move.GroundMovementType GroundMovement.Run;
                                                                                        
monster.MonsterInfo.SendScreen(move);
                                                                                        continue;
                                                                                    }
                                                                                }
                                                                            }
                                                                            else
                                                                            {
                                                                                
monster.MonsterInfo.InSight 0;
                                                                            }
                                                                        }
                                                                        else
                                                                        {
                                                                            if (
Now >= monster.MonsterInfo.LastMove.AddMilliseconds(monster.MonsterInfo.MoveSpeed))
                                                                            {
                                                                                
monster.MonsterInfo.LastMove Time32.Now;
                                                                                
Enums.ConquerAngle facing Kernel.GetAngle(monster.Xmonster.Ypet.Entity.Xpet.Entity.Y);
                                                                                if (!
monster.Move(facing))
                                                                                {
                                                                                    
facing = (Enums.ConquerAngle)Kernel.Random.Next(7);
                                                                                    if (
monster.Move(facing))
                                                                                    {
                                                                                        
monster.Facing facing;
                                                                                        
GroundMovement move = new GroundMovement(true);
                                                                                        
move.Direction facing;
                                                                                        
move.UID monster.UID;
                                                                                        
monster.MonsterInfo.SendScreen(move);
                                                                                        continue;
                                                                                    }
                                                                                }
                                                                                else
                                                                                {
                                                                                    
monster.Facing facing;
                                                                                    
GroundMovement move = new GroundMovement(true);
                                                                                    
move.Direction facing;
                                                                                    
move.UID monster.UID;
                                                                                    
monster.MonsterInfo.SendScreen(move);
                                                                                    continue;
                                                                                }
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                                
#endregion
                                            
}

                                        }
                                    }
                                }
                                
#endregion
                                #region Player
                                
if (monster.MonsterInfo.InSight == 0)
                                {
                                    if (
distance <= monster.MonsterInfo.ViewRange)
                                    {
                                        if (!
client.Entity.ContainsFlag((ulong)FlagsUpdate.Flags.Invisibility))
                                        {
                                            if (
monster.MonsterInfo.SpellID != || !client.Entity.ContainsFlag((ulong)FlagsUpdate.Flags.Fly))
                                            {
                                                
monster.MonsterInfo.InSight client.Entity.UID;
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    if (
monster.MonsterInfo.InSight == client.Entity.UID)
                                    {
                                        if (
monster.MonsterInfo.SpellID == && client.Entity.ContainsFlag((ulong)FlagsUpdate.Flags.Fly))
                                        {
                                            
monster.MonsterInfo.InSight 0;
                                            return;
                                        }

                                        if (
client.Entity.Dead)
                                        {
                                            
monster.MonsterInfo.InSight 0;
                                            return;
                                        }
                                        if (
distance Constants.pScreenDistance)
                                        {
                                            
monster.MonsterInfo.InSight 0;
                                        }
                                        else
                                        {
                                            if (
distance <= monster.MonsterInfo.AttackRange)
                                            {
                                                if (
Now >= monster.MonsterInfo.LastMove.AddMilliseconds(monster.MonsterInfo.AttackSpeed))
                                                {
                                                    
monster.MonsterInfo.LastMove Time32.Now;
                                                    new 
Game.Attacking.Handle(nullmonsterclient.Entity);
                                                }
                                            }
                                            else
                                            {
                                                if (
distance monster.MonsterInfo.ViewRange 2)
                                                {
                                                    if (
distance Constants.pScreenDistance)
                                                    {
                                                        if (
Now >= monster.MonsterInfo.LastMove.AddMilliseconds(monster.MonsterInfo.RunSpeed))
                                                        {
                                                            
monster.MonsterInfo.LastMove Time32.Now;

                                                            
Enums.ConquerAngle facing Kernel.GetAngle(monster.Xmonster.Yclient.Entity.Xclient.Entity.Y);
                                                            if (!
monster.Move(facing))
                                                            {
                                                                
facing = (Enums.ConquerAngle)Kernel.Random.Next(7);
                                                                if (
monster.Move(facing))
                                                                {
                                                                    
monster.Facing facing;
                                                                    
GroundMovement move = new GroundMovement(true);
                                                                    
move.Direction facing;
                                                                    
move.UID monster.UID;
                                                                    
move.GroundMovementType Network.GamePackets.GroundMovement.Run;
                                                                    
monster.MonsterInfo.SendScreen(move);
                                                                }
                                                            }
                                                            else
                                                            {
                                                                
monster.Facing facing;
                                                                
GroundMovement move = new GroundMovement(true);
                                                                
move.Direction facing;
                                                                
move.UID monster.UID;
                                                                
move.GroundMovementType Network.GamePackets.GroundMovement.Run;
                                                                
monster.MonsterInfo.SendScreen(move);
                                                            }
                                                        }
                                                    }
                                                    else
                                                    {
                                                        
monster.MonsterInfo.InSight 0;
                                                    }
                                                }
                                                else
                                                {
                                                    if (
Now >= monster.MonsterInfo.LastMove.AddMilliseconds(monster.MonsterInfo.MoveSpeed))
                                                    {
                                                        
monster.MonsterInfo.LastMove Time32.Now;
                                                        
Enums.ConquerAngle facing Kernel.GetAngle(monster.Xmonster.Yclient.Entity.Xclient.Entity.Y);
                                                        if (!
monster.Move(facing))
                                                        {
                                                            
facing = (Enums.ConquerAngle)Kernel.Random.Next(7);
                                                            if (
monster.Move(facing))
                                                            {
                                                                
monster.Facing facing;
                                                                
GroundMovement move = new GroundMovement(true);
                                                                
move.Direction facing;
                                                                
move.UID monster.UID;
                                                                
monster.MonsterInfo.SendScreen(move);
                                                            }
                                                        }
                                                        else
                                                        {
                                                            
monster.Facing facing;
                                                            
GroundMovement move = new GroundMovement(true);
                                                            
move.Direction facing;
                                                            
move.UID monster.UID;
                                                            
monster.MonsterInfo.SendScreen(move);
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                                
#endregion
                            
}
                        }
                    }
                    else if (
obj.MapObjType == MapObjectType.Item)
                    {
                        
FloorItem item obj as FloorItem;
                        if (
item == null) continue;

                        if (
item.Type == FloorItem.Effect)
                        {
                            
#region RageOfWar
                            
if (item.ItemID == FloorItem.RageOfWarTrap)
                            {
                                if (
item.Owner == client)
                                {
                                    if (
item.OnFloor.AddSeconds(2).Next(timetime))
                                    {
                                        var 
spell Database.SpellTable.GetSpell(12930client);
                                        if (
spell == null) return;
                                        var 
attack = new Attack(true);
                                        
attack.Attacker client.Entity.UID;
                                        
attack.AttackType Attack.Melee;

                                        foreach (var 
obj1 in client.Screen.Objects)
                                        {
                                            if (
obj1 == null)
                                                continue;
                                            var 
attacked obj1 as Entity;
                                            if (
attacked == null) continue;
                                            if (
Kernel.GetDistance(obj1.Xobj1.Yobj.Xobj.Y) <= 3)
                                            {
                                                if (
Attacking.Handle.CanAttack(client.Entityattackedspellattack.AttackType == Attack.Melee))
                                                {
                                                    
Attacking.Handle.RageOfWarTrap(item);

                                                }

                                            }
                                        }
                                    }
                                }
                            }
                            
#endregion
                            
if (item.ItemID == FloorItem.DaggerStorm || item.ItemID == FloorItem.FuryofEgg || item.ItemID == FloorItem.ShacklingIce || item.ItemID == 31)
                            {
                                if (
item.Owner == client)
                                {
                                    if (
Time32.Now item.UseTime.AddSeconds(1))
                                    {
                                        
item.UseTime Time32.Now;
                                        var 
spell Database.SpellTable.GetSpell(11600client);
                                        var 
attack = new Attack(true);
                                        
attack.Attacker item.Owner.Entity.UID;
                                        
attack.AttackType Attack.Melee;
                                        foreach (var 
obj1 in client.Screen.Objects)
                                        {
                                            if (
Kernel.GetDistance(obj1.Xobj1.Yobj.Xobj.Y) <= 3)
                                            {
                                                if (
obj1.MapObjType == MapObjectType.Monster || obj1.MapObjType == MapObjectType.Player)
                                                {
                                                    var 
attacked obj1 as Entity;
                                                    if (
Attacking.Handle.CanAttack(client.Entityattackedspellfalse))
                                                    {
                                                        
uint damage Game.Attacking.Calculate.Melee(client.Entityattackedspellref attack);
                                                        
damage = (uint)((damage) / 12);
                                                        
attack.Damage damage;
                                                        
attack.Attacked attacked.UID;
                                                        
attack.attacked.X;
                                                        
attack.attacked.Y;
                                                        
Attacking.Handle.ReceiveAttack(client.Entityattackedattackref damagespell);
                                                    }
                                                }
                                                else if (
obj1.MapObjType == MapObjectType.SobNpc)
                                                {
                                                    var 
attacked obj1 as SobNpcSpawn;
                                                    if (
Attacking.Handle.CanAttack(client.Entityattackedspell))
                                                    {
                                                        
uint damage Game.Attacking.Calculate.Melee(client.Entityattackedref attack);
                                                        
damage = (uint)(damage spell.PowerPercent);
                                                        
attack.Damage damage;
                                                        
attack.Attacked attacked.UID;
                                                        
attack.attacked.X;
                                                        
attack.attacked.Y;
                                                        
Attacking.Handle.ReceiveAttack(client.Entityattackedattackdamagespell);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            
                            if (
item.ItemID == FloorItem.FlameLotus)
                            {
                                if (
item.Owner == client)
                                {
                                    if (
item.OnFloor.AddSeconds(8).Next(timetime))
                                    {
                                        
item.UseTime Time32.Now;
                                        var 
spell Database.SpellTable.GetSpell(12380client);

                                        var 
attack = new Attack(true);
                                        
attack.Attacker item.Owner.Entity.UID;
                                        
attack.AttackType Attack.Melee;

                                        foreach (var 
obj1 in client.Screen.Objects)
                                        {
                                            if (
Kernel.GetDistance(obj1.Xobj1.Yobj.Xobj.Y) <= 3)
                                            {
                                                if (
obj1.MapObjType == MapObjectType.Player)
                                                {
                                                    var 
attacked obj1 as Entity;
                                                    if (
Attacking.Handle.CanAttack(client.Entityattackedspellfalse))
                                                    {
                                                        
uint damage Game.Attacking.Calculate.Melee(client.Entityattacked,spellref attack) / 2;
                                                        
damage = (damage * (uint)1.2);
                                                        
attack.Damage damage;
                                                        
attack.Attacked attacked.UID;
                                                        
attack.attacked.X;
                                                        
attack.attacked.Y;

                                                        
Attacking.Handle.ReceiveAttack(client.Entityattackedattackref damagespell);
                                                    }
                                                }
                                                if (
obj1.MapObjType == MapObjectType.Monster)
                                                {
                                                    var 
attacked obj1 as Entity;
                                                    if (
Attacking.Handle.CanAttack(client.Entityattackedspellfalse))
                                                    {
                                                        
uint damage Game.Attacking.Calculate.Melee(client.Entityattackedspell,ref attack);
                                                        
damage = (damage * (uint)1.2);
                                                        
attack.Damage damage;
                                                        
attack.Attacked attacked.UID;
                                                        
attack.attacked.X;
                                                        
attack.attacked.Y;

                                                        
Attacking.Handle.ReceiveAttack(client.Entityattackedattackref damagespell);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            if (
item.ItemID == FloorItem.ShadowOfChaser)
                            {
                                if (
item.Owner == client)
                                {
                                    var 
spell Database.SpellTable.GetSpell(13090client);
                                    var 
attack = new Attack(true);
                                    
attack.Attacker item.Owner.Entity.UID;
                                    
attack.AttackType Attack.Melee;
                                    foreach (var 
obj1 in client.Screen.Objects)
                                    {
                                        if (
Kernel.GetDistance(obj1.Xobj1.Yobj.Xobj.Y) <= spell.Range)
                                        {
                                            if (
obj1.MapObjType == MapObjectType.Monster || obj1.MapObjType == MapObjectType.Player)
                                            {
                                                var 
attacked obj1 as Entity;
                                                if (
Attacking.Handle.CanAttack(client.Entityattackedspellfalse))
                                                {
                                                    
uint damage Attacking.Calculate.Melee(client.Entityattackedspellref attack);
                                                    
damage = (uint)(damage 0.6);
                                                    
attack.Damage damage;
                                                    
attack.Attacked attacked.UID;
                                                    
attack.attacked.X;
                                                    
attack.attacked.Y;
                                                    
Attacking.Handle.ReceiveAttack(client.Entityattackedattackref damagespell);
                                                }
                                            }
                                            else if (
obj1.MapObjType == MapObjectType.SobNpc)
                                            {
                                                var 
attacked obj1 as SobNpcSpawn;
                                                if (
Attacking.Handle.CanAttack(client.Entityattackedspell))
                                                {
                                                    
uint damage Game.Attacking.Calculate.Melee(client.Entityattackedref attack);
                                                    
damage = (uint)(damage 0.3);
                                                    
attack.Damage damage;
                                                    
attack.Attacked attacked.UID;
                                                    
attack.attacked.X;
                                                    
attack.attacked.Y;
                                                    
Attacking.Handle.ReceiveAttack(client.Entityattackedattackdamagespell);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        private static 
void itemsCallback(GameState clientint time)
        {
            if (!
client.Socket.Alive)
            {
                
client.Screen.DisposeTimers(); return;
            }
            if (
client.Entity == null) return;
            if (
client.Map == null) return;
            if (
client.Map.FreezeMonsters) return;
            
Time32 Now = new Time32(time);
            foreach (
IMapObject obj in client.Screen.Objects)
            {
                if (
obj != null)
                {
                    if (
obj.MapObjType == MapObjectType.Item)
                    {
                        
FloorItem item obj as FloorItem;
                        if (
item == null) continue;
                        if (
item.Type == FloorItem.Effect)
                        {
                            if (
item.ItemID == FloorItem.RageOfWarTrap)
                            {
                                if (
item.OnFloor.AddSeconds(2).Next(timetime))
                                {
                                    
item.Type Network.GamePackets.FloorItem.RemoveEffect;
                                    
client.Map.RemoveFloorItem(item);
                                    
client.RemoveScreenSpawn(itemtrue);
                                }
                            }
                            if (
item.ItemID == FloorItem.DaggerStorm || item.ItemID == FloorItem.FuryofEgg || item.ItemID == FloorItem.ShacklingIce || item.ItemID == 31)
                            {
                                if (
item.OnFloor.AddSeconds(4).Next(timetime))
                                {
                                    
item.Type FloorItem.RemoveEffect;
                                    
client.Map.RemoveFloorItem(item);
                                    
client.RemoveScreenSpawn(itemtrue);
                                }
                            }
                            if (
item.ItemID == FloorItem.FlameLotus ||
                          
item.ItemID == FloorItem.AuroraLotus)
                            {
                                if (
item.OnFloor.AddSeconds(8).Next(timetime))
                                {
                                    
IEnumerable<Client.GameState> array = null;
                                    
Database.SpellInformation Spell null;
                                    if (
item.ItemID == FloorItem.FlameLotus)
                                    {
                                        
Spell Database.SpellTable.GetSpell(123806);
                                        if (
item.Owner.Team != null)
                                        {
                                            array = 
Kernel.GamePool.Values.Where
                                            
(=>
                                            
Kernel.GetDistance(x.Entity.Xx.Entity.Yitem.Xitem.Y) <= Spell.Range &&
                                            
x.Entity.Dead == true &&
                                            
item.Owner.Team.IsTeammate(x.Entity.UID)
                                            );
                                        }
                                        else if (
item.Owner.Guild != null)
                                        {
                                            array = 
Kernel.GamePool.Values.Where
                                            
(=>
                                            
Kernel.GetDistance(x.Entity.Xx.Entity.Yitem.Xitem.Y) <= Spell.Range &&
                                            
x.Entity.Dead == true && x.Entity.GuildID == item.Owner.Entity.GuildID
                                            
);
                                        }
                                        else if (
item.Owner.Entity.GetClan != null)
                                        {
                                            array = 
Kernel.GamePool.Values.Where
                                            
(=>
                                            
Kernel.GetDistance(x.Entity.Xx.Entity.Yitem.Xitem.Y) <= Spell.Range &&
                                            
x.Entity.Dead == true && x.Entity.ClanId == item.Owner.Entity.ClanId
                                            
);
                                        }
                                        else
                                        {
                                            array = 
Kernel.GamePool.Values.Where
                                            
(=>
                                            
Kernel.GetDistance(x.Entity.Xx.Entity.Yitem.Xitem.Y) <= Spell.Range &&
                                            
x.Entity.Dead == true
                                            
);
                                        }
                                    }

                                    if (
item.ItemID == FloorItem.AuroraLotus)
                                    {
                                        
Spell Database.SpellTable.GetSpell(123706);
                                        if (
item.Owner.Team != null)
                                        {
                                            array = 
Kernel.GamePool.Values.Where
                                            
(=>
                                            
Kernel.GetDistance(x.Entity.Xx.Entity.Yitem.Xitem.Y) <= Spell.Range &&
                                            
x.Entity.Dead == true &&
                                            
item.Owner.Team.IsTeammate(x.Entity.UID)
                                            );
                                        }
                                        else if (
item.Owner.Guild != null)
                                        {
                                            array = 
Kernel.GamePool.Values.Where
                                            
(=>
                                            
Kernel.GetDistance(x.Entity.Xx.Entity.Yitem.Xitem.Y) <= Spell.Range &&
                                            
x.Entity.Dead == true && x.Entity.GuildID == item.Owner.Entity.GuildID
                                            
);
                                        }
                                        else if (
item.Owner.Entity.GetClan != null)
                                        {
                                            array = 
Kernel.GamePool.Values.Where
                                            
(=>
                                            
Kernel.GetDistance(x.Entity.Xx.Entity.Yitem.Xitem.Y) <= Spell.Range &&
                                            
x.Entity.Dead == true && x.Entity.ClanId == item.Owner.Entity.ClanId
                                            
);
                                        }
                                        else
                                        {
                                            array = 
Kernel.GamePool.Values.Where
                                            
(=>
                                            
Kernel.GetDistance(x.Entity.Xx.Entity.Yitem.Xitem.Y) <= Spell.Range &&
                                            
x.Entity.Dead == true
                                            
);
                                        }
                                    }
                                    foreach (
GameState pClient in array)
                                    {
                                        
Database.SpellInformation spell null;
                                        if (
pClient == null) return;
                                        if (
pClient.Entity == null) return;
                                        if (
pClient.Entity.UID != item.Owner.Entity.UID)
                                        {
                                            if (
Spell.ID == 12370)
                                            {
                                                
SpellUse suse = new SpellUse(true);
                                                
suse.Attacker item.Owner.Entity.UID;
                                                
suse.SpellID 1100;
                                                
suse.SpellLevel 0;
                                                
suse.pClient.Entity.X;
                                                
suse.pClient.Entity.Y;
                                                
suse.AddTarget(pClient.Entity.UID0null);
                                                
pClient.Entity.Action =
                                                
MohamedAyman.Game.Enums.ConquerAction.None;
                                                
pClient.ReviveStamp Time32.Now;
                                                
pClient.Attackable false;
                                                
pClient.Entity.TransformationID 0;
                                                
pClient.Entity.RemoveFlag((ulong)FlagsUpdate.Flags.Dead);
                                                
pClient.Entity.RemoveFlag((ulong)FlagsUpdate.Flags.Ghost);
                                                
pClient.Entity.Hitpoints pClient.Entity.MaxHitpoints;
                                                
pClient.Entity.Ressurect();
                                                
pClient.SendScreen(susetrue);
                                                
pClient.Entity.AddFlag((ulong)FlagsUpdate.Flags.Stigma25true);
                                                
pClient.Entity.AddFlag((ulong)FlagsUpdate.Flags.MagicShield,25,true);
                                                
pClient.Entity.AddFlag((ulong)FlagsUpdate.Flags.StarOfAccuracy,25,true);
                                                
pClient.Entity.StigmaStamp Time32.Now;
                                                
pClient.Entity.StarOfAccuracyTime 25;
                                                
pClient.Entity.StigmaTime 25;
                                                
pClient.Entity.MagicShieldTime 25;
                                                
pClient.Entity.StigmaIncrease 15;
                                                
pClient.Entity.MagicShieldIncrease 15;
                                                
pClient.Entity.ShieldTime 0;
                                                
pClient.Entity.ShieldTime 0;
                                                
pClient.Entity.AccuracyTime 0;
                                                
pClient.Entity.AccuracyStamp Time32.Now;
                                                
pClient.Entity.StarOfAccuracyStamp Time32.Now;
                                                
pClient.Entity.ShieldStamp Time32.Now;
                                                
pClient.Entity.MagicShieldStamp Time32.Now;
                                                if (
pClient.Entity.EntityFlag == EntityFlag.Player)
                                                    
pClient.Entity.Owner.Send(Constants.Shield(spell.PowerPercentspell.Duration));
                                                    
pClient.Entity.Owner.Send(Constants.Accuracy(spell.Duration));
                                                
pClient.Entity.Owner.Send(Constants.Stigma(spell.PowerPercentspell.Duration));
                                            }
                                        }
                                    }
                                    
item.Type Network.GamePackets.FloorItem.RemoveEffect;
                                    
client.Map.RemoveFloorItem(item);
                                    
client.RemoveScreenSpawn(itemtrue);
                                }
                            }
                            else
                                if (
item.ItemID == FloorItem.AuroraLotus || item.ItemID == FloorItem.FlameLotus) return;
                            if (
item.ItemID == 1397)
                            {
                                if (
item.OnFloor.AddSeconds(3).Next(timetime))
                                {
                                    
Attacking.Handle.InfroEcho(item);
                                    
item.Type FloorItem.RemoveEffect;
                                    
client.Map.RemoveFloorItem(item);
                                    
client.RemoveScreenSpawn(itemtrue);
                                }
                            }
                            if (
item.ItemID == FloorItem.ShadowOfChaser)
                            {
                                if (
item.OnFloor.AddMilliseconds(900).Next(timetime))
                                {
                                    
item.Type FloorItem.RemoveEffect;
                                    
client.Map.RemoveFloorItem(item);
                                    
client.RemoveScreenSpawn(itemtrue);
                                }
                            }
                            if (
item.ItemID == FloorItem.InfernalEcho)
                            {
                                if (
item.OnFloor.AddSeconds(3).Next(timetime))
                                {
                                    
Attacking.Handle.InfroEcho(item);
                                    
item.Type FloorItem.RemoveEffect;
                                    
client.Map.RemoveFloorItem(item);
                                    
client.RemoveScreenSpawn(itemtrue);
                                }
                            }
                            if (
item.ItemID == FloorItem.ActOfTarget)
                            {
                                if (
item.OnFloor.AddSeconds(3).Next(timetime))
                                {
                                    
Attacking.Handle.InfroEcho(item);
                                    
item.Type FloorItem.RemoveEffect;
                                    
client.Map.RemoveFloorItem(item);
                                    
client.RemoveScreenSpawn(itemtrue);
                                }
                            }
                            if (
item.ItemID == FloorItem.ActOfTarget2)
                            {
                                if (
item.OnFloor.AddSeconds(3).Next(timetime))
                                {
                                    
Attacking.Handle.InfroEcho(item);
                                    
item.Type FloorItem.RemoveEffect;
                                    
client.Map.RemoveFloorItem(item);
                                    
client.RemoveScreenSpawn(itemtrue);
                                }
                            }
                            
                            if (
item.ItemID == FloorItem.TwilightDance)
                            {
                                if (
item.OnFloor.AddMilliseconds(500).Next(timetime))
                                {
                                    
item.Type FloorItem.RemoveEffect;
                                    
client.Map.RemoveFloorItem(item);
                                    
client.RemoveScreenSpawn(itemtrue);
                                }
                            }
                            if (
item.ItemID == FloorItem.TideTrap)
                            {
                                if (
item.OnFloor.AddMilliseconds(1500).Next(timetime))
                                {
                                    
Attacking.Handle.TideTrap(item);
                                    
item.Type FloorItem.RemoveEffect;
                                    
client.Map.RemoveFloorItem(item);
                                    
client.RemoveScreenSpawn(itemtrue);
                                }
                            }
                            if (
item.ItemID == FloorItem.SeaBurial)
                            {
                                if (
item.OnFloor.AddMilliseconds(500).Next(timetime))
                                {
                                    
Attacking.Handle.SeaBurial(item);
                                    
item.Type FloorItem.RemoveEffect;
                                    
client.Map.RemoveFloorItem(item);
                                    
client.RemoveScreenSpawn(itemtrue);
                                }
                            }
                            else
                            {
                                if (
item.OnFloor.AddSeconds(Constants.FloorItemSeconds).Next(timetime))
                                {
                                    
item.Type FloorItem.Remove;
                                    foreach (
IMapObject _obj in client.Screen.Objects)
                                        if (
_obj != null)
                                            if (
_obj.MapObjType == MapObjectType.Player)
                                                (
_obj as Entity).Owner.Send(item);
                                    
client.Map.RemoveFloorItem(item);
                                    
client.Screen.Remove(item);
                                }
                            }
                        }
                    }
                }
            }
        }
        private 
IDisposable[] TimerSubscriptions;
        private 
object DisposalSyncRoot;
        public 
ConcurrentDictionary<uintGame.StatueStatue = new ConcurrentDictionary<uintStatue>();
        private 
Interfaces.IMapObject[] _objects;
        public 
Interfaces.IMapObject[] Objects
        
{
            
get { return _objects; }
        }
        private 
ConcurrentDictionary<uintInterfaces.IMapObject_objectDictionary;
        public 
Client.GameState Owner;
        public 
Screen(Client.GameState client)
        {
            
Owner client;
            
_objects = new Interfaces.IMapObject[0];
            
_objectDictionary = new ConcurrentDictionary<uintIMapObject>();
            
FloorItems = new ConcurrentDictionary<uintFloorItem>();
            
TimerSubscriptions = new IDisposable[] 
            {
                
MonsterBuffers.Add(client),
                
Guards.Add(client),
                
AliveMonsters.Add(client),
                
Items.Add(client),
                
FloorSpells.Add(client)
            };
            
DisposalSyncRoot = new object();
        }
        ~
Screen()
        {
            
DisposeTimers();
            
Clear();
            
_objects null;
            
_objectDictionary null;
            
Owner null;
        }
        public 
void DisposeTimers()
        {
            
lock (DisposalSyncRoot)
            {
                if (
TimerSubscriptions == null) return;
                for (
int i 0TimerSubscriptions.Lengthi++)
                {
                    if (
TimerSubscriptions[i] != null)
                    {
                        
TimerSubscriptions[i].Dispose();
                        
TimerSubscriptions[i] = null;
                    }
                }
            }
        }
        private 
void updateBase()
        {
            
_objects _objectDictionary.Values.ToArray();
        }
        public 
bool Add(Interfaces.IMapObject _object)
        {
            if (
_object == null) return false;
            if (
_objectDictionary.ContainsKey(_object.UID))
                if (
_objectDictionary[_object.UID] == null)
                    
_objectDictionary.Remove(_object.UID);
            if (!
_objectDictionary.ContainsKey(_object.UID))
            {
                if (
Kernel.GetDistance(_object.X_object.YOwner.Entity.XOwner.Entity.Y) <= Constants.pScreenDistance)
                {
                    
_objectDictionary[_object.UID] = _object;
                    
updateBase();
                    return 
true;
                }
            }
            return 
false;
        }
        public 
bool Remove(Interfaces.IMapObject _object)
        {
            if (
_object == null) return false;
            if (
_objectDictionary.Remove(_object.UID))
            {
                
updateBase();
                if (
_object.MapObjType == MapObjectType.Item)
                {
                    
FloorItem item _object as FloorItem;
                    if (
item.Type >= FloorItem.Effect)
                    {
                        
item.Type FloorItem.RemoveEffect;
                        
Owner.Send(item);
                    }
                    else
                    {
                        
item.Type FloorItem.Remove;
                        
Owner.Send(item);
                        
item.Type FloorItem.Drop;
                    }
                }
                else if (
_object.MapObjType == MapObjectType.Player)
                {
                    
Owner.Send(new Data(true)
                    {
                        
UID _object.UID,
                        
ID Network.GamePackets.Data.RemoveEntity
                    
});
                }
                else if (
_object.MapObjType == MapObjectType.StaticEntity)
                {
                    
Owner.Send(new Data(true)
                    {
                        
UID _object.UID,
                        
ID Network.GamePackets.Data.RemoveEntity
                    
});
                }
                return 
true;
            }
            return 
false;
        }
        public 
bool TryGetValue(uint uidout Entity entity)
        {
            
entity null;
            
Interfaces.IMapObject imo null;
            if (
_objectDictionary.TryGetValue(uidout imo))
            {
                if (
imo == null)
                {
                    
_objectDictionary.Remove(uid);
                    
updateBase();
                    return 
false;
                }
                if (
imo is Entity)
                {
                    
entity imo as Entity;
                    return 
true;
                }
            }
            return 
false;
        }
        public 
bool GetRaceObject(Func<IMapObjectboolpredicateout StaticEntity entity)
        {
            
entity null;
            foreach (var 
obj in Objects)
                if (
obj is StaticEntity)
                    if (
predicate(obj))
                        
entity obj as StaticEntity;
            return 
entity != null;
        }
        public 
bool TryGetSob(uint uidout SobNpcSpawn sob)
        {
            
sob null;
            
Interfaces.IMapObject imo null;
            if (
_objectDictionary.TryGetValue(uidout imo))
            {
                if (
imo == null)
                {
                    
_objectDictionary.Remove(uid);
                    
updateBase();
                    return 
false;
                }
                if (
imo is SobNpcSpawn)
                {
                    
sob imo as SobNpcSpawn;
                    return 
true;
                }
            }
            return 
false;
        }
        public 
bool TryGetFloorItem(uint uidout FloorItem item)
        {
            
item null;
            
Interfaces.IMapObject imo null;
            if (
_objectDictionary.TryGetValue(uidout imo))
            {
                if (
imo == null)
                {
                    
_objectDictionary.Remove(uid);
                    
updateBase();
                    return 
false;
                }
                if (
imo is FloorItem)
                {
                    
item imo as FloorItem;
                    return 
true;
                }
            }
            return 
false;
        }
        public 
IEnumerable<TSelect<T>(MapObjectType typewhere T : class
        {
            foreach (var 
obj in Objects)
                if (
obj != null)
                    if (
obj.MapObjType == type)
                        yield return 
obj as T;
        }
        public 
IEnumerable<TWhere<T>(Func<IMapObjectboolpredicatewhere T : class
        {
            foreach (var 
obj in Objects)
                if (
obj != null)
                    if (
predicate(obj))
                        yield return 
obj as T;
        }
        public 
IEnumerable<TSelectWhere<T>(MapObjectType typeFunc<Tboolpredicatewhere T : class
        {
            foreach (var 
obj in Objects)
                if (
obj != null)
                    if (
obj.MapObjType == type)
                        if (
predicate(obj as T))
                            yield return 
obj as T;
        }
        public 
bool Contains(Interfaces.IMapObject _object)
        {
            if (
_object == null) return false;
            return 
_objectDictionary.ContainsKey(_object.UID);
        }
        public 
bool Contains(uint uid)
        {
            return 
_objectDictionary.ContainsKey(uid);
        }
        public 
void FullWipe()
        {
            foreach (
IMapObject Base in Objects)
            {
                if (
Base == null) continue;
                
Data data = new Data(true);
                
data.UID Base.UID;
                
data.ID Data.RemoveEntity;
                
Owner.Send(data);
                if (
Base.MapObjType == Game.MapObjectType.Player)
                {
                    
GameState pPlayer Base.Owner as GameState;
                    
pPlayer.Screen.Remove(Owner.Entity);
                }
            }
            
Clear();
        }
        public 
void Clear()
        {
            
_objectDictionary.Clear();
            
_objects = new IMapObject[0];
            
#region Poker
            
if (this.Owner.Map.ID == 3053 || this.Owner.Map.ID == 3053)
            {
                foreach (
Poker.Structures.PokerTable p in Poker.Database.Tables.Values)
                {
                    if (
p.MapId == this.Owner.Map.ID)
                    {
                        if (
p.OnScreen == null)
                        {
                            
p.OnScreen = new ConcurrentDictionary<uintuint>();
                        }
                        if (
p.OnScreen.ContainsKey(this.Owner.Entity.UID))
                        {
                            
p.OnScreen.Remove(this.Owner.Entity.UID);
                        }
                    }
                }
            }
            
#endregion
        
}
        public 
void Reload(Interfaces.IPacket spawnWith)
        {
            
CleanUp(spawnWith);
            
#region Poker
            
if (this.Owner.Map.ID == 3053 || this.Owner.Map.ID == 3053)
            {
                foreach (
Poker.Structures.PokerTable p in Poker.Database.Tables.Values)
                {
                    if (
p.MapId == this.Owner.Map.ID)
                    {
                        if (
p.OnScreen == null)
                        {
                            
p.OnScreen = new ConcurrentDictionary<uintuint>();
                        }
                        if (
Kernel.GetDistance(p.Xp.Ythis.Owner.Entity.Xthis.Owner.Entity.Y) > Constants.nScreenDistance && p.OnScreen.ContainsKey(this.Owner.Entity.UID))
                        {
                            
p.OnScreen.Remove(this.Owner.Entity.UID);
                        }
                        if (
Kernel.GetDistance(p.Xp.Ythis.Owner.Entity.Xthis.Owner.Entity.Y) <= Constants.nScreenDistance && !p.OnScreen.ContainsKey(this.Owner.Entity.UID))
                        {
                            
this.Owner.Send(p.ToArray());
                            if (!
p.OnScreen.ContainsKey(this.Owner.Entity.UID))
                                
p.OnScreen.Add(this.Owner.Entity.UIDthis.Owner.Entity.UID);
                        }
                    }
                }
            }
            
#endregion
            
if (Owner.Entity.MapID == 1002)
            {
                foreach (var 
statue in Game.Statue.Statues.Values)
                {
                    if (
statue Owner)
                    {
                        
Statue.TryAdd(statue.UIDstatue);
                    }
                    else if (
statue Owner)
                    {
                        
Game.Statue astatue;
                        
Statue.TryRemove(statue.UIDout astatue);
                    }
                }
            }
            else
            {
                if (
Statue.Count 0)
                    
Statue.Clear();
            }
            try
            {
                foreach (
GameState pClient in Kernel.GamePool.Values)
                {
                    if (
pClient == null) return;
                    if (
pClient.Entity == null) return;
                    if (
Owner == null) return;
                    if (
Owner.Entity == null) return;
                    if (
pClient.Entity.UID != Owner.Entity.UID)
                    {
                        if (
pClient.Map.ID == Owner.Map.ID)
                        {
                            
short dist Kernel.GetDistance(pClient.Entity.XpClient.Entity.YOwner.Entity.XOwner.Entity.Y);
                            if (
dist <= Constants.pScreenDistance && !Contains(pClient.Entity))
                            {
                                if (
pClient.Guild != null)
                                    
pClient.Guild.SendName(Owner);
                                if (
Owner.Guild != null)
                                    
Owner.Guild.SendName(pClient);
                                if (
pClient.Entity.InteractionInProgress && pClient.Entity.InteractionWith != Owner.Entity.UID && pClient.Entity.InteractionSet)
                                {
                                    if (
pClient.Entity.Body == 2005 || pClient.Entity.Body == 1006)
                                    {
                                        if (
pClient.Entity.InteractionX == pClient.Entity.&& pClient.Entity.== pClient.Entity.InteractionY)
                                        {
                                            
Attack atak = new Attack(true);
                                            
atak.Attacker pClient.Entity.UID;
                                            
atak.Attacked pClient.Entity.InteractionWith;
                                            
atak.pClient.Entity.X;
                                            
atak.pClient.Entity.Y;
                                            
atak.AttackType 49;
                                            
atak.Damage pClient.Entity.InteractionType;
                                            
Owner.Send(atak);
                                        }
                                    }
                                    else
                                    {
                                        if (
Kernel.GamePool.ContainsKey(pClient.Entity.InteractionWith))
                                        {
                                            
Client.GameState Cs Kernel.GamePool[pClient.Entity.InteractionWith] as Client.GameState;
                                            if (
Cs.Entity.== pClient.Entity.InteractionX && pClient.Entity.== pClient.Entity.InteractionY)
                                            {
                                                
Attack atak = new Attack(true);
                                                
atak.Attacker pClient.Entity.UID;
                                                
atak.Attacked pClient.Entity.InteractionWith;
                                                
atak.pClient.Entity.X;
                                                
atak.pClient.Entity.Y;
                                                
atak.AttackType 49;
                                                
atak.Damage pClient.Entity.InteractionType;
                                                
Owner.Send(atak);
                                            }
                                        }
                                    }
                                }
                                if (
pClient.Pet.Pets.Count 0)
                                {
                                    foreach (var 
pet in pClient.Pet.Pets.Values)
                                    {
                                        if (
pet == null) continue;
                                        if (
pet.Entity == null) continue;
                                        if (
Kernel.GetDistance(pet.Entity.Xpet.Entity.YOwner.Entity.XOwner.Entity.Y) <= 18 && !Contains(pet.Entity.UID))
                                        {
                                            if (!
pet.Entity.Dead)
                                                
pet.Entity.SendSpawn(Owner);
                                        }
                                    }
                                }
                                if (
pClient.Map.BaseID == 700)
                                {
                                    if (
Owner.InQualifier())
                                    {
                                        if (
pClient.InQualifier())
                                        {
                                            
Owner.Entity.SendSpawn(pClient);
                                            
pClient.Entity.SendSpawn(Owner);
                                            if (
pClient.Guild != null)
                                                
Owner.Entity.SendSpawn(pClientfalse);
                                            if (
Owner.Guild != null)
                                                
pClient.Entity.SendSpawn(Ownerfalse);
                                            if (
spawnWith != null)
                                                
pClient.Send(spawnWith);
                                        }
                                        else
                                        {
                                            
Owner.Entity.SendSpawn(pClient);
                                            if (
pClient.Guild != null)
                                                
Owner.Entity.SendSpawn(pClientfalse);
                                            
Add(pClient.Entity);
                                            if (
spawnWith != null)
                                                
pClient.Send(spawnWith);
                                        }
                                    }
                                    else
                                    {
                                        if (
pClient.InQualifier())
                                        {
                                            
pClient.Entity.SendSpawn(Owner);
                                            if (
Owner.Guild != null)
                                                
pClient.Entity.SendSpawn(Ownerfalse);
                                            
pClient.Screen.Add(Owner.Entity);
                                            if (
spawnWith != null)
                                                
Owner.Send(spawnWith);
                                        }
                                        else
                                        {
                                            
Owner.Entity.SendSpawn(pClient);
                                            
pClient.Entity.SendSpawn(Owner);
                                            if (
pClient.Guild != null)
                                                
Owner.Entity.SendSpawn(pClientfalse);
                                            if (
Owner.Guild != null)
                                                
pClient.Entity.SendSpawn(Ownerfalse);
                                            if (
spawnWith != null)
                                                
pClient.Send(spawnWith);
                                        }
                                    }
                                }
                                else
                                {
                                    
Owner.Entity.SendSpawn(pClient);
                                    
pClient.Entity.SendSpawn(Owner);
                                    if (
pClient.Guild != null)
                                        
Owner.Entity.SendSpawn(pClientfalse);
                                    if (
Owner.Guild != null)
                                        
pClient.Entity.SendSpawn(Ownerfalse);
                                    if (
spawnWith != null)
                                        
pClient.Send(spawnWith);
                                }
                            }
                        }
                    }
                }
                var 
Map Owner.Map;
                
#region Npcs
                
foreach (Interfaces.INpc npc in Map.Npcs.Values)
                {
                    if (
npc == null) continue;
                    if (
Kernel.GetDistance(npc.Xnpc.YOwner.Entity.XOwner.Entity.Y) > 16) continue;
                    if (
Contains(npc.UID)) continue;
                    
npc.SendSpawn(Ownerfalse);
                }
                
#endregion
                #region ThunderCloud
                
foreach (var Cloud in Map.Clouds.Values)
                {
                    if (
Cloud == null) continue;
                    if (
Kernel.GetDistance(Cloud.XCloud.YOwner.Entity.XOwner.Entity.Y) > 16) continue;
                    
Cloud.SendSpawn(Ownerfalse);
                }
                
#endregion
                #region Items + map effects
                
foreach (var item in Map.FloorItems.Values)
                {
                    if (
item == null) continue;
                    if (
Kernel.GetDistance(item.Xitem.YOwner.Entity.XOwner.Entity.Y) > 16) continue;
                    if (
Contains(item.UID)) continue;
                    if (
item.Type == FloorItem.Effect)
                    {
                        
#region Taoista Agua/Fuego
                        
if (item.ItemID == FloorItem.FlameLotus || item.ItemID == FloorItem.AuroraLotus)
                        {
                            if (
item.OnFloor.AddSeconds(8).Next(timeTime32.Now.AllMilliseconds()))
                            {
                                
item.Type Network.GamePackets.FloorItem.RemoveEffect;
                                foreach (
Interfaces.IMapObject _obj in Objects)
                                    if (
_obj != null)
                                        if (
_obj.MapObjType == MapObjectType.Player)
                                            (
_obj as Entity).Owner.Send(item);
                                
Map.RemoveFloorItem(item);
                            }
                            else
                                
item.SendSpawn(Ownerfalse);
                        }
                        else
                        
#endregion
                                #region TwilightDance
                                
if (item.ItemID == FloorItem.TwilightDance)
                                {
                                    if (
item.OnFloor.AddSeconds(1).Next(timeTime32.Now.AllMilliseconds()))
                                    {
                                        
item.Type Network.GamePackets.FloorItem.RemoveEffect;
                                        foreach (
Interfaces.IMapObject _obj in Objects)
                                            if (
_obj != null)
                                                if (
_obj.MapObjType == MapObjectType.Player)
                                                    (
_obj as Entity).Owner.Send(item);
                                        
Map.RemoveFloorItem(item);
                                    }
                                    else
                                        
item.SendSpawn(Ownerfalse);
                                }
                                else
                                
#endregion
                                    
if (item.ItemID == FloorItem.DaggerStorm || item.ItemID == FloorItem.FuryofEgg || item.ItemID == FloorItem.ShacklingIce || item.ItemID == 31)
                                    {
                                        if (
item.OnFloor.AddSeconds(4).Next(timeTime32.Now.AllMilliseconds()))
                                        {
                                            
item.Type FloorItem.RemoveEffect;
                                            foreach (
Interfaces.IMapObject _obj in Objects)
                                                if (
_obj != null)
                                                    if (
_obj.MapObjType == MapObjectType.Player)
                                                        (
_obj as Entity).Owner.Send(item);
                                            
Map.RemoveFloorItem(item);
                                        }
                                        else
                                            
item.SendSpawn(Ownerfalse);
                                    }
                                    else
                                        
item.SendSpawn(Ownerfalse);
                    }
                    else
                    {
                        if ((
Time32.Now item.OnFloor.AddSeconds(Constants.FloorItemSeconds)) || item.PickedUpAlready)
                        {
                            
item.Type Network.GamePackets.FloorItem.Remove;
                            
Map.RemoveFloorItem(item);
                        }
                    }
                    
item.SendSpawn(Owner);
                }
                
#endregion
                
foreach (Game.Entity monster in Map.Entities.Values)
                {
                    if (
monster == null) continue;
                    if (
Kernel.GetDistance(monster.Xmonster.YOwner.Entity.XOwner.Entity.Y) <= 16 && !Contains(monster.UID))
                    {
                        if (!
monster.Dead)
                        {
                            
monster.SendSpawn(Ownerfalse);
                            if (
monster.MaxHitpoints 65535)
                            {
                                
FlagsUpdate upd = new FlagsUpdate(true)
                                {
                                    
UID monster.UID
                                
};
                                
upd.Append((byte)FlagsUpdate.DataType.Hitpointsmonster.Hitpoints);
                                
Owner.Send(upd);
                            }
                        }
                    }
                }
                
#region RaceItems
                
if (Owner.Map.StaticEntities.Count != 0)
                {
                    foreach (var 
item in Owner.Map.StaticEntities.Values)
                    {
                        if (
item == null) continue;
                        if (!
item.Viable) continue;
                        if (
Kernel.GetDistance(item.Xitem.YOwner.Entity.XOwner.Entity.Y) > 16) continue;
                        if (
Contains(item.UID)) continue;
                        
item.SendSpawn(Owner);
                    }
                }
                
#endregion
                
foreach (Game.Entity monster in Map.Companions.Values)
                {
                    if (
monster == null) continue;
                    if (
Kernel.GetDistance(monster.Xmonster.YOwner.Entity.XOwner.Entity.Y) <= 18 && !Contains(monster.UID))
                    {
                        if (!
monster.Dead)
                        {
                            
monster.SendSpawn(Owner);
                        }
                    }
                }
                if (
Owner.Map.ID == Roulette.Database.Roulettes.RouletteTable.MapID)
                {
                    foreach (var 
R in Roulette.Database.Roulettes.RoulettesPoll.Values)
                    {
                        if (
Kernel.GetDistance(R.SpawnPacket.XR.SpawnPacket.YOwner.Entity.XOwner.Entity.Y) <= Constants.nScreenDistance )
                        {
                            
Owner.Send(R.SpawnPacket);
                        }
                    }
                }
            }
            catch (
Exception e)
            {
                
Server.SaveException(e);
            }
        }
        public 
void CleanUp(Interfaces.IPacket spawnWith)
        {
            
bool remove;
            try
            {
                foreach (
IMapObject Base in Objects)
                {
                    if (
Base == null) continue;
                    if (
this.Owner.Map.ID == 3053 || this.Owner.Map.ID == 3053)
                    {
                        foreach (
PokerTable pokerTable in Poker.Database.Tables.Values)
                        {
                            if ((int)
pokerTable.MapId == (int)this.Owner.Map.ID)
                            {
                                if (
pokerTable.OnScreen == null)
                                    
pokerTable.OnScreen = new ConcurrentDictionary<uintuint>();
                                if ((int)
Kernel.GetDistance(pokerTable.XpokerTable.Ythis.Owner.Entity.Xthis.Owner.Entity.Y) > 19 && pokerTable.OnScreen.ContainsKey(this.Owner.Entity.UID))
                                    
pokerTable.OnScreen.Remove(this.Owner.Entity.UID);
                                if ((int)
Kernel.GetDistance(pokerTable.XpokerTable.Ythis.Owner.Entity.Xthis.Owner.Entity.Y) <= 19 && !pokerTable.OnScreen.ContainsKey(this.Owner.Entity.UID))
                                {
                                    
this.Owner.Send(pokerTable.ToArray());
                                    
this.Owner.Send(pokerTable.Update(Poker.Enums.TableUpdate.PlayerCount0uL));
                                    
this.Owner.Send(pokerTable.Update(Poker.Enums.TableUpdate.Statue0uL));
                                    
this.Owner.Send(pokerTable.Update(Poker.Enums.TableUpdate.Chips0uL));
                                    
pokerTable.OnScreen.Add(this.Owner.Entity.UIDthis.Owner.Entity.UID);
                                    foreach (var 
p in pokerTable.PlayersOnTable())
                                    {
                                        if (
Kernel.GamePool.ContainsKey(p.Uid))
                                        {
                                            var 
client2 Kernel.GamePool[p.Uid];
                                            
this.Owner.Send(this.Owner.Entity.CharBuffer.ToConquerPacket(10014));
                                        }
                                    }
                                }
                            }
                        }
                    }
                    
remove false;
                    if (
Base.MapObjType == MapObjectType.Monster)
                    {
                        if ((
Base as Entity).Dead)
                        {
                            if (
Time32.Now > (Base as Entity).DeathStamp.AddSeconds(8))
                                
remove true;
                            else 
remove false;
                        }
                        if (
Kernel.GetDistance(Owner.Entity.XOwner.Entity.YBase.XBase.Y) >= Constants.remScreenDistance)
                            
remove true;
                        if (
remove)
                        {
                            if ((
Base as Entity).MonsterInfo.InSight == Owner.Entity.UID)
                                (
Base as Entity).MonsterInfo.InSight 0;
                        }
                    }
                    else if (
Base.MapObjType == MapObjectType.Player)
                    {
                        if (
remove = (Kernel.GetDistance(Owner.Entity.XOwner.Entity.YBase.XBase.Y) >= Constants.pScreenDistance))
                        {
                            
GameState pPlayer Base.Owner as GameState;
                            
pPlayer.Screen.Remove(Owner.Entity);
                        }
                    }
                    else if (
Base.MapObjType == MapObjectType.Item)
                    {
                        
remove = (Kernel.GetDistance(Owner.Entity.XOwner.Entity.YBase.XBase.Y) >= 22);
                    }
                    else
                    {
                        
remove = (Kernel.GetDistance(Owner.Entity.XOwner.Entity.YBase.XBase.Y) >= Constants.remScreenDistance);
                    }
                    if (
Base.MapID != Owner.Map.ID)
                        
remove true;
                    if (
remove)
                    {
                        
Remove(Base);
                    }
                }
            }
            catch (
Exception e)
            {
                
Server.SaveException(e);
            }
        }
    }