Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • 0
YAKUZA

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

  • 0

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

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

Изменено пользователем Troy1 (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
MagicByte MagicByte MagicByte
  • 0
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));

        }

    }

};

Изменено пользователем YAKUZA (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 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"};
	};
}


 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
13 минут назад, SyprusX сказал:

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

 

Боль))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
24 минуты назад, SyprusX сказал:

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
17 часов назад, YAKUZA сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
18 часов назад, YAKUZA сказал:

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.