private void OnKill(Session session) { IsAlive = false; // This will determine if the derived type is a player var isDerivedPlayer = Guid.IsPlayer(); if (!isDerivedPlayer) { // Create and send the death notice string killMessage = $"{session.Player.Name} has killed {Name}."; var creatureDeathEvent = new GameEventDeathNotice(session, killMessage); session.Network.EnqueueSend(creatureDeathEvent); } // MovementEvent: (Hand-)Combat or in the case of smite: from Standing to Death // TODO: Check if the duration of the motion can somehow be computed UniversalMotion motionDeath = new UniversalMotion(MotionStance.Standing, new MotionItem(MotionCommand.Dead)); CurrentLandblock.EnqueueBroadcastMotion(this, motionDeath); // If the object is a creature, Remove it from from Landblock if (!isDerivedPlayer) { CurrentLandblock.RemoveWorldObject(Guid, false); } }
public void Kill(Session session) { IsAlive = false; // Create and send the death notice string killMessage = $"{session.Player.Name} has killed {Name}."; var creatureDeathEvent = new GameEventDeathNotice(session, killMessage); session.Network.EnqueueSend(creatureDeathEvent); // MovementEvent: (Hand-)Combat or in the case of smite: from Standing to Death // TODO: Check if the duration of the motion can somehow be computed GeneralMotion motionDeath = new GeneralMotion(MotionStance.Standing, new MotionItem(MotionCommand.Dead)); QueuedGameAction actionDeath = new QueuedGameAction(this.Guid.Full, motionDeath, 2.0f, true, GameActionType.MovementEvent); session.Player.AddToActionQueue(actionDeath); // Create Corspe and set a location on the ground // TODO: set text of killer in description and find a better computation for the location, some corpse could end up in the ground var corpse = CorpseObjectFactory.CreateCorpse(this, this.Location); corpse.Location.PositionY -= corpse.PhysicsData.ObjScale; corpse.Location.PositionZ -= corpse.PhysicsData.ObjScale / 2; // Remove Creature from Landblock and add Corpse in that location via the ActionQueue to honor the motion delays QueuedGameAction removeCreature = new QueuedGameAction(this.Guid.Full, this, true, true, GameActionType.ObjectDelete); QueuedGameAction addCorpse = new QueuedGameAction(this.Guid.Full, corpse, true, GameActionType.ObjectCreate); session.Player.AddToActionQueue(removeCreature); session.Player.AddToActionQueue(addCorpse); }
public virtual void OnKill(Session session) { IsAlive = false; // This will determine if the derived type is a player var isDerivedPlayer = Guid.IsPlayer(); // TODO: Implement some proper respawn timers, check the generators for that RespawnTime = WorldManager.PortalYearTicks + 10; if (!isDerivedPlayer) { // Create and send the death notice string killMessage = $"{session.Player.Name} has killed {Name}."; var creatureDeathEvent = new GameEventDeathNotice(session, killMessage); session.Network.EnqueueSend(creatureDeathEvent); } // MovementEvent: (Hand-)Combat or in the case of smite: from Standing to Death // TODO: Check if the duration of the motion can somehow be computed UniversalMotion motionDeath = new UniversalMotion(MotionStance.Standing, new MotionItem(MotionCommand.Dead)); QueuedGameAction actionDeath = new QueuedGameAction(this.Guid.Full, motionDeath, 2.0f, true, GameActionType.MovementEvent); session.Player.AddToActionQueue(actionDeath); // Create Corspe and set a location on the ground // TODO: set text of killer in description and find a better computation for the location, some corpse could end up in the ground var corpse = CorpseObjectFactory.CreateCorpse(this, this.Location); corpse.Location.PositionY -= corpse.PhysicsData.ObjScale; corpse.Location.PositionZ -= corpse.PhysicsData.ObjScale / 2; // Corpses stay on the ground for 5 * player level but minimum 1 hour // corpse.DespawnTime = Math.Max((int)session.Player.PropertiesInt[Enum.Properties.PropertyInt.Level] * 5, 360) + WorldManager.PortalYearTicks; // as in live corpse.DespawnTime = 20 + WorldManager.PortalYearTicks; // only for testing // If the object is a creature, Remove it from from Landblock if (!isDerivedPlayer) { QueuedGameAction removeCreature = new QueuedGameAction(this.Guid.Full, this, true, true, GameActionType.ObjectDelete); session.Player.AddToActionQueue(removeCreature); } // Add Corpse in that location via the ActionQueue to honor the motion delays QueuedGameAction addCorpse = new QueuedGameAction(this.Guid.Full, corpse, true, GameActionType.ObjectCreate); session.Player.AddToActionQueue(addCorpse); }