コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            });
        }
コード例 #3
0
        public override void ServerInitialize(IServerConfiguration serverConfiguration)
        {
            ServerPlayerSpawnManager.Setup(serverConfiguration);

            ServerOperatorSystem.Setup(serverConfiguration);

            serverConfiguration.SetupPlayerCharacterProto(
                Api.GetProtoEntity <PlayerCharacter>());

            serverConfiguration.SetupItemsContainerDefaultProto(
                Api.GetProtoEntity <ItemsContainerDefault>());
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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 => { });
        }
コード例 #6
0
 public static void ServerOnCharacterCreated(ICharacter character)
 {
     ServerPlayerSpawnManager.SpawnPlayer(character, isRespawn: false);
     ServerOnSuccessfulRespawn(character);
 }