public virtual void LeaveWorld(Entity entity) { if (entity is Player) { Player dummy; Players.TryRemove(entity.Id, out dummy); PlayersCollision.Remove(entity); } else if (entity is Enemy) { Enemy dummy; Enemies.TryRemove(entity.Id, out dummy); EnemiesCollision.Remove(entity); } else if (entity is Projectile) { Projectile p = entity as Projectile; Projectiles.TryRemove(new Tuple <int, byte>(p.ProjectileOwner.Self.Id, p.ProjectileId), out p); } else if (entity is StaticObject) { StaticObject dummy; StaticObjects.TryRemove(entity.Id, out dummy); if (entity is Decoy) { PlayersCollision.Remove(entity); } else { EnemiesCollision.Remove(entity); } } entity.Owner = null; }
public virtual void LeaveWorld(Entity entity) { if (entity is Player) { Player dummy; Players.TryRemove(entity.Id, out dummy); PlayersCollision.Remove(entity); // if in trade, cancel it... if (dummy.tradeTarget != null) { dummy.CancelTrade(); } } else if (entity is Enemy) { Enemy dummy; Enemies.TryRemove(entity.Id, out dummy); EnemiesCollision.Remove(entity); if (entity.ObjectDesc.Quest) { Quests.TryRemove(entity.Id, out dummy); } } else if (entity is Projectile) { var p = entity as Projectile; Projectiles.TryRemove(new Tuple <int, byte>(p.ProjectileOwner.Self.Id, p.ProjectileId), out p); } else if (entity is StaticObject) { StaticObject dummy; StaticObjects.TryRemove(entity.Id, out dummy); if (entity.ObjectDesc?.BlocksSight == true) { if (Blocking == 3) { Sight.UpdateRegion(Map, (int)entity.X, (int)entity.Y); } foreach (var plr in Players.Values .Where(p => MathsUtils.DistSqr(p.X, p.Y, entity.X, entity.Y) < Player.RadiusSqr)) { plr.Sight.UpdateCount++; } } if (entity is Decoy) { PlayersCollision.Remove(entity); } else { EnemiesCollision.Remove(entity); } } entity.Dispose(); }
private void TryRemove(Player player) { if (!Players.TryRemove(player.Id, out Player dummy) || !Entities.TryRemove(player.Id, out Entity entity)) { return; } PlayersCollision.Remove(player); }
public virtual int EnterWorld(Entity entity) { if (entity is Player) { entity.Id = GetNextEntityId(); entity.Init(this); Players.TryAdd(entity.Id, entity as Player); PlayersCollision.Insert(entity); SpawnEntity(entity); if (entity.Owner.PvP) { (entity as Player).PvP = true; (entity as Player).SendHelp("You have entered a PvP world!"); } else { (entity as Player).PvP = false; } } else if (entity is Enemy) { entity.Id = GetNextEntityId(); entity.Init(this); Enemies.TryAdd(entity.Id, entity as Enemy); EnemiesCollision.Insert(entity); if (entity.ObjectDesc.Quest) { Quests.TryAdd(entity.Id, entity as Enemy); } if (entity.isPet) { Pets.TryAdd(entity.Id, entity); } } else if (entity is Projectile) { entity.Init(this); var prj = entity as Projectile; Projectiles[new Tuple <int, byte>(prj.ProjectileOwner.Self.Id, prj.ProjectileId)] = prj; } else if (entity is StaticObject) { entity.Id = GetNextEntityId(); entity.Init(this); StaticObjects.TryAdd(entity.Id, entity as StaticObject); if (entity is Decoy) { PlayersCollision.Insert(entity); } else { EnemiesCollision.Insert(entity); } } return(entity.Id); }
public virtual void LeaveWorld(Entity entity) { if (entity is Player) { Player dummy; if (!Players.TryRemove(entity.Id, out dummy)) { Log.WarnFormat("Could not remove {0} from world {1}", entity.Name, Name); } PlayersCollision.Remove(entity); } else if (entity is Enemy) { Enemy dummy; Enemies.TryRemove(entity.Id, out dummy); EnemiesCollision.Remove(entity); if (entity.ObjectDesc.Quest) { Quests.TryRemove(entity.Id, out dummy); } } else { var projectile = entity as Projectile; if (projectile != null) { var p = projectile; Projectiles.TryRemove(new Tuple <int, byte>(p.ProjectileOwner.Self.Id, p.ProjectileId), out p); } else if (entity is StaticObject) { StaticObject dummy; StaticObjects.TryRemove(entity.Id, out dummy); if (entity is Decoy) { PlayersCollision.Remove(entity); } else { EnemiesCollision.Remove(entity); } } else if (entity is Pet) { if (entity.IsPet) { Pet dummy2; Pets.TryRemove(entity.Id, out dummy2); PlayersCollision.Remove(entity); } } } entity.Owner = null; entity.Dispose(); }
private void TryAdd(Player player) { player.Id = GetNextEntityId(); if (!Players.TryAdd(player.Id, player) || !Entities.TryAdd(player.Id, player)) { return; } player.Init(this); PlayersCollision.Insert(player); }
public virtual void LeaveWorld(Entity entity) { if (entity is Player) { Player dummy; Players.TryRemove(entity.Id, out dummy); PlayersCollision.Remove(entity); } else if (entity is Enemy) { Enemy dummy; Enemies.TryRemove(entity.Id, out dummy); EnemiesCollision.Remove(entity); if (entity.ObjectDesc.Quest) { Quests.TryRemove(entity.Id, out dummy); } if (entity.isPet) { Entity dummy2; Pets.TryRemove(entity.Id, out dummy2); } } else if (entity is Projectile) { var p = entity as Projectile; Projectiles.TryRemove(new Tuple <int, byte>(p.ProjectileOwner.Self.Id, p.ProjectileId), out p); } else if (entity is StaticObject) { StaticObject dummy; StaticObjects.TryRemove(entity.Id, out dummy); if (entity is Decoy) { PlayersCollision.Remove(entity); } else { EnemiesCollision.Remove(entity); } } else if (entity is ItemEntity) { ItemEntity dummy; EnemiesCollision.Remove(entity); ItemEntities.TryRemove(entity.Id, out dummy); } entity.Dispose(); entity = null; }
public virtual int EnterWorld(Entity entity) { if (entity is Player) { entity.Id = GetNextEntityId(); entity.Init(this); Players.TryAdd(entity.Id, entity as Player); PlayersCollision.Insert(entity); Interlocked.Increment(ref _totalConnects); } else if (entity is Enemy) { entity.Id = GetNextEntityId(); entity.Init(this); Enemies.TryAdd(entity.Id, entity as Enemy); EnemiesCollision.Insert(entity); if (entity.ObjectDesc.Quest) { Quests.TryAdd(entity.Id, entity as Enemy); } } else if (entity is Projectile) { entity.Init(this); var prj = entity as Projectile; Projectiles[new Tuple <int, byte>(prj.ProjectileOwner.Self.Id, prj.ProjectileId)] = prj; } else if (entity is StaticObject) { entity.Id = GetNextEntityId(); entity.Init(this); StaticObjects.TryAdd(entity.Id, entity as StaticObject); if (entity is Decoy) { PlayersCollision.Insert(entity); } else { EnemiesCollision.Insert(entity); } } else if (entity is Pet) { entity.Id = GetNextEntityId(); entity.Init(this); Pets.TryAdd(entity.Id, entity as Pet); PlayersCollision.Insert(entity); } return(entity.Id); }
public virtual int EnterWorld(Entity entity) { if (entity is Player player) { TryAdd(player); } else { if (entity is Enemy enemy) { TryAdd(enemy); } else { if (entity is Projectile projectile) { TryAdd(projectile); } else { if (entity is GameObject gameObject) { TryAdd(gameObject); if (entity is Decoy) { PlayersCollision.Insert(entity); } else { EnemiesCollision.Insert(entity); } } else { return(entity.Id); } } } } return(entity.Id); }
public virtual void LeaveWorld(Entity entity) { if (entity is Player) { TryRemove(entity as Player); } else { if (entity is Enemy) { TryRemove(entity as Enemy); } else { if (entity is Projectile) { TryRemove(entity as Projectile); } else { if (entity is GameObject) { TryRemove(entity as GameObject); if (entity is Decoy) { PlayersCollision.Remove(entity); } else { EnemiesCollision.Remove(entity); } } } } } entity.Dispose(); entity = null; }
public virtual int EnterWorld(Entity entity) { if (entity is Player) { entity.Id = GetNextEntityId(); entity.Init(this); Players.TryAdd(entity.Id, entity as Player); PlayersCollision.Insert(entity); } else if (entity is Enemy) { entity.Id = GetNextEntityId(); entity.Init(this); Enemies.TryAdd(entity.Id, entity as Enemy); } else if (entity is Projectile) { entity.Init(this); Projectile prj = entity as Projectile; Projectiles[new Tuple <int, byte>(prj.ProjectileOwner.Self.Id, prj.ProjectileId)] = prj; } else if (entity is StaticObject) { entity.Id = GetNextEntityId(); entity.Init(this); StaticObjects.TryAdd(entity.Id, entity as StaticObject); if (entity is Decoy) { PlayersCollision.Insert(entity); } else { EnemiesCollision.Insert(entity); } } return(entity.Id); }
//public void FromJsonMap(string file) //{ // if (File.Exists(file)) // { // var wmap = Json2Wmap.Convert(File.ReadAllText(file)); // FromWorldMap(new MemoryStream(wmap)); // } // else // { // throw new FileNotFoundException("Json file not found!", file); // } //} //public void FromJsonStream(Stream dat) //{ // byte[] data = { }; // dat.Read(data, 0, (int)dat.Length); // var json = Encoding.ASCII.GetString(data); // var wmap = Json2Wmap.Convert(json); // FromWorldMap(new MemoryStream(wmap)); //} //not working public virtual int EnterWorld(Entity entity) { var player = entity as Player; if (player != null) { try { player.Id = GetNextEntityId(); entity.Init(this); Players.TryAdd(player.Id, player); PlayersCollision.Insert(player); } catch (Exception e) { Log.Error(e); } } else { var enemy = entity as Enemy; if (enemy != null) { enemy.Id = GetNextEntityId(); entity.Init(this); Enemies.TryAdd(enemy.Id, enemy); EnemiesCollision.Insert(enemy); if (enemy.ObjectDesc.Quest) { Quests.TryAdd(enemy.Id, enemy); } } else { var projectile = entity as Projectile; if (projectile != null) { projectile.Init(this); var prj = projectile; Projectiles[new Tuple <int, byte>(prj.ProjectileOwner.Self.Id, prj.ProjectileId)] = prj; } else { var staticObject = entity as StaticObject; if (staticObject != null) { staticObject.Id = GetNextEntityId(); staticObject.Init(this); StaticObjects.TryAdd(staticObject.Id, staticObject); if (entity is Decoy) { PlayersCollision.Insert(staticObject); } else { EnemiesCollision.Insert(staticObject); } } else { var pet = entity as Pet; if (pet == null) { return(entity.Id); } if (pet.IsPet) { pet.Id = GetNextEntityId(); pet.Init(this); if (!Pets.TryAdd(pet.Id, pet)) { Log.Error("Failed to add pet!"); } PlayersCollision.Insert(pet); } else { Log.WarnFormat("This is not a real pet! {0}", pet.Name); } } } } } return(entity.Id); }
public virtual void LeaveWorld(Entity entity) { if (entity is Player) { Player dummy; if (!Players.TryRemove(entity.Id, out dummy)) { Log.WarnFormat("Could not remove {0} from world {1}", entity.Name, Name); } PlayersCollision.Remove(entity); } else if (entity is Enemy) { Enemy dummy; Enemies.TryRemove(entity.Id, out dummy); EnemiesCollision.Remove(entity); if (entity.ObjectDesc.Quest) { Quests.TryRemove(entity.Id, out dummy); } foreach (var i in (entity as Enemy).DamageCounter.GetPlayerData()) { if (i.Item1 != null) { var player = i.Item1; var enemy = (entity as Enemy); switch (enemy.Name) { case "Archdemon Malphas": player.playerQuestManager.ProcessQuestAction(1); break; case "Septavius the Ghost God": player.playerQuestManager.ProcessQuestAction(2); break; case "Oryx the Mad God 2": player.playerQuestManager.ProcessQuestAction(3); // quest id break; } } } } else { var projectile = entity as Projectile; if (projectile != null) { var p = projectile; Projectiles.TryRemove(new Tuple <int, byte>(p.ProjectileOwner.Self.Id, p.ProjectileId), out p); } else if (entity is StaticObject) { StaticObject dummy; StaticObjects.TryRemove(entity.Id, out dummy); if (entity is Decoy) { PlayersCollision.Remove(entity); } else { EnemiesCollision.Remove(entity); } } else if (entity is Pet) { if (entity.IsPet) { Pet dummy2; Pets.TryRemove(entity.Id, out dummy2); PlayersCollision.Remove(entity); } } } entity.Owner = null; entity.Dispose(); }
public virtual void LeaveWorld(Entity entity) { if (!(entity is Pet || entity is Portal)) { if (entity is Wall && entity.ObjectDesc != null && entity.ObjectDesc.FullOccupy || entity.ObjectDesc.OccupySquare || entity.ObjectDesc.EnemyOccupySquare) { WmapTile tile = Map[(int)entity.X, (int)entity.Y].Clone(); tile.TileId = Map[(int)entity.X, (int)entity.Y].TileId; tile.ObjType = 0; tile.ObjectDesc = null; Map[(int)entity.X, (int)entity.Y] = tile; } } if (entity is Player) { Player dummy; if (!Players.TryRemove(entity.Id, out dummy)) { Console.WriteLine("Could not remove {0} from world {1}", entity.Name, Name); } PlayersCollision.Remove(entity); } else if (entity is Enemy) { Enemy dummy; Enemies.TryRemove(entity.Id, out dummy); EnemiesCollision.Remove(entity); if (entity.ObjectDesc.Quest) { Quests.TryRemove(entity.Id, out dummy); } } else { var projectile = entity as Projectile; if (projectile != null) { var p = projectile; Projectiles.TryRemove(new Tuple <int, byte>(p.ProjectileOwner.Self.Id, p.ProjectileId), out p); } else if (entity is StaticObject) { StaticObject dummy; StaticObjects.TryRemove(entity.Id, out dummy); if (entity is Decoy) { PlayersCollision.Remove(entity); } else { EnemiesCollision.Remove(entity); } } else if (entity is Pet) { if (entity.IsPet) { Pet dummy2; Pets.TryRemove(entity.Id, out dummy2); PlayersCollision.Remove(entity); } } } entity.Owner = null; entity.Dispose(); }