public static void HideIfCharacterCreated() { if (instance is not null && CharacterCreationSystem.SharedIsCharacterCreated(ClientCurrentCharacterHelper.Character)) { instance.RemoveControl(); } }
private bool ServerRemote_RestoreCharacterData(CharacterProgressData data) { var character = ServerRemoteContext.Character; if (!Server.Core.IsLocalServer || !Server.Core.IsLocalServerHoster(character)) { throw new Exception("The player is not the local server hoster: " + character); } Logger.Important("New Game +: Restoring old character progress"); // restore style CharacterStyleSystem.ServerSetStyle(character, data.FaceStyle, data.IsMale); CharacterCreationSystem.ServerSetOrigin(character, data.ProtoCharacterOrigin); // ensure character spawned CharacterCreationSystem.ServerSpawnIfReady(character); // restore finished quests var quests = character.SharedGetQuests(); quests.ServerReset(); foreach (var quest in data.FinishedQuests) { QuestsSystem.ServerCompleteQuest(quests, quest, ignoreRequirements: true, provideReward: false); } // restore technologies var technologies = character.SharedGetTechnologies(); technologies.ServerSetLearningPoints(data.LearningPoints); foreach (var techGroup in data.TechGroups) { technologies.ServerAddGroup(techGroup); } foreach (var techNode in data.TechNodes) { technologies.ServerAddNode(techNode); } // restore skills var skills = character.SharedGetSkills(); skills.ServerReset(); foreach (var(skill, experience) in data.Skills) { skills.ServerDebugSetSkill(skill, experience); } Logger.Important("New Game +: Finished restoring old character data"); return(true); }
public static void SpawnPlayer(ICharacter character, bool isRespawn) { ServerAddTorchItemIfNoItems(character); if (character.IsInitialized && CharacterCreationSystem.SharedIsCharacterCreated(character)) { PlacePlayer(character, isRespawn); } else { // first time spawn, requires character creation CharacterDespawnSystem.DespawnCharacter(character); } }
private async void CreateCharacter() { (CharacterHumanFaceStyle style, bool isMale)selectedStyle = this.characterCustomizationControl.GetSelectedStyle(); // show splash screen LoadingSplashScreenManager.Show("Character created", displayStructureInfos: false); await LoadingSplashScreenManager.WaitShownAsync(); // select the style only now, when the loading splash is displayed, // so there is no stuttering of the loading splash screen animation CharacterStyleSystem.ClientChangeStyle(selectedStyle.style, selectedStyle.isMale); CharacterCreationSystem.ClientSelectOrigin(this.SelectedOrigin.ProtoCharacterOrigin); this.closeCallback(); // allow hiding after a short delay (it will still check whether everything is loaded) ClientTimersSystem.AddAction( delaySeconds: 1.0 + Math.Min(1, Api.Client.CurrentGame.PingGameSeconds), LoadingSplashScreenManager.Hide); }