public override async void Die() { Lock(null); EntitiesLockedSafe(x => { if (x.ID == AttackTraceAssembly.CurrentMainAttacker && x is PlayerController killer) { killer.PlayerItemsAssembly.ChangeUridium(5000); killer.PlayerItemsAssembly.ChangeExperience(500 * 1024, false, true); killer.PlayerItemsAssembly.ChangeHonor(5000); } if (x.Locked != null && x.Locked.ID == ID) { x.Lock(null); } }); ICommand killCommand = PacketBuilder.KillCommand(this); EntitesInRange(x => x.Send(killCommand)); Spacemap?.Remove(this); // remove from spacemap TimerStop(); await Task.Delay(3000); new NpcController(ID + 1, "Ehrenhaftes NPC " + (ID + 1), Faction.NONE); }
public override void Dispose() { if (_disposed || !(_disposed = true)) { return; } Lock(null); Spacemap?.Remove(this); GameManager.Remove(ID); UpdateState(); base.Dispose(); Connection?.Dispose(false); _logger.LogInformation($"['{Account.Username}'] unloaded!"); }
public override void Die() { PlayerEffectsAssembly.CureInfection(true); MovementAssembly.Move(MovementAssembly.ActualPosition(), MovementAssembly.ActualPosition()); Lock(null); EntitiesLockedSafe(x => { if (x.Locked != null && x.Locked.ID == ID) { x.Lock(null); } }); ICommand killCommand = PacketBuilder.KillCommand(this); GameManager.Get(AttackTraceAssembly.CurrentMainAttacker, out PlayerController killer); Send(killCommand, PacketBuilder.KillScreen.KillScreenCommand(DestructionTypeModule.PLAYER, killer)); // send kill screen EntitesInRange(x => { if (x.ID == AttackTraceAssembly.CurrentMainAttacker) // killer // render rewards etc. { x.Send( killCommand, PacketBuilder.Legacy("0|A|STD|You killed " + Account.Username + "!") ); } else { x.Send(killCommand); } }); AttackTraceAssembly.Reset(); Spacemap?.Remove(this); // remove from spacemap TimerStop(); }
public void Handle() { if (Activated && !_detonated) { _detonated = true; foreach (var entity in Spacemap.InRange(Position, 1000).ToList()) { if (!(entity is PlayerController playerController)) { continue; } if (playerController.TryRemoveMine(this)) { playerController.Send(Explode()); } else { playerController.Send(Render(), Explode()); } if (playerController.MovementAssembly.ActualPosition().DistanceTo(Position) <= 300 * RadiusBoost) { if (!playerController.EffectsAssembly.HasProtection && !playerController.SpecialItemsAssembly.IsInvicible) { if (Item.ID == Mine.ACM_01.ID) { double damage = playerController.HangarAssembly.Hitpoints * 0.2 * DamageBoost; int shieldDamage = Math.Abs(playerController.HangarAssembly.ChangeShield(-(int)(damage * playerController.BoosterAssembly.Get(BoosterType.SHIELD_ABSORBATION)), false)); int hitpointsDamage = Math.Abs(playerController.HangarAssembly.ChangeHitpoints(-(int)(damage - shieldDamage), false)); playerController.AttackTraceAssembly.LogAttack(Owner, shieldDamage, hitpointsDamage, false); playerController.HangarAssembly.CheckDeath(); ICommand damageCommand = PacketBuilder.AttackCommand(Owner, playerController, AttackTypeModule.MINE, shieldDamage + hitpointsDamage); playerController.Send(damageCommand); playerController.EntitiesLocked(x => x.Send(damageCommand)); } else if (Item.ID == Mine.DDM_01.ID) { int damage = Math.Abs(playerController.HangarAssembly.ChangeHitpoints(-(int)(playerController.HangarAssembly.MaxHitpoints * 0.2 * DamageBoost), false)); playerController.AttackTraceAssembly.LogAttack(Owner, 0, damage, false); playerController.HangarAssembly.CheckDeath(); ICommand damageCommand = PacketBuilder.AttackCommand(Owner, playerController, AttackTypeModule.MINE, damage); playerController.Send(damageCommand); playerController.EntitiesLocked(x => x.Send(damageCommand)); } else if (Item.ID == Mine.IM_01.ID) { playerController.PlayerEffectsAssembly.Infect(15 * 60000); double damage = playerController.HangarAssembly.Hitpoints * 0.2 * DamageBoost; int shieldDamage = Math.Abs(playerController.HangarAssembly.ChangeShield(-(int)(damage * playerController.BoosterAssembly.Get(BoosterType.SHIELD_ABSORBATION)), false)); int hitpointsDamage = Math.Abs(playerController.HangarAssembly.ChangeHitpoints(-(int)(damage - shieldDamage), false)); playerController.AttackTraceAssembly.LogAttack(Owner, shieldDamage, hitpointsDamage, false); playerController.HangarAssembly.CheckDeath(); ICommand damageCommand = PacketBuilder.AttackCommand(Owner, playerController, AttackTypeModule.MINE, shieldDamage + hitpointsDamage); playerController.Send(damageCommand); playerController.EntitiesLocked(x => x.Send(damageCommand)); } else if (Item.ID == Mine.SABM_01.ID) { int damage = Math.Abs(playerController.HangarAssembly.ChangeShield(-(int)(playerController.HangarAssembly.Shield * 0.5 * DamageBoost), false)); playerController.AttackTraceAssembly.LogAttack(Owner, damage, 0, false); ICommand damageCommand = PacketBuilder.AttackCommand(Owner, playerController, AttackTypeModule.MINE, damage); playerController.Send(damageCommand); playerController.EntitiesLocked(x => x.Send(damageCommand)); } else if (Item.ID == Mine.SLM_01.ID) { playerController.EffectsAssembly.SlowMine(3000); } } if (Item.ID == Mine.EMPM_01.ID) { playerController.EffectsAssembly.UnCloak(); } } } Spacemap.Remove(this); } }