Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
  • 0
YAKUZA

Изменение погоды при входе в триггер

Нужно изменить погоду при вхождении игрока в триггер, вызвать тучи, ливень, молнии и гром. Я понимаю что погода глобальная на всем сервере, но даже она не начинает моросить.

Уже видел моды, которые меняют температуру, но этими методами вызвать шторм не удалось. 

Вместе со мной трудятся два разных ИИ - три готовых мода и ни один не работает. Были бы просто шикарные миссии. Подскажите пожалуйста, как заставить это работать?

Share this post


Link to post
Share on other sites

8 answers to this question

Recommended Posts

  • 0
Posted (edited)

А уточнение?
Смена погоды при вхождении в тригер, персонально для игрока или всё ровно?

Также нужен скрипт, что бы видеть наглядно картину и понять почиму у тебя, не чего не работает, мы же не Экстрасенсы.

Edited by Troy1 (see edit history)

Share this post


Link to post
Share on other sites
MagicByte MagicByte MagicByte
  • 0
Posted (edited)
12 часов назад, Troy1 сказал:

А уточнение?
Смена погоды при вхождении в тригер, персонально для игрока или всё ровно?

Также нужен скрипт, что бы видеть наглядно картину и понять почиму у тебя, не чего не работает, мы же не Экстрасенсы.

image.png.96471580b34440b163b7e342c236fa28.png
СМЕНА ПОГОДЫ ГЛОБАЛЬНО НА СЕРВЕРЕ ПРИ ВХОДЕ ИГРОКА В НУЖНЫЕ КООРДИНАТЫ
config.cpp

class CfgPatches

{

    class StormZone_Scripts

    {

        units[] = {};

        weapons[] = {};

        requiredVersion = 0.1;

        requiredAddons[] = {"DZ_Data", "DZ_Scripts", "DZ_Sounds_Effects"};

    };

};

 

class CfgMods

{

    class StormZone

    {

        type = "mod";

        author = "YKZ";

        name = "StormZone";

        dir = "StormZone";

        dependencies[] = {"Game", "World", "Mission"};

       

        class World

        {

            value = "";

            files[] = {"StormZone\scripts\4_World"};

        };

        class Mission

        {

            value = "";

            files[] = {"StormZone\scripts\5_Mission"};

        };

    };

};

 

class CfgSoundShaders

{

    class StormZone_Thunder_SoundShader

    {

        samples[] = {

            {"StormZone\sounds\thunderheavy_near_1.ogg", 1},

            {"StormZone\sounds\thunderheavy_near_2.ogg", 1},

            {"StormZone\sounds\thunderheavy_near_3.ogg", 1},

            {"StormZone\sounds\thunderheavy_near_4.ogg", 1},

            {"StormZone\sounds\thunderheavy_near_5.ogg", 1}

        };

        volume = 1.0;

        range = 1200;

        rangeCurve = "closeShotCurve";

    };

};

 

class CfgSoundSets

{

    class StormZone_Thunder_SoundSet

    {

        soundShaders[] = {"StormZone_Thunder_SoundShader"};

        volumeFactor = 1.0;

        spatial = 1;

        loop = 0;

    };

};
____________________________________________________________________________________________________________
4_World
script StormZone_RPC.c


enum CustomRPCs

{

    RPC_STORM_ZONE_THUNDER = 991234

};
_____________________________________________________________________________________________
script StormZoneTrigger.c

 

class StormZoneTrigger

{

    vector m_Center;

    float m_Radius;

    bool m_IsActive;

 

    void StormZoneTrigger(vector center, float radius)

    {

        m_Center = center;

        m_Radius = radius;

        m_IsActive = false;

    }

 

    void OnPlayerUpdate(vector playerPos)

    {

        float dist = vector.Distance(playerPos, m_Center);

        bool isInside = dist < m_Radius;

 

        if (isInside && !m_IsActive)

        {

            m_IsActive = true;

            ActivateStorm();

        }

        else if (!isInside && m_IsActive)

        {

            m_IsActive = false;

            DeactivateStorm();

        }

    }

 

    void ActivateStorm()

    {

        Weather weather = GetGame().GetWeather();

        if (weather)

        {

            weather.MissionWeather(true);

            weather.GetOvercast().Set(1.0, 0, 0);

            weather.GetRain().Set(0.5, 0, 0);

            weather.SetStorm(1.0, 0.3, 1);

            weather.SetWindSpeed(15.0);

        }

       

        GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.SpawnLightningLoop, 1000, true);

        Print("STORM ZONE [SERVER]: >>> ШТОРМ АКТИВИРОВАН <<<");

    }

 

    void DeactivateStorm()

    {

        Weather weather = GetGame().GetWeather();

        if (weather)

        {

            weather.GetOvercast().Set(0.2, 10, 0);

            weather.GetRain().Set(0.0, 10, 0);

            weather.SetStorm(0.0, 0.0, 0);

            weather.SetWindSpeed(2.0);

            weather.MissionWeather(false);

        }

       

        GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Remove(this.SpawnLightningLoop);

        Print("STORM ZONE [SERVER]: >>> ШТОРМ ДЕАКТИВИРОВАН <<<");

    }

 

    void SpawnLightningLoop()

    {

        if (!m_IsActive) return;

 

        vector randomPos = m_Center;

        randomPos = randomPos + Math.RandomFloat(-m_Radius, m_Radius);

        randomPos = randomPos + Math.RandomFloat(0, 50);

        randomPos = randomPos + Math.RandomFloat(-m_Radius, m_Radius);

 

        auto params = new Param1<vector>(randomPos);

        GetGame().RPC(null, CustomRPCs.RPC_STORM_ZONE_THUNDER, params, true, null);

    }

};
________________________________________________________________________
5_Mission
script MissionGameplay.c
 

modded class MissionGameplay

{

    override void OnRPC(PlayerBase player, int rpc_type, ParamsReadContext ctx)

    {

        super.OnRPC(player, rpc_type, ctx);

 

        if (rpc_type == CustomRPCs.RPC_STORM_ZONE_THUNDER)

        {

            Param1<vector> data = new Param1<vector>(vector(0,0,0));

            if (!ctx.Read(data)) return;

           

            vector thunderPos = data.param1;

           

            EffectSound thunderSound = SEffectManager.PlaySound("StormZone_Thunder_SoundSet", thunderPos);

            if (thunderSound)

            {

                thunderSound.SetSoundAutodestroy(true);

            }

        }

    }

};

script MissionServer.c
 

modded class MissionServer

{

    ref StormZoneTrigger m_StormZone;

    float m_StormTickTimer = 0;

 

    override void OnInit()

    {

        super.OnInit();

        m_StormZone = new StormZoneTrigger(vector(6015.07, 2.84, 1737.97), 900.0);

        Print("STORM ZONE [SERVER]: Мод успешно загружен в MissionServer.");

    }

 

    override void OnUpdate(float timeslice)

    {

        super.OnUpdate(timeslice);

       

        m_StormTickTimer += timeslice;

        if (m_StormTickTimer < 0.5) return;

        m_StormTickTimer = 0;

 

        if (!m_StormZone) return;

 

        array<PlayerBase> players = new array<PlayerBase>;

        GetGame().GetPlayers(players);

       

        bool anyPlayerInside = false;

        vector zoneCenter = m_StormZone.m_Center;

        float zoneRadius = m_StormZone.m_Radius;

 

        foreach (PlayerBase player : players)

        {

            if (player && player.IsAlive())

            {

                vector pPos = player.GetPosition();

                float dist = vector.Distance(pPos, zoneCenter);

               

                Print("STORM ZONE [DEBUG]: Игрок: " + player.GetIdentity().GetName() + " | Дистанция до центра шторма: " + dist.ToString() + " метров.");

 

                if (dist < zoneRadius)

                {

                    anyPlayerInside = true;

                    break;

                }

            }

        }

 

        if (anyPlayerInside)

        {

            m_StormZone.OnPlayerUpdate(zoneCenter);

        }

        else

        {

            m_StormZone.OnPlayerUpdate(vector(0, 0, 0));

        }

    }

};

Edited by YAKUZA (see edit history)

Share this post


Link to post
Share on other sites
  • 0
1 час назад, YAKUZA сказал:

image.png.96471580b34440b163b7e342c236fa28.png
СМЕНА ПОГОДЫ ГЛОБАЛЬНО НА СЕРВЕРЕ ПРИ ВХОДЕ ИГРОКА В НУЖНЫЕ КООРДИНАТЫ
config.cpp

class CfgPatches

{

    class StormZone_Scripts

    {

        units[] = {};

        weapons[] = {};

        requiredVersion = 0.1;

        requiredAddons[] = {"DZ_Data", "DZ_Scripts", "DZ_Sounds_Effects"};

    };

};

 

class CfgMods

{

    class StormZone

    {

        type = "mod";

        author = "YKZ";

        name = "StormZone";

        dir = "StormZone";

        dependencies[] = {"Game", "World", "Mission"};

       

        class World

        {

            value = "";

            files[] = {"StormZone\scripts\4_World"};

        };

        class Mission

        {

            value = "";

            files[] = {"StormZone\scripts\5_Mission"};

        };

    };

};

 

class CfgSoundShaders

{

    class StormZone_Thunder_SoundShader

    {

        samples[] = {

            {"StormZone\sounds\thunderheavy_near_1.ogg", 1},

            {"StormZone\sounds\thunderheavy_near_2.ogg", 1},

            {"StormZone\sounds\thunderheavy_near_3.ogg", 1},

            {"StormZone\sounds\thunderheavy_near_4.ogg", 1},

            {"StormZone\sounds\thunderheavy_near_5.ogg", 1}

        };

        volume = 1.0;

        range = 1200;

        rangeCurve = "closeShotCurve";

    };

};

 

class CfgSoundSets

{

    class StormZone_Thunder_SoundSet

    {

        soundShaders[] = {"StormZone_Thunder_SoundShader"};

        volumeFactor = 1.0;

        spatial = 1;

        loop = 0;

    };

};
____________________________________________________________________________________________________________
4_World
script StormZone_RPC.c


enum CustomRPCs

{

    RPC_STORM_ZONE_THUNDER = 991234

};
_____________________________________________________________________________________________
script StormZoneTrigger.c

 

class StormZoneTrigger

{

    vector m_Center;

    float m_Radius;

    bool m_IsActive;

 

    void StormZoneTrigger(vector center, float radius)

    {

        m_Center = center;

        m_Radius = radius;

        m_IsActive = false;

    }

 

    void OnPlayerUpdate(vector playerPos)

    {

        float dist = vector.Distance(playerPos, m_Center);

        bool isInside = dist < m_Radius;

 

        if (isInside && !m_IsActive)

        {

            m_IsActive = true;

            ActivateStorm();

        }

        else if (!isInside && m_IsActive)

        {

            m_IsActive = false;

            DeactivateStorm();

        }

    }

 

    void ActivateStorm()

    {

        Weather weather = GetGame().GetWeather();

        if (weather)

        {

            weather.MissionWeather(true);

            weather.GetOvercast().Set(1.0, 0, 0);

            weather.GetRain().Set(0.5, 0, 0);

            weather.SetStorm(1.0, 0.3, 1);

            weather.SetWindSpeed(15.0);

        }

       

        GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.SpawnLightningLoop, 1000, true);

        Print("STORM ZONE [SERVER]: >>> ШТОРМ АКТИВИРОВАН <<<");

    }

 

    void DeactivateStorm()

    {

        Weather weather = GetGame().GetWeather();

        if (weather)

        {

            weather.GetOvercast().Set(0.2, 10, 0);

            weather.GetRain().Set(0.0, 10, 0);

            weather.SetStorm(0.0, 0.0, 0);

            weather.SetWindSpeed(2.0);

            weather.MissionWeather(false);

        }

       

        GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Remove(this.SpawnLightningLoop);

        Print("STORM ZONE [SERVER]: >>> ШТОРМ ДЕАКТИВИРОВАН <<<");

    }

 

    void SpawnLightningLoop()

    {

        if (!m_IsActive) return;

 

        vector randomPos = m_Center;

        randomPos = randomPos + Math.RandomFloat(-m_Radius, m_Radius);

        randomPos = randomPos + Math.RandomFloat(0, 50);

        randomPos = randomPos + Math.RandomFloat(-m_Radius, m_Radius);

 

        auto params = new Param1<vector>(randomPos);

        GetGame().RPC(null, CustomRPCs.RPC_STORM_ZONE_THUNDER, params, true, null);

    }

};
________________________________________________________________________
5_Mission
script MissionGameplay.c
 

modded class MissionGameplay

{

    override void OnRPC(PlayerBase player, int rpc_type, ParamsReadContext ctx)

    {

        super.OnRPC(player, rpc_type, ctx);

 

        if (rpc_type == CustomRPCs.RPC_STORM_ZONE_THUNDER)

        {

            Param1<vector> data = new Param1<vector>(vector(0,0,0));

            if (!ctx.Read(data)) return;

           

            vector thunderPos = data.param1;

           

            EffectSound thunderSound = SEffectManager.PlaySound("StormZone_Thunder_SoundSet", thunderPos);

            if (thunderSound)

            {

                thunderSound.SetSoundAutodestroy(true);

            }

        }

    }

};

script MissionServer.c
 

modded class MissionServer

{

    ref StormZoneTrigger m_StormZone;

    float m_StormTickTimer = 0;

 

    override void OnInit()

    {

        super.OnInit();

        m_StormZone = new StormZoneTrigger(vector(6015.07, 2.84, 1737.97), 900.0);

        Print("STORM ZONE [SERVER]: Мод успешно загружен в MissionServer.");

    }

 

    override void OnUpdate(float timeslice)

    {

        super.OnUpdate(timeslice);

       

        m_StormTickTimer += timeslice;

        if (m_StormTickTimer < 0.5) return;

        m_StormTickTimer = 0;

 

        if (!m_StormZone) return;

 

        array<PlayerBase> players = new array<PlayerBase>;

        GetGame().GetPlayers(players);

       

        bool anyPlayerInside = false;

        vector zoneCenter = m_StormZone.m_Center;

        float zoneRadius = m_StormZone.m_Radius;

 

        foreach (PlayerBase player : players)

        {

            if (player && player.IsAlive())

            {

                vector pPos = player.GetPosition();

                float dist = vector.Distance(pPos, zoneCenter);

               

                Print("STORM ZONE [DEBUG]: Игрок: " + player.GetIdentity().GetName() + " | Дистанция до центра шторма: " + dist.ToString() + " метров.");

 

                if (dist < zoneRadius)

                {

                    anyPlayerInside = true;

                    break;

                }

            }

        }

 

        if (anyPlayerInside)

        {

            m_StormZone.OnPlayerUpdate(zoneCenter);

        }

        else

        {

            m_StormZone.OnPlayerUpdate(vector(0, 0, 0));

        }

    }

};

У тебя имеется дискорд? 
Мой дискорд x_dima_x
Вот config.cpp

class CfgPatches
{
	class StormZone
	{
		units[] = {};
		weapons[] = {};
		requiredVersion = 0.1;
		requiredAddons[] = {"DZ_Data", "DZ_Scripts"};
	};
};

class CfgMods
{
	class StormZone
	{
		dir = "StormZone";
		picture = "";
		action = "";
		hideName = 1;
		hidePicture = 1;
		name = "StormZone";
		credits = "";
		author = "YKZ";
		authorID = "0";
		version = "1.0";
		extra = 0;
		inputs = "";
		type = "mod";
		dependencies[] = {"Game","World","Mission"};
		class defs
		{
			class gameScriptModule
			{
				value = "";
				files[] = {"StormZone/scripts/3_Game"};
			};
			class worldScriptModule
			{
				value = "";
				files[] = {"StormZone/scripts/4_World"};
			};
			class missionScriptModule
			{
				value = "";
				files[] = {"StormZone/scripts/5_Mission"};
			};
		};
	};
};

class CfgSoundShaders
{
	class StormZone_SoundShader_Base
	{
		range = 70;
		volume = 1;
	};
	
	class StormZone_Track1_SoundShader: StormZone_SoundShader_Base
	{
		samples[] = {{"StormZone\sounds\thunderheavy_near_1.ogg",1}};
	};
	class StormZone_Track2_SoundShader: StormZone_SoundShader_Base
	{
		samples[] = {{"StormZone\sounds\thunderheavy_near_2.ogg",1}};
	};
	class StormZone_Track3_SoundShader: StormZone_SoundShader_Base
	{
		samples[] = {{"StormZone\sounds\thunderheavy_near_3.ogg",1}};
	};
	class StormZone_Track4_SoundShader: StormZone_SoundShader_Base
	{
		samples[] = {{"StormZone\sounds\thunderheavy_near_4.ogg",1}};
	};
	class StormZone_Track5_SoundShader: StormZone_SoundShader_Base
	{
		samples[] = {{"StormZone\sounds\thunderheavy_near_5.ogg",1}};
	};
}

class CfgSoundSets
{
	class StormZone_SoundSet_Base
	{
		sound3DProcessingType = "character3DProcessingType";
		volumeCurve = "characterAttenuationCurve";
		spatial = 1;
		doppler = 0;
		loop = 0;
		frequencyRandomizer = 0;
		volumeRandomizer = 0;
	};
	class StormZone_Track1_SoundSet: StormZone_SoundSet_Base
	{
		soundShaders[] = {"StormZone_Track1_SoundShader"};
	};
	class StormZone_Track2_SoundSet: StormZone_SoundSet_Base
	{
		soundShaders[] = {"StormZone_Track2_SoundShader"};
	};
	class StormZone_Track3_SoundSet: StormZone_SoundSet_Base
	{
		soundShaders[] = {"StormZone_Track3_SoundShader"};
	};
	class StormZone_Track4_SoundSet: StormZone_SoundSet_Base
	{
		soundShaders[] = {"StormZone_Track4_SoundShader"};
	};
	class StormZone_Track5_SoundSet: StormZone_SoundSet_Base
	{
		soundShaders[] = {"StormZone_Track5_SoundShader"};
	};
}


 

Share this post


Link to post
Share on other sites
  • 0

Интересно что отладчик пишет по этому поводу или вы отладку не делаете?

 

Share this post


Link to post
Share on other sites
  • 0
13 минут назад, SyprusX сказал:

Интересно что отладчик пишет по этому поводу или вы отладку не делаете?

 

Боль))))

Share this post


Link to post
Share on other sites
  • 0
24 минуты назад, SyprusX сказал:

Интересно что отладчик пишет по этому поводу или вы отладку не делаете?

 

Да же не знаю о чем вы говорите. Не пользуюсь такими инструментами. Я вообще зеленый новичок, который пытается играть на своём сервере.

Share this post


Link to post
Share on other sites
  • 0
17 часов назад, YAKUZA сказал:

Да же не знаю о чем вы говорите. Не пользуюсь такими инструментами. Я вообще зеленый новичок, который пытается играть на своём сервере.

в каждый выполняемый в скрипте метод нужно вставить принт логирование, что бы отследить до какого момента у вас работает ваш скрипт. После этого запустить сервер и посмотреть ваши логи, все будет предельно ясно где у вас не отрабатывает скрипт. Это называется отладка.

Share this post


Link to post
Share on other sites
  • 0
18 часов назад, YAKUZA сказал:

Да же не знаю о чем вы говорите. Не пользуюсь такими инструментами. Я вообще зеленый новичок, который пытается играть на своём сервере.

Вот пример вывода логов.

Print("[Название твоего мода] Отработал метод. В тригер зашёл игрок с ником: " + player.GetIdentity().GetName());

Теперь в папке профиля, открываем файл лога. Файл лога содержит в название,   script_*************.log крутим список в самый низ.
Теперь, если в твоём моде сработал тригер при входе игрока в него, твой добавленный принт напишет тебе в файле логов,
SCRIPT       : [Название твоего мода] Отработал метод. В тригер зашёл игрок с ником: Вася
Таким образом, ты сможешь полнустью отслеживать свои скрипты, выводя сообщения в логи.
Вот так делается отладка, если мод не хочет нормально работать.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

Поддержка