public override void ActOnUse(ObjectGuid playerId) { Player player = CurrentLandblock.GetObject(playerId) as Player; if (player == null) { return; } ////if (playerDistanceTo >= 2500) ////{ //// var sendTooFarMsg = new GameEventDisplayStatusMessage(player.Session, StatusMessageType1.Enum_0037); //// player.Session.Network.EnqueueSend(sendTooFarMsg, sendUseDoneEvent); //// return; ////} if (!player.IsWithinUseRadiusOf(this)) { player.DoMoveTo(this); } else { if (AllowedActivator == null) { Activate(playerId); } var sendUseDoneEvent = new GameEventUseDone(player.Session); player.Session.Network.EnqueueSend(sendUseDoneEvent); } }
public override void ActOnUse(ObjectGuid playerId) { Player player = CurrentLandblock.GetObject(playerId) as Player; if (player == null) { return; } ////if (playerDistanceTo >= 2500) ////{ //// var sendTooFarMsg = new GameEventDisplayStatusMessage(player.Session, StatusMessageType1.Enum_0037); //// player.Session.Network.EnqueueSend(sendTooFarMsg, sendUseDoneEvent); //// return; ////} if (!player.IsWithinUseRadiusOf(this)) { player.DoMoveTo(this); } else { ActionChain checkDoorChain = new ActionChain(); checkDoorChain.AddAction(this, () => { if (!IsLocked ?? false) { if (!IsOpen ?? false) { Open(playerId); } else { Close(playerId); } // Create Door auto close timer ActionChain autoCloseTimer = new ActionChain(); autoCloseTimer.AddDelaySeconds(ResetInterval); autoCloseTimer.AddAction(this, () => Reset()); autoCloseTimer.EnqueueChain(); } else { CurrentLandblock.EnqueueBroadcastSound(this, Sound.OpenFailDueToLock); } var sendUseDoneEvent = new GameEventUseDone(player.Session); player.Session.Network.EnqueueSend(sendUseDoneEvent); }); checkDoorChain.EnqueueChain(); } }
public override void ActOnUse(ObjectGuid playerId) { Player player = CurrentLandblock.GetObject(playerId) as Player; if (player == null) { return; } ////if (playerDistanceTo >= 2500) ////{ //// var sendTooFarMsg = new GameEventDisplayStatusMessage(player.Session, StatusMessageType1.Enum_0037); //// player.Session.Network.EnqueueSend(sendTooFarMsg, sendUseDoneEvent); //// return; ////} if (!player.IsWithinUseRadiusOf(this) && Viewer != player.Guid.Full) { player.DoMoveTo(this); } else { if (!(IsLocked ?? false)) { if (!(IsOpen ?? false)) { var turnToMotion = new UniversalMotion(MotionStance.Standing, Location, Guid); turnToMotion.MovementTypes = MovementTypes.TurnToObject; ActionChain turnToTimer = new ActionChain(); turnToTimer.AddAction(this, () => player.CurrentLandblock.EnqueueBroadcastMotion(player, turnToMotion));; turnToTimer.AddDelaySeconds(1); turnToTimer.AddAction(this, () => Open(player)); turnToTimer.EnqueueChain(); return; } else { if (Viewer == player.Guid.Full) { Close(player); } // else error msg? } } else { CurrentLandblock.EnqueueBroadcastSound(this, Sound.OpenFailDueToLock); } player.SendUseDoneEvent(); } }
/// <summary> /// Fired when Client clicks on the Vendor World Object /// </summary> /// <param name="playerId"></param> public override void ActOnUse(ObjectGuid playerId) { Player player = CurrentLandblock.GetObject(playerId) as Player; if (player == null) { return; } if (!player.IsWithinUseRadiusOf(this)) { player.DoMoveTo(this); } else { LoadInventory(); ApproachVendor(player); } }
/// <summary> /// This is the OnUse method. This is just an initial implemention. I have put in the turn to action at this point. /// If we are out of use radius, move to the object. Once in range, let's turn the creature toward us and get started. /// Note - we may need to make an NPC class vs monster as using a monster does not make them turn towrad you as I recall. Og II /// Also, once we are reading in the emotes table by weenie - this will automatically customize the behavior for creatures. /// </summary> /// <param name="playerId">Identity of the player we are interacting with</param> public override void ActOnUse(ObjectGuid playerId) { Player player = CurrentLandblock.GetObject(playerId) as Player; if (player == null) { return; } if (!player.IsWithinUseRadiusOf(this)) { player.DoMoveTo(this); } else { OnAutonomousMove(player.Location, this.Sequences, MovementTypes.TurnToObject, playerId); GameEventUseDone sendUseDoneEvent = new GameEventUseDone(player.Session); player.Session.Network.EnqueueSend(sendUseDoneEvent); } }
public override void ActOnUse(ObjectGuid playerId) { Player player = CurrentLandblock.GetObject(playerId) as Player; if (player == null) { return; } if (!player.IsWithinUseRadiusOf(this) && Viewer != player.Guid.Full) { player.DoMoveTo(this); } else { if (!(IsOpen ?? false)) { var turnToMotion = new UniversalMotion(MotionStance.Standing, Location, Guid); turnToMotion.MovementTypes = MovementTypes.TurnToObject; ActionChain turnToTimer = new ActionChain(); turnToTimer.AddAction(this, () => player.CurrentLandblock.EnqueueBroadcastMotion(player, turnToMotion)); turnToTimer.AddDelaySeconds(1); turnToTimer.AddAction(this, () => Open(player)); turnToTimer.EnqueueChain(); return; } else { if (Viewer == player.Guid.Full) { Close(player); } // else error msg? } player.SendUseDoneEvent(); } }
public override void ActOnUse(ObjectGuid playerId) { Player player = CurrentLandblock.GetObject(playerId) as Player; if (player == null) { return; } if (!player.IsWithinUseRadiusOf(this)) { player.DoMoveTo(this); } else { // TODO: to be removed once physics collisions are implemented HandleActionOnCollide(playerId); // always send useDone event var sendUseDoneEvent = new GameEventUseDone(player.Session); player.Session.Network.EnqueueSend(sendUseDoneEvent); } }
public void HandleActionUseOnTarget(Player player, WorldObject target) { ActionChain chain = new ActionChain(); var keyCode = GetProperty(PropertyString.KeyCode); chain.AddAction(player, () => { if (player == null) { return; } if (!player.IsWithinUseRadiusOf(target)) { player.DoMoveTo(target); } else { var sendUseDoneEvent = new GameEventUseDone(player.Session); if (target.WeenieType == WeenieType.Door) { Door door = target as Door; Door.UnlockDoorResults results = door.UnlockDoor(keyCode); switch (results) { case WorldObjects.Door.UnlockDoorResults.UnlockSuccess: Structure--; if (Structure < 1) { player.RemoveItemFromInventory(Guid.Full, player.Guid.Full, 1); } player.Session.Network.EnqueueSend(sendUseDoneEvent); player.Session.Network.EnqueueSend(new GameMessagePublicUpdatePropertyInt(Sequences, Guid, PropertyInt.Structure, (int)Structure)); break; case WorldObjects.Door.UnlockDoorResults.DoorOpen: var messageDoorOpen = new GameEventDisplayStatusMessage(player.Session, StatusMessageType1.YouCannotLockWhatIsOpen); // TODO: Messages are not quiet right. Need to find right one. player.Session.Network.EnqueueSend(sendUseDoneEvent, messageDoorOpen); break; case WorldObjects.Door.UnlockDoorResults.AlreadyUnlocked: var messageAlreadyUnlocked = new GameEventDisplayStatusMessage(player.Session, StatusMessageType1.KeyDoesntFitThisLock); // TODO: Messages are not quiet right. Need to find right one. player.Session.Network.EnqueueSend(sendUseDoneEvent, messageAlreadyUnlocked); break; default: var messageIncorrectKey = new GameEventDisplayStatusMessage(player.Session, StatusMessageType1.KeyDoesntFitThisLock); player.Session.Network.EnqueueSend(sendUseDoneEvent, messageIncorrectKey); break; } } else if (target.WeenieType == WeenieType.Chest) { var message = new GameMessageSystemChat($"Unlocking {target.Name} has not been implemented, yet!", ChatMessageType.System); player.Session.Network.EnqueueSend(sendUseDoneEvent, message); } else { var message = new GameEventDisplayStatusMessage(player.Session, StatusMessageType1.YouCannotLockOrUnlockThat); player.Session.Network.EnqueueSend(sendUseDoneEvent, message); } } }); chain.EnqueueChain(); }