public static void Setup(IServerConfiguration serverConfiguration)
 {
     worldService   = Api.Server.World;
     protoSpawnZone = Api.GetProtoEntity <ZoneSpecialPlayerSpawn>();
     serverConfiguration.SetupPlayerCharacterSpawnCallbackMethod(
         character => SpawnPlayer(character, isRespawn: false));
 }
        // In Editor when the platform prop is initialized
        // the game server will try to replace the water tiles
        // under the platform with a bridge tile variant.
        private static void ServerEditorReplaceWaterTilesWithBridge(IStaticWorldObject gameObject)
        {
            IWorldServerService serverWorld = null;

            foreach (var tile in gameObject.OccupiedTiles)
            {
                if (!(tile.ProtoTile is IProtoTileWater protoTileWater))
                {
                    continue;
                }

                var bridgeProtoTile = protoTileWater.BridgeProtoTile;
                if (ReferenceEquals(protoTileWater, bridgeProtoTile) ||
                    bridgeProtoTile is null)
                {
                    continue;
                }

                serverWorld = Server.World;

                // replace proto tile with bridge
                serverWorld.SetTileData(tile.Position,
                                        bridgeProtoTile,
                                        tile.Height,
                                        tile.IsSlope,
                                        tile.IsCliff);
            }

            serverWorld?.FixMapTilesRecentlyModified();
        }
Beispiel #3
0
 protected override bool ServerCreateEventSearchArea(
     IWorldServerService world,
     Vector2Ushort eventPosition,
     ushort circleRadius,
     out Vector2Ushort circlePosition)
 {
     circlePosition = eventPosition;
     return(true);
 }
Beispiel #4
0
        protected virtual bool ServerCreateEventSearchArea(
            IWorldServerService world,
            Vector2Ushort eventPosition,
            ushort circleRadius,
            out Vector2Ushort circlePosition)
        {
            var biome = world.GetTile(eventPosition).ProtoTile;

            return(ServerSearchAreaHelper.GenerateSearchArea(eventPosition,
                                                             biome,
                                                             circleRadius,
                                                             out circlePosition,
                                                             maxAttempts: 100,
                                                             waterMaxRatio: 0.1));
        }
        protected override void ServerUpdateMob(ServerUpdateData data)
        {
            var character = data.GameObject;

            ServerCharacterAiHelper.ProcessAggressiveAi(
                character,
                targetCharacter: ServerCharacterAiHelper.GetClosestTargetPlayer(character),
                isRetreating: false,
                isRetreatingForHeavyVehicles: this.AiIsRunAwayFromHeavyVehicles,
                distanceRetreat: 0,
                distanceEnemyTooClose: 1,
                distanceEnemyTooFar: 10,
                movementDirection: out var movementDirection,
                rotationAngleRad: out var rotationAngleRad);

            this.ServerSetMobInput(character, movementDirection, rotationAngleRad);

            IWorldServerService ServerWorldService = Api.IsServer ? Api.Server.World : null;
        }
        // In Editor when the platform prop is initialized
        // the game server will try to replace the water tiles
        // under the platform with a bridge tile variant.
        private static void ServerEditorReplaceWaterTilesWithBridge(IStaticWorldObject gameObject)
        {
            IWorldServerService world = null;

            foreach (var tile in gameObject.OccupiedTiles)
            {
                var currentProtoTile = tile.ProtoTile;
                if (!(currentProtoTile is IProtoTileWater protoTileWater))
                {
                    if (tile.IsCliffOrSlope)
                    {
                        (world ??= Server.World)
                        .SetTileData(tile.Position,
                                     currentProtoTile,
                                     tile.Height,
                                     isSlope: false,
                                     isCliff: false);
                    }

                    continue;
                }

                var bridgeProtoTile = protoTileWater.BridgeProtoTile;
                if (ReferenceEquals(protoTileWater, bridgeProtoTile) ||
                    bridgeProtoTile is null)
                {
                    continue;
                }

                // replace proto tile with bridge
                (world ??= Server.World)
                .SetTileData(tile.Position,
                             bridgeProtoTile,
                             tile.Height,
                             isSlope: false,
                             isCliff: false);
            }

            world?.FixMapTilesRecentlyModified();
        }
        private static void ServerEditorReplaceBridgeTilesWithPlaceholder(IStaticWorldObject gameObject)
        {
            IWorldServerService serverWorld = null;

            foreach (var tile in gameObject.OccupiedTiles)
            {
                if (!(tile.ProtoTile is IProtoTileWater))
                {
                    continue;
                }

                serverWorld = Server.World;

                // replace proto tile with a sea water tile
                serverWorld.SetTileData(tile.Position,
                                        Api.GetProtoEntity <TileWaterSea>(),
                                        tile.Height,
                                        tile.IsSlope,
                                        tile.IsCliff);
            }

            serverWorld?.FixMapTilesRecentlyModified();
        }