Ejemplo n.º 1
0
        protected override void OnSpawnerTick(float deltaTime)
        {
            if (ServerAPI.World.ElapsedMilliseconds - TimeSinceSpawn > NextShower)
            {
                if (ServerAPI.World.AllOnlinePlayers.Length > 0)
                {
                    MeteorCode        = GetRandomEntityCode();
                    ShowerTranslation = DetermineTranslation();

                    int numShowerMeteors = SpawnerRand.Next(0, ServerAPI.World.Config.GetInt("MaxMeteorsPerShower"));
                    int showerTime       = SpawnerRand.Next(ServerAPI.World.Config.GetInt("MinimumShowerDurationInMinutes"), ServerAPI.World.Config.GetInt("MaximumShowerDurationInMinutes"));

                    UnregisterShowerCallbacks();

                    ShowerCallbacks = new long[numShowerMeteors];

                    for (int i = 0; i < ShowerCallbacks.Length; i++)
                    {
                        double offsetTime = SpawnerRand.NextDouble();

                        ShowerCallbacks[i] = ServerAPI.Event.RegisterCallback(SpawnShowerMeteor, (int)(MeteoricExpansionHelpers.ConvertMinutesToMilliseconds(SpawnerRand.Next(0, showerTime)) + MeteoricExpansionHelpers.ConvertMinutesToMilliseconds(offsetTime)));
                    }

                    NextSpawn = SpawnerRand.Next(MinShowerSpawnTime, MaxShowerSpawnTime) + SpawnerRand.NextDouble();
                    NextSpawn = MeteoricExpansionHelpers.ConvertMinutesToMilliseconds(NextSpawn);

                    TimeSinceSpawn = ServerAPI.World.ElapsedMilliseconds + MeteoricExpansionHelpers.ConvertMinutesToMilliseconds(showerTime);
                }
            }
        }
Ejemplo n.º 2
0
        //-- Spawn a meteor made with random rock and metals above the first online player every number of seconds as determined by tickIntervalInSeconds --//
        //-- Eventually spawns will happen between the minMeteorSpawnTime and maxMeteorSpawnTime --//
        protected override void OnSpawnerTick(float deltaTime)
        {
            if (ServerAPI.World.ElapsedMilliseconds - TimeSinceSpawn > NextSpawn)
            {
                if (ServerAPI.World.AllOnlinePlayers.Length > 0)
                {
                    ServerAPI.World.SpawnEntity(GenerateEntity());
                }

                NextSpawn = SpawnerRand.Next(MinSpawnTime, MaxSpawnTime) + SpawnerRand.NextDouble();
                NextSpawn = MeteoricExpansionHelpers.ConvertMinutesToMilliseconds(NextSpawn);

                TimeSinceSpawn = this.ServerAPI.World.ElapsedMilliseconds;
            }
        }
Ejemplo n.º 3
0
        protected override void Initialize(ICoreServerAPI sApi)
        {
            ConfigDisableShowers = sApi.World.Config.GetBool("DisableShowers");

            if (ConfigDisableShowers == false)
            {
                base.Initialize(sApi);

                EntityTypeToSpawn = typeof(EntityShowerMeteor);

                SpawnTickListener = ServerAPI.Event.RegisterGameTickListener(OnSpawnerTick, SPAWNER_TICK_INTERVAL);

                MinShowerSpawnTime = ServerAPI.World.Config.GetInt("MinimumMinutesBetweenShowers");
                MaxShowerSpawnTime = ServerAPI.World.Config.GetInt("MaximumMinutesBetweenShowers");

                MinSpawnDistance = ServerAPI.World.Config.GetInt("MinimumShowerSpawnDistanceInChunks");
                MaxSpawnDistance = ServerAPI.World.Config.GetInt("MaximumShowerSpawnDistanceInChunks");

                NextShower = SpawnerRand.Next(MinShowerSpawnTime, MaxShowerSpawnTime) + SpawnerRand.NextDouble();
                NextShower = MeteoricExpansionHelpers.ConvertMinutesToMilliseconds(NextShower);
            }
        }
        public override void Initialize(ICoreAPI api)
        {
            base.Initialize(api);

            rand = new Random(this.Pos.X + this.Pos.Y + this.Pos.Z);

            if (api.Side == EnumAppSide.Server)
            {
                if (coolAtTime == -1)
                {
                    startedCoolingAt  = api.World.ElapsedMilliseconds;
                    randomCoolingTime = rand.Next(MeteoricExpansionHelpers.ConvertMinutesToMilliseconds(api.World.Config.GetInt("MinimumCraterSmoulderTimeInMinutes")), MeteoricExpansionHelpers.ConvertMinutesToMilliseconds(api.World.Config.GetInt("MaximumCraterSmoulderTimeInMinutes")));

                    coolingCallback = api.World.RegisterCallback(CoolBlock, (int)randomCoolingTime);
                }
                else
                {
                    coolingCallback = api.World.RegisterCallback(CoolBlock, (int)coolAtTime);
                }
            }
            else
            {
                InitializeSmokeParticles();
                InitializeFireParticles();

                smoulderSound = ((IClientWorldAccessor)api.World).LoadSound(new SoundParams()
                {
                    Location        = new AssetLocation("meteoricexpansion", "sounds/block/smoulder.ogg"),
                    ShouldLoop      = false,
                    Position        = Pos.ToVec3f(),
                    Range           = 32.0f,
                    DisposeOnFinish = false,
                    Volume          = 1.0f
                });

                particlesListener = api.World.RegisterGameTickListener(SpawnParticles, 1);
            }
        }