/// <summary> /// Update monster moves. /// </summary> /// <param name="monster"></param> private void ProcessMonsterMovements(IMonsterEntity monster) { if (monster.Object.MovingFlags.HasFlag(ObjectState.OBJSTA_STAND)) { if (monster.Timers.NextMoveTime < Time.TimeInSeconds()) { monster.Object.MovingFlags &= ~ObjectState.OBJSTA_STAND; monster.Object.MovingFlags |= ObjectState.OBJSTA_FMOVE; monster.Moves.DestinationPosition.Copy(monster.Region.GetRandomPosition()); monster.Object.Angle = Vector3.AngleBetween(monster.Object.Position, monster.Moves.DestinationPosition); _moverPacketFactory.SendDestinationPosition(monster); _moverPacketFactory.SendDestinationAngle(monster, false); } else if (monster.Moves.ReturningToOriginalPosition) { monster.Attributes[DefineAttributes.HP] = monster.Data.AddHp; _moverPacketFactory.SendUpdateAttributes(monster, DefineAttributes.HP, monster.Attributes[DefineAttributes.HP]); monster.Moves.ReturningToOriginalPosition = false; } else if (monster.Moves.SpeedFactor >= 2f) { monster.Moves.SpeedFactor = 1f; _moverPacketFactory.SendSpeedFactor(monster, monster.Moves.SpeedFactor); } } }
public void OnSnapshotSetDestPosition(IWorldClient client, SetDestPositionPacket packet) { client.Player.Object.MovingFlags = ObjectState.OBJSTA_FMOVE; client.Player.Moves.DestinationPosition = new Vector3(packet.X, packet.Y, packet.Z); client.Player.Follow.Reset(); _moverPacketFactory.SendDestinationPosition(client.Player); }
/// <inheritdoc /> public void Execute(IPlayerEntity player, object[] parameters) { if (player.PlayerData.Mode.HasFlag(ModeType.TRANSPARENT_MODE)) { player.PlayerData.Mode &= ~ModeType.TRANSPARENT_MODE; _playerDataPacketFactory.SendModifyMode(player); _moverPacketFactory.SendDestinationPosition(player); _moverPacketFactory.SendMoverPositionAngle(player, sendOwnPlayer: false); _logger.LogTrace($"Player '{player.Object.Name}' is not anymore invisible."); } else { _logger.LogTrace($"Player '{player.Object.Name}' is currently not invisible."); } }
/// <summary> /// Spawn the other entity for the current entity. /// </summary> /// <param name="entity"></param> /// <param name="otherEntity"></param> private void SpawnOtherEntity(IWorldEntity entity, IWorldEntity otherEntity) { entity.Object.Entities.Add(otherEntity); if (entity is IPlayerEntity player) { _worldSpawnPacketFactory.SendSpawnObjectTo(player, otherEntity); } if (otherEntity.Type != WorldEntityType.Player && !otherEntity.Object.Entities.Contains(entity)) { otherEntity.Object.Entities.Add(entity); } if (otherEntity is IMovableEntity movableEntity && movableEntity.Moves.DestinationPosition != movableEntity.Object.Position) { _moverPacketFactory.SendDestinationPosition(movableEntity); } }