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