protected override void ServerInitializeCharacterFirstTime(ServerInitializeData data) { base.ServerInitializeCharacterFirstTime(data); var character = data.GameObject; var publicState = data.PublicState; publicState.IsMale = true; publicState.FaceStyle = SharedCharacterFaceStylesProvider .GetForGender(publicState.IsMale) .GenerateRandomFace(); ServerPlayerSpawnManager.ServerAddTorchItemIfNoItems(character); if (!Api.IsEditor) { return; } // the game is run as Editor // auto pwn in editor mode GetProtoEntity <ConsoleAdminPwn>().Execute(player: character); // add all the skills GetProtoEntity <ConsoleSkillsSetAll>().Execute(player: character); // add all the technologies GetProtoEntity <ConsoleTechAddAll>().Execute(player: character); // add all the quests (and complete them) GetProtoEntity <ConsoleQuestCompleteAll>().Execute(player: character); }
private void ServerTimerTickCallback() { var time = Server.Game.FrameTime; serverRequests.ProcessAndRemoveByPair( pair => { // process unstuck var character = pair.Key; var request = pair.Value; if (character.GetPublicState <ICharacterPublicState>() .IsDead) { // character is dead this.CallClient(character, _ => _.ClientRemote_UnstuckFailedDead()); return(true); // remove this request } if (request.InitialPosition.DistanceSquaredTo(character.Position) > MaxUnstuckMovementDistance * MaxUnstuckMovementDistance) { // character moved ServerNotifyUnstuckCancelledCharacterMoved(character); return(true); // remove this request } if (!SharedValidateCanUnstuck(character)) { return(true); // remove this request } if (request.UnstuckAfter > time) { // time is not expired yet return(false); // don't remove this request } // try to teleport player away but nearby if (!CharacterRespawnSystem.ServerTryPlaceCharacterNearby(character, character.Position)) { // try to simply respawn in starting area (only the character position will be changed) ServerPlayerSpawnManager.PlacePlayer(character, isRespawn: false); } Logger.Info( $"Character unstuck from {request.InitialPosition} to {character.TilePosition}", character); this.CallClient(character, _ => _.ClientRemote_UnstuckSuccessful()); return(true); // remove this request }, removeCallback: pair => { var character = pair.Key; ServerOnUnstuckRequestRemoved(character); }); }
public override void ServerInitialize(IServerConfiguration serverConfiguration) { ServerPlayerSpawnManager.Setup(serverConfiguration); ServerOperatorSystem.Setup(serverConfiguration); serverConfiguration.SetupPlayerCharacterProto( Api.GetProtoEntity <PlayerCharacter>()); serverConfiguration.SetupItemsContainerDefaultProto( Api.GetProtoEntity <ItemsContainerDefault>()); }
protected override void ServerInitializeCharacterFirstTime(ServerInitializeData data) { base.ServerInitializeCharacterFirstTime(data); var character = data.GameObject; var publicState = data.PublicState; if (!Api.IsEditor) { NewbieProtectionSystem.ServerRegisterNewbie(character); publicState.IsMale = 1 == RandomHelper.Next(0, maxValueExclusive: 2); // male/female ratio: 50/50 publicState.FaceStyle = SharedCharacterFaceStylesProvider .GetForGender(publicState.IsMale) .GenerateRandomFace(); } else // if Editor { publicState.IsMale = true; publicState.FaceStyle = SharedCharacterFaceStylesProvider .GetForGender(publicState.IsMale) .GetDefaultFaceInEditor(); } ServerPlayerSpawnManager.ServerAddTorchItemIfNoItems(character); if (!Api.IsEditor) { return; } // the game is run as Editor // auto pwn in editor mode ConsoleCommandsSystem.SharedGetCommand <ConsoleAdminPwn>().Execute(player: character); // add all the skills ConsoleCommandsSystem.SharedGetCommand <ConsoleSkillsSetAll>().Execute(player: character); // add all the technologies ConsoleCommandsSystem.SharedGetCommand <ConsoleTechAddAll>().Execute(player: character); this.ServerRebuildFinalCacheIfNeeded(data.PrivateState, publicState); // add all the quests (and complete them) ConsoleCommandsSystem.SharedGetCommand <ConsoleQuestCompleteAll>().Execute(player: character); }
private void ServerTimerTickCallback() { var time = Server.Game.FrameTime; serverRequests.ProcessAndRemoveByPair( pair => { // process unstuck var character = pair.Key; var request = pair.Value; if (character.GetPublicState <ICharacterPublicState>() .IsDead) { // character is dead this.CallClient(character, _ => _.ClientRemote_UnstuckFailedDead()); return(true); // remove this request } if (request.InitialPosition.DistanceSquaredTo(character.Position) > MaxUnstuckMovementDistance * MaxUnstuckMovementDistance) { // character moved this.CallClient(character, _ => _.ClientRemote_UnstuckFailedCharacterMoved()); return(true); // remove this request } if (request.UnstuckAfter > time) { // time is not expired yet return(false); // don't remove this request } // it's like respawn but we only change the character position ServerPlayerSpawnManager.PlacePlayer(character, isRespawn: false); Logger.Info( $"Character unstuck from {request.InitialPosition} to {character.TilePosition}", character); this.CallClient(character, _ => _.ClientRemote_UnstuckSuccessful()); return(true); // remove this request }, removeCallback: pair => { }); }
public static void ServerOnCharacterCreated(ICharacter character) { ServerPlayerSpawnManager.SpawnPlayer(character, isRespawn: false); ServerOnSuccessfulRespawn(character); }