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

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

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

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

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

История изменений

YAKUZA

YAKUZA

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

YAKUZA

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

YAKUZA

12 часов назад, Troy1 сказал:

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

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

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));

        }

    }

};

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

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

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