public bool Execute()
        {
            bool executed = false;

            try
            {
                string jsonString = _rawText.Substring(_keyWord.Length);
                CharacterPositionBasicDetails charPosDetails = JsonConvert.DeserializeObject <CharacterPositionBasicDetails>(jsonString);

                _gameStateDetails.CharId       = charPosDetails.CharId;
                _gameStateDetails.WmId         = charPosDetails.WmId;
                _gameStateDetails.MapWidth     = charPosDetails.MapWidth;
                _gameStateDetails.MapHeight    = charPosDetails.MapHeight;
                _gameStateDetails.LocalBound   = PointConverter.Point3ToVector(charPosDetails.LocalBound);
                _gameStateDetails.IsOnWorldMap = charPosDetails.IsOnWorldMap;
                _gameStateDetails.Position     = PointConverter.Point3ToVector(charPosDetails.Position);

                //_gameStateDetails.LogCurrentState(); //for testing

                if (charPosDetails.IsOnWorldMap)
                {
                    MainGameHandler.ChangeScene(MainGameHandler.SceneType.WorldMap);
                }
                else
                {
                    MainGameHandler.ChangeScene(MainGameHandler.SceneType.LocalPlace);
                }

                executed = true;
            }
            catch (Exception exception)
            {
                _chat.UpdateLog($"Cannot execute char. basic details command: {exception.Message}");
            }

            return(executed);
        }
 public CharPositionBasicDetailsCmdBuilder(CharacterPositionBasicDetails details)
 {
     _details = details ?? throw new Exception("CharPositionBasicDetailsCmdBuilder - detail object reference cannot be NULL!");
 }
        public bool Execute(PlayerDetails playerDetails)
        {
            bool          executed      = false;
            int           charId        = playerDetails.CharId;
            int           wmId          = -1;
            CharacterData characterData = null;
            //CharacterData.CharacterState charState = CharacterData.CharacterState.Idle;
            bool isOnWorldMap   = false;
            int  parentObjectId = -1;
            CharacterPositionBasicDetails charPosBasicDetails = null;
            Point2 <int>    currentWorldLoc = null;
            Point3 <double> currentLoc      = null;
            WorldPlaceData  worldPlace      = null;
            PlaceInstance   placeInstance   = null;

            PlaceInstanceTerrainDetails[,,] placeInstanceTerrainDetails = null;
            List <WorldPlaceDataDetails> worldPlaceDataDetailsList = null;

            try
            {
                if (String.IsNullOrWhiteSpace(playerDetails.Login) || charId < 0)
                {
                    CommandHandler.Send(new InfoCmdBuilder("You're not logged in or your main character is not set!"), playerDetails);
                    throw new Exception("player not logged in or character not set!");
                }

                characterData = _gameWorldData.GetCharacterById(charId);
                if (characterData == null)
                {
                    throw new Exception($"no character found (ID [{charId}])!");
                }

                //charState = characterData.State;
                isOnWorldMap   = characterData.IsOnWorldMap;
                wmId           = characterData.WmId;
                parentObjectId = characterData.ParentObjectId;

                if (isOnWorldMap)
                {
                    currentWorldLoc = characterData.CurrentWorldLoc.Copy();
                }
                else
                {
                    characterData.GetLocationLocal(out currentLoc);
                }

                charPosBasicDetails = new CharacterPositionBasicDetails()
                {
                    CharId     = charId,
                    WmId       = wmId,
                    MapWidth   = _gameWorldData.MapWidth,
                    MapHeight  = _gameWorldData.MapHeight,
                    LocalBound = new Point3 <int>
                                 (
                        _gameWorldData.LocalBoundX,
                        _gameWorldData.LocalBoundY,
                        _gameWorldData.LocalBoundZ
                                 ),
                    IsOnWorldMap = isOnWorldMap,
                    Position     = new Point3 <double>
                                   (
                        (isOnWorldMap ? currentWorldLoc.X : currentLoc.X),
                        (isOnWorldMap ? currentWorldLoc.Y : currentLoc.Y),
                        (isOnWorldMap ? 0 : currentLoc.Z)
                                   )
                };

                //BASIC DATA
                CommandHandler.Send(new CharPositionBasicDetailsCmdBuilder(charPosBasicDetails), playerDetails);

                //DETAILS
                if (!isOnWorldMap)
                {
                    worldPlace = _gameWorldData.GetWorldPlaceByWmId(wmId);
                    if (worldPlace == null)
                    {
                        throw new Exception($"cannot get world place with wm_id [{wmId}]");
                    }

                    placeInstance = worldPlace.GetPredefinedInstanceByParentObjectId(parentObjectId);
                    if (placeInstance == null)
                    {
                        throw new Exception($"cannot get place instance with parent obj. ID [{parentObjectId}] wm_id [{wmId}]");
                    }

                    placeInstanceTerrainDetails = placeInstance.GetTerrainDetails();
                    SendTerrainDetailsAsync(placeInstanceTerrainDetails, playerDetails);
                }
                else
                {
                    worldPlaceDataDetailsList = _gameWorldData.GetWorldPlaceDataDetails();
                    SendWorldPlaceDetailsAsync(worldPlaceDataDetailsList, playerDetails);
                }

                executed = true;
            }
            catch (Exception exception)
            {
                _logger.UpdateLog($"Getting world data execution error for player with TCP client ID [{playerDetails.TcpClientId}]: {exception.Message}");
            }

            return(executed);
        }