mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
weather: initial port of ACE2 features. variables names changed to use macros.
This commit is contained in:
parent
2255a56885
commit
71bd34234b
1
addons/weather/$PBOPREFIX$
Normal file
1
addons/weather/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
||||
z\ace\addons\weather
|
12
addons/weather/CfgEventhandlers.hpp
Normal file
12
addons/weather/CfgEventhandlers.hpp
Normal file
@ -0,0 +1,12 @@
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
clientInit = QUOTE(call COMPILE_FILE(XEH_preClientInit));
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
};
|
||||
};
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
serverInit = QUOTE(call COMPILE_FILE(XEH_PostServerInit));
|
||||
init = QUOTE(call COMPILE_FILE(XEH_postInit));
|
||||
};
|
||||
};
|
33
addons/weather/XEH_postInit.sqf
Normal file
33
addons/weather/XEH_postInit.sqf
Normal file
@ -0,0 +1,33 @@
|
||||
//XEH_postInit.sqf
|
||||
//#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
"ACE_WIND_PARAMS" addPublicVariableEventHandler { GVAR(wind_period_start_time) = time; };
|
||||
"ACE_RAIN_PARAMS" addPublicVariableEventHandler { GVAR(rain_period_start_time) = time; };
|
||||
|
||||
_fnc_uptadeWind = {
|
||||
_wind = ([] call FUNC(getWind));
|
||||
setWind [_wind select 0, _wind select 1, true];
|
||||
// _nWind = wind;
|
||||
// _pW = [_nWind select 0, _nWind select 1, 0] call CBA_fnc_vect2polar;
|
||||
// _pAW = [_wind select 0, _wind select 1, 0] call CBA_fnc_vect2polar;
|
||||
// hint format["w: %1 %2\na: %3 %4", _pW select 1, _pw select 0, _pAW select 1, _pAW select 0];
|
||||
// diag_log text format["ACE_WIND,%1,%2,%3,%4,%5", time, _pW select 1, _pw select 0, _pAW select 1, _pAW select 0];
|
||||
};
|
||||
|
||||
[_fnc_uptadeWind, 1, []] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
_fnc_updateRain = {
|
||||
if(GVAR(enableRain)) then {
|
||||
if(!isNil "ACE_RAIN_PARAMS" && {!isNil QGVAR(rain_period_start_time)}) then {
|
||||
_oldStrength = ACE_RAIN_PARAMS select 0;
|
||||
_rainStrength = ACE_RAIN_PARAMS select 1;
|
||||
_transitionTime = ACE_RAIN_PARAMS select 2;
|
||||
_periodPosition = (time - GVAR(rain_period_start_time)) min _transitionTime;
|
||||
_periodPercent = (_periodPosition/_transitionTime) min 1;
|
||||
|
||||
0 setRain ((_periodPercent*(_rainStrength-_oldStrength))+_oldStrength);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
[_fnc_updateRain, 0, []] call CBA_fnc_addPerFrameHandler;
|
@ -1,3 +1,3 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
[FUNC(serverController), 60] call cba_fnc_addPerFrameHandler;
|
||||
#include "script_component.hpp"
|
||||
|
||||
[FUNC(serverController), 60] call cba_fnc_addPerFrameHandler;
|
17
addons/weather/XEH_preClientInit.sqf
Normal file
17
addons/weather/XEH_preClientInit.sqf
Normal file
@ -0,0 +1,17 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
|
||||
FUNC(KEEPTIME) = {
|
||||
if((count GVAR(WINDSPEED)) > 0) then {
|
||||
private ["_wind", "_p", "_str"];
|
||||
_wind = ACE_wind;
|
||||
|
||||
_p = _wind call CBA_fnc_vect2polar;
|
||||
_str = format["Wind: %1 at %2m/s (%3MPH)\n%4", floor(_p select 1), floor(_p select 0), floor((_p select 0)*2.23693629), GVAR(WINDSPEED)];
|
||||
TRACE_2("Wind",_wind,_str);
|
||||
};
|
||||
};
|
||||
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
[FUNC(KEEPTIME), 0.0, []] call CBA_fnc_addPerFrameHandler;
|
||||
#endif
|
39
addons/weather/XEH_preInit.sqf
Normal file
39
addons/weather/XEH_preInit.sqf
Normal file
@ -0,0 +1,39 @@
|
||||
//#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
|
||||
ADDON = false;
|
||||
LOG(MSG_INIT);
|
||||
|
||||
PREP(serverController);
|
||||
PREP(getWind);
|
||||
|
||||
|
||||
GVAR(enableRain) = false;
|
||||
|
||||
GVAR(overcast_multiplier) = 1;
|
||||
|
||||
GVAR(wind_initial_dir) = (random 360);
|
||||
GVAR(wind_initial_speed) = (overcast*15)+(random (overcast*5)) max 1;
|
||||
GVAR(wind_mean_speed) = GVAR(wind_initial_speed);
|
||||
GVAR(wind_mean_dir) = GVAR(wind_initial_dir);
|
||||
GVAR(wind_current_speed) = GVAR(wind_initial_speed);
|
||||
GVAR(wind_current_dir) = GVAR(wind_initial_dir);
|
||||
GVAR(wind_current_range_speed) = -1+(random 2);
|
||||
GVAR(wind_current_range_dir) = -1+(random 2);
|
||||
GVAR(wind_next_period) = -1; //ceil((2+random(5))/(GVAR(overcast_multiplier)/10));
|
||||
GVAR(wind_next_major_period) = -1;
|
||||
GVAR(wind_period_count) = 0;
|
||||
GVAR(wind_major_period_count) = 0;
|
||||
GVAR(wind_total_time) = 0;
|
||||
GVAR(wind_period_start_time) = time;
|
||||
|
||||
GVAR(rain_next_period) = -1;
|
||||
GVAR(rain_period_count) = 0;
|
||||
GVAR(rain_initial_rain) = 0;
|
||||
if(overcast >= 0.7) then {
|
||||
GVAR(rain_initial_rain) = (random ((overcast-0.7)/0.3));
|
||||
};
|
||||
GVAR(current_rain) = GVAR(rain_initial_rain);
|
||||
GVAR(rain_current_range) = -1+(random 2);
|
||||
|
||||
ADDON = true;
|
22
addons/weather/config.cpp
Normal file
22
addons/weather/config.cpp
Normal file
@ -0,0 +1,22 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
class CfgPatches {
|
||||
class ADDON {
|
||||
units[] = {};
|
||||
weapons[] = {};// "ACE_Kestrel4500" };
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {"ace_common"};
|
||||
author[] = {"q1184", "Rocko", "CAA-Picard"};
|
||||
VERSION_CONFIG;
|
||||
};
|
||||
};
|
||||
|
||||
#include "CfgEventhandlers.hpp"
|
||||
|
||||
/*class ACE_Parameters_Numeric {
|
||||
GVAR(XXXX) = 100;
|
||||
};
|
||||
|
||||
class ACE_Parameters_Boolean {
|
||||
GVAR(XXXX) = 0;
|
||||
};*/
|
22
addons/weather/functions/fnc_getWind.sqf
Normal file
22
addons/weather/functions/fnc_getWind.sqf
Normal file
@ -0,0 +1,22 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
_return = [0,0,0];
|
||||
if(!isNil "ACE_WIND_PARAMS") then {
|
||||
_dir = ACE_WIND_PARAMS select 0;
|
||||
_dirRange = (ACE_WIND_PARAMS select 1) - (ACE_WIND_PARAMS select 0);
|
||||
_spd = ACE_WIND_PARAMS select 2;
|
||||
_spdRange = (ACE_WIND_PARAMS select 3) - (ACE_WIND_PARAMS select 2);
|
||||
_period = ACE_WIND_PARAMS select 4;
|
||||
|
||||
_periodPosition = (time - GVAR(wind_period_start_time)) min _period;
|
||||
_periodPercent = _periodPosition/_period;
|
||||
_spdInc = _spdRange * _periodPercent;
|
||||
_dirInc = _dirRange * _periodPercent;
|
||||
_spd = (_spd + _spdInc);
|
||||
_dir = _dir + _dirInc;
|
||||
if (_dir > 360) then {_dir = _dir - 360};
|
||||
if (_dir < 0) then {_dir = _dir + 360};
|
||||
|
||||
_return = [_spd * sin _dir, _spd * cos _dir, 0];
|
||||
};
|
||||
_return;
|
85
addons/weather/functions/fnc_serverController.sqf
Normal file
85
addons/weather/functions/fnc_serverController.sqf
Normal file
@ -0,0 +1,85 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
//player sideChat format["overcast: %1", overcast];
|
||||
if(GVAR(rain_period_count) > GVAR(rain_next_period)) then {
|
||||
|
||||
if(overcast >= 0.7) then {
|
||||
_lastRain = GVAR(current_rain);
|
||||
_rainOverCast = ((overcast-0.7)/0.3);
|
||||
GVAR(rain_next_period) = ceil((1+random(10))/(GVAR(overcast_multiplier)));
|
||||
|
||||
GVAR(current_rain) = (GVAR(current_rain)+(((GVAR(current_rain)))*((_rainOverCast*(GVAR(overcast_multiplier)))/8)*GVAR(rain_current_range)));
|
||||
GVAR(current_rain) = (GVAR(current_rain) max 0.01) min 1;
|
||||
|
||||
_transitionTime = (_rainOverCast*5)+(random (_rainOverCast*20));
|
||||
GVAR(rain_current_range) = -1+(random 2);
|
||||
|
||||
// player sideChat format["lastRain: %1 currentRain: %2", _lastRain, GVAR(current_rain)];
|
||||
// player sideChat format["_transitionTime: %1", _transitionTime];
|
||||
|
||||
|
||||
ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime];
|
||||
} else {
|
||||
GVAR(current_rain) = 0;
|
||||
_lastRain = GVAR(current_rain);
|
||||
_rainOverCast = 1;
|
||||
_transitionTime = (_rainOverCast*5)+(random (_rainOverCast*20));
|
||||
ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime];
|
||||
TRACE_4("",_lastRain,_rainOverCast,_transitionTime, overcast);
|
||||
};
|
||||
|
||||
GVAR(rain_period_start_time) = time;
|
||||
publicVariable "ACE_RAIN_PARAMS";
|
||||
};
|
||||
|
||||
if(GVAR(wind_period_count) > GVAR(wind_next_period)) then {
|
||||
_startDir = GVAR(wind_current_dir);
|
||||
_startSpeed = GVAR(wind_current_speed);
|
||||
GVAR(wind_current_dir) = (GVAR(wind_current_dir)+(((GVAR(wind_current_dir)))*((overcast*(GVAR(overcast_multiplier)))/8)*GVAR(wind_current_range_dir)));
|
||||
|
||||
GVAR(wind_current_speed) = (GVAR(wind_current_speed)+(((GVAR(wind_current_speed)))*(overcast*(GVAR(overcast_multiplier))/12)*GVAR(wind_current_range_speed)));
|
||||
GVAR(wind_current_speed) = GVAR(wind_current_speed) max 0.01;
|
||||
|
||||
if(GVAR(wind_current_dir) < 0) then {
|
||||
GVAR(wind_current_dir) = GVAR(wind_current_dir)+360;
|
||||
};
|
||||
GVAR(wind_current_dir) = GVAR(wind_current_dir) % 360;
|
||||
|
||||
GVAR(wind_current_range_speed) = (-1)+(random 2);
|
||||
|
||||
GVAR(wind_current_range_dir) = (-1)+(random 2);
|
||||
|
||||
GVAR(wind_next_period) = ceil((2+random(5))/(GVAR(overcast_multiplier)));
|
||||
GVAR(wind_period_count) = 0;
|
||||
|
||||
_gustCount = floor(random(GVAR(wind_next_period)*(overcast*((GVAR(overcast_multiplier)^3)))));
|
||||
|
||||
_time = GVAR(wind_next_period)*60;
|
||||
_gusts = [];
|
||||
if(_gustCount > 0) then {
|
||||
_maxInterval = _time/_gustCount;
|
||||
for "_i" from 0 to _gustCount-1 do {
|
||||
_gustTime = (random (3 min _maxInterval));
|
||||
_timeTillGust = (_maxInterval*_i)+(random (_maxInterval - _gustTime));
|
||||
_gustSpeed = (random 1);
|
||||
_gustDir = (GVAR(wind_current_dir)+(GVAR(wind_current_dir)*(-1+(random 2))))*(overcast*(GVAR(overcast_multiplier)));
|
||||
_gusts set[(count _gusts), [_timeTillGust, _gustTime, _gustSpeed, _gustDir]];
|
||||
};
|
||||
};
|
||||
// diag_log text "-------";
|
||||
// diag_log text format["startDir: %1 endDir: %2", _startDir, GVAR(wind_current_dir)];
|
||||
// diag_log text format["startSpeed: %1 endSpeed: %2", _startSpeed, GVAR(wind_current_speed)];
|
||||
// diag_log text format["GVAR(wind_current_range_speed): %1", GVAR(wind_current_range_speed)];
|
||||
// diag_log text format["GVAR(wind_current_range_dir): %1", GVAR(wind_current_range_dir)];
|
||||
// diag_log text format["gusts: %1", _gusts];
|
||||
// diag_log text format["next period: %1", GVAR(wind_next_period)];
|
||||
GVAR(wind_total_time) = GVAR(wind_total_time) + GVAR(wind_next_period);
|
||||
// diag_log text format["%1,%2,%3,%4", GVAR(wind_total_time), GVAR(wind_current_dir), GVAR(wind_current_speed), _gustCount];
|
||||
|
||||
ACE_WIND_PARAMS = [_startDir, GVAR(wind_current_dir), _startSpeed, GVAR(wind_current_speed), _time, _gusts];
|
||||
|
||||
GVAR(wind_period_start_time) = time;
|
||||
publicVariable "ACE_WIND_PARAMS";
|
||||
};
|
||||
GVAR(rain_period_count) = GVAR(rain_period_count) + 1;
|
||||
GVAR(wind_period_count) = GVAR(wind_period_count) + 1;
|
1
addons/weather/functions/script_component.hpp
Normal file
1
addons/weather/functions/script_component.hpp
Normal file
@ -0,0 +1 @@
|
||||
#include "\z\ace\addons\weather\script_component.hpp"
|
12
addons/weather/script_component.hpp
Normal file
12
addons/weather/script_component.hpp
Normal file
@ -0,0 +1,12 @@
|
||||
#define COMPONENT weather
|
||||
#include "\z\ace\addons\main\script_mod.hpp"
|
||||
#define DEBUG_ENABLED_WEATHER
|
||||
#ifdef DEBUG_ENABLED_WEATHER
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SETTINGS_WEATHER
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_WEATHER
|
||||
#endif
|
||||
|
||||
#include "\z\ace\addons\main\script_macros.hpp"
|
@ -1 +0,0 @@
|
||||
z\ace\addons\wind_deflection
|
@ -1,19 +0,0 @@
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
clientInit = QUOTE(call COMPILE_FILE(XEH_preClientInit));
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
};
|
||||
};
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
serverInit = QUOTE(call COMPILE_FILE(XEH_PostServerInit));
|
||||
init = QUOTE(call COMPILE_FILE(XEH_postInit));
|
||||
};
|
||||
};
|
||||
class Extended_FiredBIS_EventHandlers {
|
||||
class Man {
|
||||
class ADDON {
|
||||
clientFiredBisPlayer = "if (!isNull (_this select 6) && {((_this select 6) isKindOf 'bulletBase')}) then {_this call ace_sys_wind_deflection_fnc_fired_man}";
|
||||
};
|
||||
};
|
||||
};
|
@ -1,35 +0,0 @@
|
||||
class RscTitles {
|
||||
class ACE_RscWindIntuitive {
|
||||
idd = -1;
|
||||
onLoad ="with uiNameSpace do { ACE_RscWindIntuitive = _this select 0 };";
|
||||
movingEnable = 0;
|
||||
duration = 10;
|
||||
fadeIn = false;
|
||||
fadeOut = false;
|
||||
controls[] = { "ACE_RscWindIntuitive_BG", "ACE_RscWindIntuitive_1" };
|
||||
class ACE_RscWindIntuitive_BG {
|
||||
idc = -1;
|
||||
type = 0;
|
||||
style = 128;
|
||||
font = "TahomaB";
|
||||
colorBackground[] = {0,0,0,0};
|
||||
colorText[] = { 0,0,0,0};
|
||||
text = "";
|
||||
sizeEx = 0.027;
|
||||
x = "SafeZoneX + 0.001";
|
||||
y = "SafeZoneY + 0.04";
|
||||
w = 0.3;
|
||||
h = 0.3;
|
||||
size = 0.034;
|
||||
};
|
||||
class ACE_RscWindIntuitive_1: ACE_RscWindIntuitive_BG {
|
||||
// TITS = 1591514
|
||||
idc = 1591514;
|
||||
style = 48;
|
||||
colorText[] = {0,0,0,0.1};
|
||||
font ="Bitstream";
|
||||
sizeEx = 0.03;
|
||||
text = ""; // text = "x\ace\addons\sys_wind_deflection\data\windxx.paa";
|
||||
};
|
||||
};
|
||||
};
|
@ -1,33 +0,0 @@
|
||||
//XEH_postInit.sqf
|
||||
//#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
"ACE_WIND_PARAMS" addPublicVariableEventHandler { ace_wind_period_start_time = time; };
|
||||
"ACE_RAIN_PARAMS" addPublicVariableEventHandler { ace_wind_rain_period_start_time = time; };
|
||||
|
||||
_func = {
|
||||
_wind = ([] call FUNC(getWind));
|
||||
setWind [_wind select 0, _wind select 1, true];
|
||||
// _nWind = wind;
|
||||
// _pW = [_nWind select 0, _nWind select 1, 0] call CBA_fnc_vect2polar;
|
||||
// _pAW = [_wind select 0, _wind select 1, 0] call CBA_fnc_vect2polar;
|
||||
// hint format["w: %1 %2\na: %3 %4", _pW select 1, _pw select 0, _pAW select 1, _pAW select 0];
|
||||
// diag_log text format["ACE_WIND,%1,%2,%3,%4,%5", time, _pW select 1, _pw select 0, _pAW select 1, _pAW select 0];
|
||||
};
|
||||
|
||||
[_func, 1, []] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
_rainFunc = {
|
||||
if(GVAR(enableRain)) then {
|
||||
if(!isNil "ACE_RAIN_PARAMS" && {!isNil "ace_wind_rain_period_start_time"}) then {
|
||||
_oldStrength = ACE_RAIN_PARAMS select 0;
|
||||
_rainStrength = ACE_RAIN_PARAMS select 1;
|
||||
_transitionTime = ACE_RAIN_PARAMS select 2;
|
||||
_periodPosition = (time - ace_wind_rain_period_start_time) min _transitionTime;
|
||||
_periodPercent = (_periodPosition/_transitionTime) min 1;
|
||||
|
||||
0 setRain ((_periodPercent*(_rainStrength-_oldStrength))+_oldStrength);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
[_rainFunc, 0, []] call CBA_fnc_addPerFrameHandler;
|
@ -1,34 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
#include "\ca\editor\Data\Scripts\dikCodes.h"
|
||||
|
||||
PREP(bulletflight);
|
||||
PREP(fired_man);
|
||||
PREP(clockwind);
|
||||
PREP(wind_intuitive);
|
||||
PREP(keypressed);
|
||||
|
||||
GVAR(running) = false;
|
||||
// Settings for MP missions. in SP clientside config takes priority
|
||||
GVAR(force_drift_on) = true; //true: drift always on, don't allow client to turn it off
|
||||
//false: client setting will determine whether he has drift
|
||||
GVAR(force_drift_off) = false; //true: drift always off, don't allow client to turn it on
|
||||
//false: client setting will determine whether he has drift
|
||||
|
||||
GVAR(presstime) = 0;
|
||||
FUNC(KEEPTIME) = {
|
||||
if((count GVAR(WINDSPEED)) > 0) then {
|
||||
private ["_wind", "_p", "_str"];
|
||||
_wind = ACE_wind;
|
||||
|
||||
_p = _wind call CBA_fnc_vect2polar;
|
||||
_str = format["Wind: %1 at %2m/s (%3MPH)\n%4", floor(_p select 1), floor(_p select 0), floor((_p select 0)*2.23693629), GVAR(WINDSPEED)];
|
||||
TRACE_2("Wind",_wind,_str);
|
||||
};
|
||||
};
|
||||
|
||||
[QUOTE(ADDON), "Toggle_Wind_Info", { [_this] call FUNC(keypressed) }] call CBA_fnc_addKeyHandlerFromConfig; // sys_eject: Uses same keypress to show Altimeter while in a parachute or skydiving
|
||||
|
||||
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
[FUNC(KEEPTIME), 0.0, []] call CBA_fnc_addPerFrameHandler;
|
||||
#endif
|
@ -1,55 +0,0 @@
|
||||
//#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
|
||||
ADDON = false;
|
||||
LOG(MSG_INIT);
|
||||
|
||||
GVAR(enableRain) = false;
|
||||
|
||||
ace_wind_initial_dir = (random 360);
|
||||
|
||||
ace_wind_initial_speed = (overcast*15)+(random (overcast*5)) max 1;
|
||||
|
||||
ace_wind_overcast_multiplier = 1;
|
||||
|
||||
ace_wind_mean_speed = ace_wind_initial_speed;
|
||||
|
||||
ace_wind_mean_dir = ace_wind_initial_dir;
|
||||
|
||||
ace_wind_current_speed = ace_wind_initial_speed;
|
||||
|
||||
ace_wind_current_dir = ace_wind_initial_dir;
|
||||
|
||||
ace_wind_current_range_speed = -1+(random 2);
|
||||
|
||||
ace_wind_current_range_dir = -1+(random 2);
|
||||
|
||||
ace_wind_next_period = -1; //ceil((2+random(5))/(ace_wind_overcast_multiplier/10));
|
||||
|
||||
ace_wind_next_major_period = -1;
|
||||
|
||||
ace_wind_period_count = 0;
|
||||
|
||||
ace_wind_major_period_count = 0;
|
||||
|
||||
ace_wind_total_time = 0;
|
||||
|
||||
ace_wind_period_start_time = time;
|
||||
|
||||
ace_wind_rain_next_period = -1;
|
||||
|
||||
ace_wind_rain_period_count = 0;
|
||||
|
||||
ace_wind_rain_initial_rain = 0;
|
||||
if(overcast >= 0.7) then {
|
||||
ace_wind_rain_initial_rain = (random ((overcast-0.7)/0.3));
|
||||
};
|
||||
|
||||
ace_wind_current_rain = ace_wind_rain_initial_rain;
|
||||
|
||||
ace_wind_rain_current_range = -1+(random 2);
|
||||
|
||||
PREP(serverController);
|
||||
PREP(getWind);
|
||||
|
||||
ADDON = true;
|
@ -1,45 +0,0 @@
|
||||
class cfgAmmo {
|
||||
class BulletCore;
|
||||
class BulletBase: BulletCore {
|
||||
ace_windcoef = 0.4;
|
||||
};
|
||||
class B_545x39_Ball: BulletBase {
|
||||
ace_windcoef = 0.55;
|
||||
//ace_drift[] = {{0,0},{100,0.03},{200,0.07},{300,0.25},{400,0.42},{500,0.79},{600,1.27},{700,2},{800,2.98},{900,4.35},{1000,6.2}};
|
||||
};
|
||||
class B_556x45_Ball: BulletBase {
|
||||
ace_windcoef = 0.55;
|
||||
//ace_drift[] = {{0,0},{100,0.03},{200,0.07},{300,0.17},{400,0.37},{500,0.71},{600,1.2},{700,1.81},{800,2.75},{900,4},{1000,6.2}};
|
||||
};
|
||||
class B_762x39_Ball: BulletBase {
|
||||
ace_windcoef = 0.59;
|
||||
//ace_drift[] = {{0,0},{100,0.05},{200,0.1},{300,0.38},{400,0.75},{500,1.37}};
|
||||
};
|
||||
class B_9x39_SP5: BulletBase {
|
||||
ace_windcoef = 0.2;
|
||||
//ace_drift[] = {{0,0},{100,0.06},{200,0.25},{300,0.6},{400,1.1}};
|
||||
};
|
||||
class B_762x51_Ball: BulletBase {
|
||||
ace_windcoef = 0.4;
|
||||
//ace_drift[] = {{0,0},{100,0.03},{200,0.08},{300,0.18},{400,0.305},{500,0.57},{600,0.92},{700,1.3},{800,1.85},{900,2.5},{1000,3.3}};
|
||||
};
|
||||
class B_762x54_Ball: BulletBase {
|
||||
ace_windcoef = 0.45;
|
||||
//ace_drift[] = {{0,0},{100,0.025},{200,0.085},{300,0.19},{400,0.36},{500,0.6},{600,0.98},{700,1.45},{800,2.1},{900,2.9},{1000,4.15}};
|
||||
};
|
||||
class B_127x99_Ball: BulletBase {
|
||||
ace_windcoef = 0.24;
|
||||
//ace_drift[] = {{0,0},{100,0.013},{200,0.03},{300,0.07},{400,0.139},{500,0.211},{600,0.41},{700,0.46},{800,0.7},{900,0.93},{1000,1.24},{1100,1.6},{1200,2},{1300,2.42},{1400,3},{1500,3.66},{1600,4.35},{1700,5.2},{1800,6.1},{1900,7.2},{2000,8.4}};
|
||||
};
|
||||
class B_127x108_Ball: BulletBase {
|
||||
ace_windcoef = 0.24;
|
||||
//ace_drift[] = {{0,0},{100,0.013},{200,0.03},{300,0.07},{400,0.139},{500,0.211},{600,0.41},{700,0.46},{800,0.8},{900,1.1},{1000,1.5},{1100,1.9},{1200,2.3},{1300,2.87},{1400,3.5},{1500,4.25},{1600,5.05},{1700,6.1},{1800,7.25},{1900,8.55},{2000,11.2}};
|
||||
};
|
||||
class B_127x107_Ball: BulletBase {
|
||||
ace_windcoef = 0.24;
|
||||
//ace_drift[] = {{0,0},{100,0.013},{200,0.03},{300,0.07},{400,0.139},{500,0.211},{600,0.337},{700,0.46},{800,0.64},{900,0.85},{1000,1.15},{1100,1.45},{1200,1.9},{1300,2.3},{1400,2.9},{1500,3.53},{1600,4.35},{1700,5.2},{1800,6.3},{1900,7.4},{2000,9.7}};
|
||||
};
|
||||
class B_86x70_Ball_noTracer: BulletBase {
|
||||
ace_windcoef = 0.25;
|
||||
};
|
||||
};
|
@ -1,28 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
class CfgPatches {
|
||||
class ADDON {
|
||||
units[] = {};
|
||||
//weapons[] = { "ACE_Kestrel4500" };
|
||||
weapons[] = {};
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {
|
||||
"ace_common"
|
||||
};
|
||||
version = VERSION;
|
||||
author[] = {"q1184", "Rocko"};
|
||||
/*
|
||||
class ACE_Options { // ACE Options
|
||||
group = "INTERACTION";
|
||||
title = " "; // Empty (WITH A SPACE IN BETWEEN!!!!!) if no CAPTION TEXT is wanted
|
||||
class Toggle_Wind_Info { // Points to CBA Events, e.g for the keypress registered within CBA
|
||||
title = $STR_ACE_MENU_MEASUREWIND;
|
||||
};
|
||||
};
|
||||
*/
|
||||
};
|
||||
};
|
||||
|
||||
#include "CfgEventhandlers.hpp"
|
||||
#include "CfgAmmo.hpp"
|
||||
//#include "RscTitles.hpp"
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,31 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
//#define DEBUG_MODE_FULL
|
||||
#define __cfg configFile >> "CfgAmmo" >> _ammo
|
||||
private ["_unit","_t","_vel","_timeprev","_coef","_ammo","_c","_dt","_bullet"];
|
||||
_bullet = _this select 0;
|
||||
_unit = _this select 2;
|
||||
_ammo = _this select 3;
|
||||
_c = 1.42 * getNumber(__cfg >> "ace_windcoef");
|
||||
_timeprev = time;
|
||||
|
||||
//_wind = ACE_wind; //constant wind cheat
|
||||
_bulletFunc = {
|
||||
_bullet = (_this select 0) select 0;
|
||||
if (alive _bullet) then {
|
||||
_coef = ((_this select 0) select 1)*accTime;
|
||||
_vel = velocity _bullet;
|
||||
_wind = ACE_wind;
|
||||
_vel set [0, (_vel select 0) + (_wind select 0)*_coef];
|
||||
_vel set [1, (_vel select 1) + (_wind select 1)*_coef];
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
drop ["\Ca\Data\Cl_basic","","Billboard",1,30,getPos _bullet,[0,0,0],1,1.275,1.0,0.0,[0.125],[[1,0,0,0.5]],[0],0.0,2.0,"","",""];
|
||||
#endif
|
||||
_bullet setvelocity _vel;
|
||||
//TRACE_1("",_wind);
|
||||
} else {
|
||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||
};
|
||||
};
|
||||
_time = 0.075;
|
||||
|
||||
_h1 = [_bulletFunc, _time, [_bullet, _c*_time]] call cba_fnc_addPerFrameHandler;
|
@ -1,26 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
private ["_pd","_wd","_a","_ws"];
|
||||
|
||||
_pd = getdir player; //player dir
|
||||
_wind = ACE_wind;
|
||||
_wd = (_wind select 0) atan2 (_wind select 1); //wind dir
|
||||
if (_wd < 0) then {_wd = _wd + 360};
|
||||
|
||||
//_ws = _wd + 180; //angle to wind source
|
||||
//if (_ws > 360) then {_ws = _ws - 360};
|
||||
|
||||
_a = _wd - _pd; //angle from player dir to wind source
|
||||
if (_a < 0) then {_a = 360 + _a};
|
||||
|
||||
if (_a >= 345 || {_a <= 15}) exitwith {12};
|
||||
if (_a > 15 && {_a <= 45}) exitwith {1};
|
||||
if (_a > 45 && {_a <= 75}) exitwith {2};
|
||||
if (_a > 75 && {_a <= 105}) exitwith {3};
|
||||
if (_a > 105 && {_a <= 135}) exitwith {4};
|
||||
if (_a > 135 && {_a <= 165}) exitwith {5};
|
||||
if (_a > 165 && {_a <= 195}) exitwith {6};
|
||||
if (_a > 195 && {_a <= 225}) exitwith {7};
|
||||
if (_a > 225 && {_a <= 255}) exitwith {8};
|
||||
if (_a > 255 && {_a <= 285}) exitwith {9};
|
||||
if (_a > 285 && {_a <= 315}) exitwith {10};
|
||||
if (_a > 315 && {_a < 345}) exitwith {11};
|
@ -1,43 +0,0 @@
|
||||
//dumps distance-side drift data for each frame into the rpt
|
||||
|
||||
#include "script_component.hpp"
|
||||
//PARAMS_3(_u,_w,_magazine);
|
||||
#define __cfg configFile >> "CfgAmmo" >> _ammo
|
||||
|
||||
if (isNil QUOTE(FUNC(supah_funwind))) then {
|
||||
FUNC(supah_funwind) = {
|
||||
private ["_defl","_pos0","_pos","_dist","_cos","_dir0","_dir","_d","_b"];
|
||||
PARAMS_3(_pos,_pos0,_dir0); //cur bullet pos, init bullet position, init bullet direction
|
||||
|
||||
_d = _pos distance _pos0;
|
||||
_dir = [(_pos select 0)-(_pos0 select 0),(_pos select 1)-(_pos0 select 1)];
|
||||
_cos = (_dir select 0)*(_dir0 select 0) + (_dir select 1)*(_dir0 select 1);
|
||||
_b = sqrt( ((_dir select 0)^2 + (_dir select 1)^2)*((_dir0 select 0)^2 + (_dir0 select 1)^2) );
|
||||
_cos = if (_b == 0) then {0} else {_cos/_b};
|
||||
_defl = _d*sqrt(1 - _cos^2);
|
||||
TRACE_2("",_d*_cos,_defl);
|
||||
};
|
||||
};
|
||||
|
||||
private ["_unit","_weapon","_ammo","_bullet","_veh","_vel"];
|
||||
|
||||
_bullet = _this select 5;
|
||||
if (isNull _bullet) exitwith {};
|
||||
|
||||
_unit = _this select 0;
|
||||
_weapon = _this select 1;
|
||||
_ammo = _this select 4;
|
||||
_veh = vehicle player;
|
||||
|
||||
if (_bullet isKindOf "bulletBase") then {
|
||||
[_bullet, velocity _bullet, getpos _bullet] spawn {
|
||||
private ["_pos0"];
|
||||
PARAMS_2(_bullet,_vel0);
|
||||
_pos0 = [(_this select 2) select 0,(_this select 2) select 1];
|
||||
|
||||
while {alive _bullet} do {
|
||||
[[(getpos _bullet) select 0,(getpos _bullet) select 1],_pos0,_vel0] call FUNC(supah_funwind);
|
||||
sleep 0.001;
|
||||
};
|
||||
};
|
||||
};
|
@ -1,14 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
#define __enableWindClient (["ACE", "ACE_WIND_CONFIG", "enable_drift"] call ace_settings_fnc_getNumber)
|
||||
|
||||
private ["_unit","_weapon","_ammo","_bullet","_go"];
|
||||
|
||||
// mission global variables (force_drift_on/off) override clientside drift setting
|
||||
_go = __enableWindClient;
|
||||
if (isMultiplayer) then {
|
||||
if (GVAR(force_drift_off)) exitwith {_go = 0};
|
||||
if (GVAR(force_drift_on)) exitwith {_go = 1};
|
||||
};
|
||||
if (_go == 0) exitwith {};
|
||||
|
||||
[_this select 6,_this select 1,_this select 0,_this select 4] call FUNC(bulletflight);
|
@ -1,20 +0,0 @@
|
||||
_return = [0,0,0];
|
||||
if(!isNil "ACE_WIND_PARAMS") then {
|
||||
_dir = ACE_WIND_PARAMS select 0;
|
||||
_dirRange = (ACE_WIND_PARAMS select 1)-(ACE_WIND_PARAMS select 0);
|
||||
_spd = ACE_WIND_PARAMS select 2;
|
||||
_spdRange = (ACE_WIND_PARAMS select 3)-(ACE_WIND_PARAMS select 2);
|
||||
_period = ACE_WIND_PARAMS select 4;
|
||||
|
||||
_periodPosition = (time - ace_wind_period_start_time) min _period;
|
||||
_periodPercent = _periodPosition/_period;
|
||||
_spdInc = _spdRange*_periodPercent;
|
||||
_dirInc = _dirRange*_periodPercent;
|
||||
_spd = (_spd + _spdInc);
|
||||
_dir = _dir + _dirInc;
|
||||
if (_dir > 360) then {_dir = _dir - 360};
|
||||
if (_dir < 0) then {_dir = _dir + 360};
|
||||
|
||||
_return = [_spd*sin _dir, _spd*cos _dir, 0];
|
||||
};
|
||||
_return;
|
@ -1,35 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
#define __dsp (uiNamespace getVariable "ACE_RscWindIntuitive")
|
||||
#define __ctrl (__dsp displayCtrl 1591514)
|
||||
|
||||
private["_class","_wpn","_s"];
|
||||
PARAMS_1(_keyData);
|
||||
|
||||
//a 'valve' to cut off multiple key press events within 1 frame
|
||||
if (GVAR(presstime) == time) exitwith {false};
|
||||
GVAR(presstime) = time;
|
||||
if (GVAR(running)) exitwith { GVAR(running) = false; false }; //switch info off
|
||||
GVAR(running) = true;
|
||||
|
||||
if ((player getVariable ["ace_sys_eject_skydiving",false]) || {((vehicle player) iskindof "BIS_Steerable_Parachute" || {(vehicle player) iskindof "ParachuteBase"})}) then {
|
||||
[] spawn ace_sys_eject_fnc_showAltimeter;
|
||||
} else {
|
||||
if (player != vehicle player && {!(vehicle player iskindof "StaticWeapon")}) exitwith { GVAR(running) = false; false }; // Allow checking wind in Static Laserdesignator and Spottingscope
|
||||
0 spawn {
|
||||
private ["_unit","_str","_clock","_cookie"];
|
||||
_unit = player;
|
||||
13523 cutRsc ["ACE_RscWindIntuitive", "PLAIN"];
|
||||
__ctrl ctrlsetscale 0.75;
|
||||
__ctrl ctrlcommit 0;
|
||||
while { GVAR(running) && {player == _unit} && {!(isNull __dsp)} } do {
|
||||
_str = ACE_wind call ACE_fnc_magnitude;
|
||||
_clock = call FUNC(clockwind);
|
||||
_cookie = [_clock,_str] call FUNC(wind_intuitive);
|
||||
//hint format["dir %1 str %2",_clock,_str];
|
||||
sleep 0.5;
|
||||
};
|
||||
GVAR(running) = false;
|
||||
if (!isNull __dsp) then { 13523 cutRsc ["Default", "PLAIN",3] };
|
||||
};
|
||||
};
|
||||
true;
|
@ -1,82 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
//player sideChat format["overcast: %1", overcast];
|
||||
if(ace_wind_rain_period_count > ace_wind_rain_next_period) then {
|
||||
if(overcast >= 0.7) then {
|
||||
_lastRain = ace_wind_current_rain;
|
||||
_rainOverCast = ((overcast-0.7)/0.3);
|
||||
ace_wind_rain_next_period = ceil((1+random(10))/(ace_wind_overcast_multiplier));
|
||||
ace_wind_current_rain = (ace_wind_current_rain+(((ace_wind_current_rain))*((_rainOverCast*(ace_wind_overcast_multiplier))/8)*ace_wind_rain_current_range));
|
||||
ace_wind_current_rain = (ace_wind_current_rain max 0.01) min 1;
|
||||
_transitionTime = (_rainOverCast*5)+(random (_rainOverCast*20));
|
||||
ace_wind_rain_current_range = -1+(random 2);
|
||||
|
||||
|
||||
// player sideChat format["lastRain: %1 currentRain: %2", _lastRain, ace_wind_current_rain];
|
||||
// player sideChat format["_transitionTime: %1", _transitionTime];
|
||||
|
||||
|
||||
|
||||
ACE_RAIN_PARAMS = [_lastRain, ace_wind_current_rain, _transitionTime];
|
||||
} else {
|
||||
ace_wind_current_rain = 0;
|
||||
_lastRain = ace_wind_current_rain;
|
||||
_rainOverCast = 1;
|
||||
_transitionTime = (_rainOverCast*5)+(random (_rainOverCast*20));
|
||||
ACE_RAIN_PARAMS = [_lastRain, ace_wind_current_rain, _transitionTime];
|
||||
TRACE_4("",_lastRain,_rainOverCast,_transitionTime, overcast);
|
||||
};
|
||||
ace_wind_rain_period_start_time = time;
|
||||
publicVariable "ACE_RAIN_PARAMS";
|
||||
};
|
||||
|
||||
if(ace_wind_period_count > ace_wind_next_period) then {
|
||||
_startDir = ace_wind_current_dir;
|
||||
_startSpeed = ace_wind_current_speed;
|
||||
ace_wind_current_dir = (ace_wind_current_dir+(((ace_wind_current_dir))*((overcast*(ace_wind_overcast_multiplier))/8)*ace_wind_current_range_dir));
|
||||
ace_wind_current_speed = (ace_wind_current_speed+(((ace_wind_current_speed))*(overcast*(ace_wind_overcast_multiplier)/12)*ace_wind_current_range_speed));
|
||||
|
||||
ace_wind_current_speed = ace_wind_current_speed max 0.01;
|
||||
|
||||
if(ace_wind_current_dir < 0) then {
|
||||
ace_wind_current_dir = ace_wind_current_dir+360;
|
||||
};
|
||||
ace_wind_current_dir = ace_wind_current_dir % 360;
|
||||
|
||||
ace_wind_current_range_speed = (-1)+(random 2);
|
||||
|
||||
ace_wind_current_range_dir = (-1)+(random 2);
|
||||
|
||||
ace_wind_next_period = ceil((2+random(5))/(ace_wind_overcast_multiplier));
|
||||
ace_wind_period_count = 0;
|
||||
|
||||
_gustCount = floor(random(ace_wind_next_period*(overcast*((ace_wind_overcast_multiplier^3)))));
|
||||
|
||||
_time = ace_wind_next_period*60;
|
||||
_gusts = [];
|
||||
if(_gustCount > 0) then {
|
||||
_maxInterval = _time/_gustCount;
|
||||
for "_i" from 0 to _gustCount-1 do {
|
||||
_gustTime = (random (3 min _maxInterval));
|
||||
_timeTillGust = (_maxInterval*_i)+(random (_maxInterval - _gustTime));
|
||||
_gustSpeed = (random 1);
|
||||
_gustDir = (ace_wind_current_dir+(ace_wind_current_dir*(-1+(random 2))))*(overcast*(ace_wind_overcast_multiplier));
|
||||
_gusts set[(count _gusts), [_timeTillGust, _gustTime, _gustSpeed, _gustDir]];
|
||||
};
|
||||
};
|
||||
// diag_log text "-------";
|
||||
// diag_log text format["startDir: %1 endDir: %2", _startDir, ace_wind_current_dir];
|
||||
// diag_log text format["startSpeed: %1 endSpeed: %2", _startSpeed, ace_wind_current_speed];
|
||||
// diag_log text format["ace_wind_current_range_speed: %1", ace_wind_current_range_speed];
|
||||
// diag_log text format["ace_wind_current_range_dir: %1", ace_wind_current_range_dir];
|
||||
// diag_log text format["gusts: %1", _gusts];
|
||||
// diag_log text format["next period: %1", ace_wind_next_period];
|
||||
ace_wind_total_time = ace_wind_total_time + ace_wind_next_period;
|
||||
// diag_log text format["%1,%2,%3,%4", ace_wind_total_time, ace_wind_current_dir, ace_wind_current_speed, _gustCount];
|
||||
|
||||
ACE_WIND_PARAMS = [_startDir, ace_wind_current_dir, _startSpeed, ace_wind_current_speed, _time, _gusts];
|
||||
ace_wind_period_start_time = time;
|
||||
publicVariable "ACE_WIND_PARAMS";
|
||||
};
|
||||
ace_wind_rain_period_count = ace_wind_rain_period_count + 1;
|
||||
ace_wind_period_count = ace_wind_period_count + 1;
|
@ -1,30 +0,0 @@
|
||||
/* fnc_wind_intuitive.sqf | (c) 2009 by rocko */
|
||||
|
||||
// [5,4] spawn ace_sys_wind_deflection_fnc_wind_intuitive
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define __dsp (uiNamespace getVariable "ACE_RscWindIntuitive")
|
||||
#define __ctrl (__dsp displayCtrl 1591514)
|
||||
|
||||
#define __path "\x\ace\addons\sys_wind_deflection\data\"
|
||||
|
||||
private["_ar","_str","_str_tmp"];
|
||||
PARAMS_2(_ar_number,_str_number);
|
||||
|
||||
// Using Beaufort scale values - assuming wind in ACE is done m/s - otherwise fuck it and make better :)
|
||||
_nowind = false;
|
||||
if (_str_number >= 0 && {_str_number < 0.3}) then { _str = [1,1,1,0.5], _nowind = true; }; //Calm / probably never happens in arma (even vanilla has always light wind)
|
||||
if (_str_number >= 0.3 && {_str_number < 2}) then { _str = [1,1,1,0.5]}; //Light air - white
|
||||
if (_str_number >= 2 && {_str_number < 3}) then { _str = [0.56,0.93,0.56,0.5]}; //Light breeze - light green
|
||||
if (_str_number >= 3 && {_str_number < 5}) then { _str = [0.53,1,0.18,0.5]}; //Gentle breeze - green yellow
|
||||
if (_str_number >= 5 && {_str_number < 8}) then { _str = [1,1,0,0.5]}; //Moderate breeze - yellow
|
||||
if (_str_number >= 8 && {_str_number < 11}) then { _str = [0.85,0.65,0.1,0.5]}; //Fresh breeze - dark yellow
|
||||
if (_str_number >= 11 && {_str_number < 14}) then { _str = [1,0.65,0,0.5]}; //Strong breeze - orange
|
||||
if (_str_number >= 14 && {_str_number < 17}) then { _str = [0.93,0.25,0,0.5]}; //High wind,moderate gale, near gale - red orange
|
||||
if (_str_number >= 17) then { _str = [1,0,0,0.5]}; //Gale,fresh gale - red
|
||||
|
||||
_ar = if (!_nowind) then { format[__path+"wind"+"%1"+".paa", _ar_number] } else { __path+"wind0.paa" };
|
||||
|
||||
__ctrl ctrlSetText _ar;
|
||||
__ctrl ctrlSetTextColor _str;
|
@ -1 +0,0 @@
|
||||
#include "\z\ace\addons\wind_deflection\script_component.hpp"
|
@ -1,12 +0,0 @@
|
||||
#define COMPONENT wind_deflection
|
||||
#include "\x\ace\addons\main\script_mod.hpp"
|
||||
|
||||
#ifdef DEBUG_ENABLED_WIND_DEFLECTION
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SETTINGS_WIND_DEFLECTION
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_WIND_DEFLECTION
|
||||
#endif
|
||||
|
||||
#include "\x\ace\addons\main\script_macros.hpp"
|
@ -1,18 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project name="ACE">
|
||||
<Package name="sys_wind_deflection">
|
||||
<Container name="STR_ACE_MENU">
|
||||
<Key ID="STR_ACE_MENU_MEASUREWIND">
|
||||
<German>Wind schätzen</German>
|
||||
<English>Measure wind</English>
|
||||
<Italian>Measure wind</Italian>
|
||||
<Spanish>Measure wind</Spanish>
|
||||
<French>Mesurer vent</French>
|
||||
<Czech>Změřit sílu větru</Czech>
|
||||
<Russian>Измерить ветер</Russian>
|
||||
<Polish>Pomiar wiatru</Polish>
|
||||
<Hungarian>Szél mérés</Hungarian>
|
||||
</Key>
|
||||
</Container>
|
||||
</Package>
|
||||
</Project>
|
Loading…
Reference in New Issue
Block a user