public bool Execute() { bool executed = false; //Debug.Log(_rawText); try { string jsonText = _rawText.Substring(_keyWord.Length); CharacterPositionUpdateDetails posUpdateDetails = JsonConvert.DeserializeObject <CharacterPositionUpdateDetails>(jsonText); int currentCharId = _gameStateDetails.CharId; bool isOnWorldMap = _gameStateDetails.IsOnWorldMap; if ( posUpdateDetails.MovementType.Equals("movelocal", GlobalData.InputDataStringComparison) || posUpdateDetails.MovementType.Equals("moveworld", GlobalData.InputDataStringComparison) ) { #region Movement section //MOVEMENT SECTION if (isOnWorldMap) { if (currentCharId == posUpdateDetails.CharId) { Point2 <int> oldLocationWorld = posUpdateDetails.OldLocationWorld; Point2 <int> newLocationWorld = posUpdateDetails.NewLocationWorld; _gameStateDetails.Position = new Vector3 ( newLocationWorld.X, newLocationWorld.Y, 0f ); WorldMapSceneManagerHandler.MovePlayerExternally ( PointConverter.Point2ToVector(oldLocationWorld), PointConverter.Point2ToVector(newLocationWorld) ); } } else { LocalPlaceSceneManagerHandler.MovePlayerExternally ( posUpdateDetails.CharId, /*posUpdateDetails.OldLocationLocal, */ posUpdateDetails.NewLocationLocal, posUpdateDetails.TimeArrivalMsLocal ); } #endregion } else if (posUpdateDetails.MovementType.Equals("switchmap", GlobalData.InputDataStringComparison)) { if (currentCharId == posUpdateDetails.CharId) { SwitchScene(); } else { LocalPlaceSceneManagerHandler.RemoveNonPlayerCharacterExternally(posUpdateDetails.CharId); } } else if (posUpdateDetails.MovementType.Equals("switchlocal", GlobalData.InputDataStringComparison)) { if (currentCharId == posUpdateDetails.CharId) { SwitchScene(); } else { CommandHandler.Send(new GetLocationCharsCmdBuilder(posUpdateDetails.CharId)); } } else { throw new Exception($"unknown movement type [{posUpdateDetails.MovementType}]"); } executed = true; } catch (Exception exception) { _chat.UpdateLog($"Character position update command execution error: {exception.Message}"); } return(executed); }