Translation

Russian translation of the texts
This commit is contained in:
EpMAK 2015-04-10 17:51:48 +03:00
parent ccc326b81f
commit fab5605ad5
157 changed files with 9827 additions and 9703 deletions

17
.gitattributes vendored Normal file
View File

@ -0,0 +1,17 @@
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain

12
.gitignore vendored
View File

@ -1,6 +1,6 @@
release/* release/*
*.cache *.cache
*.pbo *.pbo
texHeaders.bin texHeaders.bin
*.swp *.swp
*.swo *.swo

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2015-04-07 --> <!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="Attach"> <Package name="Attach">
<Key ID="STR_ACE_Attach_AttachDetach"> <Key ID="STR_ACE_Attach_AttachDetach">
@ -48,7 +48,7 @@
<Portuguese>Marcador IV Acoplado</Portuguese> <Portuguese>Marcador IV Acoplado</Portuguese>
<Italian>Strobo IR attaccata</Italian> <Italian>Strobo IR attaccata</Italian>
<Hungarian>Infravörös jeladó hozzácsatolva</Hungarian> <Hungarian>Infravörös jeladó hozzácsatolva</Hungarian>
<Russian>ИК строб присоединён</Russian> <Russian>ИК-маяк присоединён</Russian>
</Key> </Key>
<Key ID="STR_ACE_Attach_IrStrobe_Detached"> <Key ID="STR_ACE_Attach_IrStrobe_Detached">
<English>IR Strobe Detached</English> <English>IR Strobe Detached</English>
@ -60,7 +60,7 @@
<Portuguese>Marcador IV Separado</Portuguese> <Portuguese>Marcador IV Separado</Portuguese>
<Italian>Strobo IR staccata</Italian> <Italian>Strobo IR staccata</Italian>
<Hungarian>Infravörös jeladó lecsatolva</Hungarian> <Hungarian>Infravörös jeladó lecsatolva</Hungarian>
<Russian>ИК строб отсоединён</Russian> <Russian>ИК-маяк отсоединён</Russian>
</Key> </Key>
<Key ID="STR_ACE_Attach_IrGrenade_Attached"> <Key ID="STR_ACE_Attach_IrGrenade_Attached">
<English>IR Grenade Attached</English> <English>IR Grenade Attached</English>
@ -72,7 +72,7 @@
<Portuguese>Granada IV Acoplada</Portuguese> <Portuguese>Granada IV Acoplada</Portuguese>
<Italian>Granata IR attaccata</Italian> <Italian>Granata IR attaccata</Italian>
<Hungarian>Infravörös gránát hozzácsatolva</Hungarian> <Hungarian>Infravörös gránát hozzácsatolva</Hungarian>
<Russian>ИК граната присоединена</Russian> <Russian>ИК-граната присоединена</Russian>
</Key> </Key>
<Key ID="STR_ACE_Attach_IrGrenade_Detached"> <Key ID="STR_ACE_Attach_IrGrenade_Detached">
<English>IR Grenade Detached</English> <English>IR Grenade Detached</English>
@ -84,7 +84,7 @@
<Portuguese>Granada IV Separada</Portuguese> <Portuguese>Granada IV Separada</Portuguese>
<Italian>Granata IR staccata</Italian> <Italian>Granata IR staccata</Italian>
<Hungarian>Infravörös gránát lecsatolva</Hungarian> <Hungarian>Infravörös gránát lecsatolva</Hungarian>
<Russian>ИК граната отсоединена</Russian> <Russian>ИК-граната отсоединена</Russian>
</Key> </Key>
<Key ID="STR_ACE_Attach_Chemlight_Attached"> <Key ID="STR_ACE_Attach_Chemlight_Attached">
<English>Chemlight Attached</English> <English>Chemlight Attached</English>
@ -132,7 +132,7 @@
<Portuguese>Marcador IV</Portuguese> <Portuguese>Marcador IV</Portuguese>
<Italian>Strobo IR</Italian> <Italian>Strobo IR</Italian>
<Hungarian>Infravörös jeladó</Hungarian> <Hungarian>Infravörös jeladó</Hungarian>
<Russian>ИК строб</Russian> <Russian>ИК-маяк</Russian>
</Key> </Key>
<Key ID="STR_ACE_IrStrobe_Description"> <Key ID="STR_ACE_IrStrobe_Description">
<English>IR Strobe allows you to signal your position through a pulsating beacon only visible with NVGs.</English> <English>IR Strobe allows you to signal your position through a pulsating beacon only visible with NVGs.</English>
@ -144,7 +144,7 @@
<Portuguese>O Marcador IV permite que você sinalize sua posição através de um pulso visível somente com equipamento de visão noturna.</Portuguese> <Portuguese>O Marcador IV permite que você sinalize sua posição através de um pulso visível somente com equipamento de visão noturna.</Portuguese>
<Italian>La Strobo IR è una luce stroboscopica che ti permette di segnalare la tua posizione grazie all'emissione di impulsi ad infrarossi visibili solo con i visori notturni.</Italian> <Italian>La Strobo IR è una luce stroboscopica che ti permette di segnalare la tua posizione grazie all'emissione di impulsi ad infrarossi visibili solo con i visori notturni.</Italian>
<Hungarian>Az infravörös jeladóval megjelölheted a helyzetedet úgy, hogy annak pulzáló fénye csak éjjellátó készülékkel látható.</Hungarian> <Hungarian>Az infravörös jeladóval megjelölheted a helyzetedet úgy, hogy annak pulzáló fénye csak éjjellátó készülékkel látható.</Hungarian>
<Russian>ИК строб позволяет сигнализировать свое местоположение через пульсирующий маяк, видимый только через ПНВ.</Russian> <Russian>ИК-маяк позволяет сигнализировать о своём местоположении через пульсирующий свет, видимый только через ПНВ.</Russian>
</Key> </Key>
<Key ID="STR_ACE_Attach_PlaceAction"> <Key ID="STR_ACE_Attach_PlaceAction">
<English>Place</English> <English>Place</English>
@ -156,6 +156,7 @@
<Portuguese>Colocar</Portuguese> <Portuguese>Colocar</Portuguese>
<Italian>Posiziona</Italian> <Italian>Posiziona</Italian>
<Hungarian>Elhelyez</Hungarian> <Hungarian>Elhelyez</Hungarian>
<Russian>Установить</Russian>
</Key> </Key>
<Key ID="STR_ACE_Attach_CancelAction"> <Key ID="STR_ACE_Attach_CancelAction">
<English>Cancel</English> <English>Cancel</English>
@ -167,13 +168,14 @@
<Portuguese>Cancelar</Portuguese> <Portuguese>Cancelar</Portuguese>
<Italian>Annulla</Italian> <Italian>Annulla</Italian>
<Hungarian>Mégse</Hungarian> <Hungarian>Mégse</Hungarian>
<Russian>Отмена</Russian>
</Key> </Key>
<Key ID="STR_ACE_Attach_Failed"> <Key ID="STR_ACE_Attach_Failed">
<English>Attach Failed</English> <English>Attach Failed</English>
<French>Échec du Attacher</French> <French>Échec du Attacher</French>
<German>Befestigen fehlgeschlagen</German> <German>Befestigen fehlgeschlagen</German>
<Russian>Присоединить Ошибка</Russian> <Russian>Соединение прервано</Russian>
<Spanish>Error al acoplar</Spanish> <Spanish>Error al acoplar</Spanish>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,20 +1,20 @@
class CfgAmmo { class CfgAmmo {
class BulletCore; class BulletCore;
class BulletBase: BulletCore { class BulletBase: BulletCore {
timeToLive = 15; // Default: 6, doubleplusgood all munition range. timeToLive = 15; // Default: 6, doubleplusgood all munition range.
}; };
class B_20mm : BulletBase { class B_20mm : BulletBase {
timeToLive = 30; timeToLive = 30;
}; };
class B_25mm : BulletBase { class B_25mm : BulletBase {
timeToLive = 30; timeToLive = 30;
}; };
class B_35mm_AA : BulletBase { class B_35mm_AA : BulletBase {
timeToLive = 30; timeToLive = 30;
}; };
class B_30mm_AP : BulletBase { class B_30mm_AP : BulletBase {
timeToLive = 30; timeToLive = 30;
}; };
}; };

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2015-04-07 --> <!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="Captives"> <Package name="Captives">
<Key ID="STR_ACE_Captives_SetCaptive"> <Key ID="STR_ACE_Captives_SetCaptive">
@ -134,26 +134,31 @@
<English>Surrender</English> <English>Surrender</English>
<German>Kapitulieren</German> <German>Kapitulieren</German>
<Spanish>Rendirse</Spanish> <Spanish>Rendirse</Spanish>
<Russian>Сдаться</Russian>
</Key> </Key>
<Key ID="STR_ACE_Captives_StopSurrendering"> <Key ID="STR_ACE_Captives_StopSurrendering">
<English>Stop Surrendering</English> <English>Stop Surrendering</English>
<German>Den Kampf erneut aufnehmen</German> <German>Den Kampf erneut aufnehmen</German>
<Spanish>Dejar de rendirse</Spanish> <Spanish>Dejar de rendirse</Spanish>
<Russian>Остановить сдачу</Russian>
</Key> </Key>
<Key ID="STR_ACE_Captives_Zeus_OnlyAlive"> <Key ID="STR_ACE_Captives_Zeus_OnlyAlive">
<English>Only use on alive units</English> <English>Only use on alive units</English>
<German>Nur bei lebenden Einheiten verwendbar</German> <German>Nur bei lebenden Einheiten verwendbar</German>
<Spanish>Utilizar solo en unidades vivas</Spanish> <Spanish>Utilizar solo en unidades vivas</Spanish>
<Russian>Только для живых юнитов</Russian>
</Key> </Key>
<Key ID="STR_ACE_Captives_Zeus_OnlyInfantry"> <Key ID="STR_ACE_Captives_Zeus_OnlyInfantry">
<English>Only use on dismounted inf</English> <English>Only use on dismounted inf</English>
<German>Nur bei abgesessener Infanterie verwendbar</German> <German>Nur bei abgesessener Infanterie verwendbar</German>
<Spanish>Utilizar solo en infanteria desmontada</Spanish> <Spanish>Utilizar solo en infanteria desmontada</Spanish>
<Russian>Только для спеш. солдат</Russian>
</Key> </Key>
<Key ID="STR_ACE_Captives_Zeus_NothingSelected"> <Key ID="STR_ACE_Captives_Zeus_NothingSelected">
<English>Nothing under mouse</English> <English>Nothing under mouse</English>
<German>Es wurde nichts ausgewählt</German> <German>Es wurde nichts ausgewählt</German>
<Spanish>Nada bajo el ratón</Spanish> <Spanish>Nada bajo el ratón</Spanish>
<Russian>Объекты под мышью отсутствуют</Russian>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,74 +1,74 @@
//fnc__handleNetEvent.sqf //fnc__handleNetEvent.sqf
// internal handler for net events // internal handler for net events
#include "script_component.hpp" #include "script_component.hpp"
private ["_eventType", "_event", "_eventName", "_eventArgs", "_eventNames", "_eventIndex", "_eventTargets", "_sentEvents", "_owner", "_serverFlagged"]; private ["_eventType", "_event", "_eventName", "_eventArgs", "_eventNames", "_eventIndex", "_eventTargets", "_sentEvents", "_owner", "_serverFlagged"];
_eventType = _this select 0; _eventType = _this select 0;
_event = _this select 1; _event = _this select 1;
if(_eventType == "ACEg") then { if(_eventType == "ACEg") then {
_eventName = _event select 0; _eventName = _event select 0;
_eventArgs = _event select 1; _eventArgs = _event select 1;
_eventNames = GVAR(events) select 0; _eventNames = GVAR(events) select 0;
_eventIndex = _eventNames find _eventName; _eventIndex = _eventNames find _eventName;
if(_eventIndex != -1) then { if(_eventIndex != -1) then {
_events = (GVAR(events) select 1) select _eventIndex; _events = (GVAR(events) select 1) select _eventIndex;
#ifdef DEBUG_EVENTS #ifdef DEBUG_EVENTS
diag_log text format[ARR_2("* Net Event %1",_eventName)]; diag_log text format[ARR_2("* Net Event %1",_eventName)];
diag_log text format[ARR_2(" args=%1",_eventArgs)]; diag_log text format[ARR_2(" args=%1",_eventArgs)];
#endif #endif
{ {
if(!isNil "_x") then { if(!isNil "_x") then {
_eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Net Event %1 ID: %2",_eventName,_forEachIndex)]); _eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Net Event %1 ID: %2",_eventName,_forEachIndex)]);
#ifdef DEBUG_EVENTS_CALLSTACK #ifdef DEBUG_EVENTS_CALLSTACK
diag_log text format[ARR_2(" ID: %1",_forEachIndex)]; diag_log text format[ARR_2(" ID: %1",_forEachIndex)];
#endif #endif
}; };
} forEach _events; } forEach _events;
}; };
}; };
if(_eventType == "ACEc") then { if(_eventType == "ACEc") then {
if(isServer) then { if(isServer) then {
_eventName = _event select 0; _eventName = _event select 0;
_eventTargets = _event select 1; _eventTargets = _event select 1;
_eventArgs = _event select 2; _eventArgs = _event select 2;
_sentEvents = []; _sentEvents = [];
if(!IS_ARRAY(_eventTargets)) then { if(!IS_ARRAY(_eventTargets)) then {
_eventTargets = [_eventTargets]; _eventTargets = [_eventTargets];
}; };
//If not multiplayer, and there are targets, then just run localy //If not multiplayer, and there are targets, then just run localy
if ((!isMultiplayer) && {(count _eventTargets) > 0}) exitWith { if ((!isMultiplayer) && {(count _eventTargets) > 0}) exitWith {
ACEg = [_eventName, _eventArgs]; ACEg = [_eventName, _eventArgs];
["ACEg", ACEg] call FUNC(_handleNetEvent); ["ACEg", ACEg] call FUNC(_handleNetEvent);
}; };
_serverFlagged = false; _serverFlagged = false;
{ {
_owner = _x; _owner = _x;
if(IS_OBJECT(_x)) then { if(IS_OBJECT(_x)) then {
_owner = owner _x; _owner = owner _x;
}; };
if(!(_owner in _sentEvents)) then { if(!(_owner in _sentEvents)) then {
PUSH(_sentEvents, _owner); PUSH(_sentEvents, _owner);
ACEg = [_eventName, _eventArgs]; ACEg = [_eventName, _eventArgs];
if(isDedicated || {_x != ACE_player}) then { if(isDedicated || {_x != ACE_player}) then {
if(isDedicated && {local _x} && {!_serverFlagged}) then { if(isDedicated && {local _x} && {!_serverFlagged}) then {
_serverFlagged = true; _serverFlagged = true;
["ACEg", ACEg] call FUNC(_handleNetEvent); ["ACEg", ACEg] call FUNC(_handleNetEvent);
} else { } else {
_owner publicVariableClient "ACEg"; _owner publicVariableClient "ACEg";
}; };
} else { } else {
["ACEg", ACEg] call FUNC(_handleNetEvent); ["ACEg", ACEg] call FUNC(_handleNetEvent);
}; };
}; };
} forEach _eventTargets; } forEach _eventTargets;
}; };
}; };

View File

@ -1,32 +1,32 @@
/* /*
* Author: Nou * Author: Nou
* *
* Add a event handler. * Add a event handler.
* *
* Argument: * Argument:
* 0: Event name (string) * 0: Event name (string)
* 1: Event code (code) * 1: Event code (code)
* *
* Return value: * Return value:
* Event handler ID number (for use with fnc_removeEventHandler) * Event handler ID number (for use with fnc_removeEventHandler)
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_eventName", "_eventCode", "_eventNames", "_eventFunctions", "_eventNameCount", "_eventIndex", "_eventFunctionCount"]; private ["_eventName", "_eventCode", "_eventNames", "_eventFunctions", "_eventNameCount", "_eventIndex", "_eventFunctionCount"];
_eventName = _this select 0; _eventName = _this select 0;
_eventCode = _this select 1; _eventCode = _this select 1;
_eventNames = GVAR(events) select 0; _eventNames = GVAR(events) select 0;
_eventFunctions = []; _eventFunctions = [];
_eventIndex = _eventNames find _eventName; _eventIndex = _eventNames find _eventName;
if(_eventIndex != -1) then { if(_eventIndex != -1) then {
_eventFunctions = (GVAR(events) select 1) select _eventIndex; _eventFunctions = (GVAR(events) select 1) select _eventIndex;
} else { } else {
_eventNameCount = count _eventNames; _eventNameCount = count _eventNames;
_eventNames set[_eventNameCount, _eventName]; _eventNames set[_eventNameCount, _eventName];
(GVAR(events) select 1) set[_eventNameCount, _eventFunctions]; (GVAR(events) select 1) set[_eventNameCount, _eventFunctions];
}; };
_eventFunctionCount = count _eventFunctions; _eventFunctionCount = count _eventFunctions;
_eventFunctions set[_eventFunctionCount, _eventCode]; _eventFunctions set[_eventFunctionCount, _eventCode];
_eventFunctionCount; _eventFunctionCount;

View File

@ -1,25 +1,25 @@
//fnc_dumpArray.sqf //fnc_dumpArray.sqf
#include "script_component.hpp" #include "script_component.hpp"
private ["_var", "_depth", "_pad", "_i", "_x"]; private ["_var", "_depth", "_pad", "_i", "_x"];
_var = _this select 0; _var = _this select 0;
_depth = _this select 1; _depth = _this select 1;
_pad = ""; _pad = "";
for "_i" from 0 to _depth do { for "_i" from 0 to _depth do {
_pad = _pad + toString [9]; _pad = _pad + toString [9];
}; };
_depth = _depth + 1; _depth = _depth + 1;
if(IS_ARRAY(_var)) then { if(IS_ARRAY(_var)) then {
if((count _var) > 0) then { if((count _var) > 0) then {
diag_log text format["%1[", _pad]; diag_log text format["%1[", _pad];
{ {
[_x, _depth] call FUNC(dumpArray); [_x, _depth] call FUNC(dumpArray);
} forEach _var; } forEach _var;
diag_log text format["%1],", _pad]; diag_log text format["%1],", _pad];
} else { } else {
diag_log text format["%1[],", _pad]; diag_log text format["%1[],", _pad];
}; };
} else { } else {
diag_log text format["%1%2", _pad, [_var] call FUNC(formatVar)]; diag_log text format["%1%2", _pad, [_var] call FUNC(formatVar)];
}; };

View File

@ -1,73 +1,73 @@
//fnc_dumpPerformanceCounters.sqf //fnc_dumpPerformanceCounters.sqf
#define DEBUG_MODE_FULL #define DEBUG_MODE_FULL
#include "script_component.hpp" #include "script_component.hpp"
diag_log text format["REGISTERED ACE PFH HANDLERS"]; diag_log text format["REGISTERED ACE PFH HANDLERS"];
diag_log text format["-------------------------------------------"]; diag_log text format["-------------------------------------------"];
if(!isNil "ACE_PFH_COUNTER") then { if(!isNil "ACE_PFH_COUNTER") then {
{ {
private["_pfh"]; private["_pfh"];
_pfh = _x select 0; _pfh = _x select 0;
diag_log text format["Registered PFH: id=%1, %1:%2", (_pfh select 0), (_pfh select 1), (_pfh select 2) ]; diag_log text format["Registered PFH: id=%1, %1:%2", (_pfh select 0), (_pfh select 1), (_pfh select 2) ];
} forEach ACE_PFH_COUNTER; } forEach ACE_PFH_COUNTER;
}; };
diag_log text format["ACE COUNTER RESULTS"]; diag_log text format["ACE COUNTER RESULTS"];
diag_log text format["-------------------------------------------"]; diag_log text format["-------------------------------------------"];
{ {
private["_counterEntry", "_iter", "_total", "_count", "_delta", "_averageResult"]; private["_counterEntry", "_iter", "_total", "_count", "_delta", "_averageResult"];
_counterEntry = _x; _counterEntry = _x;
_iter = 0; _iter = 0;
_total = 0; _total = 0;
_count = 0; _count = 0;
_averageResult = 0; _averageResult = 0;
if( (count _counterEntry) > 3) then { if( (count _counterEntry) > 3) then {
// calc // calc
{ {
if(_iter > 2) then { if(_iter > 2) then {
_count = _count + 1; _count = _count + 1;
_delta = (_x select 1) - (_x select 0); _delta = (_x select 1) - (_x select 0);
_total = _total + _delta; _total = _total + _delta;
}; };
_iter = _iter + 1; _iter = _iter + 1;
} forEach _counterEntry; } forEach _counterEntry;
// results // results
_averageResult = (_total / _count) * 1000; _averageResult = (_total / _count) * 1000;
// dump results // dump results
diag_log text format["%1: Average: %2s / %3 = %4ms", (_counterEntry select 0), _total, _count, _averageResult]; diag_log text format["%1: Average: %2s / %3 = %4ms", (_counterEntry select 0), _total, _count, _averageResult];
} else { } else {
diag_log text format["%1: No results", (_counterEntry select 0) ]; diag_log text format["%1: No results", (_counterEntry select 0) ];
}; };
} forEach ACE_COUNTERS; } forEach ACE_COUNTERS;
/* /*
// Dump PFH Trackers // Dump PFH Trackers
diag_log text format["ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER"]; diag_log text format["ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER"];
diag_log text format["-------------------------------------------"]; diag_log text format["-------------------------------------------"];
{ {
private["_delay"]; private["_delay"];
_delay = _x select 2; _delay = _x select 2;
//if(_delay > 0) then { _delay = _delay / 1000; }; //if(_delay > 0) then { _delay = _delay / 1000; };
diag_log text format["%1: %2s, delay=%3, handle=%4",(_x select 0), _delay, (_x select 3), (_x select 4)]; diag_log text format["%1: %2s, delay=%3, handle=%4",(_x select 0), _delay, (_x select 3), (_x select 4)];
} forEach ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER; } forEach ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER;
// Dump PFH Trackers // Dump PFH Trackers
diag_log text format["ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER"]; diag_log text format["ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER"];
diag_log text format["-------------------------------------------"]; diag_log text format["-------------------------------------------"];
{ {
private["_delta"]; private["_delta"];
_delta = _x select 1; _delta = _x select 1;
//if(_delta > 0) then { _delta = _delta / 1000; }; //if(_delta > 0) then { _delta = _delta / 1000; };
diag_log text format[" DELTA: %1s", _delta]; diag_log text format[" DELTA: %1s", _delta];
} forEach ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER; } forEach ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER;
//{ //{
// //
//} forEach ACRE_EXCESSIVE_FRAME_TRACKER; //} forEach ACRE_EXCESSIVE_FRAME_TRACKER;
*/ */

View File

@ -1,37 +1,37 @@
/* /*
* Author: jaynus * Author: jaynus
* *
* Get the absolute turret direction for FOV/PIP turret. * Get the absolute turret direction for FOV/PIP turret.
* *
* Argument: * Argument:
* 0: Vehicle (Object) * 0: Vehicle (Object)
* 1: Turret Position * 1: Turret Position
* *
* Return value: * Return value:
* [position, direction] * [position, direction]
*/ */
#include "script_component.hpp" #include "script_component.hpp"
EXPLODE_2_PVT(_this,_vehicle,_position); EXPLODE_2_PVT(_this,_vehicle,_position);
private ["_turrets", "_turret", "_config", "_turret", "_povPos", "_povDir", "_gunBeginPos", "_gunEndPos", "_pov"]; private ["_turrets", "_turret", "_config", "_turret", "_povPos", "_povDir", "_gunBeginPos", "_gunEndPos", "_pov"];
_turret = [_vehicle, _position] call CBA_fnc_getTurret; _turret = [_vehicle, _position] call CBA_fnc_getTurret;
_pov = getText (_turret >> "memoryPointGunnerOptics"); _pov = getText (_turret >> "memoryPointGunnerOptics");
_gunBeg = getText (_turret >> "gunBeg"); _gunBeg = getText (_turret >> "gunBeg");
_gunEnd = getText (_turret >> "gunEnd"); _gunEnd = getText (_turret >> "gunEnd");
TRACE_3("", _pov, _gunBeg, _gunEnd); TRACE_3("", _pov, _gunBeg, _gunEnd);
// Pull the PIP pov or barrel direction, depending on how the model is set up // Pull the PIP pov or barrel direction, depending on how the model is set up
_povPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _pov ) ); _povPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _pov ) );
_povDir = [0,0,0]; _povDir = [0,0,0];
if(_pov == "pip0_pos") then { if(_pov == "pip0_pos") then {
_pipDir = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition "pip0_dir" ) ); _pipDir = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition "pip0_dir" ) );
_povDir = _pipDir vectorDiff _povPos; _povDir = _pipDir vectorDiff _povPos;
} else { } else {
_gunBeginPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _gunBeg ) ); _gunBeginPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _gunBeg ) );
_gunEndPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _gunEnd ) ); _gunEndPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _gunEnd ) );
_povDir = _gunBeginPos vectorDiff _gunEndPos; _povDir = _gunBeginPos vectorDiff _gunEndPos;
}; };
[_povPos, _povDir] [_povPos, _povDir]

View File

@ -1,22 +1,22 @@
/* /*
* Author: Nou * Author: Nou
* *
* Execute a global event on all clients, including self. * Execute a global event on all clients, including self.
* *
* Argument: * Argument:
* 0: Event name (string) * 0: Event name (string)
* 1: Event args (any) * 1: Event args (any)
* *
* Return value: * Return value:
* Nothing * Nothing
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_eventName", "_eventArgs"]; private ["_eventName", "_eventArgs"];
_eventName = _this select 0; _eventName = _this select 0;
_eventArgs = _this select 1; _eventArgs = _this select 1;
ACEg = [_eventName, _eventArgs]; ACEg = [_eventName, _eventArgs];
publicVariable "ACEg"; publicVariable "ACEg";
["ACEg", ACEg] call FUNC(_handleNetEvent); ["ACEg", ACEg] call FUNC(_handleNetEvent);

View File

@ -1,34 +1,34 @@
/* /*
* Author: Nou * Author: Nou
* *
* Execute a local event on this client only. * Execute a local event on this client only.
* *
* Argument: * Argument:
* 0: Event name (string) * 0: Event name (string)
* 1: Event args (any) * 1: Event args (any)
* *
* Return value: * Return value:
* Nothing * Nothing
*/ */
#include "script_component.hpp" #include "script_component.hpp"
PARAMS_2(_eventName,_eventArgs); PARAMS_2(_eventName,_eventArgs);
_eventNames = GVAR(events) select 0; _eventNames = GVAR(events) select 0;
_eventIndex = _eventNames find _eventName; _eventIndex = _eventNames find _eventName;
if(_eventIndex != -1) then { if(_eventIndex != -1) then {
_events = (GVAR(events) select 1) select _eventIndex; _events = (GVAR(events) select 1) select _eventIndex;
#ifdef DEBUG_EVENTS #ifdef DEBUG_EVENTS
diag_log text format[ARR_2("* Local Event: %1",_eventName)]; diag_log text format[ARR_2("* Local Event: %1",_eventName)];
diag_log text format[ARR_2(" args=%1",_eventArgs)]; diag_log text format[ARR_2(" args=%1",_eventArgs)];
#endif #endif
{ {
if(!isNil "_x") then { if(!isNil "_x") then {
_eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Local Event %1 ID: %2",_eventName,_forEachIndex)]); _eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Local Event %1 ID: %2",_eventName,_forEachIndex)]);
#ifdef DEBUG_EVENTS_CALLSTACK #ifdef DEBUG_EVENTS_CALLSTACK
diag_log text format[ARR_2(" ID: %1",_forEachIndex)]; diag_log text format[ARR_2(" ID: %1",_forEachIndex)];
#endif #endif
}; };
} forEach _events; } forEach _events;
}; };

View File

@ -1,21 +1,21 @@
/* /*
* Author: Nou * Author: Nou
* *
* Remove all events of a certain event type. * Remove all events of a certain event type.
* *
* Argument: * Argument:
* 0: Event name (string) * 0: Event name (string)
* *
* Return value: * Return value:
* Nothing * Nothing
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_eventName", "_eventNames", "_eventFunctions", "_eventIndex"]; private ["_eventName", "_eventNames", "_eventFunctions", "_eventIndex"];
_eventName = _this select 0; _eventName = _this select 0;
_eventNames = GVAR(events) select 0; _eventNames = GVAR(events) select 0;
_eventFunctions = []; _eventFunctions = [];
_eventIndex = _eventNames find _eventName; _eventIndex = _eventNames find _eventName;
if(_eventIndex != -1) then { if(_eventIndex != -1) then {
(GVAR(events) select 1) set[_eventIndex, []]; (GVAR(events) select 1) set[_eventIndex, []];
}; };

View File

@ -1,24 +1,24 @@
/* /*
* Author: Nou * Author: Nou
* *
* Remove an event handler. * Remove an event handler.
* *
* Argument: * Argument:
* 0: Event name (string) * 0: Event name (string)
* 1: Event code (number) * 1: Event code (number)
* *
* Return value: * Return value:
* Nothing * Nothing
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_eventName", "_eventNames", "_eventFunctions", "_eventIndex", "_eventCodeIndex"]; private ["_eventName", "_eventNames", "_eventFunctions", "_eventIndex", "_eventCodeIndex"];
_eventName = _this select 0; _eventName = _this select 0;
_eventCodeIndex = _this select 1; _eventCodeIndex = _this select 1;
_eventNames = GVAR(events) select 0; _eventNames = GVAR(events) select 0;
_eventFunctions = []; _eventFunctions = [];
_eventIndex = _eventNames find _eventName; _eventIndex = _eventNames find _eventName;
if(_eventIndex != -1) then { if(_eventIndex != -1) then {
_eventFunctions = (GVAR(events) select 1) select _eventIndex; _eventFunctions = (GVAR(events) select 1) select _eventIndex;
_eventFunctions set[_eventCodeIndex, nil]; _eventFunctions set[_eventCodeIndex, nil];
}; };

View File

@ -1,29 +1,29 @@
/* /*
* Author: Nou * Author: Nou
* *
* Execute a event only on the server. * Execute a event only on the server.
* *
* Argument: * Argument:
* 0: Event name (string) * 0: Event name (string)
* 1: Event args (any) * 1: Event args (any)
* *
* Return value: * Return value:
* Nothing * Nothing
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_eventName", "_eventArgs"]; private ["_eventName", "_eventArgs"];
_eventName = _this select 0; _eventName = _this select 0;
_eventArgs = _this select 1; _eventArgs = _this select 1;
#ifdef DEBUG_EVENTS #ifdef DEBUG_EVENTS
diag_log text format[ARR_2("* Server Event: %1",_eventName)]; diag_log text format[ARR_2("* Server Event: %1",_eventName)];
diag_log text format[ARR_2(" args=%1",_eventArgs)]; diag_log text format[ARR_2(" args=%1",_eventArgs)];
#endif #endif
ACEg = [_eventName, _eventArgs]; ACEg = [_eventName, _eventArgs];
if(!isServer) then { if(!isServer) then {
publicVariableServer "ACEg"; publicVariableServer "ACEg";
} else { } else {
["ACEg", ACEg] call FUNC(_handleNetEvent); ["ACEg", ACEg] call FUNC(_handleNetEvent);
}; };

View File

@ -1,34 +1,34 @@
/* /*
* Author: Nou * Author: Nou
* *
* Execute a event only on specific clients. * Execute a event only on specific clients.
* *
* Argument: * Argument:
* 0: Event name (string) * 0: Event name (string)
* 1: Event targets (object or array of objects) * 1: Event targets (object or array of objects)
* 2: Event args (any) * 2: Event args (any)
* *
* Note: If local executor is in list of targets, event will execute with * Note: If local executor is in list of targets, event will execute with
* network delay, and not immediatly. * network delay, and not immediatly.
* *
* Return value: * Return value:
* Nothing * Nothing
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_eventName", "_eventArgs", "_eventTargets"]; private ["_eventName", "_eventArgs", "_eventTargets"];
_eventName = _this select 0; _eventName = _this select 0;
_eventTargets = _this select 1; _eventTargets = _this select 1;
_eventArgs = _this select 2; _eventArgs = _this select 2;
#ifdef DEBUG_EVENTS #ifdef DEBUG_EVENTS
diag_log text format[ARR_3("* Target Event: %1 - %2",_eventName,_eventTargets)]; diag_log text format[ARR_3("* Target Event: %1 - %2",_eventName,_eventTargets)];
diag_log text format[ARR_2(" args=%1",_eventArgs)]; diag_log text format[ARR_2(" args=%1",_eventArgs)];
#endif #endif
ACEc = [_eventName, _eventTargets, _eventArgs]; ACEc = [_eventName, _eventTargets, _eventArgs];
if(!isServer) then { if(!isServer) then {
publicVariableServer "ACEc"; publicVariableServer "ACEc";
} else { } else {
["ACEc", ACEc] call FUNC(_handleNetEvent); ["ACEc", ACEc] call FUNC(_handleNetEvent);
}; };

View File

@ -1,13 +1,13 @@
#include "\z\ace\addons\common\script_component.hpp" #include "\z\ace\addons\common\script_component.hpp"
#define VALIDHASH(hash) (IS_ARRAY(hash) && {(count hash) >= 2} && {IS_ARRAY(hash select 0)} && {IS_ARRAY(hash select 1)}) #define VALIDHASH(hash) (IS_ARRAY(hash) && {(count hash) >= 2} && {IS_ARRAY(hash select 0)} && {IS_ARRAY(hash select 1)})
#define ERROR(msg) throw msg + format[" @ %1:%2", _callFrom, _lineNo] #define ERROR(msg) throw msg + format[" @ %1:%2", _callFrom, _lineNo]
#define HANDLECATCH diag_log text _exception; assert(exception=="") #define HANDLECATCH diag_log text _exception; assert(exception=="")
#define ERRORDATA(c) private ["_callFrom", "_lineNo"];\ #define ERRORDATA(c) private ["_callFrom", "_lineNo"];\
_callFrom = "";\ _callFrom = "";\
_lineNo = -1;\ _lineNo = -1;\
if((count _this) > c) then {\ if((count _this) > c) then {\
_callFrom = _this select c;\ _callFrom = _this select c;\
_lineNo = _this select c+1;\ _lineNo = _this select c+1;\
}; };

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2015-04-07 --> <!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="Common"> <Package name="Common">
<Key ID="STR_ACE_Common_ACETeam"> <Key ID="STR_ACE_Common_ACETeam">
@ -300,64 +300,78 @@
<Spanish>Aceptar Peticiones</Spanish> <Spanish>Aceptar Peticiones</Spanish>
<English>Accept Requests</English> <English>Accept Requests</English>
<German>Anfrage annehmen</German> <German>Anfrage annehmen</German>
<Russian>Подтвердить запросы</Russian>
</Key> </Key>
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TITLE"> <Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TITLE">
<Polish>Ignoruj prośby</Polish> <Polish>Ignoruj prośby</Polish>
<Spanish>Rechazar Peticiones</Spanish> <Spanish>Rechazar Peticiones</Spanish>
<English>Decline Requests</English> <English>Decline Requests</English>
<German>Anfrage ablehnen</German> <German>Anfrage ablehnen</German>
<Russian>Отклонить запросы</Russian>
</Key> </Key>
<Key ID="STR_ACE_ACTION_ACCEPT_REQUEST_KEY_TOOLTIP"> <Key ID="STR_ACE_ACTION_ACCEPT_REQUEST_KEY_TOOLTIP">
<Polish>Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności.</Polish> <Polish>Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności.</Polish>
<Spanish>Acepta Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones.</Spanish> <Spanish>Acepta Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones.</Spanish>
<English>Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions.</English> <English>Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions.</English>
<German>Anfragen anderer Spieler annehmen. Diese Anfragen können sich auf das Benutzen / Teilen von Equipment beziehen oder das Ausführen bestimmter Aktionen.</German> <German>Anfragen anderer Spieler annehmen. Diese Anfragen können sich auf das Benutzen / Teilen von Equipment beziehen oder das Ausführen bestimmter Aktionen.</German>
<Russian>Подтвердить запросы, посланные другими игроками. Это могут быть просьбы о передаче снаряжения или выполнении определённых действий.</Russian>
</Key> </Key>
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TOOLTIP"> <Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TOOLTIP">
<Polish>Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności.</Polish> <Polish>Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności.</Polish>
<Spanish>Rechazar Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones.</Spanish> <Spanish>Rechazar Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones.</Spanish>
<English>Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions.</English> <English>Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions.</English>
<German>Anfragen anderer Spieler ablehnen. Diese Anfragen können sich auf das Benutzen / Teilen von Equipment beziehen oder das Ausführen bestimmter Aktionen.</German> <German>Anfragen anderer Spieler ablehnen. Diese Anfragen können sich auf das Benutzen / Teilen von Equipment beziehen oder das Ausführen bestimmter Aktionen.</German>
<Russian>Отклонить запросы, посланные другими игроками. Это могут быть просьбы о передаче снаряжения или выполнении определённых действий.</Russian>
</Key> </Key>
<Key ID="STR_ACE_Common_SettingFeedbackIconsName"> <Key ID="STR_ACE_Common_SettingFeedbackIconsName">
<English>Feedback icons</English> <English>Feedback icons</English>
<German>Feedback-Icons</German> <German>Feedback-Icons</German>
<Russian>Иконки состояний</Russian>
</Key> </Key>
<Key ID="STR_ACE_Common_SettingFeedbackIconsDesc"> <Key ID="STR_ACE_Common_SettingFeedbackIconsDesc">
<English>Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed.</English> <English>Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed.</English>
<German>Wähle die Position der Feedback-Icons aus oder deaktiviere Sie. Die Feedback-Icons zeigen den Status deiner Einheit an, oder die ausgeführte Aktion.</German> <German>Wähle die Position der Feedback-Icons aus oder deaktiviere Sie. Die Feedback-Icons zeigen den Status deiner Einheit an, oder die ausgeführte Aktion.</German>
<Russian>Выберите положение или или отключите отображение иконок состояний на Вашем экране. Эти иконки предоставят дополнительную информацию о состоянии персонажа и выполняемых действиях.</Russian>
</Key> </Key>
<Key ID="STR_ACE_Common_SettingProgressbarLocationName"> <Key ID="STR_ACE_Common_SettingProgressbarLocationName">
<English>Progress bar location</English> <English>Progress bar location</English>
<German>Position des Fortschrittsanzeige</German> <German>Position des Fortschrittsanzeige</German>
<Russian>Положение прогресс-бара</Russian>
</Key> </Key>
<Key ID="STR_ACE_Common_SettingProgressbarLocationDesc"> <Key ID="STR_ACE_Common_SettingProgressbarLocationDesc">
<English>Set the desired location of the progress bar on your screen.</English> <English>Set the desired location of the progress bar on your screen.</English>
<German>Wähle die Position der Fortschrittsanzeige.</German> <German>Wähle die Position der Fortschrittsanzeige.</German>
<Russian>Установите желаемое положение строки состояния на экране.</Russian>
</Key> </Key>
<Key ID="STR_ACE_Common_SettingDisplayTextColorName"> <Key ID="STR_ACE_Common_SettingDisplayTextColorName">
<English>Hint Background color</English> <English>Hint Background color</English>
<German>Hinweis Hintergrundfarbe</German> <German>Hinweis Hintergrundfarbe</German>
<Russian>Цвет фона всплывающих подсказок</Russian>
</Key> </Key>
<Key ID="STR_ACE_Common_SettingDisplayTextColorDesc"> <Key ID="STR_ACE_Common_SettingDisplayTextColorDesc">
<English>The color of the background from the ACE hints.</English> <English>The color of the background from the ACE hints.</English>
<German>Wähle die Hintergrundfarbe für ACE-Hinweise.</German> <German>Wähle die Hintergrundfarbe für ACE-Hinweise.</German>
<Russian>Цвет фона всплывающий подсказок АСЕ.</Russian>
</Key> </Key>
<Key ID="STR_ACE_Common_SettingDisplayTextFontColorName"> <Key ID="STR_ACE_Common_SettingDisplayTextFontColorName">
<English>Hint text font color</English> <English>Hint text font color</English>
<German>Hinweis Textfarbe</German> <German>Hinweis Textfarbe</German>
<Russian>Цвет шрифта всплывающих подсказок</Russian>
</Key> </Key>
<Key ID="STR_ACE_Common_SettingDisplayTextFontColorDesc"> <Key ID="STR_ACE_Common_SettingDisplayTextFontColorDesc">
<English>The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified.</English> <English>The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified.</English>
<German>Wähle die Textfarbe für ACE-Hinweise. </German> <German>Wähle die Textfarbe für ACE-Hinweise. </German>
<Russian>Цвет шрифта текста всплывающих подсказок АСЕ. Этот цвет является стандартным для всего текста, транслирующегося через систему подсказок АСЕ, если не установлено другого цвета для текста подсказок.</Russian>
</Key> </Key>
<Key ID="STR_ACE_Common_bananaDisplayName"> <Key ID="STR_ACE_Common_bananaDisplayName">
<English>Banana</English> <English>Banana</English>
<German>Banane</German> <German>Banane</German>
<Russian>Банан</Russian>
</Key> </Key>
<Key ID="STR_ACE_Common_bananaDescr"> <Key ID="STR_ACE_Common_bananaDescr">
<English>A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa.</English> <English>A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa.</English>
<German>Die Bananen (Musa) sind eine Pflanzengattung in der Familie der Bananengewächse (Musaceae) innerhalb der Einkeimblättrigen Pflanzen (Monokotyledonen).</German> <German>Die Bananen (Musa) sind eine Pflanzengattung in der Familie der Bananengewächse (Musaceae) innerhalb der Einkeimblättrigen Pflanzen (Monokotyledonen).</German>
<Russian>Банан - это съедобный фрукт, ягода с ботанической точки зрения, произрастающий на нескольких видах травянистых растениях рода Банан (Musa).</Russian>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2014-12-21 --> <!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="Dragging"> <Package name="Dragging">
<Key ID="STR_ACE_Dragging_Drag"> <Key ID="STR_ACE_Dragging_Drag">
@ -40,6 +40,7 @@
<Portuguese>Não é possível carregar o item devido a seu peso</Portuguese> <Portuguese>Não é possível carregar o item devido a seu peso</Portuguese>
<Italian>Non è possibile trascinare l'oggetto a causa del suo peso</Italian> <Italian>Non è possibile trascinare l'oggetto a causa del suo peso</Italian>
<Hungarian>Túl nehéz ahhoz, hogy elhúzd</Hungarian> --> <Hungarian>Túl nehéz ahhoz, hogy elhúzd</Hungarian> -->
<Russian>Слишком тяжело</Russian>
</Key> </Key>
<Key ID="STR_ACE_Dragging_Carry"> <Key ID="STR_ACE_Dragging_Carry">
<English>Carry</English> <English>Carry</English>
@ -54,4 +55,4 @@
<Russian>Нести</Russian> <Russian>Нести</Russian>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2015-04-07 --> <!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="Explosives"> <Package name="Explosives">
<Key ID="STR_ACE_Explosives_Menu"> <Key ID="STR_ACE_Explosives_Menu">
@ -48,7 +48,7 @@
<Italian>Codice dell'esplosivo : %1</Italian> <Italian>Codice dell'esplosivo : %1</Italian>
<Hungarian>Robbanóanyag kódja: %1</Hungarian> <Hungarian>Robbanóanyag kódja: %1</Hungarian>
<Portuguese>Código do explosivo: %1</Portuguese> <Portuguese>Código do explosivo: %1</Portuguese>
<Russian>Взрывная код: %1</Russian> <Russian>Код подрыва: %1</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_PlaceAction"> <Key ID="STR_ACE_Explosives_PlaceAction">
<English>Place</English> <English>Place</English>
@ -60,7 +60,7 @@
<Italian>Piazza</Italian> <Italian>Piazza</Italian>
<Hungarian>Elhelyezés</Hungarian> <Hungarian>Elhelyezés</Hungarian>
<Portuguese>Colocar</Portuguese> <Portuguese>Colocar</Portuguese>
<Russian>Положить</Russian> <Russian>Установить</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_CancelAction"> <Key ID="STR_ACE_Explosives_CancelAction">
<English>Cancel</English> <English>Cancel</English>
@ -132,7 +132,7 @@
<Italian>Usato per l'attivazione a distanza degli esplosivi</Italian> <Italian>Usato per l'attivazione a distanza degli esplosivi</Italian>
<Hungarian>Robbanóanyagok távoli robbantásához</Hungarian> <Hungarian>Robbanóanyagok távoli robbantásához</Hungarian>
<Portuguese>Usado para acionar explosivos remotamente</Portuguese> <Portuguese>Usado para acionar explosivos remotamente</Portuguese>
<Russian>Используется для удаленного запуска взрывчатку</Russian> <Russian>Используется для удаленной детонации СВУ</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_clacker_displayName"> <Key ID="STR_ACE_Explosives_clacker_displayName">
<English>M57 Firing Device</English> <English>M57 Firing Device</English>
@ -156,7 +156,7 @@
<Italian>Usato per l'attivazione a distanza degli esplosivi</Italian> <Italian>Usato per l'attivazione a distanza degli esplosivi</Italian>
<Hungarian>Robbanóanyagok távoli robbantásához</Hungarian> <Hungarian>Robbanóanyagok távoli robbantásához</Hungarian>
<Portuguese>Usado para acionar explosivos remotamente</Portuguese> <Portuguese>Usado para acionar explosivos remotamente</Portuguese>
<Russian>Используется для удаленного запуска взрывчатку</Russian> <Russian>Используется для удаленной детонации зарядов</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_M26_displayName"> <Key ID="STR_ACE_Explosives_M26_displayName">
<English>M26 Firing Device</English> <English>M26 Firing Device</English>
@ -192,7 +192,7 @@
<Italian>Kit E.O.D.</Italian> <Italian>Kit E.O.D.</Italian>
<Hungarian>Hatástalanító felszerelés</Hungarian> <Hungarian>Hatástalanító felszerelés</Hungarian>
<Portuguese>Kit de desarme</Portuguese> <Portuguese>Kit de desarme</Portuguese>
<Russian>Разминирование комплект</Russian> <Russian>Комплект разминирования</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_DefusalKit_description"> <Key ID="STR_ACE_Explosives_DefusalKit_description">
<English>Allows defusing of explosives</English> <English>Allows defusing of explosives</English>
@ -204,7 +204,7 @@
<Italian>Consente la disattivazione degli ordigni esplosivi</Italian> <Italian>Consente la disattivazione degli ordigni esplosivi</Italian>
<Hungarian>Robbanóanyagok hatástalanításához</Hungarian> <Hungarian>Robbanóanyagok hatástalanításához</Hungarian>
<Portuguese>Permite o desarme de explosivos</Portuguese> <Portuguese>Permite o desarme de explosivos</Portuguese>
<Russian>Allows defusing of explosives</Russian> <Russian>Позволяет обезвреживать ВУ</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_Phone_AddToSpeedDial"> <Key ID="STR_ACE_Explosives_Phone_AddToSpeedDial">
<English>Add to Speed Dial</English> <English>Add to Speed Dial</English>
@ -228,7 +228,7 @@
<Italian>Libera</Italian> <Italian>Libera</Italian>
<Hungarian>Törlés</Hungarian> <Hungarian>Törlés</Hungarian>
<Portuguese>Limpar</Portuguese> <Portuguese>Limpar</Portuguese>
<Russian>Pассеиваться</Russian> <Russian>Очистить</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_Phone_Dial"> <Key ID="STR_ACE_Explosives_Phone_Dial">
<English>Dial</English> <English>Dial</English>
@ -252,7 +252,7 @@
<Italian>Sopra</Italian> <Italian>Sopra</Italian>
<Hungarian>Fel</Hungarian> <Hungarian>Fel</Hungarian>
<Portuguese>Cima</Portuguese> <Portuguese>Cima</Portuguese>
<Russian>Поднять</Russian> <Russian>Вызов</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_Phone_Down"> <Key ID="STR_ACE_Explosives_Phone_Down">
<English>Down</English> <English>Down</English>
@ -264,7 +264,7 @@
<Italian>Sotto</Italian> <Italian>Sotto</Italian>
<Hungarian>Le</Hungarian> <Hungarian>Le</Hungarian>
<Portuguese>Baixo</Portuguese> <Portuguese>Baixo</Portuguese>
<Russian>Опустить</Russian> <Russian>Сброс</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_Cancel"> <Key ID="STR_ACE_Explosives_Cancel">
<English>Cancel</English> <English>Cancel</English>
@ -288,7 +288,7 @@
<Italian>Menù di detonazione</Italian> <Italian>Menù di detonazione</Italian>
<Hungarian>Robbantás menü</Hungarian> <Hungarian>Robbantás menü</Hungarian>
<Portuguese>Menu de detonação</Portuguese> <Portuguese>Menu de detonação</Portuguese>
<Russian>Меню Подрыв</Russian> <Russian>Меню подрыва</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_PlaceMenu"> <Key ID="STR_ACE_Explosives_PlaceMenu">
<English>Place Menu</English> <English>Place Menu</English>
@ -300,7 +300,7 @@
<Italian>Menù di collocamento</Italian> <Italian>Menù di collocamento</Italian>
<Hungarian>Lerakás menü</Hungarian> <Hungarian>Lerakás menü</Hungarian>
<Portuguese>Menu de posicionamento</Portuguese> <Portuguese>Menu de posicionamento</Portuguese>
<Russian>Меню Установить</Russian> <Russian>Меню детонации</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_Defuse"> <Key ID="STR_ACE_Explosives_Defuse">
<English>Defuse</English> <English>Defuse</English>
@ -336,7 +336,7 @@
<Italian>Cronometro</Italian> <Italian>Cronometro</Italian>
<Hungarian>Időzített</Hungarian> <Hungarian>Időzített</Hungarian>
<Portuguese>Timer</Portuguese> <Portuguese>Timer</Portuguese>
<Russian>Временной</Russian> <Russian>Таймер</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_TimerMenu"> <Key ID="STR_ACE_Explosives_TimerMenu">
<English>Time: %1m %2s</English> <English>Time: %1m %2s</English>
@ -348,7 +348,7 @@
<Italian>Tempo : %1m %2s</Italian> <Italian>Tempo : %1m %2s</Italian>
<Hungarian>Idő: %1m %2s</Hungarian> <Hungarian>Idő: %1m %2s</Hungarian>
<Portuguese>Tempo: %1m %2s</Portuguese> <Portuguese>Tempo: %1m %2s</Portuguese>
<Russian>Tемп: %1m %2c</Russian> <Russian>Время: %1m %2c</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_SetTime"> <Key ID="STR_ACE_Explosives_SetTime">
<English>Set Time</English> <English>Set Time</English>
@ -360,7 +360,7 @@
<Italian>Modifica il conto alla rovescia</Italian> <Italian>Modifica il conto alla rovescia</Italian>
<Hungarian>Idő állítása</Hungarian> <Hungarian>Idő állítása</Hungarian>
<Portuguese>Configurar Tempo</Portuguese> <Portuguese>Configurar Tempo</Portuguese>
<Russian>Xронометр</Russian> <Russian>Установить время</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_TriggerMenu"> <Key ID="STR_ACE_Explosives_TriggerMenu">
<English>Select a Trigger</English> <English>Select a Trigger</English>
@ -372,7 +372,7 @@
<Italian>Seleziona un Attivatore</Italian> <Italian>Seleziona un Attivatore</Italian>
<Hungarian>Detonátor kiválasztása</Hungarian> <Hungarian>Detonátor kiválasztása</Hungarian>
<Portuguese>Selecionar um Gatilho</Portuguese> <Portuguese>Selecionar um Gatilho</Portuguese>
<Russian>Выберите</Russian> <Russian>Выберите детонатор</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_SelectTrigger"> <Key ID="STR_ACE_Explosives_SelectTrigger">
<English>Select</English> <English>Select</English>
@ -384,7 +384,7 @@
<Italian>Seleziona</Italian> <Italian>Seleziona</Italian>
<Hungarian>Kiválasztás</Hungarian> <Hungarian>Kiválasztás</Hungarian>
<Portuguese>Selecionar</Portuguese> <Portuguese>Selecionar</Portuguese>
<Russian>Выбрать защелка</Russian> <Russian>Выбрать</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_PressurePlate"> <Key ID="STR_ACE_Explosives_PressurePlate">
<English>Pressure Plate</English> <English>Pressure Plate</English>
@ -408,7 +408,7 @@
<Italian>Filo a Inciampo</Italian> <Italian>Filo a Inciampo</Italian>
<Hungarian>Botlódrót</Hungarian> <Hungarian>Botlódrót</Hungarian>
<Portuguese>Linha de tração</Portuguese> <Portuguese>Linha de tração</Portuguese>
<Russian>Натяжной</Russian> <Russian>Растяжка</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_IRSensor"> <Key ID="STR_ACE_Explosives_IRSensor">
<English>IR Sensor</English> <English>IR Sensor</English>
@ -420,7 +420,7 @@
<Italian>Sensore IR</Italian> <Italian>Sensore IR</Italian>
<Hungarian>IR szenzor</Hungarian> <Hungarian>IR szenzor</Hungarian>
<Portuguese>Sensor IV</Portuguese> <Portuguese>Sensor IV</Portuguese>
<Russian>ИК</Russian> <Russian>ИК сенсор</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_NoTriggersAvailable"> <Key ID="STR_ACE_Explosives_NoTriggersAvailable">
<English>No triggers available for %1</English> <English>No triggers available for %1</English>
@ -432,7 +432,7 @@
<Italian>Nessun attivatore disponibile per %1</Italian> <Italian>Nessun attivatore disponibile per %1</Italian>
<Hungarian>Nincs detonátor a %1</Hungarian> <Hungarian>Nincs detonátor a %1</Hungarian>
<Portuguese>Nenhum gatilho disponível para %1</Portuguese> <Portuguese>Nenhum gatilho disponível para %1</Portuguese>
<Russian>Нет защелка доступны для %1</Russian> <Russian>Нет доступных взрывателей для %1</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_SLAME_IRSensor"> <Key ID="STR_ACE_Explosives_SLAME_IRSensor">
<English>IR Sensor (Side Attack)</English> <English>IR Sensor (Side Attack)</English>
@ -444,7 +444,7 @@
<Italian>Sensore IR (Attacco laterale)</Italian> <Italian>Sensore IR (Attacco laterale)</Italian>
<Hungarian>IR Sensor (Side Attack)</Hungarian> <Hungarian>IR Sensor (Side Attack)</Hungarian>
<Portuguese>Sensor infravermelho (ataque lateral)</Portuguese> <Portuguese>Sensor infravermelho (ataque lateral)</Portuguese>
<Russian>ИК (боковая атака)</Russian> <Russian>ИК (детонация вбок)</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_SLAME_Magnetic"> <Key ID="STR_ACE_Explosives_SLAME_Magnetic">
<English>Magnetic Influence Sensor (Bottom Attack)</English> <English>Magnetic Influence Sensor (Bottom Attack)</English>
@ -456,7 +456,7 @@
<Italian>Sensore Magnetico di Prossimità (Attacco inferiore)</Italian> <Italian>Sensore Magnetico di Prossimità (Attacco inferiore)</Italian>
<Hungarian>Mágneses (Bottom Attack)</Hungarian> <Hungarian>Mágneses (Bottom Attack)</Hungarian>
<Portuguese>Influência magnética (ataque inferior)</Portuguese> <Portuguese>Influência magnética (ataque inferior)</Portuguese>
<Russian>Магнитный (дно атака)</Russian> <Russian>Магнитный (детонация вверх)</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_NoExplosivesAvailable"> <Key ID="STR_ACE_Explosives_NoExplosivesAvailable">
<English>No explosives on trigger.</English> <English>No explosives on trigger.</English>
@ -468,7 +468,7 @@
<Hungarian>Nincs robbanóanyag a detonátorhoz.</Hungarian> <Hungarian>Nincs robbanóanyag a detonátorhoz.</Hungarian>
<Polish>Brak ładunków na zapalnik.</Polish> <Polish>Brak ładunków na zapalnik.</Polish>
<Portuguese>Nenhum explosivo no gatilho.</Portuguese> <Portuguese>Nenhum explosivo no gatilho.</Portuguese>
<Russian>Нет взрывчатки на курок.</Russian> <Russian>Нет доступных ВУ для взрывателя.</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_DeadManSwitch_displayName"> <Key ID="STR_ACE_Explosives_DeadManSwitch_displayName">
<English>Dead Man's Switch</English> <English>Dead Man's Switch</English>
@ -478,7 +478,7 @@
<Polish>Czuwak</Polish> <Polish>Czuwak</Polish>
<Spanish>Detonador de hombre muerto</Spanish> <Spanish>Detonador de hombre muerto</Spanish>
<Hungarian>Dead Man's Switch</Hungarian> <Hungarian>Dead Man's Switch</Hungarian>
<Russian>Кнопка мертвеца</Russian> <Russian>Ловушка мертвеца</Russian>
</Key> </Key>
<Key ID="STR_ACE_Explosives_DeadManSwitch_description"> <Key ID="STR_ACE_Explosives_DeadManSwitch_description">
<English>Used to remotely trigger explosives when released.</English> <English>Used to remotely trigger explosives when released.</English>

View File

@ -1,7 +1,7 @@
#include "script_component.hpp" #include "script_component.hpp"
if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false};
if !((!GVAR(enabled) && FUNC(canUseFCS)) || FUNC(canUseRangefinder)) exitWith {false}; if !((!GVAR(enabled) && FUNC(canUseFCS)) || FUNC(canUseRangefinder)) exitWith {false};
[vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -1, false] call FUNC(keyDown); [vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -1, false] call FUNC(keyDown);
[vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -1, false, false] call FUNC(keyUp); [vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -1, false, false] call FUNC(keyUp);

View File

@ -1,81 +1,81 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2014-12-19 --> <!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="FCS"> <Package name="FCS">
<Key ID="STR_ACE_FCS_LaseTarget"> <Key ID="STR_ACE_FCS_LaseTarget">
<English>Lase Target / Measure Distance</English> <English>Lase Target / Measure Distance</English>
<German>Ziel anlasern / Entfernung Messen</German> <German>Ziel anlasern / Entfernung Messen</German>
<French>Télémétrer la cible</French> <French>Télémétrer la cible</French>
<Polish>Naświetl cel / Zmierz odległość</Polish> <Polish>Naświetl cel / Zmierz odległość</Polish>
<Czech>Označit cíl / Změřit vzdálenost</Czech> <Czech>Označit cíl / Změřit vzdálenost</Czech>
<Spanish>Iluminar objetivo / Medir distancia</Spanish> <Spanish>Iluminar objetivo / Medir distancia</Spanish>
<!-- Outdated <!-- Outdated
<Russian>Установить зероинг</Russian> <Russian>Установить зероинг</Russian>
<Hungarian>Lézeres célmegjelölés</Hungarian> <Hungarian>Lézeres célmegjelölés</Hungarian>
<Portuguese>Marcar Alvo</Portuguese> <Portuguese>Marcar Alvo</Portuguese>
<Italian>Designatore Laser</Italian> <Italian>Designatore Laser</Italian>
--> -->
<Russian>Подсветить цель / Измерить расстояние</Russian> <Russian>Подсветить цель / Замерить расстояние</Russian>
</Key> </Key>
<Key ID="STR_ACE_FCS_ZeroedTo"> <Key ID="STR_ACE_FCS_ZeroedTo">
<English>Zeroed To</English> <English>Zeroed To</English>
<German>Haltepunkt</German> <German>Haltepunkt</German>
<Spanish>Fijado a</Spanish> <Spanish>Fijado a</Spanish>
<Polish>Wyzerowany na</Polish> <Polish>Wyzerowany na</Polish>
<Czech>Nastaveno na</Czech> <Czech>Nastaveno na</Czech>
<French>Zéroté à</French> <French>Zéroté à</French>
<Russian>Зероинг</Russian> <Russian>Выставлено на</Russian>
<Hungarian>Nullázás</Hungarian> <Hungarian>Nullázás</Hungarian>
<Portuguese>Fixado em</Portuguese> <Portuguese>Fixado em</Portuguese>
<Italian>Azzeramento a</Italian> <Italian>Azzeramento a</Italian>
</Key> </Key>
<Key ID="STR_ACE_FCS_AdjustRangeUp"> <Key ID="STR_ACE_FCS_AdjustRangeUp">
<English>Adjust FCS Range (Up)</English> <English>Adjust FCS Range (Up)</English>
<German>Entfernung des FLS erhöhen</German> <German>Entfernung des FLS erhöhen</German>
<Polish>Zwiększ zasięg FCS</Polish> <Polish>Zwiększ zasięg FCS</Polish>
<Spanish>Ajustar distancia del FCS (arriba)</Spanish> <Spanish>Ajustar distancia del FCS (arriba)</Spanish>
<Czech>Nastavit FCS Náměr (nahoru)</Czech> <Czech>Nastavit FCS Náměr (nahoru)</Czech>
<French>Augmenter la distance du SCT</French> <French>Augmenter la distance du SCT</French>
<Hungarian>FCS tartomány állítása (Fel)</Hungarian> <Hungarian>FCS tartomány állítása (Fel)</Hungarian>
<Portuguese>Ajustar distância do FCS (Acima)</Portuguese> <Portuguese>Ajustar distância do FCS (Acima)</Portuguese>
<Italian>Aumentare la distanza dell'FCS</Italian> <Italian>Aumentare la distanza dell'FCS</Italian>
<Russian>Диапазон СУО (Выше)</Russian> <Russian>Диапазон СУО (Выше)</Russian>
</Key> </Key>
<Key ID="STR_ACE_FCS_AdjustRangeDown"> <Key ID="STR_ACE_FCS_AdjustRangeDown">
<English>Adjust FCS Range (Down)</English> <English>Adjust FCS Range (Down)</English>
<German>Entfernung des FLS verringern</German> <German>Entfernung des FLS verringern</German>
<Polish>Zmniejsz zasięg FCS</Polish> <Polish>Zmniejsz zasięg FCS</Polish>
<Spanish>Ajustar distancia del FCS (abajo)</Spanish> <Spanish>Ajustar distancia del FCS (abajo)</Spanish>
<Czech>Nastavit FCS Náměr (dolů)</Czech> <Czech>Nastavit FCS Náměr (dolů)</Czech>
<French>Réduire la distance du SCT</French> <French>Réduire la distance du SCT</French>
<Hungarian>FCS tartomány állítása (Le)</Hungarian> <Hungarian>FCS tartomány állítása (Le)</Hungarian>
<Portuguese>Ajustar distância do FCS (Abaixo)</Portuguese> <Portuguese>Ajustar distância do FCS (Abaixo)</Portuguese>
<Italian>Ridurre la distanza dell'FCS</Italian> <Italian>Ridurre la distanza dell'FCS</Italian>
<Russian>Диапазон СУО (Ниже)</Russian> <Russian>Диапазон СУО (Ниже)</Russian>
</Key> </Key>
<Key ID="STR_ACE_FCS_ResetFCS"> <Key ID="STR_ACE_FCS_ResetFCS">
<English>Reset FCS</English> <English>Reset FCS</English>
<German>FLS zurücksetzen</German> <German>FLS zurücksetzen</German>
<Spanish>Reiniciar FCS</Spanish> <Spanish>Reiniciar FCS</Spanish>
<French>Réinitialiser le SCT</French> <French>Réinitialiser le SCT</French>
<Polish>Resetuj FCS</Polish> <Polish>Resetuj FCS</Polish>
<Czech>Resetovat FCS</Czech> <Czech>Resetovat FCS</Czech>
<Hungarian>FCS visszaállítása</Hungarian> <Hungarian>FCS visszaállítása</Hungarian>
<Portuguese>Reiniciar FCS</Portuguese> <Portuguese>Reiniciar FCS</Portuguese>
<Italian>Azzeramento dell'FCS</Italian> <Italian>Azzeramento dell'FCS</Italian>
<Russian>Обнулить СУО</Russian> <Russian>Обнулить СУО</Russian>
</Key> </Key>
<Key ID="STR_ACE_FCS_HasBeenReset"> <Key ID="STR_ACE_FCS_HasBeenReset">
<English>FCS has been reset.</English> <English>FCS has been reset.</English>
<German>FLS wurde zurückgesetzt.</German> <German>FLS wurde zurückgesetzt.</German>
<Spanish>FCS reiniciado</Spanish> <Spanish>FCS reiniciado</Spanish>
<French>SCT réinitialisé.</French> <French>SCT réinitialisé.</French>
<Polish>FCS został zresetowany.</Polish> <Polish>FCS został zresetowany.</Polish>
<Czech>FCS byl resetován.</Czech> <Czech>FCS byl resetován.</Czech>
<Hungarian>Az FCS visszaállítva</Hungarian> <Hungarian>Az FCS visszaállítva</Hungarian>
<Portuguese>FCS reiniciado.</Portuguese> <Portuguese>FCS reiniciado.</Portuguese>
<Italian>L'FCS è stato azzerato</Italian> <Italian>L'FCS è stato azzerato</Italian>
<Russian>СУО обнулен</Russian> <Russian>СУО обнулен.</Russian>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,352 +1,352 @@
#define BASE_DRAG -0.01 #define BASE_DRAG -0.01
#define HD_MULT 5 #define HD_MULT 5
#define BASE_DRAG_HD (BASE_DRAG*HD_MULT) #define BASE_DRAG_HD (BASE_DRAG*HD_MULT)
class CfgAmmo { class CfgAmmo {
//class ace_arty_105mm_m1_m782_time; //class ace_arty_105mm_m1_m782_time;
//class ace_arty_105mm_m1_m782_prox: ace_arty_105mm_m1_m782_time {}; //class ace_arty_105mm_m1_m782_prox: ace_arty_105mm_m1_m782_time {};
//class ace_arty_105mm_m1_m782_delay: ace_arty_105mm_m1_m782_prox { //class ace_arty_105mm_m1_m782_delay: ace_arty_105mm_m1_m782_prox {
// ACE_FRAG_SKIP = 1; // ACE_FRAG_SKIP = 1;
//}; //};
class Bo_GBU12_LGB; class Bo_GBU12_LGB;
class Nou_GBU12 : Bo_GBU12_LGB { class Nou_GBU12 : Bo_GBU12_LGB {
ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
ACE_FRAG_METAL = 140000; ACE_FRAG_METAL = 140000;
ACE_FRAG_CHARGE = 87000; ACE_FRAG_CHARGE = 87000;
ACE_FRAG_GURNEY_C = 2320; ACE_FRAG_GURNEY_C = 2320;
ACE_FRAG_GURNEY_K = 1/2; ACE_FRAG_GURNEY_K = 1/2;
sideAirFriction = 0.04; sideAirFriction = 0.04;
airFriction = 0.04; airFriction = 0.04;
laserLock = 0; laserLock = 0;
}; };
class GrenadeBase; class GrenadeBase;
class Grenade; class Grenade;
class GrenadeHand: Grenade { class GrenadeHand: Grenade {
ACE_FRAG_SKIP = 0; ACE_FRAG_SKIP = 0;
ACE_FRAG_FORCE = 1; ACE_FRAG_FORCE = 1;
// This is a good high-drag frag type for grenades. // This is a good high-drag frag type for grenades.
ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"}; ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"};
/* /*
These values are based on the M67 Grenade, should be tweaked for These values are based on the M67 Grenade, should be tweaked for
individual grenades. individual grenades.
*/ */
ACE_FRAG_METAL = 210; // metal in grams ACE_FRAG_METAL = 210; // metal in grams
ACE_FRAG_CHARGE = 185; // explosive in grams ACE_FRAG_CHARGE = 185; // explosive in grams
ACE_FRAG_GURNEY_C = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations ACE_FRAG_GURNEY_C = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations
ACE_FRAG_GURNEY_K = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations ACE_FRAG_GURNEY_K = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations
}; };
class GrenadeHand_stone: GrenadeHand { class GrenadeHand_stone: GrenadeHand {
ACE_FRAG_SKIP = 1; ACE_FRAG_SKIP = 1;
}; };
class SmokeShell: GrenadeHand { class SmokeShell: GrenadeHand {
ACE_FRAG_SKIP = 1; ACE_FRAG_SKIP = 1;
}; };
class RocketBase; class RocketBase;
//class R_Hydra_HE: RocketBase { //class R_Hydra_HE: RocketBase {
// ACE_FRAG_SKIP = 1; // ACE_FRAG_SKIP = 1;
//}; //};
//class R_57mm_HE: RocketBase { //class R_57mm_HE: RocketBase {
// ACE_FRAG_SKIP = 1; // ACE_FRAG_SKIP = 1;
//}; //};
class R_80mm_HE: RocketBase { class R_80mm_HE: RocketBase {
ACE_FRAG_SKIP = 1; ACE_FRAG_SKIP = 1;
}; };
//class R_S8T_AT: RocketBase { //class R_S8T_AT: RocketBase {
// ACE_FRAG_SKIP = 1; // ACE_FRAG_SKIP = 1;
//}; //};
class BombCore; class BombCore;
class Bo_Mk82: BombCore { class Bo_Mk82: BombCore {
ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
ACE_FRAG_METAL = 140000; ACE_FRAG_METAL = 140000;
ACE_FRAG_CHARGE = 87000; ACE_FRAG_CHARGE = 87000;
ACE_FRAG_GURNEY_C = 2320; ACE_FRAG_GURNEY_C = 2320;
ACE_FRAG_GURNEY_K = 1/2; ACE_FRAG_GURNEY_K = 1/2;
}; };
class G_40mm_HE: GrenadeBase { class G_40mm_HE: GrenadeBase {
ACE_FRAG_SKIP = 0; ACE_FRAG_SKIP = 0;
ACE_FRAG_FORCE = 1; ACE_FRAG_FORCE = 1;
}; };
class ACE_G_40mm_HEDP: G_40mm_HE { class ACE_G_40mm_HEDP: G_40mm_HE {
}; };
class ACE_G_40mm_HE: ACE_G_40mm_HEDP { class ACE_G_40mm_HE: ACE_G_40mm_HEDP {
}; };
class ACE_G_40mm_Practice: ACE_G_40mm_HE { class ACE_G_40mm_Practice: ACE_G_40mm_HE {
ACE_FRAG_SKIP = 1; ACE_FRAG_SKIP = 1;
}; };
class ACE_G40mm_HE_VOG25P: G_40mm_HE { class ACE_G40mm_HE_VOG25P: G_40mm_HE {
ACE_FRAG_SKIP = 0; ACE_FRAG_SKIP = 0;
ACE_FRAG_FORCE = 1; ACE_FRAG_FORCE = 1;
}; };
//class R_SMAW_HEDP; //class R_SMAW_HEDP;
//class R_MEEWS_HEDP : R_SMAW_HEDP { //class R_MEEWS_HEDP : R_SMAW_HEDP {
// ACE_FRAG_FORCE = 1; // ACE_FRAG_FORCE = 1;
// ACE_FRAG_MULTIPLIER = 1.2; // ACE_FRAG_MULTIPLIER = 1.2;
//}; //};
//class MissileBase; //class MissileBase;
//class M_Hellfire_AT: MissileBase { //class M_Hellfire_AT: MissileBase {
// ACE_FRAG_FORCE = 1; // ACE_FRAG_FORCE = 1;
// ACE_FRAG_MULTIPLIER = 1.75; // ACE_FRAG_MULTIPLIER = 1.75;
//}; //};
/* /*
class B_762x51_Ball; class B_762x51_Ball;
class ACE_frag_base: B_762x51_Ball { ////TODO: B_762x45_Ball no longer exists, is this a valid replacement? class ACE_frag_base: B_762x51_Ball { ////TODO: B_762x45_Ball no longer exists, is this a valid replacement?
model = "\A3\Weapons_f\ammo\shell"; model = "\A3\Weapons_f\ammo\shell";
timeToLive = 12; timeToLive = 12;
typicalSpeed = 800; typicalSpeed = 800;
// Fix sounds // Fix sounds
effectFly = "AmmoClassic"; effectFly = "AmmoClassic";
soundDefault1[] = {"A3\sounds_f\weapons\hits\concrete_1.wav",0.158114,1,30}; soundDefault1[] = {"A3\sounds_f\weapons\hits\concrete_1.wav",0.158114,1,30};
soundDefault2[] = {"A3\sounds_f\weapons\hits\concrete_2.wav",0.158114,1,30}; soundDefault2[] = {"A3\sounds_f\weapons\hits\concrete_2.wav",0.158114,1,30};
soundDefault3[] = {"A3\sounds_f\weapons\hits\concrete_3.wav",0.158114,1,30}; soundDefault3[] = {"A3\sounds_f\weapons\hits\concrete_3.wav",0.158114,1,30};
soundDefault4[] = {"A3\sounds_f\weapons\hits\concrete_4.wav",0.158114,1,30}; soundDefault4[] = {"A3\sounds_f\weapons\hits\concrete_4.wav",0.158114,1,30};
soundDefault5[] = {"A3\sounds_f\weapons\hits\concrete_5.wav",0.158114,1,30}; soundDefault5[] = {"A3\sounds_f\weapons\hits\concrete_5.wav",0.158114,1,30};
soundDefault6[] = {"A3\sounds_f\weapons\hits\concrete_6.wav",0.158114,1,30}; soundDefault6[] = {"A3\sounds_f\weapons\hits\concrete_6.wav",0.158114,1,30};
soundDefault7[] = {"A3\sounds_f\weapons\hits\concrete_7.wav",0.158114,1,30}; soundDefault7[] = {"A3\sounds_f\weapons\hits\concrete_7.wav",0.158114,1,30};
soundDefault8[] = {"A3\sounds_f\weapons\hits\concrete_8.wav",0.158114,1,30}; soundDefault8[] = {"A3\sounds_f\weapons\hits\concrete_8.wav",0.158114,1,30};
soundGroundSoft1[] = {"A3\sounds_f\weapons\hits\soft_ground_1.wav",0.02811705,1,30}; soundGroundSoft1[] = {"A3\sounds_f\weapons\hits\soft_ground_1.wav",0.02811705,1,30};
soundGroundSoft2[] = {"A3\sounds_f\weapons\hits\soft_ground_2.wav",0.02811705,1,30}; soundGroundSoft2[] = {"A3\sounds_f\weapons\hits\soft_ground_2.wav",0.02811705,1,30};
soundGroundSoft3[] = {"A3\sounds_f\weapons\hits\soft_ground_3.wav",0.02811705,1,30}; soundGroundSoft3[] = {"A3\sounds_f\weapons\hits\soft_ground_3.wav",0.02811705,1,30};
soundGroundSoft4[] = {"A3\sounds_f\weapons\hits\soft_ground_4.wav",0.02811705,1,30}; soundGroundSoft4[] = {"A3\sounds_f\weapons\hits\soft_ground_4.wav",0.02811705,1,30};
soundGroundSoft5[] = {"A3\sounds_f\weapons\hits\soft_ground_5.wav",0.02811705,1,30}; soundGroundSoft5[] = {"A3\sounds_f\weapons\hits\soft_ground_5.wav",0.02811705,1,30};
soundGroundSoft6[] = {"A3\sounds_f\weapons\hits\soft_ground_6.wav",0.02811705,1,30}; soundGroundSoft6[] = {"A3\sounds_f\weapons\hits\soft_ground_6.wav",0.02811705,1,30};
soundGroundSoft7[] = {"A3\sounds_f\weapons\hits\soft_ground_7.wav",0.02811705,1,30}; soundGroundSoft7[] = {"A3\sounds_f\weapons\hits\soft_ground_7.wav",0.02811705,1,30};
soundGroundSoft8[] = {"A3\sounds_f\weapons\hits\soft_ground_8.wav",0.02811705,1,30}; soundGroundSoft8[] = {"A3\sounds_f\weapons\hits\soft_ground_8.wav",0.02811705,1,30};
soundGroundHard1[] = {"A3\sounds_f\weapons\hits\hard_ground_1.wav",0.62946,1,40}; soundGroundHard1[] = {"A3\sounds_f\weapons\hits\hard_ground_1.wav",0.62946,1,40};
soundGroundHard2[] = {"A3\sounds_f\weapons\hits\hard_ground_2.wav",0.62946,1,40}; soundGroundHard2[] = {"A3\sounds_f\weapons\hits\hard_ground_2.wav",0.62946,1,40};
soundGroundHard3[] = {"A3\sounds_f\weapons\hits\hard_ground_3.wav",0.62946,1,40}; soundGroundHard3[] = {"A3\sounds_f\weapons\hits\hard_ground_3.wav",0.62946,1,40};
soundGroundHard4[] = {"A3\sounds_f\weapons\hits\hard_ground_4.wav",0.62946,1,40}; soundGroundHard4[] = {"A3\sounds_f\weapons\hits\hard_ground_4.wav",0.62946,1,40};
soundGroundHard5[] = {"A3\sounds_f\weapons\hits\hard_ground_5.wav",0.62946,1,40}; soundGroundHard5[] = {"A3\sounds_f\weapons\hits\hard_ground_5.wav",0.62946,1,40};
soundGroundHard6[] = {"A3\sounds_f\weapons\hits\hard_ground_6.wav",0.62946,1,40}; soundGroundHard6[] = {"A3\sounds_f\weapons\hits\hard_ground_6.wav",0.62946,1,40};
soundGroundHard7[] = {"A3\sounds_f\weapons\hits\hard_ground_7.wav",0.62946,1,40}; soundGroundHard7[] = {"A3\sounds_f\weapons\hits\hard_ground_7.wav",0.62946,1,40};
soundGroundHard8[] = {"A3\sounds_f\weapons\hits\hard_ground_8.wav",0.62946,1,40}; soundGroundHard8[] = {"A3\sounds_f\weapons\hits\hard_ground_8.wav",0.62946,1,40};
soundMetal1[] = {"A3\sounds_f\weapons\hits\metal_1.wav",0.158114,1,45}; soundMetal1[] = {"A3\sounds_f\weapons\hits\metal_1.wav",0.158114,1,45};
soundMetal2[] = {"A3\sounds_f\weapons\hits\metal_2.wav",0.158114,1,45}; soundMetal2[] = {"A3\sounds_f\weapons\hits\metal_2.wav",0.158114,1,45};
soundMetal3[] = {"A3\sounds_f\weapons\hits\metal_3.wav",0.158114,1,45}; soundMetal3[] = {"A3\sounds_f\weapons\hits\metal_3.wav",0.158114,1,45};
soundMetal4[] = {"A3\sounds_f\weapons\hits\metal_4.wav",0.158114,1,45}; soundMetal4[] = {"A3\sounds_f\weapons\hits\metal_4.wav",0.158114,1,45};
soundMetal5[] = {"A3\sounds_f\weapons\hits\metal_5.wav",0.158114,1,45}; soundMetal5[] = {"A3\sounds_f\weapons\hits\metal_5.wav",0.158114,1,45};
soundMetal6[] = {"A3\sounds_f\weapons\hits\metal_6.wav",0.158114,1,45}; soundMetal6[] = {"A3\sounds_f\weapons\hits\metal_6.wav",0.158114,1,45};
soundMetal7[] = {"A3\sounds_f\weapons\hits\metal_7.wav",0.158114,1,45}; soundMetal7[] = {"A3\sounds_f\weapons\hits\metal_7.wav",0.158114,1,45};
soundMetal8[] = {"A3\sounds_f\weapons\hits\metal_8.wav",0.158114,1,45}; soundMetal8[] = {"A3\sounds_f\weapons\hits\metal_8.wav",0.158114,1,45};
soundGlass1[] = {"A3\sounds_f\weapons\hits\glass_1.wav",0.177828,1,25}; soundGlass1[] = {"A3\sounds_f\weapons\hits\glass_1.wav",0.177828,1,25};
soundGlass2[] = {"A3\sounds_f\weapons\hits\glass_2.wav",0.177828,1,25}; soundGlass2[] = {"A3\sounds_f\weapons\hits\glass_2.wav",0.177828,1,25};
soundGlass3[] = {"A3\sounds_f\weapons\hits\glass_3.wav",0.177828,1,25}; soundGlass3[] = {"A3\sounds_f\weapons\hits\glass_3.wav",0.177828,1,25};
soundGlass4[] = {"A3\sounds_f\weapons\hits\glass_4.wav",0.177828,1,25}; soundGlass4[] = {"A3\sounds_f\weapons\hits\glass_4.wav",0.177828,1,25};
soundGlass5[] = {"A3\sounds_f\weapons\hits\glass_5.wav",0.177828,1,25}; soundGlass5[] = {"A3\sounds_f\weapons\hits\glass_5.wav",0.177828,1,25};
soundGlass6[] = {"A3\sounds_f\weapons\hits\glass_6.wav",0.177828,1,25}; soundGlass6[] = {"A3\sounds_f\weapons\hits\glass_6.wav",0.177828,1,25};
soundGlass7[] = {"A3\sounds_f\weapons\hits\glass_7.wav",0.177828,1,25}; soundGlass7[] = {"A3\sounds_f\weapons\hits\glass_7.wav",0.177828,1,25};
soundGlass8[] = {"A3\sounds_f\weapons\hits\glass_8.wav",0.177828,1,25}; soundGlass8[] = {"A3\sounds_f\weapons\hits\glass_8.wav",0.177828,1,25};
soundGlassArmored1[] = {"A3\sounds_f\weapons\hits\glass_arm_1.wav",0.177828,1,30}; soundGlassArmored1[] = {"A3\sounds_f\weapons\hits\glass_arm_1.wav",0.177828,1,30};
soundGlassArmored2[] = {"A3\sounds_f\weapons\hits\glass_arm_2.wav",0.177828,1,30}; soundGlassArmored2[] = {"A3\sounds_f\weapons\hits\glass_arm_2.wav",0.177828,1,30};
soundGlassArmored3[] = {"A3\sounds_f\weapons\hits\glass_arm_3.wav",0.177828,1,30}; soundGlassArmored3[] = {"A3\sounds_f\weapons\hits\glass_arm_3.wav",0.177828,1,30};
soundGlassArmored4[] = {"A3\sounds_f\weapons\hits\glass_arm_4.wav",0.177828,1,30}; soundGlassArmored4[] = {"A3\sounds_f\weapons\hits\glass_arm_4.wav",0.177828,1,30};
soundGlassArmored5[] = {"A3\sounds_f\weapons\hits\glass_arm_5.wav",0.177828,1,30}; soundGlassArmored5[] = {"A3\sounds_f\weapons\hits\glass_arm_5.wav",0.177828,1,30};
soundGlassArmored6[] = {"A3\sounds_f\weapons\hits\glass_arm_6.wav",0.177828,1,30}; soundGlassArmored6[] = {"A3\sounds_f\weapons\hits\glass_arm_6.wav",0.177828,1,30};
soundGlassArmored7[] = {"A3\sounds_f\weapons\hits\glass_arm_7.wav",0.177828,1,30}; soundGlassArmored7[] = {"A3\sounds_f\weapons\hits\glass_arm_7.wav",0.177828,1,30};
soundGlassArmored8[] = {"A3\sounds_f\weapons\hits\glass_arm_8.wav",0.177828,1,30}; soundGlassArmored8[] = {"A3\sounds_f\weapons\hits\glass_arm_8.wav",0.177828,1,30};
soundVehiclePlate1[] = {"A3\sounds_f\weapons\hits\metal_plate_1.wav",0.281170,1,40}; soundVehiclePlate1[] = {"A3\sounds_f\weapons\hits\metal_plate_1.wav",0.281170,1,40};
soundVehiclePlate2[] = {"A3\sounds_f\weapons\hits\metal_plate_2.wav",0.281170,1,40}; soundVehiclePlate2[] = {"A3\sounds_f\weapons\hits\metal_plate_2.wav",0.281170,1,40};
soundVehiclePlate3[] = {"A3\sounds_f\weapons\hits\metal_plate_3.wav",0.281170,1,40}; soundVehiclePlate3[] = {"A3\sounds_f\weapons\hits\metal_plate_3.wav",0.281170,1,40};
soundVehiclePlate4[] = {"A3\sounds_f\weapons\hits\metal_plate_4.wav",0.281170,1,40}; soundVehiclePlate4[] = {"A3\sounds_f\weapons\hits\metal_plate_4.wav",0.281170,1,40};
soundVehiclePlate5[] = {"A3\sounds_f\weapons\hits\metal_plate_5.wav",0.281170,1,40}; soundVehiclePlate5[] = {"A3\sounds_f\weapons\hits\metal_plate_5.wav",0.281170,1,40};
soundVehiclePlate6[] = {"A3\sounds_f\weapons\hits\metal_plate_6.wav",0.281170,1,40}; soundVehiclePlate6[] = {"A3\sounds_f\weapons\hits\metal_plate_6.wav",0.281170,1,40};
soundVehiclePlate7[] = {"A3\sounds_f\weapons\hits\metal_plate_7.wav",0.281170,1,40}; soundVehiclePlate7[] = {"A3\sounds_f\weapons\hits\metal_plate_7.wav",0.281170,1,40};
soundVehiclePlate8[] = {"A3\sounds_f\weapons\hits\metal_plate_8.wav",0.281170,1,40}; soundVehiclePlate8[] = {"A3\sounds_f\weapons\hits\metal_plate_8.wav",0.281170,1,40};
soundWood1[] = {"A3\sounds_f\weapons\hits\wood_1.wav",0.158114,1,30}; soundWood1[] = {"A3\sounds_f\weapons\hits\wood_1.wav",0.158114,1,30};
soundWood2[] = {"A3\sounds_f\weapons\hits\wood_2.wav",0.158114,1,30}; soundWood2[] = {"A3\sounds_f\weapons\hits\wood_2.wav",0.158114,1,30};
soundWood3[] = {"A3\sounds_f\weapons\hits\wood_3.wav",0.158114,1,30}; soundWood3[] = {"A3\sounds_f\weapons\hits\wood_3.wav",0.158114,1,30};
soundWood4[] = {"A3\sounds_f\weapons\hits\wood_4.wav",0.158114,1,30}; soundWood4[] = {"A3\sounds_f\weapons\hits\wood_4.wav",0.158114,1,30};
soundWood5[] = {"A3\sounds_f\weapons\hits\wood_5.wav",0.158114,1,30}; soundWood5[] = {"A3\sounds_f\weapons\hits\wood_5.wav",0.158114,1,30};
soundWood6[] = {"A3\sounds_f\weapons\hits\wood_6.wav",0.158114,1,30}; soundWood6[] = {"A3\sounds_f\weapons\hits\wood_6.wav",0.158114,1,30};
soundWood7[] = {"A3\sounds_f\weapons\hits\wood_7.wav",0.158114,1,30}; soundWood7[] = {"A3\sounds_f\weapons\hits\wood_7.wav",0.158114,1,30};
soundWood8[] = {"A3\sounds_f\weapons\hits\wood_8.wav",0.158114,1,30}; soundWood8[] = {"A3\sounds_f\weapons\hits\wood_8.wav",0.158114,1,30};
soundHitBody1[] = {"A3\sounds_f\weapons\hits\body_1.wav",0.0177828,1,25}; soundHitBody1[] = {"A3\sounds_f\weapons\hits\body_1.wav",0.0177828,1,25};
soundHitBody2[] = {"A3\sounds_f\weapons\hits\body_2.wav",0.0177828,1,25}; soundHitBody2[] = {"A3\sounds_f\weapons\hits\body_2.wav",0.0177828,1,25};
soundHitBody3[] = {"A3\sounds_f\weapons\hits\body_3.wav",0.0177828,1,25}; soundHitBody3[] = {"A3\sounds_f\weapons\hits\body_3.wav",0.0177828,1,25};
soundHitBody4[] = {"A3\sounds_f\weapons\hits\body_4.wav",0.0177828,1,25}; soundHitBody4[] = {"A3\sounds_f\weapons\hits\body_4.wav",0.0177828,1,25};
soundHitBody5[] = {"A3\sounds_f\weapons\hits\body_5.wav",0.0177828,1,25}; soundHitBody5[] = {"A3\sounds_f\weapons\hits\body_5.wav",0.0177828,1,25};
soundHitBody6[] = {"A3\sounds_f\weapons\hits\body_6.wav",0.0177828,1,25}; soundHitBody6[] = {"A3\sounds_f\weapons\hits\body_6.wav",0.0177828,1,25};
soundHitBody7[] = {"A3\sounds_f\weapons\hits\body_7.wav",0.0177828,1,25}; soundHitBody7[] = {"A3\sounds_f\weapons\hits\body_7.wav",0.0177828,1,25};
soundHitBody8[] = {"A3\sounds_f\weapons\hits\body_8.wav",0.0177828,1,25}; soundHitBody8[] = {"A3\sounds_f\weapons\hits\body_8.wav",0.0177828,1,25};
soundHitBuilding1[] = {"A3\sounds_f\weapons\hits\building_1.wav",0.251189,1,30}; soundHitBuilding1[] = {"A3\sounds_f\weapons\hits\building_1.wav",0.251189,1,30};
soundHitBuilding2[] = {"A3\sounds_f\weapons\hits\building_2.wav",0.251189,1,30}; soundHitBuilding2[] = {"A3\sounds_f\weapons\hits\building_2.wav",0.251189,1,30};
soundHitBuilding3[] = {"A3\sounds_f\weapons\hits\building_3.wav",0.251189,1,30}; soundHitBuilding3[] = {"A3\sounds_f\weapons\hits\building_3.wav",0.251189,1,30};
soundHitBuilding4[] = {"A3\sounds_f\weapons\hits\building_4.wav",0.251189,1,30}; soundHitBuilding4[] = {"A3\sounds_f\weapons\hits\building_4.wav",0.251189,1,30};
soundHitBuilding5[] = {"A3\sounds_f\weapons\hits\building_5.wav",0.251189,1,30}; soundHitBuilding5[] = {"A3\sounds_f\weapons\hits\building_5.wav",0.251189,1,30};
soundHitBuilding6[] = {"A3\sounds_f\weapons\hits\building_6.wav",0.251189,1,30}; soundHitBuilding6[] = {"A3\sounds_f\weapons\hits\building_6.wav",0.251189,1,30};
soundHitBuilding7[] = {"A3\sounds_f\weapons\hits\building_7.wav",0.251189,1,30}; soundHitBuilding7[] = {"A3\sounds_f\weapons\hits\building_7.wav",0.251189,1,30};
soundHitBuilding8[] = {"A3\sounds_f\weapons\hits\building_8.wav",0.251189,1,30}; soundHitBuilding8[] = {"A3\sounds_f\weapons\hits\building_8.wav",0.251189,1,30};
soundHitFoliage1[] = {"A3\sounds_f\weapons\hits\foliage_1.wav",0.177828,1,25}; soundHitFoliage1[] = {"A3\sounds_f\weapons\hits\foliage_1.wav",0.177828,1,25};
soundHitFoliage2[] = {"A3\sounds_f\weapons\hits\foliage_2.wav",0.177828,1,25}; soundHitFoliage2[] = {"A3\sounds_f\weapons\hits\foliage_2.wav",0.177828,1,25};
soundHitFoliage3[] = {"A3\sounds_f\weapons\hits\foliage_3.wav",0.177828,1,25}; soundHitFoliage3[] = {"A3\sounds_f\weapons\hits\foliage_3.wav",0.177828,1,25};
soundHitFoliage4[] = {"A3\sounds_f\weapons\hits\foliage_4.wav",0.177828,1,25}; soundHitFoliage4[] = {"A3\sounds_f\weapons\hits\foliage_4.wav",0.177828,1,25};
soundHitFoliage5[] = {"A3\sounds_f\weapons\hits\foliage_5.wav",0.177828,1,25}; soundHitFoliage5[] = {"A3\sounds_f\weapons\hits\foliage_5.wav",0.177828,1,25};
soundHitFoliage6[] = {"A3\sounds_f\weapons\hits\foliage_6.wav",0.177828,1,25}; soundHitFoliage6[] = {"A3\sounds_f\weapons\hits\foliage_6.wav",0.177828,1,25};
soundHitFoliage7[] = {"A3\sounds_f\weapons\hits\foliage_7.wav",0.177828,1,25}; soundHitFoliage7[] = {"A3\sounds_f\weapons\hits\foliage_7.wav",0.177828,1,25};
soundHitFoliage8[] = {"A3\sounds_f\weapons\hits\foliage_8.wav",0.177828,1,25}; soundHitFoliage8[] = {"A3\sounds_f\weapons\hits\foliage_8.wav",0.177828,1,25};
soundPlastic1[] = {"A3\sounds_f\weapons\hits\plastic_1.wav",0.177828,1,25}; soundPlastic1[] = {"A3\sounds_f\weapons\hits\plastic_1.wav",0.177828,1,25};
soundPlastic2[] = {"A3\sounds_f\weapons\hits\plastic_2.wav",0.177828,1,25}; soundPlastic2[] = {"A3\sounds_f\weapons\hits\plastic_2.wav",0.177828,1,25};
soundPlastic3[] = {"A3\sounds_f\weapons\hits\plastic_3.wav",0.177828,1,25}; soundPlastic3[] = {"A3\sounds_f\weapons\hits\plastic_3.wav",0.177828,1,25};
soundPlastic4[] = {"A3\sounds_f\weapons\hits\plastic_4.wav",0.177828,1,25}; soundPlastic4[] = {"A3\sounds_f\weapons\hits\plastic_4.wav",0.177828,1,25};
soundPlastic5[] = {"A3\sounds_f\weapons\hits\plastic_5.wav",0.177828,1,25}; soundPlastic5[] = {"A3\sounds_f\weapons\hits\plastic_5.wav",0.177828,1,25};
soundPlastic6[] = {"A3\sounds_f\weapons\hits\plastic_6.wav",0.177828,1,25}; soundPlastic6[] = {"A3\sounds_f\weapons\hits\plastic_6.wav",0.177828,1,25};
soundPlastic7[] = {"A3\sounds_f\weapons\hits\plastic_7.wav",0.177828,1,25}; soundPlastic7[] = {"A3\sounds_f\weapons\hits\plastic_7.wav",0.177828,1,25};
soundPlastic8[] = {"A3\sounds_f\weapons\hits\plastic_8.wav",0.177828,1,25}; soundPlastic8[] = {"A3\sounds_f\weapons\hits\plastic_8.wav",0.177828,1,25};
soundConcrete1[] = {"A3\sounds_f\weapons\hits\concrete_1.wav",0.177828,1,35}; soundConcrete1[] = {"A3\sounds_f\weapons\hits\concrete_1.wav",0.177828,1,35};
soundConcrete2[] = {"A3\sounds_f\weapons\hits\concrete_2.wav",0.177828,1,35}; soundConcrete2[] = {"A3\sounds_f\weapons\hits\concrete_2.wav",0.177828,1,35};
soundConcrete3[] = {"A3\sounds_f\weapons\hits\concrete_3.wav",0.177828,1,35}; soundConcrete3[] = {"A3\sounds_f\weapons\hits\concrete_3.wav",0.177828,1,35};
soundConcrete4[] = {"A3\sounds_f\weapons\hits\concrete_4.wav",0.177828,1,35}; soundConcrete4[] = {"A3\sounds_f\weapons\hits\concrete_4.wav",0.177828,1,35};
soundConcrete5[] = {"A3\sounds_f\weapons\hits\concrete_5.wav",0.177828,1,35}; soundConcrete5[] = {"A3\sounds_f\weapons\hits\concrete_5.wav",0.177828,1,35};
soundConcrete6[] = {"A3\sounds_f\weapons\hits\concrete_6.wav",0.177828,1,35}; soundConcrete6[] = {"A3\sounds_f\weapons\hits\concrete_6.wav",0.177828,1,35};
soundConcrete7[] = {"A3\sounds_f\weapons\hits\concrete_7.wav",0.177828,1,35}; soundConcrete7[] = {"A3\sounds_f\weapons\hits\concrete_7.wav",0.177828,1,35};
soundConcrete8[] = {"A3\sounds_f\weapons\hits\concrete_8.wav",0.177828,1,35}; soundConcrete8[] = {"A3\sounds_f\weapons\hits\concrete_8.wav",0.177828,1,35};
soundRubber1[] = {"A3\sounds_f\weapons\hits\tyre_1.wav",0.158114,1,25}; soundRubber1[] = {"A3\sounds_f\weapons\hits\tyre_1.wav",0.158114,1,25};
soundRubber2[] = {"A3\sounds_f\weapons\hits\tyre_2.wav",0.158114,1,25}; soundRubber2[] = {"A3\sounds_f\weapons\hits\tyre_2.wav",0.158114,1,25};
soundRubber3[] = {"A3\sounds_f\weapons\hits\tyre_3.wav",0.158114,1,25}; soundRubber3[] = {"A3\sounds_f\weapons\hits\tyre_3.wav",0.158114,1,25};
soundRubber4[] = {"A3\sounds_f\weapons\hits\tyre_4.wav",0.158114,1,25}; soundRubber4[] = {"A3\sounds_f\weapons\hits\tyre_4.wav",0.158114,1,25};
soundRubber5[] = {"A3\sounds_f\weapons\hits\tyre_5.wav",0.158114,1,25}; soundRubber5[] = {"A3\sounds_f\weapons\hits\tyre_5.wav",0.158114,1,25};
soundRubber6[] = {"A3\sounds_f\weapons\hits\tyre_6.wav",0.158114,1,25}; soundRubber6[] = {"A3\sounds_f\weapons\hits\tyre_6.wav",0.158114,1,25};
soundRubber7[] = {"A3\sounds_f\weapons\hits\tyre_7.wav",0.158114,1,25}; soundRubber7[] = {"A3\sounds_f\weapons\hits\tyre_7.wav",0.158114,1,25};
soundRubber8[] = {"A3\sounds_f\weapons\hits\tyre_8.wav",0.158114,1,25}; soundRubber8[] = {"A3\sounds_f\weapons\hits\tyre_8.wav",0.158114,1,25};
soundWater1[] = {"A3\sounds_f\weapons\hits\water_01.wav",0.158114,1,25}; soundWater1[] = {"A3\sounds_f\weapons\hits\water_01.wav",0.158114,1,25};
soundWater2[] = {"A3\sounds_f\weapons\hits\water_02.wav",0.158114,1,25}; soundWater2[] = {"A3\sounds_f\weapons\hits\water_02.wav",0.158114,1,25};
soundWater3[] = {"A3\sounds_f\weapons\hits\water_03.wav",0.158114,1,25}; soundWater3[] = {"A3\sounds_f\weapons\hits\water_03.wav",0.158114,1,25};
soundWater4[] = {"A3\sounds_f\weapons\hits\water_04.wav",0.158114,1,25}; soundWater4[] = {"A3\sounds_f\weapons\hits\water_04.wav",0.158114,1,25};
soundWater5[] = {"A3\sounds_f\weapons\hits\water_05.wav",0.158114,1,25}; soundWater5[] = {"A3\sounds_f\weapons\hits\water_05.wav",0.158114,1,25};
soundWater6[] = {"A3\sounds_f\weapons\hits\water_06.wav",0.158114,1,25}; soundWater6[] = {"A3\sounds_f\weapons\hits\water_06.wav",0.158114,1,25};
soundWater7[] = {"A3\sounds_f\weapons\hits\water_07.wav",0.158114,1,25}; soundWater7[] = {"A3\sounds_f\weapons\hits\water_07.wav",0.158114,1,25};
soundWater8[] = {"A3\sounds_f\weapons\hits\water_08.wav",0.158114,1,25}; soundWater8[] = {"A3\sounds_f\weapons\hits\water_08.wav",0.158114,1,25};
hitGroundSoft[] = {"soundGroundSoft1",0.2,"soundGroundSoft2",0.2,"soundGroundSoft3",0.1,"soundGroundSoft4",0.1,"soundGroundSoft5",0.1,"soundGroundSoft6",0.1,"soundGroundSoft7",0.1,"soundGroundSoft8",0.1}; hitGroundSoft[] = {"soundGroundSoft1",0.2,"soundGroundSoft2",0.2,"soundGroundSoft3",0.1,"soundGroundSoft4",0.1,"soundGroundSoft5",0.1,"soundGroundSoft6",0.1,"soundGroundSoft7",0.1,"soundGroundSoft8",0.1};
hitGroundHard[] = {"soundGroundHard1",0.2,"soundGroundHard2",0.2,"soundGroundHard3",0.1,"soundGroundHard4",0.1,"soundGroundHard5",0.1,"soundGroundHard6",0.1,"soundGroundHard7",0.1,"soundGroundHard8",0.1}; hitGroundHard[] = {"soundGroundHard1",0.2,"soundGroundHard2",0.2,"soundGroundHard3",0.1,"soundGroundHard4",0.1,"soundGroundHard5",0.1,"soundGroundHard6",0.1,"soundGroundHard7",0.1,"soundGroundHard8",0.1};
hitMan[] = {"soundHitBody1",0.125,"soundHitBody2",0.125,"soundHitBody3",0.125,"soundHitBody4",0.125,"soundHitBody5",0.125,"soundHitBody6",0.125,"soundHitBody7",0.125,"soundHitBody8",0.125}; hitMan[] = {"soundHitBody1",0.125,"soundHitBody2",0.125,"soundHitBody3",0.125,"soundHitBody4",0.125,"soundHitBody5",0.125,"soundHitBody6",0.125,"soundHitBody7",0.125,"soundHitBody8",0.125};
hitArmor[] = {"soundVehiclePlate1",0.125,"soundVehiclePlate2",0.125,"soundVehiclePlate3",0.125,"soundVehiclePlate4",0.125,"soundVehiclePlate5",0.125,"soundVehiclePlate6",0.125,"soundVehiclePlate7",0.125,"soundVehiclePlate8",0.125}; hitArmor[] = {"soundVehiclePlate1",0.125,"soundVehiclePlate2",0.125,"soundVehiclePlate3",0.125,"soundVehiclePlate4",0.125,"soundVehiclePlate5",0.125,"soundVehiclePlate6",0.125,"soundVehiclePlate7",0.125,"soundVehiclePlate8",0.125};
hitBuilding[] = {"soundHitBuilding1",0.2,"soundHitBuilding2",0.2,"soundHitBuilding3",0.1,"soundHitBuilding4",0.1,"soundHitBuilding5",0.1,"soundHitBuilding6",0.1,"soundHitBuilding7",0.1,"soundHitBuilding8",0.1}; hitBuilding[] = {"soundHitBuilding1",0.2,"soundHitBuilding2",0.2,"soundHitBuilding3",0.1,"soundHitBuilding4",0.1,"soundHitBuilding5",0.1,"soundHitBuilding6",0.1,"soundHitBuilding7",0.1,"soundHitBuilding8",0.1};
hitFoliage[] = {"soundHitFoliage1",0.125,"soundHitFoliage2",0.125,"soundHitFoliage3",0.125,"soundHitFoliage4",0.125,"soundHitFoliage5",0.125,"soundHitFoliage6",0.125,"soundHitFoliage7",0.125,"soundHitFoliage8",0.125}; hitFoliage[] = {"soundHitFoliage1",0.125,"soundHitFoliage2",0.125,"soundHitFoliage3",0.125,"soundHitFoliage4",0.125,"soundHitFoliage5",0.125,"soundHitFoliage6",0.125,"soundHitFoliage7",0.125,"soundHitFoliage8",0.125};
hitWood[] = {"soundWood1",0.125,"soundWood2",0.125,"soundWood3",0.125,"soundWood4",0.125,"soundWood5",0.125,"soundWood6",0.125,"soundWood7",0.125,"soundWood8",0.125}; hitWood[] = {"soundWood1",0.125,"soundWood2",0.125,"soundWood3",0.125,"soundWood4",0.125,"soundWood5",0.125,"soundWood6",0.125,"soundWood7",0.125,"soundWood8",0.125};
hitGlass[] = {"soundGlass1",0.125,"soundGlass2",0.125,"soundGlass3",0.125,"soundGlass4",0.125,"soundGlass5",0.125,"soundGlass6",0.125,"soundGlass7",0.125,"soundGlass8",0.125}; hitGlass[] = {"soundGlass1",0.125,"soundGlass2",0.125,"soundGlass3",0.125,"soundGlass4",0.125,"soundGlass5",0.125,"soundGlass6",0.125,"soundGlass7",0.125,"soundGlass8",0.125};
hitGlassArmored[] = {"soundGlassArmored1",0.125,"soundGlassArmored2",0.125,"soundGlassArmored3",0.125,"soundGlassArmored4",0.125,"soundGlassArmored5",0.125,"soundGlassArmored6",0.125,"soundGlassArmored7",0.125,"soundGlassArmored8",0.125}; hitGlassArmored[] = {"soundGlassArmored1",0.125,"soundGlassArmored2",0.125,"soundGlassArmored3",0.125,"soundGlassArmored4",0.125,"soundGlassArmored5",0.125,"soundGlassArmored6",0.125,"soundGlassArmored7",0.125,"soundGlassArmored8",0.125};
hitConcrete[] = {"soundConcrete1",0.125,"soundConcrete2",0.125,"soundConcrete3",0.125,"soundConcrete4",0.125,"soundConcrete5",0.125,"soundConcrete6",0.125,"soundConcrete7",0.125,"soundConcrete8",0.125}; hitConcrete[] = {"soundConcrete1",0.125,"soundConcrete2",0.125,"soundConcrete3",0.125,"soundConcrete4",0.125,"soundConcrete5",0.125,"soundConcrete6",0.125,"soundConcrete7",0.125,"soundConcrete8",0.125};
hitRubber[] = {"soundRubber1",0.125,"soundRubber2",0.125,"soundRubber3",0.125,"soundRubber4",0.125,"soundRubber5",0.125,"soundRubber6",0.125,"soundRubber7",0.125,"soundRubber8",0.125}; hitRubber[] = {"soundRubber1",0.125,"soundRubber2",0.125,"soundRubber3",0.125,"soundRubber4",0.125,"soundRubber5",0.125,"soundRubber6",0.125,"soundRubber7",0.125,"soundRubber8",0.125};
hitPlastic[] = {"soundPlastic1",0.125,"soundPlastic2",0.125,"soundPlastic3",0.125,"soundPlastic4",0.125,"soundPlastic5",0.125,"soundPlastic6",0.125,"soundPlastic7",0.125,"soundPlastic8",0.125}; hitPlastic[] = {"soundPlastic1",0.125,"soundPlastic2",0.125,"soundPlastic3",0.125,"soundPlastic4",0.125,"soundPlastic5",0.125,"soundPlastic6",0.125,"soundPlastic7",0.125,"soundPlastic8",0.125};
hitDefault[] = {"soundDefault1",0.2,"soundDefault2",0.2,"soundDefault3",0.1,"soundDefault4",0.1,"soundDefault5",0.1,"soundDefault6",0.1,"soundDefault7",0.1,"soundDefault8",0.1}; hitDefault[] = {"soundDefault1",0.2,"soundDefault2",0.2,"soundDefault3",0.1,"soundDefault4",0.1,"soundDefault5",0.1,"soundDefault6",0.1,"soundDefault7",0.1,"soundDefault8",0.1};
hitMetal[] = {"soundMetal1",0.125,"soundMetal2",0.125,"soundMetal3",0.125,"soundMetal4",0.125,"soundMetal5",0.125,"soundMetal6",0.125,"soundMetal7",0.125,"soundMetal8",0.125}; hitMetal[] = {"soundMetal1",0.125,"soundMetal2",0.125,"soundMetal3",0.125,"soundMetal4",0.125,"soundMetal5",0.125,"soundMetal6",0.125,"soundMetal7",0.125,"soundMetal8",0.125};
hitMetalplate[] = {"soundVehiclePlate1",0.125,"soundVehiclePlate2",0.125,"soundVehiclePlate3",0.125,"soundVehiclePlate4",0.125,"soundVehiclePlate5",0.125,"soundVehiclePlate6",0.125,"soundVehiclePlate7",0.125,"soundVehiclePlate8",0.125}; hitMetalplate[] = {"soundVehiclePlate1",0.125,"soundVehiclePlate2",0.125,"soundVehiclePlate3",0.125,"soundVehiclePlate4",0.125,"soundVehiclePlate5",0.125,"soundVehiclePlate6",0.125,"soundVehiclePlate7",0.125,"soundVehiclePlate8",0.125};
hitWater[] = {"soundWater1",0.125,"soundWater2",0.125,"soundWater3",0.125,"soundWater4",0.125,"soundWater5",0.125,"soundWater6",0.125,"soundWater7",0.125,"soundWater8",0.125}; hitWater[] = {"soundWater1",0.125,"soundWater2",0.125,"soundWater3",0.125,"soundWater4",0.125,"soundWater5",0.125,"soundWater6",0.125,"soundWater7",0.125,"soundWater8",0.125};
bulletFly1[] = {"A3\sounds_f\weapons\hits\bullet_by_1.wav",1,1,35}; bulletFly1[] = {"A3\sounds_f\weapons\hits\bullet_by_1.wav",1,1,35};
bulletFly2[] = {"A3\sounds_f\weapons\hits\bullet_by_2.wav",1,1,35}; bulletFly2[] = {"A3\sounds_f\weapons\hits\bullet_by_2.wav",1,1,35};
bulletFly3[] = {"A3\sounds_f\weapons\hits\bullet_by_3.wav",1,1,35}; bulletFly3[] = {"A3\sounds_f\weapons\hits\bullet_by_3.wav",1,1,35};
bulletFly4[] = {"A3\sounds_f\weapons\hits\bullet_by_4.wav",1,1,35}; bulletFly4[] = {"A3\sounds_f\weapons\hits\bullet_by_4.wav",1,1,35};
bulletFly5[] = {"A3\sounds_f\weapons\hits\bullet_by_5.wav",1,1,35}; bulletFly5[] = {"A3\sounds_f\weapons\hits\bullet_by_5.wav",1,1,35};
bulletFly6[] = {"A3\sounds_f\weapons\hits\bullet_by_6.wav",1,1,35}; bulletFly6[] = {"A3\sounds_f\weapons\hits\bullet_by_6.wav",1,1,35};
bulletFly7[] = {"A3\sounds_f\weapons\hits\bullet_by_7.wav",1,1,35}; bulletFly7[] = {"A3\sounds_f\weapons\hits\bullet_by_7.wav",1,1,35};
bulletFly8[] = {"A3\sounds_f\weapons\hits\bullet_by_8.wav",1,1,35}; bulletFly8[] = {"A3\sounds_f\weapons\hits\bullet_by_8.wav",1,1,35};
bulletFly[] = {"bulletFly1",0.166,"bulletFly2",0.166,"bulletFly3",0.166,"bulletFly4",0.166,"bulletFly5",0.166,"bulletFly6",0.167,"bulletFly7",0.166,"bulletFly8",0.167}; bulletFly[] = {"bulletFly1",0.166,"bulletFly2",0.166,"bulletFly3",0.166,"bulletFly4",0.166,"bulletFly5",0.166,"bulletFly6",0.167,"bulletFly7",0.166,"bulletFly8",0.167};
supersonicCrackNear[] = {"A3\sounds_f\weapons\hits\sscrack1.wav",1,1,35}; supersonicCrackNear[] = {"A3\sounds_f\weapons\hits\sscrack1.wav",1,1,35};
supersonicCrackFar[] = {"A3\sounds_f\weapons\hits\sscrack2.wav",1,1,135}; supersonicCrackFar[] = {"A3\sounds_f\weapons\hits\sscrack2.wav",1,1,135};
}; };
*/ */
class B_65x39_Caseless; class B_65x39_Caseless;
class ACE_frag_base: B_65x39_Caseless { class ACE_frag_base: B_65x39_Caseless {
timeToLive = 12; timeToLive = 12;
typicalSpeed = 1500; typicalSpeed = 1500;
deflecting = 65; deflecting = 65;
}; };
class ACE_frag_tiny: ACE_frag_base { class ACE_frag_tiny: ACE_frag_base {
hit = 6; hit = 6;
airFriction = BASE_DRAG; airFriction = BASE_DRAG;
caliber = 0.75; caliber = 0.75;
}; };
class ACE_frag_tiny_HD: ACE_frag_base { class ACE_frag_tiny_HD: ACE_frag_base {
hit = 6; hit = 6;
airFriction = BASE_DRAG_HD; airFriction = BASE_DRAG_HD;
caliber = 0.75; caliber = 0.75;
}; };
class ACE_frag_small: ACE_frag_base { class ACE_frag_small: ACE_frag_base {
hit = 12; hit = 12;
airFriction = BASE_DRAG*0.9; airFriction = BASE_DRAG*0.9;
}; };
class ACE_frag_small_HD: ACE_frag_base { class ACE_frag_small_HD: ACE_frag_base {
hit = 12; hit = 12;
airFriction = BASE_DRAG_HD*0.9; airFriction = BASE_DRAG_HD*0.9;
}; };
class ACE_frag_medium: ACE_frag_base { class ACE_frag_medium: ACE_frag_base {
hit = 14; hit = 14;
airFriction = BASE_DRAG*0.75; airFriction = BASE_DRAG*0.75;
caliber = 1.2; caliber = 1.2;
}; };
class ACE_frag_medium_HD: ACE_frag_base { class ACE_frag_medium_HD: ACE_frag_base {
hit = 14; hit = 14;
airFriction = BASE_DRAG_HD*0.75; airFriction = BASE_DRAG_HD*0.75;
caliber = 1.2; caliber = 1.2;
}; };
class ACE_frag_large: ACE_frag_base { class ACE_frag_large: ACE_frag_base {
hit = 28; hit = 28;
indirectHit = 2; indirectHit = 2;
indirectHitRange = 0.25; indirectHitRange = 0.25;
airFriction = BASE_DRAG*0.65; airFriction = BASE_DRAG*0.65;
caliber = 2; caliber = 2;
explosive = 0; explosive = 0;
}; };
class ACE_frag_large_HD: ACE_frag_large { class ACE_frag_large_HD: ACE_frag_large {
hit = 28; hit = 28;
indirectHit = 2; indirectHit = 2;
indirectHitRange = 0.25; indirectHitRange = 0.25;
airFriction = BASE_DRAG_HD*0.65; airFriction = BASE_DRAG_HD*0.65;
caliber = 2; caliber = 2;
}; };
class ACE_frag_huge: ACE_frag_large { class ACE_frag_huge: ACE_frag_large {
hit = 40; hit = 40;
indirectHit = 4; indirectHit = 4;
indirectHitRange = 0.5; indirectHitRange = 0.5;
airFriction = BASE_DRAG*0.5; airFriction = BASE_DRAG*0.5;
caliber = 2.8; caliber = 2.8;
}; };
class ACE_frag_huge_HD: ACE_frag_large { class ACE_frag_huge_HD: ACE_frag_large {
hit = 40; hit = 40;
indirectHit = 4; indirectHit = 4;
indirectHitRange = 0.5; indirectHitRange = 0.5;
airFriction = BASE_DRAG_HD*0.5; airFriction = BASE_DRAG_HD*0.5;
caliber = 2.8; caliber = 2.8;
}; };
class ACE_frag_spall_small: ACE_frag_small { class ACE_frag_spall_small: ACE_frag_small {
timeToLive = 0.1; timeToLive = 0.1;
}; };
class ACE_frag_spall_medium: ACE_frag_medium { class ACE_frag_spall_medium: ACE_frag_medium {
timeToLive = 0.15; timeToLive = 0.15;
}; };
class ACE_frag_spall_large: ACE_frag_large { class ACE_frag_spall_large: ACE_frag_large {
timeToLive = 0.25; timeToLive = 0.25;
}; };
class ACE_frag_spall_huge: ACE_frag_huge { class ACE_frag_spall_huge: ACE_frag_huge {
timeToLive = 0.3; timeToLive = 0.3;
}; };
}; };

View File

@ -1,17 +1,17 @@
class Extended_PreInit_EventHandlers { class Extended_PreInit_EventHandlers {
class ADDON { class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_pre_init)); init = QUOTE(call COMPILE_FILE(XEH_pre_init));
}; };
}; };
class Extended_PostInit_EventHandlers { class Extended_PostInit_EventHandlers {
class ADDON { class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_post_init)); init = QUOTE(call COMPILE_FILE(XEH_post_init));
}; };
}; };
class Extended_FiredBIS_EventHandlers { class Extended_FiredBIS_EventHandlers {
class AllVehicles { class AllVehicles {
ADDON = QUOTE(_this call FUNC(fired)); ADDON = QUOTE(_this call FUNC(fired));
}; };
}; };

View File

@ -1,18 +1,18 @@
#include "script_component.hpp" #include "script_component.hpp"
if(isServer) then { if(isServer) then {
[QGVAR(frag_eh), { _this call FUNC(frago); }] call ace_common_fnc_addEventHandler; [QGVAR(frag_eh), { _this call FUNC(frago); }] call ace_common_fnc_addEventHandler;
}; };
/* /*
GVAR(replacedBisArtyWrapper) = false; GVAR(replacedBisArtyWrapper) = false;
[] spawn { [] spawn {
waitUntil { waitUntil {
if(!(isNil "BIS_ARTY_F_ShellFlight")) then { if(!(isNil "BIS_ARTY_F_ShellFlight")) then {
ACE_WRAPPER_BIS_ARTY_F_ShellFlight = BIS_ARTY_F_ShellFlight; ACE_WRAPPER_BIS_ARTY_F_ShellFlight = BIS_ARTY_F_ShellFlight;
BIS_ARTY_F_ShellFlight = FUNC(BIS_ARTY_WRAPPER); BIS_ARTY_F_ShellFlight = FUNC(BIS_ARTY_WRAPPER);
GVAR(replacedBisArtyWrapper) = true; GVAR(replacedBisArtyWrapper) = true;
}; };
sleep 4; sleep 4;
GVAR(replacedBisArtyWrapper) GVAR(replacedBisArtyWrapper)
}; };
}; };
*/ */

View File

@ -1,45 +1,45 @@
#include "script_component.hpp" #include "script_component.hpp"
ADDON = false; ADDON = false;
PREP(fired); PREP(fired);
PREP(frago); PREP(frago);
PREP(trackFragRound); PREP(trackFragRound);
PREP(spallTrack); PREP(spallTrack);
PREP(doSpall); PREP(doSpall);
PREP(vectorDiffFast); PREP(vectorDiffFast);
GVAR(trackedObjects) = []; GVAR(trackedObjects) = [];
GVAR(blackList) = []; GVAR(blackList) = [];
GVAR(traceFrags) = false; GVAR(traceFrags) = false;
GVAR(replacedBisArtyWrapper) = true; GVAR(replacedBisArtyWrapper) = true;
GVAR(TOTALFRAGS) = 0; GVAR(TOTALFRAGS) = 0;
GVAR(spallIsTrackingCount) = 0; GVAR(spallIsTrackingCount) = 0;
GVAR(spallHPData) = []; GVAR(spallHPData) = [];
GVAR(traces) = []; GVAR(traces) = [];
GVAR(tracesStarted) = false; GVAR(tracesStarted) = false;
GVAR(traceID) = -1; GVAR(traceID) = -1;
GVAR(autoTrace) = true; GVAR(autoTrace) = true;
// * Other Shit */ // * Other Shit */
PREP(frag_trace); PREP(frag_trace);
PREP(denyFrag); PREP(denyFrag);
PREP(BIS_ARTY_WRAPPER); PREP(BIS_ARTY_WRAPPER);
PREP(startTracing); PREP(startTracing);
PREP(stopTracing); PREP(stopTracing);
PREP(clearTraces); PREP(clearTraces);
PREP(trackTrace); PREP(trackTrace);
PREP(addTrack); PREP(addTrack);
PREP(drawTraces); PREP(drawTraces);
PREP(removeTrack); PREP(removeTrack);
PREP(spallHP); PREP(spallHP);
PREP(addBlackList); PREP(addBlackList);
PREP(addManualTrack); PREP(addManualTrack);
ADDON = true; ADDON = true;

View File

@ -1,16 +1,16 @@
#include "script_component.hpp" #include "script_component.hpp"
class CfgPatches { class CfgPatches {
class ADDON { class ADDON {
units[] = {}; units[] = {};
weapons[] = {}; weapons[] = {};
requiredVersion = REQUIRED_VERSION; requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"}; requiredAddons[] = {"ace_common"};
author[] = {"Nou"}; author[] = {"Nou"};
VERSION_CONFIG; VERSION_CONFIG;
}; };
}; };
//PRELOAD_ADDONS; //PRELOAD_ADDONS;
#include "CfgEventhandlers.hpp" #include "CfgEventhandlers.hpp"
#include "CfgAmmo.hpp" #include "CfgAmmo.hpp"

View File

@ -1,13 +1,13 @@
#include "script_component.hpp" #include "script_component.hpp"
_ret = [(_this select 6)] call FUNC(removeTrack); _ret = [(_this select 6)] call FUNC(removeTrack);
if(!_ret) then { if(!_ret) then {
[(_this select 6)] call FUNC(addBlackList); [(_this select 6)] call FUNC(addBlackList);
}; };
_this call ACE_WRAPPER_BIS_ARTY_F_ShellFlight; _this call ACE_WRAPPER_BIS_ARTY_F_ShellFlight;
_catEntry = BIS_ARTY_SHELLCAT select ((count BIS_ARTY_SHELLCAT) - 1); _catEntry = BIS_ARTY_SHELLCAT select ((count BIS_ARTY_SHELLCAT) - 1);
_shell = _catEntry select 0; _shell = _catEntry select 0;
_ARTY_DeployOnImpact = getText (configFile >> "CfgAmmo" >> "ARTY_DeployOnImpact"); _ARTY_DeployOnImpact = getText (configFile >> "CfgAmmo" >> "ARTY_DeployOnImpact");
if(_ARTY_DeployOnImpact == "") then { if(_ARTY_DeployOnImpact == "") then {
_this set[6, _shell]; _this set[6, _shell];
_this call FUNC(fired); _this call FUNC(fired);
}; };

View File

@ -1,4 +1,4 @@
#include "script_component.hpp" #include "script_component.hpp"
private ["_round"]; private ["_round"];
_round = _this select 0; _round = _this select 0;
GVAR(blackList) set[(count GVAR(blackList)), _round]; GVAR(blackList) set[(count GVAR(blackList)), _round];

View File

@ -1,7 +1,7 @@
#include "script_component.hpp" #include "script_component.hpp"
private ["_round"]; private ["_round"];
_round = _this select 0; _round = _this select 0;
if(alive _round) then { if(alive _round) then {
GVAR(trackedObjects) set[(count GVAR(trackedObjects)), _round]; GVAR(trackedObjects) set[(count GVAR(trackedObjects)), _round];
[DFUNC(trackFragRound), 0, [_round, (getPosASL _round), (velocity _round), (typeOf _round), time, objNull, false, 0, 0]] call cba_fnc_addPerFrameHandler; [DFUNC(trackFragRound), 0, [_round, (getPosASL _round), (velocity _round), (typeOf _round), time, objNull, false, 0, 0]] call cba_fnc_addPerFrameHandler;
}; };

View File

@ -1,20 +1,20 @@
#include "script_component.hpp" #include "script_component.hpp"
if(GVAR(autoTrace)) then { if(GVAR(autoTrace)) then {
[] call FUNC(startTracing); [] call FUNC(startTracing);
}; };
// setAccTime 0.05; // setAccTime 0.05;
_index = (count GVAR(traces)); _index = (count GVAR(traces));
_obj = _this select 1; _obj = _this select 1;
_origin = _this select 0; _origin = _this select 0;
_color = [1,0,0,1]; _color = [1,0,0,1];
if((count _this) > 2) then { if((count _this) > 2) then {
_color = _this select 2; _color = _this select 2;
}; };
_positions = []; _positions = [];
_objVel = velocity _obj; _objVel = velocity _obj;
_objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2); _objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2);
_positions set[(count _positions), [(getPos _obj), _objTVel]]; _positions set[(count _positions), [(getPos _obj), _objTVel]];
_data = [_origin, typeOf _origin, typeOf _obj, _objTVel, _positions, _color]; _data = [_origin, typeOf _origin, typeOf _obj, _objTVel, _positions, _color];
GVAR(traces) set[_index, _data]; GVAR(traces) set[_index, _data];
[DFUNC(trackTrace), 0, [_obj, _index, time]] call cba_fnc_addPerFrameHandler; [DFUNC(trackTrace), 0, [_obj, _index, time]] call cba_fnc_addPerFrameHandler;

View File

@ -1,2 +1,2 @@
#include "script_component.hpp" #include "script_component.hpp"
GVAR(traces) = []; GVAR(traces) = [];

View File

@ -1,7 +1,7 @@
#include "script_component.hpp" #include "script_component.hpp"
private ["_ret"]; private ["_ret"];
_ret = [(_this select 0)] call FUNC(removeTrack); _ret = [(_this select 0)] call FUNC(removeTrack);
if(!_ret) then { if(!_ret) then {
[(_this select 0)] call FUNC(addBlackList); [(_this select 0)] call FUNC(addBlackList);
}; };

View File

@ -1,166 +1,166 @@
//fnc_doSpall.sqf //fnc_doSpall.sqf
#include "script_component.hpp" #include "script_component.hpp"
#ifdef DEBUG_MODE_FULL #ifdef DEBUG_MODE_FULL
GVAR(traceFrags) = true; GVAR(traceFrags) = true;
#endif #endif
// player sideChat "WAAAAAAAAAAAAAAAAAAAAA"; // player sideChat "WAAAAAAAAAAAAAAAAAAAAA";
private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive", private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive",
"_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar", "_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar",
"_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k", "_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k",
"_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect", "_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect",
"_fragment"]; "_fragment"];
_params = _this select 0; _params = _this select 0;
[(_this select 1)] call cba_fnc_removePerFrameHandler; [(_this select 1)] call cba_fnc_removePerFrameHandler;
_hitData = _params select 0; _hitData = _params select 0;
_initialData = GVAR(spallHPData) select (_hitData select 0); _initialData = GVAR(spallHPData) select (_hitData select 0);
_hpData = (_hitData select 1) select (_params select 1); _hpData = (_hitData select 1) select (_params select 1);
_object = _hpData select 0; _object = _hpData select 0;
_object removeEventHandler ["hitPart", _initialData select 0]; _object removeEventHandler ["hitPart", _initialData select 0];
_foundObjects = _initialData select 7; _foundObjects = _initialData select 7;
_index = _foundObjects find _object; _index = _foundObjects find _object;
if(_index != -1) then { if(_index != -1) then {
_foundObjecsts set[_index, nil]; _foundObjecsts set[_index, nil];
}; };
_roundType = (_initialData select 2); _roundType = (_initialData select 2);
_round = (_initialData select 3); _round = (_initialData select 3);
_object = (_initialData select 1); _object = (_initialData select 1);
_caliber = getNumber(configFile >> "CfgAmmo" >> _roundType >> "caliber"); _caliber = getNumber(configFile >> "CfgAmmo" >> _roundType >> "caliber");
_explosive = getNumber(configFile >> "CfgAmmo" >> _roundType >> "explosive"); _explosive = getNumber(configFile >> "CfgAmmo" >> _roundType >> "explosive");
_idh = getNumber(configFile >> "CfgAmmo" >> _roundType >> "indirectHitRange"); _idh = getNumber(configFile >> "CfgAmmo" >> _roundType >> "indirectHitRange");
_alive = true; _alive = true;
if(!alive _round && (_initialData select 6) == 1) then { if(!alive _round && (_initialData select 6) == 1) then {
_alive = false; _alive = false;
}; };
if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
// player sideChat format["BBBB"]; // player sideChat format["BBBB"];
_exit = false; _exit = false;
_vm = 1; _vm = 1;
_velocity = _initialData select 5; _velocity = _initialData select 5;
_oldVelocity = _velocity call BIS_fnc_magnitude; _oldVelocity = _velocity call BIS_fnc_magnitude;
_curVelocity = (velocity _round) call BIS_fnc_magnitude; _curVelocity = (velocity _round) call BIS_fnc_magnitude;
if(alive _round) then { if(alive _round) then {
_diff = _velocity vectorDiff (velocity _round); _diff = _velocity vectorDiff (velocity _round);
_polar = _diff call CBA_fnc_vect2polar; _polar = _diff call CBA_fnc_vect2polar;
// player sideChat format["polar: %1", _polar]; // player sideChat format["polar: %1", _polar];
if((abs(_polar select 1) > 45 || abs(_polar select 2) > 45)) then { if((abs(_polar select 1) > 45 || abs(_polar select 2) > 45)) then {
if(_caliber < 2.5) then { if(_caliber < 2.5) then {
// player sideChat format["exit!"]; // player sideChat format["exit!"];
_exit = true; _exit = true;
} else { } else {
_vm = 1-(_curVelocity/_oldVelocity); _vm = 1-(_curVelocity/_oldVelocity);
}; };
}; };
}; };
if(!_exit) then { if(!_exit) then {
_unitDir = vectorNormalized _velocity; _unitDir = vectorNormalized _velocity;
_pos = _hpData select 3; _pos = _hpData select 3;
_spallPos = nil; _spallPos = nil;
for "_i" from 0 to 100 do { for "_i" from 0 to 100 do {
_pos1 = [ _pos1 = [
(_pos select 0) + (((_unitDir select 0)*0.01)*_i), (_pos select 0) + (((_unitDir select 0)*0.01)*_i),
(_pos select 1) + (((_unitDir select 1)*0.01)*_i), (_pos select 1) + (((_unitDir select 1)*0.01)*_i),
(_pos select 2) + (((_unitDir select 2)*0.01)*_i) (_pos select 2) + (((_unitDir select 2)*0.01)*_i)
]; ];
_pos2 = [ _pos2 = [
(_pos select 0) + (((_unitDir select 0)*0.01)*(_i+1)), (_pos select 0) + (((_unitDir select 0)*0.01)*(_i+1)),
(_pos select 1) + (((_unitDir select 1)*0.01)*(_i+1)), (_pos select 1) + (((_unitDir select 1)*0.01)*(_i+1)),
(_pos select 2) + (((_unitDir select 2)*0.01)*(_i+1)) (_pos select 2) + (((_unitDir select 2)*0.01)*(_i+1))
]; ];
// _blah = [_object, "FIRE"] intersect [_object worldToModel (ASLtoATL _pos1), _object worldToModel (ASLtoATL _pos2)]; // _blah = [_object, "FIRE"] intersect [_object worldToModel (ASLtoATL _pos1), _object worldToModel (ASLtoATL _pos2)];
// diag_log text format["b: %1", _blah]; // diag_log text format["b: %1", _blah];
// _data = [nil, nil, nil, 1, [[ASLtoATL _pos1, 1], [ASLtoATL _pos2, 1]]]; // _data = [nil, nil, nil, 1, [[ASLtoATL _pos1, 1], [ASLtoATL _pos2, 1]]];
// NOU_TRACES set[(count NOU_TRACES), _data]; // NOU_TRACES set[(count NOU_TRACES), _data];
if(!lineIntersects [_pos1, _pos2]) exitWith { if(!lineIntersects [_pos1, _pos2]) exitWith {
// player sideChat format["FOUND!"]; // player sideChat format["FOUND!"];
_spallPos = _pos2; _spallPos = _pos2;
}; };
}; };
if(!isNil "_spallPos") then { if(!isNil "_spallPos") then {
_spallPolar = _velocity call CBA_fnc_vect2polar; _spallPolar = _velocity call CBA_fnc_vect2polar;
if(_explosive > 0) then { if(_explosive > 0) then {
// player sideChat format["EXPLOSIVE!"]; // player sideChat format["EXPLOSIVE!"];
_warn = false; _warn = false;
_c = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_CHARGE"); _c = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_CHARGE");
if(_c == 0) then { _c = 1; _warn = true;}; if(_c == 0) then { _c = 1; _warn = true;};
_m = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_METAL"); _m = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_METAL");
if(_m == 0) then { _m = 2; _warn = true;}; if(_m == 0) then { _m = 2; _warn = true;};
_k = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_K"); _k = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_K");
if(_k == 0) then { _k = 1/2; _warn = true;}; if(_k == 0) then { _k = 1/2; _warn = true;};
_gC = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_C"); _gC = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_C");
if(_gC == 0) then { _gC = 2440; _warn = true;}; if(_gC == 0) then { _gC = 2440; _warn = true;};
if(_warn) then { if(_warn) then {
diag_log text format["Ammo class %1 lacks proper explosive properties definitions for frag!", _roundType]; //TODO: turn this off when we get closer to release diag_log text format["Ammo class %1 lacks proper explosive properties definitions for frag!", _roundType]; //TODO: turn this off when we get closer to release
}; };
_fragPower = (((_m/_c)+_k)^-(1/2))*_gC; _fragPower = (((_m/_c)+_k)^-(1/2))*_gC;
_spallPolar set[0, _fragPower*0.66]; _spallPolar set[0, _fragPower*0.66];
}; };
_fragTypes = [ _fragTypes = [
"ACE_frag_spall_small", "ACE_frag_spall_small", "ACE_frag_spall_small", "ACE_frag_spall_small", "ACE_frag_spall_small", "ACE_frag_spall_small",
"ACE_frag_spall_small","ACE_frag_spall_medium","ACE_frag_spall_medium","ACE_frag_spall_medium", "ACE_frag_spall_small","ACE_frag_spall_medium","ACE_frag_spall_medium","ACE_frag_spall_medium",
"ACE_frag_spall_medium", "ACE_frag_spall_large", "ACE_frag_spall_large", "ACE_frag_spall_huge", "ACE_frag_spall_medium", "ACE_frag_spall_large", "ACE_frag_spall_large", "ACE_frag_spall_huge",
"ACE_frag_spall_huge" "ACE_frag_spall_huge"
]; ];
// diag_log text format["SPALL POWER: %1", _spallPolar select 0]; // diag_log text format["SPALL POWER: %1", _spallPolar select 0];
_spread = 15+(random 25); _spread = 15+(random 25);
_spallCount = 5+(random 10); _spallCount = 5+(random 10);
for "_i" from 1 to _spallCount do { for "_i" from 1 to _spallCount do {
_elev = ((_spallPolar select 2)-_spread)+(random (_spread*2)); _elev = ((_spallPolar select 2)-_spread)+(random (_spread*2));
_dir = ((_spallPolar select 1)-_spread)+(random (_spread*2)); _dir = ((_spallPolar select 1)-_spread)+(random (_spread*2));
if(abs _elev > 90) then { if(abs _elev > 90) then {
_dir = _dir + 180; _dir = _dir + 180;
}; };
_dir = _dir % 360; _dir = _dir % 360;
_vel = (_spallPolar select 0)*0.33*_vm; _vel = (_spallPolar select 0)*0.33*_vm;
_vel = (_vel-(_vel*0.25))+(random (_vel*0.5)); _vel = (_vel-(_vel*0.25))+(random (_vel*0.5));
_spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect; _spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect;
_fragType = round (random ((count _fragTypes)-1)); _fragType = round (random ((count _fragTypes)-1));
_fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
_fragment setPosASL _spallPos; _fragment setPosASL _spallPos;
_fragment setVelocity _spallFragVect; _fragment setVelocity _spallFragVect;
if(GVAR(traceFrags)) then { if(GVAR(traceFrags)) then {
[player, _fragment, [1,0.5,0,1]] call FUNC(addTrack); [player, _fragment, [1,0.5,0,1]] call FUNC(addTrack);
}; };
}; };
_spread = 5+(random 5); _spread = 5+(random 5);
_spallCount = 3+(random 5); _spallCount = 3+(random 5);
for "_i" from 1 to _spallCount do { for "_i" from 1 to _spallCount do {
_elev = ((_spallPolar select 2)-_spread)+(random (_spread*2)); _elev = ((_spallPolar select 2)-_spread)+(random (_spread*2));
_dir = ((_spallPolar select 1)-_spread)+(random (_spread*2)); _dir = ((_spallPolar select 1)-_spread)+(random (_spread*2));
if(abs _elev > 90) then { if(abs _elev > 90) then {
_dir = _dir + 180; _dir = _dir + 180;
}; };
_dir = _dir % 360; _dir = _dir % 360;
_vel = (_spallPolar select 0)*0.55*_vm; _vel = (_spallPolar select 0)*0.55*_vm;
_vel = (_vel-(_vel*0.25))+(random (_vel*0.5)); _vel = (_vel-(_vel*0.25))+(random (_vel*0.5));
_spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect; _spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect;
_fragType = round (random ((count _fragTypes)-1)); _fragType = round (random ((count _fragTypes)-1));
_fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
_fragment setPosASL _spallPos; _fragment setPosASL _spallPos;
_fragment setVelocity _spallFragVect; _fragment setVelocity _spallFragVect;
if(GVAR(traceFrags)) then { if(GVAR(traceFrags)) then {
[player, _fragment, [1,0,0,1]] call FUNC(addTrack); [player, _fragment, [1,0,0,1]] call FUNC(addTrack);
}; };
}; };
}; };
}; };
}; };

View File

@ -1,32 +1,32 @@
#include "script_component.hpp" #include "script_component.hpp"
{ {
_positions = _x select 4; _positions = _x select 4;
_color = _x select 5; _color = _x select 5;
_index = 0; _index = 0;
_max = count _positions; _max = count _positions;
_startSpeed = (_positions select 0) select 1; _startSpeed = (_positions select 0) select 1;
if(_startSpeed <= 0) then { if(_startSpeed <= 0) then {
_startSpeed = 0.01; _startSpeed = 0.01;
}; };
_lastSpd = []; _lastSpd = [];
_lastPos = []; _lastPos = [];
while {_index < _max} do { while {_index < _max} do {
_data1 = _positions select _index; _data1 = _positions select _index;
_data2 = nil; _data2 = nil;
if(_index + ACE_TRACE_DRAW_INC >= _max) then { if(_index + ACE_TRACE_DRAW_INC >= _max) then {
_data2 = _positions select (_max - 1); _data2 = _positions select (_max - 1);
} else { } else {
_data2 = _positions select (_index + ACE_TRACE_DRAW_INC); _data2 = _positions select (_index + ACE_TRACE_DRAW_INC);
}; };
_pos1 = _data1 select 0; _pos1 = _data1 select 0;
_pos2 = _data2 select 0; _pos2 = _data2 select 0;
_index = _index + ACE_TRACE_DRAW_INC; _index = _index + ACE_TRACE_DRAW_INC;
drawLine3D [_pos1, _pos2, _color]; drawLine3D [_pos1, _pos2, _color];
_lastPos = _pos2; _lastPos = _pos2;
_lastSpd = _data1 select 1; _lastSpd = _data1 select 1;
}; };
// drawIcon3D ["", [1,0,0,1], _lastPos, 0, 0, 0, format["%1m/s", _lastSpd], 1, 0.05, "PuristaMedium"]; // drawIcon3D ["", [1,0,0,1], _lastPos, 0, 0, 0, format["%1m/s", _lastSpd], 1, 0.05, "PuristaMedium"];
} forEach GVAR(traces); } forEach GVAR(traces);

View File

@ -1,10 +1,10 @@
#include "script_component.hpp" #include "script_component.hpp"
private ["_params", "_shell"]; private ["_params", "_shell"];
_params = _this select 0; _params = _this select 0;
_shell = _params select 0; _shell = _params select 0;
if(alive _shell) then { if(alive _shell) then {
drop ["\Ca\Data\Cl_basic","","Billboard",1,30,(getPos _shell),[0,0,0],1,1.275,1.0,0.0,[0.5],[[0,1,0,1]],[0],0.0,2.0,"","",""]; drop ["\Ca\Data\Cl_basic","","Billboard",1,30,(getPos _shell),[0,0,0],1,1.275,1.0,0.0,[0.5],[[0,1,0,1]],[0],0.0,2.0,"","",""];
} else { } else {
[_this select 1] call cba_fnc_removePerFrameHandler; [_this select 1] call cba_fnc_removePerFrameHandler;
}; };

View File

@ -1,230 +1,230 @@
//fnc_frago.sqf //fnc_frago.sqf
// #define DEBUG_MODE_FULL // #define DEBUG_MODE_FULL
#include "script_component.hpp" #include "script_component.hpp"
#define FRAG_VEC_VAR 0.004 #define FRAG_VEC_VAR 0.004
#define MAX_FRAG_COUNT 50 #define MAX_FRAG_COUNT 50
if(!isServer) exitWith { }; if(!isServer) exitWith { };
// _startTime = diag_tickTime; // _startTime = diag_tickTime;
private ["_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed", private ["_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed",
"_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom", "_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom",
"_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox", "_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox",
"_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir", "_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir",
"_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount", "_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount",
"_sectorSize", "_sectorOffset", "_randomDir"]; "_sectorSize", "_sectorOffset", "_randomDir"];
_round = _this select 0; _round = _this select 0;
_lastPos = _this select 1; _lastPos = _this select 1;
_lastVel = _this select 2; _lastVel = _this select 2;
_shellType = _this select 3; _shellType = _this select 3;
_gun = nil; _gun = nil;
if((count _this) > 5) then { if((count _this) > 5) then {
_gun = _this select 5; _gun = _this select 5;
}; };
_fragTypes = [ _fragTypes = [
"ACE_frag_tiny", "ACE_frag_tiny", "ACE_frag_tiny", "ACE_frag_tiny", "ACE_frag_tiny", "ACE_frag_tiny",
"ACE_frag_tiny_HD", "ACE_frag_tiny_HD", "ACE_frag_tiny_HD", "ACE_frag_tiny_HD", "ACE_frag_tiny_HD", "ACE_frag_tiny_HD",
"ACE_frag_small","ACE_frag_small","ACE_frag_small","ACE_frag_small", "ACE_frag_small","ACE_frag_small","ACE_frag_small","ACE_frag_small",
"ACE_frag_small_HD","ACE_frag_small_HD","ACE_frag_small_HD","ACE_frag_small_HD", "ACE_frag_small_HD","ACE_frag_small_HD","ACE_frag_small_HD","ACE_frag_small_HD",
"ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD" "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD"
]; ];
_warn = false; _warn = false;
if(isArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES")) then { if(isArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES")) then {
_fragTypes = getArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES"); _fragTypes = getArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES");
} else { } else {
_warn = true; _warn = true;
}; };
_atlPos = ASLtoATL _lastPos; _atlPos = ASLtoATL _lastPos;
_isArmed = true; _isArmed = true;
if(!isNil "_gun") then { if(!isNil "_gun") then {
_fuseDist = getNumber(configFile >> "CfgAmmo" >> _shellType >> "fuseDistance"); _fuseDist = getNumber(configFile >> "CfgAmmo" >> _shellType >> "fuseDistance");
_isArmed = ((getPosASL _gun) distance _lastPos > _fuseDist); _isArmed = ((getPosASL _gun) distance _lastPos > _fuseDist);
}; };
_indirectHitRange = getNumber(configFile >> "CfgAmmo" >> _shellType >> "indirecthitrange"); _indirectHitRange = getNumber(configFile >> "CfgAmmo" >> _shellType >> "indirecthitrange");
_fragRange = 20*_indirectHitRange*4; _fragRange = 20*_indirectHitRange*4;
// _c = 185; // grams of comp-b // _c = 185; // grams of comp-b
// _m = 210; // grams of fragmentating metal // _m = 210; // grams of fragmentating metal
// _k = 3/5; // spherical K factor // _k = 3/5; // spherical K factor
// _gC = 2843; // Gurney constant of comp-b in /ms // _gC = 2843; // Gurney constant of comp-b in /ms
// _c = 429; // grams of tritonal // _c = 429; // grams of tritonal
// _m = 496; // grams of fragmentating metal // _m = 496; // grams of fragmentating metal
// _k = 1/2; // spherical K factor // _k = 1/2; // spherical K factor
// _gC = 2320; // Gurney constant of tritonal in /ms // _gC = 2320; // Gurney constant of tritonal in /ms
_c = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CHARGE"); _c = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CHARGE");
if(_c == 0) then { _c = 1; _warn = true;}; if(_c == 0) then { _c = 1; _warn = true;};
_m = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_METAL"); _m = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_METAL");
if(_m == 0) then { _m = 2; _warn = true;}; if(_m == 0) then { _m = 2; _warn = true;};
_k = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_GURNEY_K"); _k = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_GURNEY_K");
if(_k == 0) then { _k = 1/2; _warn = true;}; if(_k == 0) then { _k = 1/2; _warn = true;};
_gC = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_GURNEY_C"); _gC = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_GURNEY_C");
if(_gC == 0) then { _gC = 2440; _warn = true;}; if(_gC == 0) then { _gC = 2440; _warn = true;};
if(_warn) then { if(_warn) then {
diag_log text format["Ammo class %1 lacks proper explosive properties definitions for frag!", _shellType]; //TODO: turn this off when we get closer to release diag_log text format["Ammo class %1 lacks proper explosive properties definitions for frag!", _shellType]; //TODO: turn this off when we get closer to release
}; };
_fragPower = (((_m/_c)+_k)^-(1/2))*_gC; _fragPower = (((_m/_c)+_k)^-(1/2))*_gC;
_fragPower = _fragPower*0.8; // Gunery equation is for a non-fragmenting metal, imperical value of 80% represents fragmentation _fragPower = _fragPower*0.8; // Gunery equation is for a non-fragmenting metal, imperical value of 80% represents fragmentation
_fragPowerRandom = _fragPower*0.5; _fragPowerRandom = _fragPower*0.5;
if((_atlPos select 2) < 0.5) then { if((_atlPos select 2) < 0.5) then {
_lastPos set[2, (_lastPos select 2)+0.5]; _lastPos set[2, (_lastPos select 2)+0.5];
}; };
// _manObjects = _atlPos nearEntities ["CaManBase", _fragRange]; // _manObjects = _atlPos nearEntities ["CaManBase", _fragRange];
// setAccTime 0.01; // setAccTime 0.01;
//_objects = nearestObjects [_atlPos, ["AllVehicles"], _fragRange]; // Not sure if tracking "ReammoBox" is required, if so revert this change for _objects //_objects = nearestObjects [_atlPos, ["AllVehicles"], _fragRange]; // Not sure if tracking "ReammoBox" is required, if so revert this change for _objects
_objects = _atlPos nearEntities [["Car", "Motorcycle", "Tank", "StaticWeapon", "CAManBase", "Air", "Ship"], _fragRange]; _objects = _atlPos nearEntities [["Car", "Motorcycle", "Tank", "StaticWeapon", "CAManBase", "Air", "Ship"], _fragRange];
// _objects = _manObjects; // _objects = _manObjects;
// Target also people inside vehicles or manning weapons // Target also people inside vehicles or manning weapons
_crew = []; _crew = [];
{ {
{ {
_crew set [count _crew,_x] _crew set [count _crew,_x]
} forEach (crew _x); } forEach (crew _x);
} forEach _objects; } forEach _objects;
_objects = _objects - _crew; _objects = _objects - _crew;
_objects = _objects + _crew; _objects = _objects + _crew;
_fragCount = 0; _fragCount = 0;
_fragArcs = []; _fragArcs = [];
_fragArcs set[360, 0]; _fragArcs set[360, 0];
#ifdef DEBUG_MODE_FULL #ifdef DEBUG_MODE_FULL
player sideChat format["_fragRange: %1", _fragRange]; player sideChat format["_fragRange: %1", _fragRange];
player sideChat format["_objects: %1", _objects]; player sideChat format["_objects: %1", _objects];
#endif #endif
_doRandom = false; _doRandom = false;
if(_isArmed && (count _objects) > 0) then { if(_isArmed && (count _objects) > 0) then {
{ {
//if(random(1) > 0.5) then { //if(random(1) > 0.5) then {
_target = _x; _target = _x;
if(alive _target) then { if(alive _target) then {
_boundingBox = boundingBox _target; _boundingBox = boundingBox _target;
_targetPos = (getPosASL _target); _targetPos = (getPosASL _target);
_distance = _targetPos distance _lastPos; _distance = _targetPos distance _lastPos;
_add = (((_boundingBox select 1) select 2)/2)+((((_distance-(_fragpower/8)) max 0)/_fragPower)*10); _add = (((_boundingBox select 1) select 2)/2)+((((_distance-(_fragpower/8)) max 0)/_fragPower)*10);
_bbX = (abs((_boundingBox select 0) select 0))+((_boundingBox select 1) select 0); _bbX = (abs((_boundingBox select 0) select 0))+((_boundingBox select 1) select 0);
_bbY = (abs((_boundingBox select 0) select 1))+((_boundingBox select 1) select 1); _bbY = (abs((_boundingBox select 0) select 1))+((_boundingBox select 1) select 1);
_bbZ = (abs((_boundingBox select 0) select 2))+((_boundingBox select 1) select 2); _bbZ = (abs((_boundingBox select 0) select 2))+((_boundingBox select 1) select 2);
_cubic = _bbX*_bbY*_bbZ; _cubic = _bbX*_bbY*_bbZ;
if(_cubic > 1) then { if(_cubic > 1) then {
_doRandom = true; _doRandom = true;
_targetVel = (velocity _target); _targetVel = (velocity _target);
_targetPos set[0, (_targetPos select 0)+((_targetVel select 0)*(_distance/_fragPower))]; _targetPos set[0, (_targetPos select 0)+((_targetVel select 0)*(_distance/_fragPower))];
_targetPos set[1, (_targetPos select 1)+((_targetVel select 1)*(_distance/_fragPower))]; _targetPos set[1, (_targetPos select 1)+((_targetVel select 1)*(_distance/_fragPower))];
_targetPos set[2, (_targetPos select 2)+_add]; _targetPos set[2, (_targetPos select 2)+_add];
_baseVec = _lastPos vectorFromTo _targetPos; _baseVec = _lastPos vectorFromTo _targetPos;
_dir = floor(_baseVec call CBA_fnc_vectDir); _dir = floor(_baseVec call CBA_fnc_vectDir);
_currentCount = _fragArcs select _dir; _currentCount = _fragArcs select _dir;
if(isNil "_currentCount") then { if(isNil "_currentCount") then {
_currentCount = 0; _currentCount = 0;
}; };
if(_currentCount < 20) then { if(_currentCount < 20) then {
_count = ceil(random(sqrt(_m/1000))); _count = ceil(random(sqrt(_m/1000)));
_vecVar = FRAG_VEC_VAR; _vecVar = FRAG_VEC_VAR;
if(!(_target isKindOf "Man")) then { if(!(_target isKindOf "Man")) then {
_vecVar = ((sqrt _cubic)/2000)+FRAG_VEC_VAR; _vecVar = ((sqrt _cubic)/2000)+FRAG_VEC_VAR;
if((count (crew _target)) == 0 && _count > 0) then { if((count (crew _target)) == 0 && _count > 0) then {
_count = 0 max (_count/2); _count = 0 max (_count/2);
}; };
}; };
for "_i" from 1 to _count do { for "_i" from 1 to _count do {
_vec = +_baseVec; _vec = +_baseVec;
_vec set[0, (_vec select 0)-(_vecVar/2)+(random _vecVar)]; _vec set[0, (_vec select 0)-(_vecVar/2)+(random _vecVar)];
_vec set[1, (_vec select 1)-(_vecVar/2)+(random _vecVar)]; _vec set[1, (_vec select 1)-(_vecVar/2)+(random _vecVar)];
_vec set[2, (_vec select 2)-(_vecVar/2)+(random _vecVar)]; _vec set[2, (_vec select 2)-(_vecVar/2)+(random _vecVar)];
_fp = (_fragPower-(random (_fragPowerRandom))); _fp = (_fragPower-(random (_fragPowerRandom)));
_vel = [ _vel = [
(_vec select 0)*_fp, (_vec select 0)*_fp,
(_vec select 1)*_fp, (_vec select 1)*_fp,
(_vec select 2)*_fp (_vec select 2)*_fp
]; ];
_fragType = round (random ((count _fragTypes)-1)); _fragType = round (random ((count _fragTypes)-1));
_fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
// diag_log text format["fp: %1 %2", _fp, typeOf _fragObj]; // diag_log text format["fp: %1 %2", _fp, typeOf _fragObj];
_fragObj setPosASL _lastPos; _fragObj setPosASL _lastPos;
_fragObj setVectorDir _vec; _fragObj setVectorDir _vec;
_fragObj setVelocity _vel; _fragObj setVelocity _vel;
#ifdef DEBUG_MODE_FULL #ifdef DEBUG_MODE_FULL
GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1;
GVAR(traceFrags) = true; GVAR(traceFrags) = true;
#endif #endif
if(GVAR(traceFrags)) then { if(GVAR(traceFrags)) then {
[player, _fragObj, [1,0,0,1]] call FUNC(addTrack); [player, _fragObj, [1,0,0,1]] call FUNC(addTrack);
}; };
_fragCount = _fragCount + 1; _fragCount = _fragCount + 1;
_currentCount = _currentCount + 1; _currentCount = _currentCount + 1;
}; };
_fragArcs set[_dir, _currentCount]; _fragArcs set[_dir, _currentCount];
}; };
}; };
}; };
//}; //};
if(_fragCount > MAX_FRAG_COUNT) exitWith {}; if(_fragCount > MAX_FRAG_COUNT) exitWith {};
} forEach _objects; } forEach _objects;
if(_fragCount > MAX_FRAG_COUNT) exitWith {}; if(_fragCount > MAX_FRAG_COUNT) exitWith {};
_randomCount = (ceil((MAX_FRAG_COUNT-_fragCount)*0.1)) max 0; _randomCount = (ceil((MAX_FRAG_COUNT-_fragCount)*0.1)) max 0;
_sectorSize = 360 / (_randomCount max 1); _sectorSize = 360 / (_randomCount max 1);
// _doRandom = false; // _doRandom = false;
if(_doRandom) then { if(_doRandom) then {
for "_i" from 1 to _randomCount do { for "_i" from 1 to _randomCount do {
// Distribute evenly // Distribute evenly
_sectorOffset = 360 * (_i - 1) / (_randomCount max 1); _sectorOffset = 360 * (_i - 1) / (_randomCount max 1);
_randomDir = random(_sectorSize); _randomDir = random(_sectorSize);
_vec = [cos(_sectorOffset + _randomDir), sin(_sectorOffset + _randomDir), sin(30 - (random 45))]; _vec = [cos(_sectorOffset + _randomDir), sin(_sectorOffset + _randomDir), sin(30 - (random 45))];
_fp = (_fragPower-(random (_fragPowerRandom))); _fp = (_fragPower-(random (_fragPowerRandom)));
_vel = [ _vel = [
(_vec select 0)*_fp, (_vec select 0)*_fp,
(_vec select 1)*_fp, (_vec select 1)*_fp,
(_vec select 2)*_fp (_vec select 2)*_fp
]; ];
_fragType = round (random ((count _fragTypes)-1)); _fragType = round (random ((count _fragTypes)-1));
_fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
_fragObj setPosASL _lastPos; _fragObj setPosASL _lastPos;
_fragObj setVectorDir _vec; _fragObj setVectorDir _vec;
_fragObj setVelocity _vel; _fragObj setVelocity _vel;
#ifdef DEBUG_MODE_FULL #ifdef DEBUG_MODE_FULL
GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1;
GVAR(traceFrags) = true; GVAR(traceFrags) = true;
#endif #endif
if(GVAR(traceFrags)) then { if(GVAR(traceFrags)) then {
[player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack); [player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack);
}; };
_fragCount = _fragCount + 1; _fragCount = _fragCount + 1;
}; };
}; };
}; };
// #ifdef DEBUG_MODE_FULL // #ifdef DEBUG_MODE_FULL
// player sideChat format["total frags: %1", GVAR(TOTALFRAGS)]; // player sideChat format["total frags: %1", GVAR(TOTALFRAGS)];
// player sideChat format["tracks: %1", (count GVAR(trackedObjects))]; // player sideChat format["tracks: %1", (count GVAR(trackedObjects))];
// #endif // #endif
// _endTime = diag_tickTime; // _endTime = diag_tickTime;

View File

@ -1,14 +1,14 @@
#include "script_component.hpp" #include "script_component.hpp"
private ["_ret"]; private ["_ret"];
_ret = true; _ret = true;
if(IS_ARRAY((_this select 0))) then { if(IS_ARRAY((_this select 0))) then {
_ret = false; _ret = false;
} else { } else {
if((_this select 0) in GVAR(trackedObjects)) then { if((_this select 0) in GVAR(trackedObjects)) then {
GVAR(trackedObjects) = GVAR(trackedObjects) - [(_this select 0)]; GVAR(trackedObjects) = GVAR(trackedObjects) - [(_this select 0)];
} else { } else {
_ret = false; _ret = false;
}; };
}; };
_ret _ret

View File

@ -1,29 +1,29 @@
#include "script_component.hpp" #include "script_component.hpp"
private ["_initialData", "_currentCount", "_hpData", "_round", "_hpRound"]; private ["_initialData", "_currentCount", "_hpData", "_round", "_hpRound"];
//player sideChat format["f: %1 c: %2", (_this select 0), (count GVAR(spallHPData))]; //player sideChat format["f: %1 c: %2", (_this select 0), (count GVAR(spallHPData))];
if((_this select 0) <= (count GVAR(spallHPData))) then { if((_this select 0) <= (count GVAR(spallHPData))) then {
_initialData = GVAR(spallHPData) select (_this select 0); _initialData = GVAR(spallHPData) select (_this select 0);
if(!isNil "_initialData") then { if(!isNil "_initialData") then {
_hpRound = ((_this select 1) select 0) select 2; _hpRound = ((_this select 1) select 0) select 2;
_round = _initialData select 3; _round = _initialData select 3;
_hpDirect = ((_this select 1) select 0) select 10; _hpDirect = ((_this select 1) select 0) select 10;
if(_hpDirect && {_round == _hpRound}) then { if(_hpDirect && {_round == _hpRound}) then {
{ {
_hpData = _x; _hpData = _x;
_round = _initialData select 3; _round = _initialData select 3;
// diag_log text format["HPDUMP-------------------------------------"]; // diag_log text format["HPDUMP-------------------------------------"];
// { // {
// _hp = _x; // _hp = _x;
// diag_log text format["%1 --", _forEachIndex]; // diag_log text format["%1 --", _forEachIndex];
// { // {
// diag_log text format["%1: %2", _forEachIndex, _x]; // diag_log text format["%1: %2", _forEachIndex, _x];
// } forEach _hp; // } forEach _hp;
// } forEach (_this select 1); // } forEach (_this select 1);
[DFUNC(doSpall), 0, [_this, _forEachIndex]] call cba_fnc_addPerFrameHandler; [DFUNC(doSpall), 0, [_this, _forEachIndex]] call cba_fnc_addPerFrameHandler;
// player sideChat "WEEE"; // player sideChat "WEEE";
} forEach (_this select 1); } forEach (_this select 1);
}; };
}; };
}; };

View File

@ -1,40 +1,40 @@
//fnc_spallTrack.sqf //fnc_spallTrack.sqf
#include "script_component.hpp" #include "script_component.hpp"
private ["_params", "_round", "_multiplier", "_delta", "_curPos", "_velocity", "_velocityStep", "_forwardPos", "_intersectsWith", "_index", "_i", "_test", "_hpId", "_data"]; private ["_params", "_round", "_multiplier", "_delta", "_curPos", "_velocity", "_velocityStep", "_forwardPos", "_intersectsWith", "_index", "_i", "_test", "_hpId", "_data"];
// setAccTime 0; // setAccTime 0;
_round = _this select 0; _round = _this select 0;
_multiplier = _this select 1; _multiplier = _this select 1;
_foundObjects = _this select 2; _foundObjects = _this select 2;
_foundObjectHPIds = _this select 3; _foundObjectHPIds = _this select 3;
_delta = (1/diag_fps)*_multiplier; _delta = (1/diag_fps)*_multiplier;
_curPos = getPosASL _round; _curPos = getPosASL _round;
_velocity = velocity _round; _velocity = velocity _round;
_velocityStep = [ _velocityStep = [
(_velocity select 0)*_delta, (_velocity select 0)*_delta,
(_velocity select 1)*_delta, (_velocity select 1)*_delta,
(_velocity select 2)*_delta (_velocity select 2)*_delta
]; ];
_forwardPos = [ _forwardPos = [
(_curPos select 0) + (_velocityStep select 0), (_curPos select 0) + (_velocityStep select 0),
(_curPos select 1) + (_velocityStep select 1), (_curPos select 1) + (_velocityStep select 1),
(_curPos select 2) + (_velocityStep select 2) (_curPos select 2) + (_velocityStep select 2)
]; ];
_intersectsWith = lineIntersectsWith [_curPos, _forwardPos]; _intersectsWith = lineIntersectsWith [_curPos, _forwardPos];
if(count _intersectsWith > 0) then { if(count _intersectsWith > 0) then {
// player sideChat format["inter: %1", _intersectsWith]; // player sideChat format["inter: %1", _intersectsWith];
{ {
if(!(_x in _foundObjects)) then { if(!(_x in _foundObjects)) then {
// diag_log text format["Adding HP: %1", _x]; // diag_log text format["Adding HP: %1", _x];
_index = (count GVAR(spallHPData)); _index = (count GVAR(spallHPData));
_hpId = _x addEventHandler ["hitPart", format["[%1, _this] call " + QUOTE(FUNC(spallHP)), _index]]; _hpId = _x addEventHandler ["hitPart", format["[%1, _this] call " + QUOTE(FUNC(spallHP)), _index]];
_foundObjects set[(count _foundObjects), _x]; _foundObjects set[(count _foundObjects), _x];
_foundObjectHPIds set[(count _foundObjectHPIds), _hpId]; _foundObjectHPIds set[(count _foundObjectHPIds), _hpId];
_data = [_hpId, _x, typeOf _round, _round, _curPos, _velocity, 0, _foundObjects, _foundObjectHPIds]; _data = [_hpId, _x, typeOf _round, _round, _curPos, _velocity, 0, _foundObjects, _foundObjectHPIds];
GVAR(spallHPData) set[_index, _data]; GVAR(spallHPData) set[_index, _data];
}; };
} forEach _intersectsWith; } forEach _intersectsWith;
}; };

View File

@ -1,5 +1,5 @@
#include "script_component.hpp" #include "script_component.hpp"
if(!GVAR(tracesStarted)) then { if(!GVAR(tracesStarted)) then {
GVAR(tracesStarted) = true; GVAR(tracesStarted) = true;
GVAR(traceID) = [FUNC(drawTraces), 0, []] call cba_fnc_addPerFrameHandler; GVAR(traceID) = [FUNC(drawTraces), 0, []] call cba_fnc_addPerFrameHandler;
}; };

View File

@ -1,5 +1,5 @@
#include "script_component.hpp" #include "script_component.hpp"
if(GVAR(tracesStarted)) then { if(GVAR(tracesStarted)) then {
GVAR(tracesStarted) = false; GVAR(tracesStarted) = false;
[GVAR(traceID)] call cba_fnc_removePerFrameHandler; [GVAR(traceID)] call cba_fnc_removePerFrameHandler;
}; };

View File

@ -1,52 +1,52 @@
//fnc_trackFragRound.sqf //fnc_trackFragRound.sqf
#include "script_component.hpp" #include "script_component.hpp"
private ["_params", "_round", "_lastPos", "_lastVel", "_type", "_time", "_doSpall", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"]; private ["_params", "_round", "_lastPos", "_lastVel", "_type", "_time", "_doSpall", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"];
_params = _this select 0; _params = _this select 0;
_round = _params select 0; _round = _params select 0;
_lastPos = _params select 1; _lastPos = _params select 1;
_lastVel = _params select 2; _lastVel = _params select 2;
_type = _params select 3; _type = _params select 3;
_time = _params select 4; _time = _params select 4;
_doSpall = _params select 6; _doSpall = _params select 6;
_spallTrack = _params select 7; _spallTrack = _params select 7;
_foundObjectHPIds = _params select 8; _foundObjectHPIds = _params select 8;
if (!alive _round) then { if (!alive _round) then {
[_this select 1] call cba_fnc_removePerFrameHandler; [_this select 1] call cba_fnc_removePerFrameHandler;
if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then { if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then {
GVAR(trackedObjects) = GVAR(trackedObjects) - [_round]; GVAR(trackedObjects) = GVAR(trackedObjects) - [_round];
_skip = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_SKIP"); _skip = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_SKIP");
if(_skip == 0) then { if(_skip == 0) then {
_explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive"); _explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive");
_indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange"); _indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange");
_force = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_FORCE"); _force = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_FORCE");
_fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt(_indirectRange)); _fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt(_indirectRange));
if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then { if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then {
[QGVAR(frag_eh), _params] call ace_common_fnc_serverEvent; [QGVAR(frag_eh), _params] call ace_common_fnc_serverEvent;
GVAR(trackedObjects) = GVAR(trackedObjects) - [_round]; GVAR(trackedObjects) = GVAR(trackedObjects) - [_round];
}; };
}; };
}; };
if(_doSpall) then { if(_doSpall) then {
GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) - 1; GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) - 1;
// diag_log text format["F: %1", _foundObjectHPIds]; // diag_log text format["F: %1", _foundObjectHPIds];
{ {
if(!isNil "_x") then { if(!isNil "_x") then {
_x removeEventHandler ["hitPart", _foundObjectHPIds select _forEachIndex]; _x removeEventHandler ["hitPart", _foundObjectHPIds select _forEachIndex];
}; };
} forEach _spallTrack; } forEach _spallTrack;
}; };
} else { } else {
if(!(_round in GVAR(trackedObjects)) || {_round in GVAR(blackList)}) then { if(!(_round in GVAR(trackedObjects)) || {_round in GVAR(blackList)}) then {
[_this select 1] call cba_fnc_removePerFrameHandler; [_this select 1] call cba_fnc_removePerFrameHandler;
if(_round in GVAR(blackList)) then { if(_round in GVAR(blackList)) then {
GVAR(blackList) = GVAR(blackList) - [_round]; GVAR(blackList) = GVAR(blackList) - [_round];
}; };
}; };
_params set[1, (getPosASL _round)]; _params set[1, (getPosASL _round)];
_params set[2, (velocity _round)]; _params set[2, (velocity _round)];
if(_doSpall) then { if(_doSpall) then {
[_round, 1, _spallTrack, _foundObjectHPIds] call FUNC(spallTrack); [_round, 1, _spallTrack, _foundObjectHPIds] call FUNC(spallTrack);
}; };
}; };

View File

@ -1,14 +1,14 @@
#include "script_component.hpp" #include "script_component.hpp"
_params = _this select 0; _params = _this select 0;
_tracerObj = _params select 0; _tracerObj = _params select 0;
_index = _params select 1; _index = _params select 1;
if(alive _tracerObj && (count GVAR(traces)) > 0) then { if(alive _tracerObj && (count GVAR(traces)) > 0) then {
_data = GVAR(traces) select _index; _data = GVAR(traces) select _index;
_positions = _data select 4; _positions = _data select 4;
_objVel = velocity _tracerObj; _objVel = velocity _tracerObj;
_objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2); _objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2);
_positions set[(count _positions), [(getPos _tracerObj), _objTVel]]; _positions set[(count _positions), [(getPos _tracerObj), _objTVel]];
} else { } else {
[(_this select 1)] call cba_fnc_removePerFrameHandler; [(_this select 1)] call cba_fnc_removePerFrameHandler;
}; };

View File

@ -1,15 +1,15 @@
#include "script_component.hpp" #include "script_component.hpp"
private["_p1","_p2","_return"]; private["_p1","_p2","_return"];
_p1 = _this select 0; _p1 = _this select 0;
_p2 = _this select 1; _p2 = _this select 1;
if ((count _p1) != (count _p2)) then {textLogFormat ["BIS_FNC Error: vectors not of same size"]}; if ((count _p1) != (count _p2)) then {textLogFormat ["BIS_FNC Error: vectors not of same size"]};
_return = []; _return = [];
{ {
_return set[_forEachIndex, (_p2 select _forEachIndex) - _x]; _return set[_forEachIndex, (_p2 select _forEachIndex) - _x];
} forEach _p1; } forEach _p1;
_return _return

View File

@ -1,16 +1,16 @@
#define COMPONENT frag #define COMPONENT frag
#include "\z\ace\Addons\main\script_mod.hpp" #include "\z\ace\Addons\main\script_mod.hpp"
//#define DEBUG_ENABLED_FRAG //#define DEBUG_ENABLED_FRAG
#ifdef DEBUG_ENABLED_FRAG #ifdef DEBUG_ENABLED_FRAG
#define DEBUG_MODE_FULL #define DEBUG_MODE_FULL
#endif #endif
#ifdef DEBUG_SETTINGS_FRAG #ifdef DEBUG_SETTINGS_FRAG
#define DEBUG_SETTINGS DEBUG_SETTINGS_FRAG #define DEBUG_SETTINGS DEBUG_SETTINGS_FRAG
#endif #endif
#include "\z\ace\Addons\main\script_macros.hpp" #include "\z\ace\Addons\main\script_macros.hpp"
#define ACE_TRACE_DRAW_INC 1 #define ACE_TRACE_DRAW_INC 1

View File

@ -1,15 +1,15 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2015-04-07 --> <!-- Edited with tabler - 2015-04-07 -->
<Project name="Arma2"> <Project name="Arma2">
<Package name="ACE2"> <Package name="ACE2">
<Container name="frag"> <Container name="frag">
<Key ID="STR_DN_ACE_FRAG"> <Key ID="STR_DN_ACE_FRAG">
<English>Disable Fragmentation</English> <English>Disable Fragmentation</English>
<Czech>Zakázat fragmentaci granátů</Czech> <Czech>Zakázat fragmentaci granátů</Czech>
<German>Weapons: Keine Schrapnelle</German> <German>Weapons: Keine Schrapnelle</German>
<Polish>Wyłącz głowice fragmentacyjne</Polish> <Polish>Wyłącz głowice fragmentacyjne</Polish>
<Russian>Выключить разлёт осколков</Russian> <Russian>Выключить разлёт осколков</Russian>
</Key> </Key>
</Container> </Container>
</Package> </Package>
</Project> </Project>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2014-12-19 --> <!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="Goggles"> <Package name="Goggles">
<Key ID="STR_ACE_Goggles_ShowInThirdPerson"> <Key ID="STR_ACE_Goggles_ShowInThirdPerson">
@ -8,7 +8,7 @@
<Spanish>Mostrar efectos de las gafas en tercera persona</Spanish> <Spanish>Mostrar efectos de las gafas en tercera persona</Spanish>
<Czech>Zobrazit účinky brýlí v třetí osobě</Czech> <Czech>Zobrazit účinky brýlí v třetí osobě</Czech>
<French>Effets de lunettes à la 3ème personne</French> <French>Effets de lunettes à la 3ème personne</French>
<Russian>Отображать эффект очков в третьем лице</Russian> <Russian>Отображать эффект очков от третьего лица</Russian>
<Hungarian>Szemüveg effekt mutatása külső nézetből</Hungarian> <Hungarian>Szemüveg effekt mutatása külső nézetből</Hungarian>
<Polish>Włącz efekty gogli w trzeciej osobie</Polish> <Polish>Włącz efekty gogli w trzeciej osobie</Polish>
<Portuguese>Mostrar efeitos de óculos em Terceira Pessoa</Portuguese> <Portuguese>Mostrar efeitos de óculos em Terceira Pessoa</Portuguese>
@ -27,4 +27,4 @@
<Italian>Pulisci gli occhiali</Italian> <Italian>Pulisci gli occhiali</Italian>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2014-09-11 --> <!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="Grenades"> <Package name="Grenades">
<Key ID="STR_ACE_Grenades_SwitchGrenadeMode"> <Key ID="STR_ACE_Grenades_SwitchGrenadeMode">
@ -93,7 +93,7 @@
<French>Les grenades incapacitantes servent à désorienter ou distraire une menace pendant quelques secondes.</French> <French>Les grenades incapacitantes servent à désorienter ou distraire une menace pendant quelques secondes.</French>
<Polish>Granat ogłusza, nie zabijając przeciwnika. Detonacja daje efekt oślepiającego błysku i głośnego huku.</Polish> <Polish>Granat ogłusza, nie zabijając przeciwnika. Detonacja daje efekt oślepiającego błysku i głośnego huku.</Polish>
<Czech>Omračující granát je taktická nesmrtící zbraň používaná při záchraně rukojmí a zvládání davu.</Czech> <Czech>Omračující granát je taktická nesmrtící zbraň používaná při záchraně rukojmí a zvládání davu.</Czech>
<Russian>Граната XM84 (M84) - не летального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий.</Russian> <Russian>XM84 (M84) - граната нелетального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий.</Russian>
<Hungarian>Eldobás után felrobban és éles hang, valamint fényhatással zavarja össze a környezetében tartózkodókat.</Hungarian> <Hungarian>Eldobás után felrobban és éles hang, valamint fényhatással zavarja össze a környezetében tartózkodókat.</Hungarian>
<Italian>Anche conosciuta come flashbang. Causa accecamento immediato, sensazioni di sposatezza, mancanza d'equilibrio e disturbi al timpano.</Italian> <Italian>Anche conosciuta come flashbang. Causa accecamento immediato, sensazioni di sposatezza, mancanza d'equilibrio e disturbi al timpano.</Italian>
<Portuguese>Um tipo de granada não-letal destinado a confundir, desorientar e distrair uma potencial ameaça.</Portuguese> <Portuguese>Um tipo de granada não-letal destinado a confundir, desorientar e distrair uma potencial ameaça.</Portuguese>
@ -243,4 +243,4 @@
<Spanish>M127A1 (Amarilla)</Spanish> <Spanish>M127A1 (Amarilla)</Spanish>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2015-04-07 --> <!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="Hearing"> <Package name="Hearing">
<Key ID="STR_ACE_Hearing_EarPlugs_Name"> <Key ID="STR_ACE_Hearing_EarPlugs_Name">
@ -102,6 +102,7 @@
<English>Disable ear ringing</English> <English>Disable ear ringing</English>
<Spanish>Desactivar zumbido de oídos</Spanish> <Spanish>Desactivar zumbido de oídos</Spanish>
<German>Knalltrauma deaktivieren</German> <German>Knalltrauma deaktivieren</German>
<Russian>Отключить эффект баротравмы</Russian>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,52 +1,52 @@
//XEH_clientInit.sqf //XEH_clientInit.sqf
#include "script_component.hpp" #include "script_component.hpp"
if (!hasInterface) exitWith {}; if (!hasInterface) exitWith {};
// Install the render EH on the main display // Install the render EH on the main display
addMissionEventHandler ["Draw3D", DFUNC(render)]; addMissionEventHandler ["Draw3D", DFUNC(render)];
// This spawn is probably worth keeping, as pfh don't work natively on the briefing screen and IDK how reliable the hack we implemented for them is. // This spawn is probably worth keeping, as pfh don't work natively on the briefing screen and IDK how reliable the hack we implemented for them is.
// The thread dies as soon as the mission start, so it's not really compiting for scheduler space. // The thread dies as soon as the mission start, so it's not really compiting for scheduler space.
[] spawn { [] spawn {
// Wait until the map display is detected // Wait until the map display is detected
waitUntil {(!isNull findDisplay 12)}; waitUntil {(!isNull findDisplay 12)};
// Install the render EH on the map screen // Install the render EH on the map screen
((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", DFUNC(render)]; ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", DFUNC(render)];
}; };
["ACE3", QGVAR(InteractKey), (localize "STR_ACE_Interact_Menu_InteractKey"), ["ACE3", QGVAR(InteractKey), (localize "STR_ACE_Interact_Menu_InteractKey"),
{ {
// Conditions: canInteract // Conditions: canInteract
if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false}; if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false};
// Statement // Statement
[0] call FUNC(keyDown) [0] call FUNC(keyDown)
}, },
{[0] call FUNC(keyUp)}, {[0] call FUNC(keyUp)},
[219, [false, false, false]], false] call cba_fnc_addKeybind; //Left Windows Key [219, [false, false, false]], false] call cba_fnc_addKeybind; //Left Windows Key
["ACE3", QGVAR(SelfInteractKey), (localize "STR_ACE_Interact_Menu_SelfInteractKey"), ["ACE3", QGVAR(SelfInteractKey), (localize "STR_ACE_Interact_Menu_SelfInteractKey"),
{ {
// Conditions: canInteract // Conditions: canInteract
if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false}; if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false};
// Statement // Statement
[1] call FUNC(keyDown) [1] call FUNC(keyDown)
}, },
{[1] call FUNC(keyUp)}, {[1] call FUNC(keyUp)},
[219, [false, true, false]], false] call cba_fnc_addKeybind; //Left Windows Key + Ctrl/Strg [219, [false, true, false]], false] call cba_fnc_addKeybind; //Left Windows Key + Ctrl/Strg
// Listens for the falling unconscious event, just in case the menu needs to be closed // Listens for the falling unconscious event, just in case the menu needs to be closed
["medical_onUnconscious", { ["medical_onUnconscious", {
// If no menu is open just quit // If no menu is open just quit
if (GVAR(openedMenuType) < 0) exitWith {}; if (GVAR(openedMenuType) < 0) exitWith {};
EXPLODE_2_PVT(_this,_unit,_isUnconscious); EXPLODE_2_PVT(_this,_unit,_isUnconscious);
if (_unit != ACE_player || !_isUnconscious) exitWith {}; if (_unit != ACE_player || !_isUnconscious) exitWith {};
GVAR(actionSelected) = false; GVAR(actionSelected) = false;
[] call FUNC(keyUp); [] call FUNC(keyUp);
}] call EFUNC(common,addEventhandler); }] call EFUNC(common,addEventhandler);

View File

@ -1,26 +1,31 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2015-04-07 --> <!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="Interact_Menu"> <Package name="Interact_Menu">
<Key ID="STR_ACE_Interact_Menu_AlwaysUseCursorSelfInteraction"> <Key ID="STR_ACE_Interact_Menu_AlwaysUseCursorSelfInteraction">
<English>Always display cursor for self interaction</English> <English>Always display cursor for self interaction</English>
<German>Immer den Cursor für Selbst-Interaktionen anzeigen.</German> <German>Immer den Cursor für Selbst-Interaktionen anzeigen.</German>
<Russian>Всегда показывать курсор для взаимодействия с собой</Russian>
</Key> </Key>
<Key ID="STR_ACE_Interact_Menu_InteractKey"> <Key ID="STR_ACE_Interact_Menu_InteractKey">
<English>Interact Key</English> <English>Interact Key</English>
<German>Interaktionstaste</German> <German>Interaktionstaste</German>
<Russian>Клавиша взаимодействия</Russian>
</Key> </Key>
<Key ID="STR_ACE_Interact_Menu_SelfInteractKey"> <Key ID="STR_ACE_Interact_Menu_SelfInteractKey">
<English>Self Interaction Key</English> <English>Self Interaction Key</English>
<German>Selbst-Interaktionstaste</German> <German>Selbst-Interaktionstaste</German>
<Russian>Клавиша взаимодействия (с собой)</Russian>
</Key> </Key>
<Key ID="STR_ACE_Interact_Menu_SelfActionsRoot"> <Key ID="STR_ACE_Interact_Menu_SelfActionsRoot">
<English>Self Actions</English> <English>Self Actions</English>
<German>Selbst-Interaktion</German> <German>Selbst-Interaktion</German>
<Russian>Действия с собой</Russian>
</Key> </Key>
<Key ID="STR_ACE_Interact_Menu_VehicleActionsRoot"> <Key ID="STR_ACE_Interact_Menu_VehicleActionsRoot">
<English>Vehicle Actions</English> <English>Vehicle Actions</English>
<German>Fahrzeug-Interaktion</German> <German>Fahrzeug-Interaktion</German>
<Russian>Действия на транспорте</Russian>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2015-04-07 --> <!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="Interaction"> <Package name="Interaction">
<Key ID="STR_ACE_Interaction_MainAction"> <Key ID="STR_ACE_Interaction_MainAction">
@ -616,7 +616,7 @@
<Polish>Modyfikator</Polish> <Polish>Modyfikator</Polish>
<French>Modifier la touche</French> <French>Modifier la touche</French>
<Spanish>Tecla modificadora</Spanish> <Spanish>Tecla modificadora</Spanish>
<Russian>клавиша-модификатор</Russian> <Russian>Клавиша-модификатор</Russian>
<Portuguese>Tecla Modificadora</Portuguese> <Portuguese>Tecla Modificadora</Portuguese>
<Italian>Modifica Tasto</Italian> <Italian>Modifica Tasto</Italian>
<Hungarian>Módosító billentyű</Hungarian> <Hungarian>Módosító billentyű</Hungarian>
@ -664,6 +664,7 @@
<Key ID="STR_ACE_Interaction_Passengers"> <Key ID="STR_ACE_Interaction_Passengers">
<English>Passengers</English> <English>Passengers</English>
<German>Passagiere</German> <German>Passagiere</German>
<Russian>Пассажиры</Russian>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,14 +1,16 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2015-04-07 --> <!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="Inventory"> <Package name="Inventory">
<Key ID="STR_ACE_Inventory_SettingName"> <Key ID="STR_ACE_Inventory_SettingName">
<English>Make Inventory Display Bigger</English> <English>Make Inventory Display Bigger</English>
<German>Die Anzeige des Inventar vergrößern.</German> <German>Die Anzeige des Inventar vergrößern.</German>
<Russian>Сделать окно инвентаря больше</Russian>
</Key> </Key>
<Key ID="STR_ACE_Inventory_SettingDescription"> <Key ID="STR_ACE_Inventory_SettingDescription">
<English>Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed.</English> <English>Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed.</English>
<German>Normalerweise wird die Größe des Inventars mit der Größe der UI skaliert. Diese Einstellung allerdings vergrößert das Inventar bei gleichbleibender Schriftgröße, so dass mehr Einträge angzeigt werden können.</German> <German>Normalerweise wird die Größe des Inventars mit der Größe der UI skaliert. Diese Einstellung allerdings vergrößert das Inventar bei gleichbleibender Schriftgröße, so dass mehr Einträge angzeigt werden können.</German>
<Russian>Обычно, окно инвентаря зависит от размеров пользовательского интерфейса. Эта настройка позволяет увеличить размер окна инвентаря в пользовательском интерфейсе, не увеличивая размера шрифтов, так что отображется большее количество строк.</Russian>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2014-12-11 --> <!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="Wind"> <Package name="Wind">
<Key ID="STR_ACE_Wind_ApproximateTemp"> <Key ID="STR_ACE_Wind_ApproximateTemp">
@ -34,7 +34,7 @@
<Italian>Monitoraggio Balistico Attivo</Italian> <Italian>Monitoraggio Balistico Attivo</Italian>
<Hungarian>Applied Ballistics Meter</Hungarian> <Hungarian>Applied Ballistics Meter</Hungarian>
<Portuguese>Medidor Balístico Ativo</Portuguese> <Portuguese>Medidor Balístico Ativo</Portuguese>
<Russian>метеостанция</Russian> <Russian>Метеостанция</Russian>
</Key> </Key>
<Key ID="STR_ACE_Wind_OpenKestrel"> <Key ID="STR_ACE_Wind_OpenKestrel">
<English>Open Kestrel</English> <English>Open Kestrel</English>

View File

@ -1,11 +1,11 @@
class Extended_PreInit_EventHandlers { class Extended_PreInit_EventHandlers {
class ADDON { class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_pre_init)); init = QUOTE(call COMPILE_FILE(XEH_pre_init));
}; };
}; };
class Extended_PostInit_EventHandlers { class Extended_PostInit_EventHandlers {
class ADDON { class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_post_init)); init = QUOTE(call COMPILE_FILE(XEH_post_init));
}; };
}; };

View File

@ -1,9 +1,9 @@
class CfgVehicles { class CfgVehicles {
class All; class All;
class LaserTarget: All { class LaserTarget: All {
class EventHandlers { class EventHandlers {
init = QUOTE(_this call FUNC(laser_init)); init = QUOTE(_this call FUNC(laser_init));
}; };
}; };
}; };

View File

@ -1,3 +1,3 @@
#include "script_component.hpp" #include "script_component.hpp"
NO_DEDICATED; NO_DEDICATED;

View File

@ -1,26 +1,26 @@
#include "script_component.hpp" #include "script_component.hpp"
PREP(rotateVectLineGetMap); PREP(rotateVectLineGetMap);
PREP(rotateVectLine); PREP(rotateVectLine);
PREP(shootRay); PREP(shootRay);
PREP(shootCone); PREP(shootCone);
PREP(checkLos); PREP(checkLos);
PREP(findLaserDesignator); PREP(findLaserDesignator);
PREP(findStrongestRay); PREP(findStrongestRay);
PREP(translateToModelSpace); PREP(translateToModelSpace);
PREP(translateToWeaponSpace); PREP(translateToWeaponSpace);
PREP(laser_init); PREP(laser_init);
GVAR(laser) = nil; // a single hud draws 1 laser at a time GVAR(laser) = nil; // a single hud draws 1 laser at a time
PREP(laserTargetPFH); PREP(laserTargetPFH);
ACE_LASERS = []; ACE_LASERS = [];
ACE_DEFAULT_LASER_CODE = 1000; ACE_DEFAULT_LASER_CODE = 1000;
ACE_DEFAULT_FIRE_SELECTION = [FIREMODE_DIRECT_LOAL, ACE_DEFAULT_LASER_CODE]; ACE_DEFAULT_FIRE_SELECTION = [FIREMODE_DIRECT_LOAL, ACE_DEFAULT_LASER_CODE];
FUNC(getPosASL) = {visiblePositionASL (_this select 0)}; FUNC(getPosASL) = {visiblePositionASL (_this select 0)};

View File

@ -1,14 +1,14 @@
#include "script_component.hpp" #include "script_component.hpp"
class CfgPatches { class CfgPatches {
class ADDON { class ADDON {
units[] = {}; units[] = {};
weapons[] = {}; weapons[] = {};
requiredVersion = REQUIRED_VERSION; requiredVersion = REQUIRED_VERSION;
requiredAddons[] = { "ace_common" }; requiredAddons[] = { "ace_common" };
VERSION_CONFIG; VERSION_CONFIG;
}; };
}; };
#include "CfgEventhandlers.hpp" #include "CfgEventhandlers.hpp"
#include "CfgVehicles.hpp" #include "CfgVehicles.hpp"

View File

@ -1,31 +1,31 @@
#include "script_component.hpp" #include "script_component.hpp"
private ["_pos1", "_pos2", "_spacing", "_vectorTo", "_x", "_y", "_z", "_distance", "_count", "_return", "_alt", "_pos", "_designator", "_seeker"]; private ["_pos1", "_pos2", "_spacing", "_vectorTo", "_x", "_y", "_z", "_distance", "_count", "_return", "_alt", "_pos", "_designator", "_seeker"];
_pos1 = _this select 0; _pos1 = _this select 0;
_pos2 = _this select 1; _pos2 = _this select 1;
_designator = _this select 2; _designator = _this select 2;
_seeker = _this select 3; _seeker = _this select 3;
_spacing = 100; _spacing = 100;
if((count _this) > 4) then { if((count _this) > 4) then {
_spacing = _this select 4; _spacing = _this select 4;
}; };
_return = true; _return = true;
_vectorTo = [_pos2, _pos1] call BIS_fnc_vectorFromXToY; _vectorTo = [_pos2, _pos1] call BIS_fnc_vectorFromXToY;
_x = (_vectorTo select 0)*0.25; _x = (_vectorTo select 0)*0.25;
_y = (_vectorTo select 1)*0.25; _y = (_vectorTo select 1)*0.25;
_z = (_vectorTo select 2)*0.25; _z = (_vectorTo select 2)*0.25;
_pos2 = [(_pos2 select 0) + _x, (_pos2 select 1) + _y, (_pos2 select 2) + _z]; _pos2 = [(_pos2 select 0) + _x, (_pos2 select 1) + _y, (_pos2 select 2) + _z];
// player sideChat format["new los check"]; // player sideChat format["new los check"];
if(terrainIntersect [_pos2, _pos1]) then { if(terrainIntersect [_pos2, _pos1]) then {
_return = false; _return = false;
} else { } else {
if(lineIntersects [_pos2, _pos1]) then { // should take as arguments and add to this command objects to exclude - target and observer if(lineIntersects [_pos2, _pos1]) then { // should take as arguments and add to this command objects to exclude - target and observer
// player sideChat format["with: %1", lineIntersectsWith [_pos1, _pos2]]; // player sideChat format["with: %1", lineIntersectsWith [_pos1, _pos2]];
_return = false; _return = false;
}; };
}; };
_return; _return;

View File

@ -1,70 +1,70 @@
#include "script_component.hpp" #include "script_component.hpp"
private ["_missile", "_headingPitch", "_found", "_vectorTo", "_polarTo", "_dir", "_vertOk", "_horzOk", "_fov", private ["_missile", "_headingPitch", "_found", "_vectorTo", "_polarTo", "_dir", "_vertOk", "_horzOk", "_fov",
"_closestDistance", "_pos1", "_pos2", "_disCheck", "_currentTarget", "_potentialTargets", "_offset", "_vector"]; "_closestDistance", "_pos1", "_pos2", "_disCheck", "_currentTarget", "_potentialTargets", "_offset", "_vector"];
_missile = _this select 0; _missile = _this select 0;
_laserCode = _this select 1; _laserCode = _this select 1;
_fov = if (count _this > 2) then {_this select 2} else {75}; _fov = if (count _this > 2) then {_this select 2} else {75};
_vector = if (count _this > 3) then {_this select 3} else {vectorDir _missile}; _vector = if (count _this > 3) then {_this select 3} else {vectorDir _missile};
_offset = if (count _this > 4) then {_this select 4} else {[0,0,0]}; _offset = if (count _this > 4) then {_this select 4} else {[0,0,0]};
_headingPitch = _vector call CBA_fnc_vect2polar; _headingPitch = _vector call CBA_fnc_vect2polar;
_currentTarget = nil; _currentTarget = nil;
_found = false; _found = false;
LOG("Searching lasers"); LOG("Searching lasers");
if(!(isNil "ACE_LASERS")) then { if(!(isNil "ACE_LASERS")) then {
_potentialTargets = []; _potentialTargets = [];
TRACE_1("", ACE_LASERS); TRACE_1("", ACE_LASERS);
{ {
if(!(isNull _x)) then { if(!(isNull _x)) then {
_sensorPos = ATLtoASL(_missile modelToWorldVisual _offset); _sensorPos = ATLtoASL(_missile modelToWorldVisual _offset);
_vectorTo = [_sensorPos, ([_x] call FUNC(getPosASL))] call BIS_fnc_vectorFromXToY; _vectorTo = [_sensorPos, ([_x] call FUNC(getPosASL))] call BIS_fnc_vectorFromXToY;
_polarTo = _vectorTo call CBA_fnc_vect2polar; _polarTo = _vectorTo call CBA_fnc_vect2polar;
_dir = _polarTo select 1; _dir = _polarTo select 1;
_dir = _dir - (_headingPitch select 1); _dir = _dir - (_headingPitch select 1);
TRACE_4("Calc", _sensorPos, _vectorTo, _polarTo, _dir); TRACE_4("Calc", _sensorPos, _vectorTo, _polarTo, _dir);
if (_dir < 0) then {_dir = _dir + 360}; if (_dir < 0) then {_dir = _dir + 360};
if (_dir > 360) then {_dir = _dir - 360}; if (_dir > 360) then {_dir = _dir - 360};
_vertOk = false; _vertOk = false;
_horzOk = false; _horzOk = false;
if(_dir < _fov || {_dir > (360-_fov)}) then { if(_dir < _fov || {_dir > (360-_fov)}) then {
_horzOk = true; _horzOk = true;
}; };
if(abs((abs(_polarTo select 2))-(abs(_headingPitch select 2))) < _fov) then { if(abs((abs(_polarTo select 2))-(abs(_headingPitch select 2))) < _fov) then {
_vertOk = true; _vertOk = true;
}; };
TRACE_2("Results", _vertOk, _horzOk); TRACE_2("Results", _vertOk, _horzOk);
if(_vertOk && {_horzOk}) then { if(_vertOk && {_horzOk}) then {
// Does the laser currently have our current code, if we have one? // Does the laser currently have our current code, if we have one?
_targetCode = _x getVariable ["ACE_LASERTARGET_CODE", ACE_DEFAULT_LASER_CODE]; _targetCode = _x getVariable ["ACE_LASERTARGET_CODE", ACE_DEFAULT_LASER_CODE];
TRACE_1("Target in sight, checking code", _targetCode, _laserCode); TRACE_1("Target in sight, checking code", _targetCode, _laserCode);
if(_targetCode == _laserCode) then { if(_targetCode == _laserCode) then {
_potentialTargets set[(count _potentialTargets), _x]; _potentialTargets set[(count _potentialTargets), _x];
}; };
}; };
}; };
} forEach ACE_LASERS; } forEach ACE_LASERS;
TRACE_1("", _potentialTargets); TRACE_1("", _potentialTargets);
_closestDistance = 100000; _closestDistance = 100000;
{ {
_pos1 = (getPosASL _missile); _pos1 = (getPosASL _missile);
_pos2 = ([_x] call FUNC(getPosASL)); _pos2 = ([_x] call FUNC(getPosASL));
_disCheck = _pos1 distance _pos2; _disCheck = _pos1 distance _pos2;
// shouldn't this bail out when a valid target is found instead of iterating over all potential targets ? // shouldn't this bail out when a valid target is found instead of iterating over all potential targets ?
if(_disCheck < _closestDistance && {[_pos1, _pos2, _x, _missile] call FUNC(checkLos)}) then { if(_disCheck < _closestDistance && {[_pos1, _pos2, _x, _missile] call FUNC(checkLos)}) then {
_found = true; _found = true;
_currentTarget = _x; _currentTarget = _x;
_closestDistance = _disCheck; _closestDistance = _disCheck;
}; };
} forEach _potentialTargets; } forEach _potentialTargets;
}; };
[_found, _currentTarget] [_found, _currentTarget]

View File

@ -1,49 +1,49 @@
#include "script_component.hpp" #include "script_component.hpp"
_list = _this select 0; _list = _this select 0;
_checkPos = _this select 1; _checkPos = _this select 1;
_spots = []; _spots = [];
_outliers = []; _outliers = [];
_spot = []; _spot = [];
_testPos = (_list select 0) select 0; _testPos = (_list select 0) select 0;
{ {
_samplePos = _x select 0; _samplePos = _x select 0;
if(!lineIntersects [_samplePos, _checkPos] && {!terrainIntersectASL [_samplePos, _checkPos]}) then { if(!lineIntersects [_samplePos, _checkPos] && {!terrainIntersectASL [_samplePos, _checkPos]}) then {
if(_samplePos distance _testPos < 2) then { if(_samplePos distance _testPos < 2) then {
_spot pushBack _samplePos; _spot pushBack _samplePos;
} else { } else {
_outliers pushBack _samplePos; _outliers pushBack _samplePos;
}; };
}; };
} forEach _list; } forEach _list;
_spots pushBack _spot; _spots pushBack _spot;
if(count _outliers > 0) then { if(count _outliers > 0) then {
for "_i" from 1 to 3 do { for "_i" from 1 to 3 do {
_remainingSpots = _outliers; _remainingSpots = _outliers;
_outliers = []; _outliers = [];
_spot = []; _spot = [];
_testPos = (_remainingSpots select 0); _testPos = (_remainingSpots select 0);
{ {
_samplePos = _x; _samplePos = _x;
if(!lineIntersects [_samplePos, _checkPos] && {!terrainIntersectASL [_samplePos, _checkPos]}) then { if(!lineIntersects [_samplePos, _checkPos] && {!terrainIntersectASL [_samplePos, _checkPos]}) then {
if(_samplePos distance _testPos < 2) then { if(_samplePos distance _testPos < 2) then {
_spot pushBack _samplePos; _spot pushBack _samplePos;
} else { } else {
_outliers pushBack _samplePos; _outliers pushBack _samplePos;
}; };
}; };
} forEach _remainingSpots; } forEach _remainingSpots;
_spots pushBack _spot; _spots pushBack _spot;
}; };
}; };
_largest = 0; _largest = 0;
_largestSpot = []; _largestSpot = [];
{ {
if((count _x) > _largest) then { if((count _x) > _largest) then {
_largest = (count _x); _largest = (count _x);
_largestSpot = _x; _largestSpot = _x;
}; };
} forEach _spots; } forEach _spots;
// player sideChat format["g: %1", _spots]; // player sideChat format["g: %1", _spots];
_largestSpot select (random (floor(count _largestSpot))); _largestSpot select (random (floor(count _largestSpot)));

View File

@ -1,26 +1,26 @@
#include "script_component.hpp" #include "script_component.hpp"
private["_args", "_laserTarget"]; private["_args", "_laserTarget"];
//TRACE_1("enter", _this); //TRACE_1("enter", _this);
_args = _this select 0; _args = _this select 0;
_laserTarget = _args select 0; _laserTarget = _args select 0;
if(isNull _laserTarget || !alive player) exitWith { if(isNull _laserTarget || !alive player) exitWith {
[(_this select 1)] call cba_fnc_removePerFrameHandler; [(_this select 1)] call cba_fnc_removePerFrameHandler;
REM(ACE_LASERS, _laserTarget); REM(ACE_LASERS, _laserTarget);
}; };
_end = diag_tickTime; _end = diag_tickTime;
#ifdef DEBUG_MODE_FULL #ifdef DEBUG_MODE_FULL
// Iconize the location of the actual laserTarget // Iconize the location of the actual laserTarget
_pos = [_laserTarget] call FUNC(getPosASL); _pos = [_laserTarget] call FUNC(getPosASL);
drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\select_target_ca.paa", [1,0,0,1], (ASLtoATL _pos), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\select_target_ca.paa", [1,0,0,1], (ASLtoATL _pos), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"];
{ {
drawLine3D [ASLtoATL (_x select 0), ASLtoATL (_x select 1), (_x select 2)]; drawLine3D [ASLtoATL (_x select 0), ASLtoATL (_x select 1), (_x select 2)];
drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", (_x select 2), ASLtoATL (_x select 1), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", (_x select 2), ASLtoATL (_x select 1), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"];
} forEach DRAW_LINES; } forEach DRAW_LINES;
DRAW_LINES = []; DRAW_LINES = [];
#endif #endif

View File

@ -1,25 +1,25 @@
#include "script_component.hpp" #include "script_component.hpp"
PARAMS_1(_laserTarget); PARAMS_1(_laserTarget);
TRACE_1("enter", _this); TRACE_1("enter", _this);
// Add the target to the global targets array // Add the target to the global targets array
// Everyone tracks them // Everyone tracks them
// Add the laser localized to the laser array, and give it the default localized code // Add the laser localized to the laser array, and give it the default localized code
PUSH(ACE_LASERS, _laserTarget); PUSH(ACE_LASERS, _laserTarget);
// Check the vehicle, otherwise use the default // Check the vehicle, otherwise use the default
_laserTarget setVariable ["ACE_LASERTARGET_CODE", ACE_DEFAULT_LASER_CODE, false]; _laserTarget setVariable ["ACE_LASERTARGET_CODE", ACE_DEFAULT_LASER_CODE, false];
// Clean the lasers of any null objects while we are here // Clean the lasers of any null objects while we are here
REM(ACE_LASERS, objNull); REM(ACE_LASERS, objNull);
if(!(local _laserTarget)) exitWith { }; if(!(local _laserTarget)) exitWith { };
// The target is local, so its on this client // The target is local, so its on this client
if(!isDedicated) then { if(!isDedicated) then {
_laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", player, true]; _laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", player, true];
[FUNC(laserTargetPFH), 0, [_laserTarget, player]] call cba_fnc_addPerFrameHandler; [FUNC(laserTargetPFH), 0, [_laserTarget, player]] call cba_fnc_addPerFrameHandler;
} else { } else {
// server side ownership of laser // server side ownership of laser
//_laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", nil, false]; //_laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", nil, false];
}; };

View File

@ -1,38 +1,38 @@
#include "script_component.hpp" #include "script_component.hpp"
_map = _this select 0; _map = _this select 0;
_theta = _this select 1; _theta = _this select 1;
_p = _map select 0; _p = _map select 0;
_p1 = _map select 1; _p1 = _map select 1;
_p2 = _map select 2; _p2 = _map select 2;
_q1 = +(_map select 3); _q1 = +(_map select 3);
_q2 = +(_map select 4); _q2 = +(_map select 4);
_u = _map select 5; _u = _map select 5;
_d = _map select 6; _d = _map select 6;
/* Step 4 */ /* Step 4 */
_q2 set[0, (_q1 select 0) * cos(_theta) - (_q1 select 1) * sin(_theta)]; _q2 set[0, (_q1 select 0) * cos(_theta) - (_q1 select 1) * sin(_theta)];
_q2 set[1, (_q1 select 0) * sin(_theta) + (_q1 select 1) * cos(_theta)]; _q2 set[1, (_q1 select 0) * sin(_theta) + (_q1 select 1) * cos(_theta)];
_q2 set[2, (_q1 select 2)]; _q2 set[2, (_q1 select 2)];
/* Inverse of step 3 */ /* Inverse of step 3 */
_q1 set[0, (_q2 select 0) * _d + (_q2 select 2) * (_u select 0)]; _q1 set[0, (_q2 select 0) * _d + (_q2 select 2) * (_u select 0)];
_q1 set[1, (_q2 select 1)]; _q1 set[1, (_q2 select 1)];
_q1 set[2, - (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; _q1 set[2, - (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d];
/* Inverse of step 2 */ /* Inverse of step 2 */
if (_d != 0) then { if (_d != 0) then {
_q2 set[0, (_q1 select 0)]; _q2 set[0, (_q1 select 0)];
_q2 set[1, (_q1 select 1) * (_u select 2) / _d + (_q1 select 2) * (_u select 1) / _d]; _q2 set[1, (_q1 select 1) * (_u select 2) / _d + (_q1 select 2) * (_u select 1) / _d];
_q2 set[2, - (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; _q2 set[2, - (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d];
} else { } else {
_q2 = _q1; _q2 = _q1;
}; };
/* Inverse of step 1 */ /* Inverse of step 1 */
_q1 set[0, (_q2 select 0) + (_p1 select 0)]; _q1 set[0, (_q2 select 0) + (_p1 select 0)];
_q1 set[1, (_q2 select 1) + (_p1 select 1)]; _q1 set[1, (_q2 select 1) + (_p1 select 1)];
_q1 set[2, (_q2 select 2) + (_p1 select 2)]; _q1 set[2, (_q2 select 2) + (_p1 select 2)];
_q1; _q1;

View File

@ -1,37 +1,37 @@
#include "script_component.hpp" #include "script_component.hpp"
private ["_p", "_theta", "_p1", "_p2", "_q1", "_q2", "_u", "_d"]; private ["_p", "_theta", "_p1", "_p2", "_q1", "_q2", "_u", "_d"];
_p = _this select 0; _p = _this select 0;
_p1 = _this select 1; _p1 = _this select 1;
_p2 = _this select 2; _p2 = _this select 2;
_q1 = []; _q1 = [];
_q2 = []; _q2 = [];
_u = []; _u = [];
/* Step 1 */ /* Step 1 */
_q1 set[0, (_p select 0) - (_p1 select 0)]; _q1 set[0, (_p select 0) - (_p1 select 0)];
_q1 set[1, (_p select 1) - (_p1 select 1)]; _q1 set[1, (_p select 1) - (_p1 select 1)];
_q1 set[2, (_p select 2) - (_p1 select 2)]; _q1 set[2, (_p select 2) - (_p1 select 2)];
_u set[0, (_p2 select 0) - (_p1 select 0)]; _u set[0, (_p2 select 0) - (_p1 select 0)];
_u set[1, (_p2 select 1) - (_p1 select 1)]; _u set[1, (_p2 select 1) - (_p1 select 1)];
_u set[2, (_p2 select 2) - (_p1 select 2)]; _u set[2, (_p2 select 2) - (_p1 select 2)];
_u = _u call BIS_fnc_unitVector; _u = _u call BIS_fnc_unitVector;
_d = sqrt((_u select 1)*(_u select 1) + (_u select 2)*(_u select 2)); _d = sqrt((_u select 1)*(_u select 1) + (_u select 2)*(_u select 2));
/* Step 2 */ /* Step 2 */
if (_d != 0) then { if (_d != 0) then {
_q2 set[0, (_q1 select 0)]; _q2 set[0, (_q1 select 0)];
_q2 set[1, (_q1 select 1) * (_u select 2) / _d - (_q1 select 2) * (_u select 1) / _d]; _q2 set[1, (_q1 select 1) * (_u select 2) / _d - (_q1 select 2) * (_u select 1) / _d];
_q2 set[2, (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; _q2 set[2, (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d];
} else { } else {
_q2 = _q1; _q2 = _q1;
}; };
/* Step 3 */ /* Step 3 */
_q1 set[0, (_q2 select 0) * _d - (_q2 select 2) * (_u select 0)]; _q1 set[0, (_q2 select 0) * _d - (_q2 select 2) * (_u select 0)];
_q1 set[1, (_q2 select 1)]; _q1 set[1, (_q2 select 1)];
_q1 set[2, (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; _q1 set[2, (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d];
[_p, _p1, _p2, _q1, _q2, _u, _d] [_p, _p1, _p2, _q1, _q2, _u, _d]

View File

@ -1,66 +1,66 @@
#include "script_component.hpp" #include "script_component.hpp"
_divergence = 0.3; _divergence = 0.3;
_pos = _this select 0; _pos = _this select 0;
_vec = _this select 1; _vec = _this select 1;
_longestReturn = -1000000000; _longestReturn = -1000000000;
_shortestReturn = 1000000000; _shortestReturn = 1000000000;
_resultPositions = []; _resultPositions = [];
_p1 = [0,0,0]; _p1 = [0,0,0];
_p2 = +_vec; _p2 = +_vec;
_p = (_vec call CBA_fnc_vect2polar); _p = (_vec call CBA_fnc_vect2polar);
_v = [(_p select 0), (_p select 1), (_p select 2)+90] call CBA_fnc_polar2vect; _v = [(_p select 0), (_p select 1), (_p select 2)+90] call CBA_fnc_polar2vect;
_cp = [_vec, _v] call BIS_fnc_crossProduct; _cp = [_vec, _v] call BIS_fnc_crossProduct;
_vecRotateMap = [_cp, _p1, _p2] call FUNC(rotateVectLineGetMap); _vecRotateMap = [_cp, _p1, _p2] call FUNC(rotateVectLineGetMap);
_result = [_pos, _vec] call FUNC(shootRay); _result = [_pos, _vec] call FUNC(shootRay);
_resultPos = _result select 0; _resultPos = _result select 0;
if(!isNil "_resultPos") then { if(!isNil "_resultPos") then {
_distance = _result select 1; _distance = _result select 1;
if(_distance < _shortestReturn) then { if(_distance < _shortestReturn) then {
_shortestReturn = _distance; _shortestReturn = _distance;
}; };
if(_distance > _longestReturn) then { if(_distance > _longestReturn) then {
_longestReturn = _distance; _longestReturn = _distance;
}; };
_resultPositions set[(count _resultPositions), _result]; _resultPositions set[(count _resultPositions), _result];
#ifdef DEBUG_MODE_FULL #ifdef DEBUG_MODE_FULL
DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]]; DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]];
#endif #endif
}; };
_count = 8; _count = 8;
_pos2 = [ _pos2 = [
(_pos select 0)+((_vec select 0)*1000), (_pos select 0)+((_vec select 0)*1000),
(_pos select 1)+((_vec select 1)*1000), (_pos select 1)+((_vec select 1)*1000),
(_pos select 2)+((_vec select 2)*1000) (_pos select 2)+((_vec select 2)*1000)
]; ];
{ {
for "_i" from 0 to ceil(_count*_x) do { for "_i" from 0 to ceil(_count*_x) do {
_radOffset = random 360; _radOffset = random 360;
_offset = [_vecRotateMap, (((360/_count)*_i)+_radOffset) mod 360] call FUNC(rotateVectLine); _offset = [_vecRotateMap, (((360/_count)*_i)+_radOffset) mod 360] call FUNC(rotateVectLine);
_offsetPos = [ _offsetPos = [
(_pos2 select 0)+((_offset select 0)*(_divergence*_x)), (_pos2 select 0)+((_offset select 0)*(_divergence*_x)),
(_pos2 select 1)+((_offset select 1)*(_divergence*_x)), (_pos2 select 1)+((_offset select 1)*(_divergence*_x)),
(_pos2 select 2)+((_offset select 2)*(_divergence*_x)) (_pos2 select 2)+((_offset select 2)*(_divergence*_x))
]; ];
_offsetVector = [_pos, _offsetPos] call BIS_fnc_vectorFromXtoY; _offsetVector = [_pos, _offsetPos] call BIS_fnc_vectorFromXtoY;
_result = [_pos, _offsetVector] call FUNC(shootRay); _result = [_pos, _offsetVector] call FUNC(shootRay);
_resultPos = _result select 0; _resultPos = _result select 0;
if(!isNil "_resultPos") then { if(!isNil "_resultPos") then {
_distance = _result select 1; _distance = _result select 1;
if(_distance < _shortestReturn) then { if(_distance < _shortestReturn) then {
_shortestReturn = _distance; _shortestReturn = _distance;
}; };
if(_distance > _longestReturn) then { if(_distance > _longestReturn) then {
_longestReturn = _distance; _longestReturn = _distance;
}; };
_resultPositions set[(count _resultPositions), _result]; _resultPositions set[(count _resultPositions), _result];
#ifdef DEBUG_MODE_FULL #ifdef DEBUG_MODE_FULL
DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]]; DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]];
#endif #endif
}; };
}; };
} forEach [1,0.5,0.25]; } forEach [1,0.5,0.25];
[_longestReturn, _shortestReturn, _resultPositions]; [_longestReturn, _shortestReturn, _resultPositions];

View File

@ -1,30 +1,30 @@
#include "script_component.hpp" #include "script_component.hpp"
private ["_pos", "_vec", "_distance", "_resultPos", "_fidelity", "_lastPos", "_i", "_nextPos"]; private ["_pos", "_vec", "_distance", "_resultPos", "_fidelity", "_lastPos", "_i", "_nextPos"];
scopeName "main"; scopeName "main";
_pos = _this select 0; _pos = _this select 0;
_vec = _this select 1; _vec = _this select 1;
_distance = 0; _distance = 0;
_resultPos = nil; _resultPos = nil;
_fidelity = [1000,100,10,1,0.1]; _fidelity = [1000,100,10,1,0.1];
_lastPos = +_pos; _lastPos = +_pos;
{ {
scopeName "mainSearch"; scopeName "mainSearch";
for "_i" from 1 to 10 do { for "_i" from 1 to 10 do {
_nextPos = [ _nextPos = [
(_lastPos select 0)+((_vec select 0)*_x), (_lastPos select 0)+((_vec select 0)*_x),
(_lastPos select 1)+((_vec select 1)*_x), (_lastPos select 1)+((_vec select 1)*_x),
(_lastPos select 2)+((_vec select 2)*_x) (_lastPos select 2)+((_vec select 2)*_x)
]; ];
if(lineIntersects [_lastPos, _nextPos] || terrainIntersectASL [_lastPos, _nextPos]) then { if(lineIntersects [_lastPos, _nextPos] || terrainIntersectASL [_lastPos, _nextPos]) then {
_resultPos = _lastPos; _resultPos = _lastPos;
breakTo "mainSearch"; breakTo "mainSearch";
} else { } else {
_distance = _distance + _x; _distance = _distance + _x;
_lastPos = _nextPos; _lastPos = _nextPos;
}; };
}; };
} forEach _fidelity; } forEach _fidelity;
[_resultPos, _distance]; [_resultPos, _distance];

View File

@ -1,16 +1,16 @@
_object = _this select 0; _object = _this select 0;
_origin = getPosASL _object; _origin = getPosASL _object;
_matrix = _this select 1; _matrix = _this select 1;
_xVec = _matrix select 0; _xVec = _matrix select 0;
_yVec = _matrix select 1; _yVec = _matrix select 1;
_zVec = _matrix select 2; _zVec = _matrix select 2;
_offset = _this select 2; _offset = _this select 2;
_x = _offset select 0; _x = _offset select 0;
_y = _offset select 1; _y = _offset select 1;
_z = _offset select 2; _z = _offset select 2;
_out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin; _out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin;
_out; _out;

View File

@ -1,22 +1,22 @@
_object = _this select 0; _object = _this select 0;
_origin = getPosASL _object; _origin = getPosASL _object;
_matrix = _this select 1; _matrix = _this select 1;
_xVec = _matrix select 0; _xVec = _matrix select 0;
_yVec = _matrix select 1; _yVec = _matrix select 1;
_zVec = _matrix select 2; _zVec = _matrix select 2;
_offset = _this select 2; _offset = _this select 2;
_offset = _offset vectorDiff _origin; _offset = _offset vectorDiff _origin;
_x = _offset select 0; _x = _offset select 0;
_y = _offset select 1; _y = _offset select 1;
_z = _offset select 2; _z = _offset select 2;
_out = [ _out = [
((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z), ((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z),
((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z), ((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z),
((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z) ((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z)
]; ];
_out; _out;

View File

@ -1,15 +1,15 @@
#define COMPONENT laser #define COMPONENT laser
#include "\z\ace\Addons\main\script_mod.hpp" #include "\z\ace\Addons\main\script_mod.hpp"
#ifdef DEBUG_ENABLED_LASER #ifdef DEBUG_ENABLED_LASER
#define DEBUG_MODE_FULL #define DEBUG_MODE_FULL
#endif #endif
#ifdef DEBUG_SETTINGS_LASER #ifdef DEBUG_SETTINGS_LASER
#define DEBUG_SETTINGS DEBUG_SETTINGS_LASER #define DEBUG_SETTINGS DEBUG_SETTINGS_LASER
#endif #endif
#include "\z\ace\Addons\main\script_macros.hpp" #include "\z\ace\Addons\main\script_macros.hpp"
#define FIREMODE_DIRECT_LOAL 1 #define FIREMODE_DIRECT_LOAL 1

View File

@ -1,19 +1,19 @@
class Extended_PreInit_EventHandlers { class Extended_PreInit_EventHandlers {
class ADDON { class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_pre_init)); init = QUOTE(call COMPILE_FILE(XEH_pre_init));
}; };
}; };
class Extended_PostInit_EventHandlers { class Extended_PostInit_EventHandlers {
class ADDON { class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_post_init)); init = QUOTE(call COMPILE_FILE(XEH_post_init));
}; };
}; };
class Extended_Init_EventHandlers { class Extended_Init_EventHandlers {
class Helicopter { class Helicopter {
class ADDON { class ADDON {
init = QUOTE(_this call DFUNC(initDesignatorActions)); init = QUOTE(_this call DFUNC(initDesignatorActions));
}; };
}; };
}; };

View File

@ -1,32 +1,32 @@
class RscPicture; class RscPicture;
class RscText; class RscText;
class RscControlsGroupNoScrollbars; class RscControlsGroupNoScrollbars;
/* This disables air radar. We need to make this a seperate HUD addon /* This disables air radar. We need to make this a seperate HUD addon
class RscInGameUI class RscInGameUI
{ {
class RscUnitInfo class RscUnitInfo
{ {
class CA_Radar: RscControlsGroupNoScrollbars class CA_Radar: RscControlsGroupNoScrollbars
{ {
class controls class controls
{ {
class CA_RadarBackground: RscPicture { class CA_RadarBackground: RscPicture {
colorText[] = {0,0,0,0}; colorText[] = {0,0,0,0};
text = ""; text = "";
}; };
class CA_RadarIcon: RscPicture { class CA_RadarIcon: RscPicture {
colorText[] = {0,0,0,0}; colorText[] = {0,0,0,0};
}; };
class CA_Heading: RscText { class CA_Heading: RscText {
colorText[] = {0,0,0,0}; colorText[] = {0,0,0,0};
}; };
}; };
}; };
}; };
}; };
class CfgInGameUI class CfgInGameUI
{ {
}; };
*/ */

View File

@ -1,30 +1,30 @@
class CfgVehicles { class CfgVehicles {
class AllVehicles; class AllVehicles;
class Air: AllVehicles { class Air: AllVehicles {
class Turrets; class Turrets;
}; };
class Helicopter: Air { class Helicopter: Air {
class Turrets { class Turrets {
class MainTurret; class MainTurret;
}; };
// TODO: move these to a different HUD addon // TODO: move these to a different HUD addon
// commanderCanSee = 2+32; // commanderCanSee = 2+32;
// gunnerCanSee = 2+32; // gunnerCanSee = 2+32;
// driverCanSee = 2+32; // driverCanSee = 2+32;
}; };
class Helicopter_Base_F: Helicopter {}; class Helicopter_Base_F: Helicopter {};
class Heli_Attack_01_base_F: Helicopter_Base_F {}; class Heli_Attack_01_base_F: Helicopter_Base_F {};
class B_Heli_Attack_01_F: Heli_Attack_01_base_F { class B_Heli_Attack_01_F: Heli_Attack_01_base_F {
class Turrets: Turrets { class Turrets: Turrets {
class MainTurret: MainTurret { class MainTurret: MainTurret {
GVAR(Enabled) = 1; // Enable laser self-designation GVAR(Enabled) = 1; // Enable laser self-designation
}; };
}; };
}; };
}; };

View File

@ -1,11 +1,11 @@
class CfgWeapons { class CfgWeapons {
// Disable locking unless newb mode // Disable locking unless newb mode
class LauncherCore; class LauncherCore;
class RocketPods: LauncherCore { class RocketPods: LauncherCore {
canLock = 1; canLock = 1;
}; };
class missiles_DAGR: RocketPods { class missiles_DAGR: RocketPods {
canLock = 1; canLock = 1;
}; };
}; };

View File

@ -1,3 +1,3 @@
#include "script_component.hpp" #include "script_component.hpp"
NO_DEDICATED; NO_DEDICATED;

View File

@ -1,11 +1,11 @@
#include "script_component.hpp" #include "script_component.hpp"
PREP(initDesignatorActions); PREP(initDesignatorActions);
PREP(laserHudDesignateOn); PREP(laserHudDesignateOn);
PREP(laserHudDesignateOff); PREP(laserHudDesignateOff);
PREP(unitTurretHasDesignator); PREP(unitTurretHasDesignator);
GVAR(laser) = nil; GVAR(laser) = nil;
GVAR(laserActive) = false; GVAR(laserActive) = false;
FUNC(getPosASL) = {visiblePositionASL (_this select 0)}; FUNC(getPosASL) = {visiblePositionASL (_this select 0)};

View File

@ -1,17 +1,17 @@
#include "script_component.hpp" #include "script_component.hpp"
class CfgPatches { class CfgPatches {
class ADDON { class ADDON {
units[] = {}; units[] = {};
weapons[] = {}; weapons[] = {};
requiredVersion = REQUIRED_VERSION; requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_laser"}; requiredAddons[] = {"ace_laser"};
version = VERSION; version = VERSION;
}; };
}; };
#include "CfgUI.hpp" #include "CfgUI.hpp"
#include "CfgEventhandlers.hpp" #include "CfgEventhandlers.hpp"
#include "CfgWeapons.hpp" #include "CfgWeapons.hpp"
#include "CfgVehicles.hpp" #include "CfgVehicles.hpp"

View File

@ -1,20 +1,20 @@
#include "script_component.hpp" #include "script_component.hpp"
if(isNil QGVAR(laser)) exitWith { if(isNil QGVAR(laser)) exitWith {
false false
}; };
if(!local GVAR(laser)) then { if(!local GVAR(laser)) then {
false false
}; };
_handle = GVAR(laser) getVariable ["ACE_PFH_HANDLE", nil]; _handle = GVAR(laser) getVariable ["ACE_PFH_HANDLE", nil];
if(!isNil "_handle") then { if(!isNil "_handle") then {
[_handle] call cba_fnc_removePerFrameHandler; [_handle] call cba_fnc_removePerFrameHandler;
}; };
REM(ACE_LASERS, GVAR(laser)); REM(ACE_LASERS, GVAR(laser));
deleteVehicle GVAR(laser); deleteVehicle GVAR(laser);
GVAR(laser) = nil; GVAR(laser) = nil;
GVAR(laserActive) = false; GVAR(laserActive) = false;
true true

View File

@ -1,111 +1,111 @@
//#define DEBUG_MODE_FULL //#define DEBUG_MODE_FULL
#include "script_component.hpp" #include "script_component.hpp"
TRACE_1("enter", _this); TRACE_1("enter", _this);
#define FCS_UPDATE_DELAY 1 #define FCS_UPDATE_DELAY 1
FUNC(magnitude) = { FUNC(magnitude) = {
_this distance [0, 0, 0] _this distance [0, 0, 0]
}; };
FUNC(mat_normalize3d) = { FUNC(mat_normalize3d) = {
private ["_mag"]; private ["_mag"];
PARAMS_3(_vx,_vy,_vz); PARAMS_3(_vx,_vy,_vz);
_mag = _this call FUNC(magnitude); _mag = _this call FUNC(magnitude);
if (_mag == 0) then {_mag = 1}; if (_mag == 0) then {_mag = 1};
[(_vx/_mag), (_vy/_mag), (_vz/_mag)] [(_vx/_mag), (_vy/_mag), (_vz/_mag)]
}; };
FUNC(laserHudDesignatePFH) = { FUNC(laserHudDesignatePFH) = {
private["_args", "_laserTarget", "_shooter", "_vehicle", "_weapon", "_gunnerInfo", "_turret", "_pov", "_gunBeg", "_gunEnd", "_povPos", "_povDir", "_result", "_resultPositions", "_firstResult", "_forceUpdateTime"]; private["_args", "_laserTarget", "_shooter", "_vehicle", "_weapon", "_gunnerInfo", "_turret", "_pov", "_gunBeg", "_gunEnd", "_povPos", "_povDir", "_result", "_resultPositions", "_firstResult", "_forceUpdateTime"];
_args = _this select 0; _args = _this select 0;
_laserTarget = _args select 0; _laserTarget = _args select 0;
_shooter = _args select 1; _shooter = _args select 1;
if( (count _args) < 3) then { if( (count _args) < 3) then {
_args set[2, diag_tickTime + FCS_UPDATE_DELAY]; _args set[2, diag_tickTime + FCS_UPDATE_DELAY];
}; };
_forceUpdateTime = _args select 2; _forceUpdateTime = _args select 2;
_vehicle = vehicle _shooter; _vehicle = vehicle _shooter;
_weapon = currentWeapon _vehicle; _weapon = currentWeapon _vehicle;
TRACE_1("", _args); TRACE_1("", _args);
if(!alive _shooter || isNull _vehicle || isNull _laserTarget || !GVAR(laserActive) ) exitWith { if(!alive _shooter || isNull _vehicle || isNull _laserTarget || !GVAR(laserActive) ) exitWith {
[] call FUNC(laserHudDesignateOff); [] call FUNC(laserHudDesignateOff);
}; };
if(!([ACE_player] call FUNC(unitTurretHasDesignator)) ) exitWith { if(!([ACE_player] call FUNC(unitTurretHasDesignator)) ) exitWith {
[] call FUNC(laserHudDesignateOff); [] call FUNC(laserHudDesignateOff);
}; };
// Retrieve the gunner and turret memory point information // Retrieve the gunner and turret memory point information
_gunnerInfo = [_vehicle, _weapon] call CBA_fnc_getFirer; _gunnerInfo = [_vehicle, _weapon] call CBA_fnc_getFirer;
_turretInfo = [_vehicle, _gunnerInfo select 1] call EFUNC(common,getTurretDirection); _turretInfo = [_vehicle, _gunnerInfo select 1] call EFUNC(common,getTurretDirection);
_povPos = _turretInfo select 0; _povPos = _turretInfo select 0;
_povDir = _turretInfo select 1; _povDir = _turretInfo select 1;
_result = [_povPos, _povDir] call EFUNC(laser,shootCone); _result = [_povPos, _povDir] call EFUNC(laser,shootCone);
if((count _result) > 0) then { if((count _result) > 0) then {
_resultPositions = _result select 2; _resultPositions = _result select 2;
if((count _resultPositions) > 0) then { if((count _resultPositions) > 0) then {
_firstResult = _resultPositions select 0; _firstResult = _resultPositions select 0;
_pos = _firstResult select 0; _pos = _firstResult select 0;
// If the laser has moved less than a half meter, then dont move it. // If the laser has moved less than a half meter, then dont move it.
// Just regular use of lasers will commonly make them move this much, // Just regular use of lasers will commonly make them move this much,
// but not across multiple close frames. // but not across multiple close frames.
// This loses accuracy a little, but saves position updates per frame. // This loses accuracy a little, but saves position updates per frame.
TRACE_5("", diag_tickTime, _forceUpdateTime, getPosASL _laserTarget, _pos, ((getPosASL _laserTarget) distance _pos)); TRACE_5("", diag_tickTime, _forceUpdateTime, getPosASL _laserTarget, _pos, ((getPosASL _laserTarget) distance _pos));
if(diag_tickTime > _forceUpdateTime) then { if(diag_tickTime > _forceUpdateTime) then {
TRACE_1("FCS Update", ""); TRACE_1("FCS Update", "");
["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent; ["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent;
}; };
if( (_laserTarget distance _pos) > 0.1) then { if( (_laserTarget distance _pos) > 0.1) then {
TRACE_1("LaserPos Update", ""); TRACE_1("LaserPos Update", "");
_laserTarget setPosATL (ASLToATL _pos); _laserTarget setPosATL (ASLToATL _pos);
}; };
if(diag_tickTime > _forceUpdateTime) then { if(diag_tickTime > _forceUpdateTime) then {
_args set[2, diag_tickTime + FCS_UPDATE_DELAY]; _args set[2, diag_tickTime + FCS_UPDATE_DELAY];
}; };
#ifdef DEBUG_MODE_FULL #ifdef DEBUG_MODE_FULL
drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,1], (getPosATL _laserTarget), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,1], (getPosATL _laserTarget), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"];
{ {
private["_position"]; private["_position"];
_position = _x select 0; _position = _x select 0;
drawLine3d [ASLToATL _povPos, ASLToATL _position, [0,0,1,1] ]; drawLine3d [ASLToATL _povPos, ASLToATL _position, [0,0,1,1] ];
} forEach _resultPositions; } forEach _resultPositions;
#endif #endif
}; };
}; };
_this set[0, _args]; _this set[0, _args];
}; };
private "_laserTarget"; private "_laserTarget";
private "_handle"; private "_handle";
if(isNil QGVAR(laser)) then { if(isNil QGVAR(laser)) then {
_laserTarget = "LaserTargetW" createVehicle (getpos player); _laserTarget = "LaserTargetW" createVehicle (getpos player);
GVAR(laserActive) = true; GVAR(laserActive) = true;
_handle = [FUNC(laserHudDesignatePFH), 0.1, [_laserTarget, player]] call cba_fnc_addPerFrameHandler; _handle = [FUNC(laserHudDesignatePFH), 0.1, [_laserTarget, player]] call cba_fnc_addPerFrameHandler;
_laserTarget setVariable ["ACE_PFH_HANDLE", _handle, false]; _laserTarget setVariable ["ACE_PFH_HANDLE", _handle, false];
GVAR(laser) = _laserTarget; GVAR(laser) = _laserTarget;
} else { } else {
[] call FUNC(laserHudDesignateOff); [] call FUNC(laserHudDesignateOff);
[] call FUNC(laserHudDesignateOn); [] call FUNC(laserHudDesignateOn);
}; };

View File

@ -1 +1 @@
#include "\z\ace\Addons\laser_selfdesignate\script_component.hpp" #include "\z\ace\Addons\laser_selfdesignate\script_component.hpp"

View File

@ -1,12 +1,12 @@
#define COMPONENT laser_selfdesignate #define COMPONENT laser_selfdesignate
#include "\z\ace\Addons\main\script_mod.hpp" #include "\z\ace\Addons\main\script_mod.hpp"
#ifdef DEBUG_ENABLED_LASER_SELFDESIGNATE #ifdef DEBUG_ENABLED_LASER_SELFDESIGNATE
#define DEBUG_MODE_FULL #define DEBUG_MODE_FULL
#endif #endif
#ifdef DEBUG_SETTINGS_LASER_SELFDESIGNATE #ifdef DEBUG_SETTINGS_LASER_SELFDESIGNATE
#define DEBUG_SETTINGS DEBUG_SETTINGS_LASER_SELFDESIGNATE #define DEBUG_SETTINGS DEBUG_SETTINGS_LASER_SELFDESIGNATE
#endif #endif
#include "\z\ace\Addons\main\script_macros.hpp" #include "\z\ace\Addons\main\script_macros.hpp"

View File

@ -1,14 +1,16 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2015-04-07 --> <!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="Laser_SelfDesignate"> <Package name="Laser_SelfDesignate">
<Key ID="STR_ACE_Laser_SelfDesignate_DesignatorOn"> <Key ID="STR_ACE_Laser_SelfDesignate_DesignatorOn">
<English>Laser&lt;br/&gt;Designator On</English> <English>Laser&lt;br/&gt;Designator On</English>
<German>Lasermarkierer&lt;br/&gt;an</German> <German>Lasermarkierer&lt;br/&gt;an</German>
<Russian>ЛЦУ&lt;br/&gt;ВКЛ</Russian>
</Key> </Key>
<Key ID="STR_ACE_Laser_SelfDesignate_DesignatorOff"> <Key ID="STR_ACE_Laser_SelfDesignate_DesignatorOff">
<English>Laser&lt;br/&gt;Designator Off</English> <English>Laser&lt;br/&gt;Designator Off</English>
<German>Lasermarkierer&lt;br/&gt;aus</German> <German>Lasermarkierer&lt;br/&gt;aus</German>
<Russian>ЛЦУ&lt;br/&gt;ВЫКЛ</Russian>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,21 +1,22 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="Laserpointer"> <Package name="Laserpointer">
<Key ID="STR_ACE_Laserpointer_red"> <Key ID="STR_ACE_Laserpointer_red">
<English>Laser Pointer (red)</English> <English>Laser Pointer (red)</English>
<German>Laserpointer (rot)</German> <German>Laserpointer (rot)</German>
<Russian>Лазерный прицел (красный)</Russian>
</Key> </Key>
<Key ID="STR_ACE_Laserpointer_green"> <Key ID="STR_ACE_Laserpointer_green">
<English>Laser Pointer (green)</English> <English>Laser Pointer (green)</English>
<German>Laserpointer (grün)</German> <German>Laserpointer (grün)</German>
<Russian>Лазерный прицел (зелёный)</Russian>
</Key> </Key>
<Key ID="STR_ACE_Laserpointer_Description"> <Key ID="STR_ACE_Laserpointer_Description">
<English>Emits visible light. </English> <English>Emits visible light. </English>
<German>Strahlt sichtbares Licht aus. </German> <German>Strahlt sichtbares Licht aus. </German>
<Russian>Испускает узкий пучок видимого света.</Russian>
</Key> </Key>
<Key ID="STR_ACE_Laserpointer_useLaser"> <Key ID="STR_ACE_Laserpointer_useLaser">
<English>&lt;t color='#9cf953'&gt;Use: &lt;/t&gt;Turn Laser ON/OFF</English> <English>&lt;t color='#9cf953'&gt;Use: &lt;/t&gt;Turn Laser ON/OFF</English>
<Czech>&lt;t color='#9cf953'&gt;Použití: &lt;/t&gt;Zapnout/vypnout laser</Czech> <Czech>&lt;t color='#9cf953'&gt;Použití: &lt;/t&gt;Zapnout/vypnout laser</Czech>
@ -27,6 +28,5 @@
<Russian>&lt;t color='#9cf953'&gt;Использовать: &lt;/t&gt;вкл/выкл лазер</Russian> <Russian>&lt;t color='#9cf953'&gt;Использовать: &lt;/t&gt;вкл/выкл лазер</Russian>
<Spanish>&lt;t color='#9cf953'&gt;Usar: &lt;/t&gt;encender/apagar láser</Spanish> <Spanish>&lt;t color='#9cf953'&gt;Usar: &lt;/t&gt;encender/apagar láser</Spanish>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2014-12-21 --> <!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="logistics_uavbattery"> <Package name="logistics_uavbattery">
<Key ID="STR_ACE_logistics_uavbattery_Full"> <Key ID="STR_ACE_logistics_uavbattery_Full">
@ -24,7 +24,7 @@
<Czech>Potřebuješ UAV-Baterii</Czech> <Czech>Potřebuješ UAV-Baterii</Czech>
<Portuguese>Você precisa de uma Bateria para VANT</Portuguese> <Portuguese>Você precisa de uma Bateria para VANT</Portuguese>
<Italian>Hai bisogno di una Batteria UAV</Italian> <Italian>Hai bisogno di una Batteria UAV</Italian>
<Russian>Требуется аккумулятор БПЛА</Russian> <Russian>Требуется аккумулятор для БПЛА</Russian>
</Key> </Key>
<Key ID="STR_ACE_logistics_uavbattery_Recharge"> <Key ID="STR_ACE_logistics_uavbattery_Recharge">
<English>Recharge</English> <English>Recharge</English>
@ -36,7 +36,7 @@
<Czech>Dobít</Czech> <Czech>Dobít</Czech>
<Portuguese>Recarregar</Portuguese> <Portuguese>Recarregar</Portuguese>
<Italian>Ricarica</Italian> <Italian>Ricarica</Italian>
<Russian>Подзарядить</Russian> <Russian>Зарядить</Russian>
</Key> </Key>
<Key ID="STR_ACE_logistics_uavbattery_Battery_Name"> <Key ID="STR_ACE_logistics_uavbattery_Battery_Name">
<English>UAV Battery</English> <English>UAV Battery</English>
@ -60,7 +60,7 @@
<Czech>Používané k dobíjení UAV</Czech> <Czech>Používané k dobíjení UAV</Czech>
<Portuguese>Usada para reabastecer VANT</Portuguese> <Portuguese>Usada para reabastecer VANT</Portuguese>
<Italian>Usata per ricaricare la Batteria dell'UAV</Italian> <Italian>Usata per ricaricare la Batteria dell'UAV</Italian>
<Russian>Используется для подзарядки БПЛА</Russian> <Russian>Используется для зарядки БПЛА</Russian>
</Key> </Key>
<Key ID="STR_ACE_logistics_uavbattery_Battery_Recharge"> <Key ID="STR_ACE_logistics_uavbattery_Battery_Recharge">
<English>Recharging ...</English> <English>Recharging ...</English>
@ -72,7 +72,7 @@
<Czech>Dobíjení ...</Czech> <Czech>Dobíjení ...</Czech>
<Portuguese>Recarregando ...</Portuguese> <Portuguese>Recarregando ...</Portuguese>
<Italian>In ricarica ...</Italian> <Italian>In ricarica ...</Italian>
<Russian>Подзаряжаем ...</Russian> <Russian>Заряжается ...</Russian>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,15 +1,17 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2015-04-07 --> <!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="Wirecutter"> <Package name="Wirecutter">
<Key ID="STR_ACE_logistics_wirecutter_wirecutterName"> <Key ID="STR_ACE_logistics_wirecutter_wirecutterName">
<English>Wirecutter</English> <English>Wirecutter</English>
<German>Drahtschneider</German> <German>Drahtschneider</German>
<Spanish>Wirecutter</Spanish> <Spanish>Wirecutter</Spanish>
<Russian>Клещи-кусачки</Russian>
</Key> </Key>
<Key ID="STR_ACE_logistics_wirecutter_wirecutterDescription"> <Key ID="STR_ACE_logistics_wirecutter_wirecutterDescription">
<English>Wirecutter</English> <English>Wirecutter</English>
<German>Schneidet Draht.</German> <German>Schneidet Draht.</German>
<Russian>Позволяют быстро перекусывать сеточные конструкции.</Russian>
</Key> </Key>
<Key ID="STR_ACE_logistics_wirecutter_CutFence"> <Key ID="STR_ACE_logistics_wirecutter_CutFence">
<English>Cut Fence</English> <English>Cut Fence</English>
@ -21,7 +23,7 @@
<Portuguese>Cortar Cerca</Portuguese> <Portuguese>Cortar Cerca</Portuguese>
<Italian>Taglia</Italian> <Italian>Taglia</Italian>
<Hungarian>Drótkerítés átvágása</Hungarian> <Hungarian>Drótkerítés átvágása</Hungarian>
<Russian>Вырезать забор</Russian> <Russian>Разрезать забор</Russian>
</Key> </Key>
<Key ID="STR_ACE_logistics_wirecutter_CuttingFence"> <Key ID="STR_ACE_logistics_wirecutter_CuttingFence">
<English>Cutting Fences / Wires ...</English> <English>Cutting Fences / Wires ...</English>
@ -33,7 +35,7 @@
<Portuguese>Cortando Cerca / Arame ...</Portuguese> <Portuguese>Cortando Cerca / Arame ...</Portuguese>
<Italian>Sto tagliando ...</Italian> <Italian>Sto tagliando ...</Italian>
<Hungarian>Drótok elvágása ...</Hungarian> <Hungarian>Drótok elvágása ...</Hungarian>
<Russian>Вырезаем забор / провода ...</Russian> <Russian>Разрезаем забор / провода ...</Russian>
</Key> </Key>
<Key ID="STR_ACE_logistics_wirecutter_FenceCut"> <Key ID="STR_ACE_logistics_wirecutter_FenceCut">
<English>Fence cut</English> <English>Fence cut</English>
@ -45,7 +47,7 @@
<Portuguese>Cerca cortada</Portuguese> <Portuguese>Cerca cortada</Portuguese>
<Italian>Fatto!</Italian> <Italian>Fatto!</Italian>
<Hungarian>Drótkerítés átvágva</Hungarian> <Hungarian>Drótkerítés átvágva</Hungarian>
<Russian>Забор вырезан</Russian> <Russian>Забор разрезан</Russian>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2015-02-08 --> <!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="MagazineRepack"> <Package name="MagazineRepack">
<Key ID="STR_ACE_MagazineRepack_RepackMagazines"> <Key ID="STR_ACE_MagazineRepack_RepackMagazines">
@ -78,16 +78,19 @@
<English>Repacking Finished</English> <English>Repacking Finished</English>
<German>Wiederverpacken Fertig</German> <German>Wiederverpacken Fertig</German>
<Spanish>Reembalaje Finalizado</Spanish> <Spanish>Reembalaje Finalizado</Spanish>
<Russian>Перепаковка завершена</Russian>
</Key> </Key>
<Key ID="STR_ACE_MagazineRepack_RepackInterrupted"> <Key ID="STR_ACE_MagazineRepack_RepackInterrupted">
<English>Repacking Interrupted</English> <English>Repacking Interrupted</English>
<German>Umpacken Unterbrochen</German> <German>Umpacken Unterbrochen</German>
<Spanish>Reempaque Interrupted</Spanish> <Spanish>Reempaque Interrupted</Spanish>
<Russian>Перепаковка прервана</Russian>
</Key> </Key>
<Key ID="STR_ACE_MagazineRepack_RepackedMagazinesCount"> <Key ID="STR_ACE_MagazineRepack_RepackedMagazinesCount">
<English>%1 Full and %2 Partial</English> <English>%1 Full and %2 Partial</English>
<German>%1 Vollständigen und %2 Teilweisen</German> <German>%1 Vollständigen und %2 Teilweisen</German>
<Spanish>%1 Total y %2 Parcial</Spanish> <Spanish>%1 Total y %2 Parcial</Spanish>
<Russian>%1 полных и %2 неполных</Russian>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2014-12-15 --> <!-- Edited with tabler - 2015-04-10 -->
<Project name="ACE"> <Project name="ACE">
<Package name="Magazines"> <Package name="Magazines">
<!-- MX --> <!-- MX -->
@ -13,7 +13,7 @@
<Czech>6.5mm 30ks Svítící IR-DIM Zásobník</Czech> <Czech>6.5mm 30ks Svítící IR-DIM Zásobník</Czech>
<Portuguese>Carregador de 30 projéteis traçantes IR-DIM de 6,5mm</Portuguese> <Portuguese>Carregador de 30 projéteis traçantes IR-DIM de 6,5mm</Portuguese>
<Italian>Caricatore 6.5mm 30Rnd Traccianti IR-DIM</Italian> <Italian>Caricatore 6.5mm 30Rnd Traccianti IR-DIM</Italian>
<Russian>Магазин из 30-и 6.5 мм трассирующих под ПНВ</Russian> <Russian>Магазин из 30-ти 6.5 мм трассирующих под ПНВ</Russian>
</Key> </Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimNameShort"> <Key ID="STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimNameShort">
<English>6.5mm IR-DIM</English> <English>6.5mm IR-DIM</English>
@ -25,7 +25,7 @@
<Czech>6.5mm IR-DIM</Czech> <Czech>6.5mm IR-DIM</Czech>
<Portuguese>6,5mm IR-DIM</Portuguese> <Portuguese>6,5mm IR-DIM</Portuguese>
<Italian>6.5 IR-DIM</Italian> <Italian>6.5 IR-DIM</Italian>
<Russian>6.5 мм трассирущие под ПНВ</Russian> <Russian>6.5 мм ИК-трассирующие</Russian>
</Key> </Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimDescription"> <Key ID="STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimDescription">
<English>Caliber: 6.5x39 mm Tracer IR-DIM&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: MX/C/M/SW/3GL</English> <English>Caliber: 6.5x39 mm Tracer IR-DIM&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: MX/C/M/SW/3GL</English>
@ -49,7 +49,7 @@
<Czech>6.5mm 30ks SD Zásobník</Czech> <Czech>6.5mm 30ks SD Zásobník</Czech>
<Portuguese>Carregador de 30 projéteis SD de 6,5mm</Portuguese> <Portuguese>Carregador de 30 projéteis SD de 6,5mm</Portuguese>
<Italian>Caricatore 6.5mm 30Rnd Sil.</Italian> <Italian>Caricatore 6.5mm 30Rnd Sil.</Italian>
<Russian>Магазин из 30-и 6.5 мм дозвуковых</Russian> <Russian>Магазин из 30-ти 6.5 мм дозвуковых</Russian>
</Key> </Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_mag_SDNameShort"> <Key ID="STR_ACE_30Rnd_65x39_caseless_mag_SDNameShort">
<English>6.5mm SD</English> <English>6.5mm SD</English>
@ -85,7 +85,7 @@
<Czech>6.5mm 30ks AP Zásobník</Czech> <Czech>6.5mm 30ks AP Zásobník</Czech>
<Portuguese>Carregador de 30 projéteis AP de 6,5mm</Portuguese> <Portuguese>Carregador de 30 projéteis AP de 6,5mm</Portuguese>
<Italian>Caricatore 6.5mm 30Rnd AP</Italian> <Italian>Caricatore 6.5mm 30Rnd AP</Italian>
<Russian>Магазин из 30-и 6.5 мм бронебойных</Russian> <Russian>Магазин из 30-ти 6.5 мм бронебойных</Russian>
</Key> </Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_mag_APNameShort"> <Key ID="STR_ACE_30Rnd_65x39_caseless_mag_APNameShort">
<English>6.5mm AP</English> <English>6.5mm AP</English>
@ -122,7 +122,7 @@
<Czech>6.5mm 30ks Svítící IR-DIM Zásobník</Czech> <Czech>6.5mm 30ks Svítící IR-DIM Zásobník</Czech>
<Portuguese>Carregador de 30 projéteis traçantes IR-DIM de 6,5mm</Portuguese> <Portuguese>Carregador de 30 projéteis traçantes IR-DIM de 6,5mm</Portuguese>
<Italian>Caricatore 6.5mm 30Rnd Traccianti IR-DIM</Italian> <Italian>Caricatore 6.5mm 30Rnd Traccianti IR-DIM</Italian>
<Russian>Магазин из 30-и 6.5 мм трассирующих под ПНВ</Russian> <Russian>Магазин из 30-ти 6.5 мм трассирующих под ПНВ</Russian>
</Key> </Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimNameShort"> <Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimNameShort">
<English>6.5mm IR-DIM</English> <English>6.5mm IR-DIM</English>
@ -134,7 +134,7 @@
<Czech>6.5mm IR-DIM</Czech> <Czech>6.5mm IR-DIM</Czech>
<Portuguese>6,5mm IR-DIM</Portuguese> <Portuguese>6,5mm IR-DIM</Portuguese>
<Italian>6.5mm IR-DIM</Italian> <Italian>6.5mm IR-DIM</Italian>
<Russian>6.5 мм трассирущие под ПНВ</Russian> <Russian>6.5 мм ИК-трассирующие</Russian>
</Key> </Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimDescription"> <Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimDescription">
<English>Caliber: 6.5x39 mm Tracer IR-DIM&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: Katiba</English> <English>Caliber: 6.5x39 mm Tracer IR-DIM&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: Katiba</English>
@ -158,7 +158,7 @@
<Czech>6.5mm 30ks SD Zásobník</Czech> <Czech>6.5mm 30ks SD Zásobník</Czech>
<Portuguese>Carregador de 30 projéteis SD de 6,5mm</Portuguese> <Portuguese>Carregador de 30 projéteis SD de 6,5mm</Portuguese>
<Italian>Caricatore 6.5mm 30Rnd Sil.</Italian> <Italian>Caricatore 6.5mm 30Rnd Sil.</Italian>
<Russian>Магазин из 30-и 6.5 мм дозвуковых</Russian> <Russian>Магазин из 30-ти 6.5 мм дозвуковых</Russian>
</Key> </Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_SDNameShort"> <Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_SDNameShort">
<English>6.5mm SD</English> <English>6.5mm SD</English>
@ -194,7 +194,7 @@
<Czech>6.5mm 30ks AP Zásobník</Czech> <Czech>6.5mm 30ks AP Zásobník</Czech>
<Portuguese>Carregador de 30 projéteis AP de 6,5mm</Portuguese> <Portuguese>Carregador de 30 projéteis AP de 6,5mm</Portuguese>
<Italian>Caricatore 6.5mm 30Rnd AP</Italian> <Italian>Caricatore 6.5mm 30Rnd AP</Italian>
<Russian>Магазин из 30-и 6.5 мм бронебойных</Russian> <Russian>Магазин из 30-ти 6.5 мм бронебойных</Russian>
</Key> </Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_APNameShort"> <Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_APNameShort">
<English>6.5mm AP</English> <English>6.5mm AP</English>
@ -231,7 +231,7 @@
<Czech>5.56mm 30ks Svítící IR-DIM Zásobník</Czech> <Czech>5.56mm 30ks Svítící IR-DIM Zásobník</Czech>
<Portuguese>Carregador de 30 projéteis traçantes IR-DIM de 5,56mm</Portuguese> <Portuguese>Carregador de 30 projéteis traçantes IR-DIM de 5,56mm</Portuguese>
<Italian>Caricatore 5.56mm 30rnd Traccianti IR-DIM</Italian> <Italian>Caricatore 5.56mm 30rnd Traccianti IR-DIM</Italian>
<Russian>Магазин из 30-и 5.56 мм трассирующих под ПНВ</Russian> <Russian>Магазин из 30-ти 5.56 мм трассирующих под ПНВ</Russian>
</Key> </Key>
<Key ID="STR_ACE_30Rnd_556x45_mag_Tracer_DimNameShort"> <Key ID="STR_ACE_30Rnd_556x45_mag_Tracer_DimNameShort">
<English>5.56mm IR-DIM</English> <English>5.56mm IR-DIM</English>
@ -243,7 +243,7 @@
<Czech>5.56mm IR-DIM</Czech> <Czech>5.56mm IR-DIM</Czech>
<Portuguese>5,56mm IR-DIM</Portuguese> <Portuguese>5,56mm IR-DIM</Portuguese>
<Italian>5.56mm IR-DIM</Italian> <Italian>5.56mm IR-DIM</Italian>
<Russian>5.56 мм трассирущие под ПНВ</Russian> <Russian>5.56 мм ИК-трассирующие</Russian>
</Key> </Key>
<Key ID="STR_ACE_30Rnd_556x45_mag_Tracer_DimDescription"> <Key ID="STR_ACE_30Rnd_556x45_mag_Tracer_DimDescription">
<English>Caliber: 5.56x45 mm Tracer IR-DIM&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</English> <English>Caliber: 5.56x45 mm Tracer IR-DIM&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</English>
@ -267,7 +267,7 @@
<Czech>5.56mm 30ks SD Zásobník</Czech> <Czech>5.56mm 30ks SD Zásobník</Czech>
<Portuguese>Carregador de 30 projéteis SD de 5,56mm</Portuguese> <Portuguese>Carregador de 30 projéteis SD de 5,56mm</Portuguese>
<Italian>Caricatore 5.56mm 30Rnd Sil.</Italian> <Italian>Caricatore 5.56mm 30Rnd Sil.</Italian>
<Russian>Магазин из 30-и 5.56 мм дозвуковых</Russian> <Russian>Магазин из 30-ти 5.56 мм дозвуковых</Russian>
</Key> </Key>
<Key ID="STR_ACE_30Rnd_556x45_mag_SDNameShort"> <Key ID="STR_ACE_30Rnd_556x45_mag_SDNameShort">
<English>5.56mm SD</English> <English>5.56mm SD</English>
@ -303,7 +303,7 @@
<Czech>5.56mm 30ks AP Zásobník</Czech> <Czech>5.56mm 30ks AP Zásobník</Czech>
<Portuguese>Carregador de 30 projéteis AP de 5,56mm</Portuguese> <Portuguese>Carregador de 30 projéteis AP de 5,56mm</Portuguese>
<Italian>Caricatore 5.56mm 30Rnd AP</Italian> <Italian>Caricatore 5.56mm 30Rnd AP</Italian>
<Russian>Магазин из 30-и 5.56 мм бронебойных</Russian> <Russian>Магазин из 30-ти 5.56 мм бронебойных</Russian>
</Key> </Key>
<Key ID="STR_ACE_30Rnd_556x45_mag_APNameShort"> <Key ID="STR_ACE_30Rnd_556x45_mag_APNameShort">
<English>5.56mm AP</English> <English>5.56mm AP</English>
@ -340,7 +340,7 @@
<Czech>7.62mm 20ks Svítící Zásobník</Czech> <Czech>7.62mm 20ks Svítící Zásobník</Czech>
<Portuguese>Carregador de 20 projéteis traçantes de 7,62mm</Portuguese> <Portuguese>Carregador de 20 projéteis traçantes de 7,62mm</Portuguese>
<Italian>Caricatore 7.62mm 20Rnd Traccianti</Italian> <Italian>Caricatore 7.62mm 20Rnd Traccianti</Italian>
<Russian>Магазин из 20-и 7.62 мм трассирующих</Russian> <Russian>Магазин из 20-ти 7.62 мм трассирующих</Russian>
</Key> </Key>
<Key ID="STR_ACE_20Rnd_762x51_mag_TracerNameShort"> <Key ID="STR_ACE_20Rnd_762x51_mag_TracerNameShort">
<English>7.62mm Tracer</English> <English>7.62mm Tracer</English>
@ -376,7 +376,7 @@
<Czech>7.62mm 20ks Svítící IR-DIM Zásobník</Czech> <Czech>7.62mm 20ks Svítící IR-DIM Zásobník</Czech>
<Portuguese>Carregador de 20 projéteis IR-DIM de 7,62mm</Portuguese> <Portuguese>Carregador de 20 projéteis IR-DIM de 7,62mm</Portuguese>
<Italian>Caricatore 7.62mm 20rnd Traccianti IR-DIM</Italian> <Italian>Caricatore 7.62mm 20rnd Traccianti IR-DIM</Italian>
<Russian>Магазин из 20-и 7.62 мм трассирующих под ПНВ</Russian> <Russian>Магазин из 20-ти 7.62 мм трассирующих под ПНВ</Russian>
</Key> </Key>
<Key ID="STR_ACE_20Rnd_762x51_mag_Tracer_DimNameShort"> <Key ID="STR_ACE_20Rnd_762x51_mag_Tracer_DimNameShort">
<English>7.62mm IR-DIM</English> <English>7.62mm IR-DIM</English>
@ -388,7 +388,7 @@
<Czech>7.62mm IR-DIM</Czech> <Czech>7.62mm IR-DIM</Czech>
<Portuguese>7,62mm IR-DIM</Portuguese> <Portuguese>7,62mm IR-DIM</Portuguese>
<Italian>7.62mm IR-DIM</Italian> <Italian>7.62mm IR-DIM</Italian>
<Russian>7.62 мм трассирущие под ПНВ</Russian> <Russian>7.62 мм ИК-трассирующие</Russian>
</Key> </Key>
<Key ID="STR_ACE_20Rnd_762x51_mag_Tracer_DimDescription"> <Key ID="STR_ACE_20Rnd_762x51_mag_Tracer_DimDescription">
<English>Caliber: 7.62x51 mm Tracer IR-DIM&lt;br /&gt;Rounds: 20&lt;br /&gt;Used in: Mk18 ABR</English> <English>Caliber: 7.62x51 mm Tracer IR-DIM&lt;br /&gt;Rounds: 20&lt;br /&gt;Used in: Mk18 ABR</English>
@ -412,7 +412,7 @@
<Czech>7.62mm 20ks SD Zásobník</Czech> <Czech>7.62mm 20ks SD Zásobník</Czech>
<Portuguese>Carregador de 20 projéteis SD de 7,62mm</Portuguese> <Portuguese>Carregador de 20 projéteis SD de 7,62mm</Portuguese>
<Italian>Caricatore 7.62mm 20Rnd Sil.</Italian> <Italian>Caricatore 7.62mm 20Rnd Sil.</Italian>
<Russian>Магазин из 20-и 7.62 мм дозвуковых</Russian> <Russian>Магазин из 20-ти 7.62 мм дозвуковых</Russian>
</Key> </Key>
<Key ID="STR_ACE_20Rnd_762x51_mag_SDNameShort"> <Key ID="STR_ACE_20Rnd_762x51_mag_SDNameShort">
<English>7.62mm SD</English> <English>7.62mm SD</English>
@ -448,7 +448,7 @@
<Czech>7.62mm 20ks AP Zásobník</Czech> <Czech>7.62mm 20ks AP Zásobník</Czech>
<Portuguese>Carregador de 20 projéteis AP de 7,62mm</Portuguese> <Portuguese>Carregador de 20 projéteis AP de 7,62mm</Portuguese>
<Italian>Caricatore 7.62mm 20Rnd AP</Italian> <Italian>Caricatore 7.62mm 20Rnd AP</Italian>
<Russian>Магазин из 20-и 7.62 мм бронебойных</Russian> <Russian>Магазин из 20-ти 7.62 мм бронебойных</Russian>
</Key> </Key>
<Key ID="STR_ACE_20Rnd_762x51_mag_APNameShort"> <Key ID="STR_ACE_20Rnd_762x51_mag_APNameShort">
<English>7.62mm AP</English> <English>7.62mm AP</English>
@ -487,4 +487,4 @@
<Italian>Calibro: 7.62x51mm M118LR&lt;br /&gt;Munizioni:20&lt;br /&gt;In uso su: M14</Italian> <Italian>Calibro: 7.62x51mm M118LR&lt;br /&gt;Munizioni:20&lt;br /&gt;In uso su: M14</Italian>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,35 +1,35 @@
#include "script_dialog_defines.hpp" #include "script_dialog_defines.hpp"
class ACE_ABOUT_DLG { class ACE_ABOUT_DLG {
idd = 114137; idd = 114137;
movingEnable = 0; movingEnable = 0;
onLoad = "with uiNameSpace do { ACE_ABOUT_DLG = _this select 0; };"; onLoad = "with uiNameSpace do { ACE_ABOUT_DLG = _this select 0; };";
onKeyDown = "if((_this select 1) == 1) then {ACE_ABOUT_STP = true;};"; onKeyDown = "if((_this select 1) == 1) then {ACE_ABOUT_STP = true;};";
class controlsBackground { class controlsBackground {
class Contents : RscStructuredText { class Contents : RscStructuredText {
idc = 1141371; idc = 1141371;
colorBackground[] = { 0, 0, 0, 0 }; colorBackground[] = { 0, 0, 0, 0 };
__SX(0.45); __SX(0.45);
__SY(0.25); __SY(0.25);
__SW(0.45); __SW(0.45);
__SH(0.6); __SH(0.6);
size = "0.025 * SafeZoneH"; size = "0.025 * SafeZoneH";
class Attributes { class Attributes {
font = "TahomaB"; font = "TahomaB";
color = "#C8C8C8"; color = "#C8C8C8";
align = "left"; align = "left";
valign = "middle"; valign = "middle";
shadow = true; shadow = true;
shadowColor = "#191970"; shadowColor = "#191970";
size = "1"; size = "1";
}; };
}; };
class ACE_ABOUT_NEXT : ACE_ABOUT_CTRL { //dummy visible class ACE_ABOUT_NEXT : ACE_ABOUT_CTRL { //dummy visible
idc = 1141372; idc = 1141372;
__SX(0.065); __SX(0.065);
__SW(0.03); __SW(0.03);
text = ""; text = "";
action = ""; action = "";
}; };
}; //controlsBackground }; //controlsBackground
}; };

View File

@ -1,8 +1,8 @@
class CfgFactionClasses { class CfgFactionClasses {
class NO_CATEGORY; class NO_CATEGORY;
class ACE: NO_CATEGORY { class ACE: NO_CATEGORY {
displayName = "ACE"; displayName = "ACE";
priority = 2; priority = 2;
side = 7; side = 7;
}; };
}; };

View File

@ -1,210 +1,210 @@
#include "script_component.hpp" #include "script_component.hpp"
#include "\z\ace\addons\main\script_common.hpp" #include "\z\ace\addons\main\script_common.hpp"
if (!isNil "ACE_ABOUT_RUN") exitWith {ACE_ABOUT_RUN = false;}; if (!isNil "ACE_ABOUT_RUN") exitWith {ACE_ABOUT_RUN = false;};
ACE_ABOUT_RUN = true; ACE_ABOUT_RUN = true;
disableSerialization; disableSerialization;
PARAMS_2(_menu,_data); PARAMS_2(_menu,_data);
private ["_pcredits", "_pkeynam", "_shift", "_ctrl", "_alt", "_keys", "_key", "_keystrg", "_mod", "_knaml", "_knam", "_k", "_pkeys", "_pary", "_tpages", "_cEvents", "_i", "_cSys", "_tSys", "_aSys", "_tS", "_j", "_c", "_tC", "_keyn", "_fadet", "_page1", "_color", "_bcolor", "_newpages", "_pstart", "_pcount", "_pnext", "_display", "_control", "_pnames", "_pnam", "_page", "_pages", "_run", "_disp", "_next", "_input", "_nesc", "_unset", "_p", "_text", "_curPage", "_time", "_faded"]; private ["_pcredits", "_pkeynam", "_shift", "_ctrl", "_alt", "_keys", "_key", "_keystrg", "_mod", "_knaml", "_knam", "_k", "_pkeys", "_pary", "_tpages", "_cEvents", "_i", "_cSys", "_tSys", "_aSys", "_tS", "_j", "_c", "_tC", "_keyn", "_fadet", "_page1", "_color", "_bcolor", "_newpages", "_pstart", "_pcount", "_pnext", "_display", "_control", "_pnames", "_pnam", "_page", "_pages", "_run", "_disp", "_next", "_input", "_nesc", "_unset", "_p", "_text", "_curPage", "_time", "_faded"];
_pcredits = [ _pcredits = [
"", "",
"<t align='center' color='#CC1100'>Advanced Combat Environment 2</t>", "<t align='center' color='#CC1100'>Advanced Combat Environment 2</t>",
"<t align='center' color='#566D7E'>http://dev-heaven.net/projects/ace-mod2</t>", "<t align='center' color='#566D7E'>http://dev-heaven.net/projects/ace-mod2</t>",
"", "",
__cr_managers, __cr_managers,
"", "",
__cr_devs, __cr_devs,
"", "",
__cr_testers, __cr_testers,
"", "",
"For a full list of acknowledgements, please visit our Wiki:", "For a full list of acknowledgements, please visit our Wiki:",
"<t color='#566D7E'>http://ace.dev-heaven.net</t>" "<t color='#566D7E'>http://ace.dev-heaven.net</t>"
]; ];
_pkeynam = { //local function _pkeynam = { //local function
_shift = if (_shift > 0) then {42} else {0}; _shift = if (_shift > 0) then {42} else {0};
_ctrl = if (_ctrl > 0) then {56} else {0}; _ctrl = if (_ctrl > 0) then {56} else {0};
_alt = if (_alt > 0) then {29} else {0}; _alt = if (_alt > 0) then {29} else {0};
_keys = [_shift,_ctrl,_alt,_key]; _keys = [_shift,_ctrl,_alt,_key];
_keystrg = "^"; _keystrg = "^";
{ {
_mod = _x in [42,56,29]; _mod = _x in [42,56,29];
_knaml = call compile format["format['%2',%1]",(keyName _x),"%1"]; _knaml = call compile format["format['%2',%1]",(keyName _x),"%1"];
_knaml = [_knaml, " "] call CBA_fnc_split; _knaml = [_knaml, " "] call CBA_fnc_split;
_knam = "^"; _knam = "^";
{_k = _x; if (!_mod || (_k != (localize "STR_ACE_KN_LEFT") && _k != (localize "STR_ACE_KN_RIGHT"))) then {_knam = _knam + " " + _k}} forEach _knaml; {_k = _x; if (!_mod || (_k != (localize "STR_ACE_KN_LEFT") && _k != (localize "STR_ACE_KN_RIGHT"))) then {_knam = _knam + " " + _k}} forEach _knaml;
_knam = [_knam, "^ ", ""] call CBA_fnc_replace; _knam = [_knam, "^ ", ""] call CBA_fnc_replace;
_keystrg = _keystrg + "-" + _knam; _keystrg = _keystrg + "-" + _knam;
} forEach _keys; } forEach _keys;
_keystrg = [_keystrg, "^ ", ""] call CBA_fnc_replace; _keystrg = [_keystrg, "^ ", ""] call CBA_fnc_replace;
_keystrg = [_keystrg, "^-", ""] call CBA_fnc_replace; _keystrg = [_keystrg, "^-", ""] call CBA_fnc_replace;
_keystrg = [_keystrg, "^", "None"] call CBA_fnc_replace; _keystrg = [_keystrg, "^", "None"] call CBA_fnc_replace;
_keystrg _keystrg
}; };
_pkeys = { _pkeys = {
_pary = []; _pary = [];
_tpages = []; _tpages = [];
_cEvents = configFile/"CfgSettings"/"CBA"/"events"; _cEvents = configFile/"CfgSettings"/"CBA"/"events";
for "_i" from 0 to (count _cEvents) - 1 do { for "_i" from 0 to (count _cEvents) - 1 do {
_cSys = _cEvents select _i; _cSys = _cEvents select _i;
_tSys = configName _cSys; _tSys = configName _cSys;
if (isNumber ((_cSys select 0)/"key")) then { if (isNumber ((_cSys select 0)/"key")) then {
//format system name //format system name
_aSys = [_tSys, "_"] call CBA_fnc_split; _aSys = [_tSys, "_"] call CBA_fnc_split;
_tS = "^"; _tS = "^";
{if (_x != "ace" && _x != "sys") then {_tS = _tS + " " + _x}} forEach _aSys; {if (_x != "ace" && _x != "sys") then {_tS = _tS + " " + _x}} forEach _aSys;
_tS = [_tS, "^ ", ""] call CBA_fnc_replace; _tS = [_tS, "^ ", ""] call CBA_fnc_replace;
_tS = format["<t color='#99cccc'>%1:</t>",_tS]; _tS = format["<t color='#99cccc'>%1:</t>",_tS];
PUSH(_pary,_tS); PUSH(_pary,_tS);
for "_j" from 0 to (count _cSys) - 1 do { for "_j" from 0 to (count _cSys) - 1 do {
_c = _cSys select _j; _c = _cSys select _j;
_tC = configName _c; _tC = configName _c;
_tC = [_tC, "_", " "] call CBA_fnc_replace; _tC = [_tC, "_", " "] call CBA_fnc_replace;
//key //key
_key = getNumber (_c/"key"); _key = getNumber (_c/"key");
_shift = getNumber (_c/"shift"); _shift = getNumber (_c/"shift");
_ctrl = getNumber (_c/"ctrl"); _ctrl = getNumber (_c/"ctrl");
_alt = getNumber (_c/"alt"); _alt = getNumber (_c/"alt");
_keyn = [_key,_shift,_ctrl,_alt] call _pkeynam; _keyn = [_key,_shift,_ctrl,_alt] call _pkeynam;
_tC = format[" %1: %2",_tC,_keyn]; _tC = format[" %1: %2",_tC,_keyn];
PUSH(_pary,_tC); PUSH(_pary,_tC);
}; };
}; };
if (count _pary > 20) then { //split full page if (count _pary > 20) then { //split full page
PUSH(_tpages,_pary); PUSH(_tpages,_pary);
_pary = []; _pary = [];
}; };
}; };
if (count _pary > 0) then { //partial page if (count _pary > 0) then { //partial page
PUSH(_tpages,_pary); PUSH(_tpages,_pary);
_pary = []; _pary = [];
}; };
_tpages _tpages
}; };
//pages (make sure each will fit within 24 lines, word wrap is on) //pages (make sure each will fit within 24 lines, word wrap is on)
switch(_menu) do { switch(_menu) do {
case "MAIN": { //note: not all scripting commands available on main menu (not compiled yet?) case "MAIN": { //note: not all scripting commands available on main menu (not compiled yet?)
_fadet = 13; _fadet = 13;
_page1 = _pcredits; _page1 = _pcredits;
}; };
case "SING": { case "SING": {
_fadet = 20; //fade time _fadet = 20; //fade time
_color = [1,1,1,1]; _color = [1,1,1,1];
//_bcolor = [0,0,0,0.3]; //_bcolor = [0,0,0,0.3];
_page1 = _pcredits; _page1 = _pcredits;
_newpages = [] call _pkeys; _newpages = [] call _pkeys;
_pstart = 2; _pstart = 2;
_pcount = count _newpages; _pcount = count _newpages;
_pnext = _pstart + _pcount; _pnext = _pstart + _pcount;
}; };
case "MULT": { case "MULT": {
_fadet = 20; _fadet = 20;
_color = [1,1,1,1]; _color = [1,1,1,1];
//_bcolor = [0,0,0,0.3]; //_bcolor = [0,0,0,0.3];
_page1 = _pcredits; _page1 = _pcredits;
_newpages = [] call _pkeys; _newpages = [] call _pkeys;
_pstart = 2; _pstart = 2;
_pcount = count _newpages; _pcount = count _newpages;
_pnext = _pstart + _pcount; _pnext = _pstart + _pcount;
}; };
default {}; default {};
}; };
//main menu display //main menu display
if (typeName(_data select 0) == "DISPLAY") then { if (typeName(_data select 0) == "DISPLAY") then {
_display = _data select 0; _display = _data select 0;
}; };
if (typeName(_data select 0) == "CONTROL") then { if (typeName(_data select 0) == "CONTROL") then {
_control = _data select 0; _control = _data select 0;
_display = ctrlParent _control; _display = ctrlParent _control;
}; };
//dynamic pages //dynamic pages
_pnames = []; _pnames = [];
for "_x" from _pstart to _pnext - 1 do { for "_x" from _pstart to _pnext - 1 do {
_pnam = format ["_page%1",_x]; _pnam = format ["_page%1",_x];
PUSH(_pnames,_pnam); PUSH(_pnames,_pnam);
}; };
private _pnames; private _pnames;
for "_x" from 0 to _pcount - 1 do { for "_x" from 0 to _pcount - 1 do {
call compile format ["%1 = %2", _pnames select _x, _newpages select _x]; call compile format ["%1 = %2", _pnames select _x, _newpages select _x];
}; };
//get num pages //get num pages
_pages = 0; _pages = 0;
_run = true; _run = true;
while {_run} do { while {_run} do {
INC(_pages); INC(_pages);
if (isNil format ["_page%1", _pages]) exitWith {_pages = _pages - 1; _run = false}; if (isNil format ["_page%1", _pages]) exitWith {_pages = _pages - 1; _run = false};
}; };
if (_pages > 0) then { if (_pages > 0) then {
//Dialog //Dialog
createDialog "ACE_ABOUT_DLG"; createDialog "ACE_ABOUT_DLG";
_disp = uiNamespace getVariable "ACE_ABOUT_DLG"; _disp = uiNamespace getVariable "ACE_ABOUT_DLG";
_ctrl = _disp displayCtrl 1141371; _ctrl = _disp displayCtrl 1141371;
_next = _disp displayCtrl 1141372; _next = _disp displayCtrl 1141372;
if (_pages > 1) then {_next ctrlSetText "Next"}; if (_pages > 1) then {_next ctrlSetText "Next"};
_ctrl ctrlSetFade 1; _ctrl ctrlSetFade 1;
_ctrl ctrlCommit 0; _ctrl ctrlCommit 0;
_ctrl ctrlSetFade 0; _ctrl ctrlSetFade 0;
_ctrl ctrlCommit 3; _ctrl ctrlCommit 3;
ACE_ABOUT_INC = 0; ACE_ABOUT_INC = 0;
_input = { //local function _input = { //local function
_nesc = isNil "ACE_ABOUT_STP"; _nesc = isNil "ACE_ABOUT_STP";
if (_pages == 1) then {ACE_ABOUT_INC = 0}; //ignore special control if (_pages == 1) then {ACE_ABOUT_INC = 0}; //ignore special control
_unset = (ACE_ABOUT_INC == 0) && ACE_ABOUT_RUN; _unset = (ACE_ABOUT_INC == 0) && ACE_ABOUT_RUN;
if (_unset && _nesc) then {false} else {_fadet = _fadet + 5; true}; if (_unset && _nesc) then {false} else {_fadet = _fadet + 5; true};
}; };
//by default cycle //by default cycle
for "_p" from 1 to _pages do { for "_p" from 1 to _pages do {
_text = ""; _text = "";
_page = call compile format["_page%1",_p]; _page = call compile format["_page%1",_p];
_curPage = _p; _curPage = _p;
{ {
_text = _text + _x + "<br />"; _text = _text + _x + "<br />";
_ctrl ctrlSetStructuredText parseText _text; _ctrl ctrlSetStructuredText parseText _text;
if (call _input) exitWith {_p = _pages}; if (call _input) exitWith {_p = _pages};
if (_x != "") then {uisleep 0.8}; if (_x != "") then {uisleep 0.8};
} forEach _page; } forEach _page;
}; };
_run = true; _run = true;
while {if (isNil "ACE_ABOUT_STP") then {_run} else {false}} do { while {if (isNil "ACE_ABOUT_STP") then {_run} else {false}} do {
_ctrl ctrlSetFade 0; _ctrl ctrlSetFade 0;
_ctrl ctrlCommit 0; _ctrl ctrlCommit 0;
if (!isNil "_color") then {_ctrl ctrlSetTextColor _color}; if (!isNil "_color") then {_ctrl ctrlSetTextColor _color};
if (!isNil "_bcolor") then {_ctrl ctrlSetBackgroundColor _bcolor}; if (!isNil "_bcolor") then {_ctrl ctrlSetBackgroundColor _bcolor};
_curPage = _curPage + ACE_ABOUT_INC; _curPage = _curPage + ACE_ABOUT_INC;
if (_curPage > _pages) then {_curPage = 1}; if (_curPage > _pages) then {_curPage = 1};
if (_curPage <= 0) then {_curPage = 1}; if (_curPage <= 0) then {_curPage = 1};
ACE_ABOUT_INC = 0; ACE_ABOUT_INC = 0;
if (!ACE_ABOUT_RUN) then {ACE_ABOUT_RUN = true}; if (!ACE_ABOUT_RUN) then {ACE_ABOUT_RUN = true};
_text = ""; _text = "";
_page = call compile format ["_page%1",_curPage]; _page = call compile format ["_page%1",_curPage];
{_text = _text + _x + "<br />"} forEach _page; {_text = _text + _x + "<br />"} forEach _page;
_ctrl ctrlSetStructuredText parseText _text; _ctrl ctrlSetStructuredText parseText _text;
_ctrl ctrlSetFade 1; _ctrl ctrlSetFade 1;
_ctrl ctrlCommit _fadet; _ctrl ctrlCommit _fadet;
_time = time + _fadet + 2; _time = time + _fadet + 2;
waitUntil{uisleep 1; _run = call _input; _faded = time > _time; (_run || _faded)}; waitUntil{uisleep 1; _run = call _input; _faded = time > _time; (_run || _faded)};
}; //while RUN }; //while RUN
}; };
ACE_ABOUT_STP = Nil; ACE_ABOUT_STP = Nil;
ACE_ABOUT_RUN = Nil; ACE_ABOUT_RUN = Nil;
closeDialog 0; closeDialog 0;

File diff suppressed because it is too large Load Diff

View File

@ -1,92 +1,92 @@
License (short) License (short)
=============== ===============
You are free: You are free:
- to Share — to copy, distribute and transmit the work - to Share — to copy, distribute and transmit the work
Under the following conditions: Under the following conditions:
- Attribution — You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). - Attribution — You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).
- Noncommercial — You may not use this work for commercial purposes. - Noncommercial — You may not use this work for commercial purposes.
- No Derivative Works — You may not alter, transform, or build upon this work. - No Derivative Works — You may not alter, transform, or build upon this work.
With the understanding that: With the understanding that:
Waiver — Any of the above conditions can be waived if you get permission from the copyright holder. Waiver — Any of the above conditions can be waived if you get permission from the copyright holder.
Public Domain — Where the work or any of its elements is in the public domain under applicable law, that status is in no way affected by the license. Public Domain — Where the work or any of its elements is in the public domain under applicable law, that status is in no way affected by the license.
Other Rights — In no way are any of the following rights affected by the license: Other Rights — In no way are any of the following rights affected by the license:
- Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations; - Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations;
- The author's moral rights; - The author's moral rights;
- Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights. - Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights.
Notice — For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page. Notice — For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page.
Full license text Full license text
================= =================
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
1. Definitions 1. Definitions
"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
"Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership. "Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership.
"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
2. Fair Dealing Rights. 2. Fair Dealing Rights.
Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
3. License Grant. 3. License Grant.
Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and, to Distribute and Publicly Perform the Work including as incorporated in Collections. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and, to Distribute and Publicly Perform the Work including as incorporated in Collections.
The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d). The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d).
4. Restrictions. 4. Restrictions.
The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested.
You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.
If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
For the avoidance of doubt: For the avoidance of doubt:
Non-waivable Compulsory License Schemes. Non-waivable Compulsory License Schemes.
In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,
Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b). Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b).
Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation.
5. Representations, Warranties and Disclaimer. 5. Representations, Warranties and Disclaimer.
UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination. 7. Termination.
This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work).
Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
8. Miscellaneous. 8. Miscellaneous.
Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.

View File

@ -1,92 +1,92 @@
License (short) License (short)
=============== ===============
You are free: You are free:
- to Share — to copy, distribute and transmit the work - to Share — to copy, distribute and transmit the work
Under the following conditions: Under the following conditions:
- Attribution — You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). - Attribution — You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).
- Noncommercial — You may not use this work for commercial purposes. - Noncommercial — You may not use this work for commercial purposes.
- No Derivative Works — You may not alter, transform, or build upon this work. - No Derivative Works — You may not alter, transform, or build upon this work.
With the understanding that: With the understanding that:
Waiver — Any of the above conditions can be waived if you get permission from the copyright holder. Waiver — Any of the above conditions can be waived if you get permission from the copyright holder.
Public Domain — Where the work or any of its elements is in the public domain under applicable law, that status is in no way affected by the license. Public Domain — Where the work or any of its elements is in the public domain under applicable law, that status is in no way affected by the license.
Other Rights — In no way are any of the following rights affected by the license: Other Rights — In no way are any of the following rights affected by the license:
- Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations; - Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations;
- The author's moral rights; - The author's moral rights;
- Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights. - Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights.
Notice — For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page. Notice — For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page.
Full license text Full license text
================= =================
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
1. Definitions 1. Definitions
"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
"Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership. "Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership.
"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
2. Fair Dealing Rights. 2. Fair Dealing Rights.
Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
3. License Grant. 3. License Grant.
Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and, to Distribute and Publicly Perform the Work including as incorporated in Collections. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and, to Distribute and Publicly Perform the Work including as incorporated in Collections.
The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d). The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d).
4. Restrictions. 4. Restrictions.
The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested.
You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.
If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
For the avoidance of doubt: For the avoidance of doubt:
Non-waivable Compulsory License Schemes. Non-waivable Compulsory License Schemes.
In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,
Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b). Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b).
Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation.
5. Representations, Warranties and Disclaimer. 5. Representations, Warranties and Disclaimer.
UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination. 7. Termination.
This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work).
Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
8. Miscellaneous. 8. Miscellaneous.
Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.

View File

@ -1,3 +1,3 @@
#define __cr_managers "Manager: " #define __cr_managers "Manager: "
#define __cr_devs "Developer:" #define __cr_devs "Developer:"
#define __cr_testers "Contributor: " #define __cr_testers "Contributor: "

View File

@ -1,14 +1,14 @@
#define COMPONENT main #define COMPONENT main
#include "\z\ace\addons\main\script_mod.hpp" #include "\z\ace\addons\main\script_mod.hpp"
// #define DEBUG_MODE_FULL // #define DEBUG_MODE_FULL
#ifdef DEBUG_ENABLED_CORE #ifdef DEBUG_ENABLED_CORE
#define DEBUG_MODE_FULL #define DEBUG_MODE_FULL
#endif #endif
#ifdef DEBUG_SETTINGS_CORE #ifdef DEBUG_SETTINGS_CORE
#define DEBUG_SETTINGS DEBUG_SETTINGS_CORE #define DEBUG_SETTINGS DEBUG_SETTINGS_CORE
#endif #endif
#include "\z\ace\addons\main\script_macros.hpp" #include "\z\ace\addons\main\script_macros.hpp"

View File

@ -1,43 +1,43 @@
#define true 1 #define true 1
#define false 0 #define false 0
#define private 0 #define private 0
#define protected 1 #define protected 1
#define public 2 #define public 2
#define TEast 0 #define TEast 0
#define TWest 1 #define TWest 1
#define TGuerrila 2 #define TGuerrila 2
#define TCivilian 3 #define TCivilian 3
#define TSideUnknown 4 #define TSideUnknown 4
#define TEnemy 5 #define TEnemy 5
#define TFriendly 6 #define TFriendly 6
#define TLogic 7 #define TLogic 7
#define VSoft 0 #define VSoft 0
#define VArmor 1 #define VArmor 1
#define VAir 2 #define VAir 2
#define LockNo 0 #define LockNo 0
#define LockCadet 1 #define LockCadet 1
#define LockYes 2 #define LockYes 2
#define ReadAndWrite 0 #define ReadAndWrite 0
#define ReadAndCreate 1 #define ReadAndCreate 1
#define ReadOnly 2 #define ReadOnly 2
#define ReadOnlyVerified 3 #define ReadOnlyVerified 3
#define WeaponNoSlot 0 // dummy weapons #define WeaponNoSlot 0 // dummy weapons
#define WeaponSlotPrimary 1 // primary weapons #define WeaponSlotPrimary 1 // primary weapons
#define WeaponSlotSecondary 16 // secondary weapons #define WeaponSlotSecondary 16 // secondary weapons
#define WeaponSlotItem 256 // items #define WeaponSlotItem 256 // items
#define WeaponSlotBinocular 4096 // binocular #define WeaponSlotBinocular 4096 // binocular
#define WeaponHardMounted 65536 #define WeaponHardMounted 65536
#define CanSeeRadar 1 #define CanSeeRadar 1
#define CanSeeRye 2 #define CanSeeRye 2
#define CanSeeOptics 4 #define CanSeeOptics 4
#define CanSeeEar 4 #define CanSeeEar 4
#define CanSeeCompass 16 #define CanSeeCompass 16
#define CanSeeRadarC CanSeeRadar+CanSeeCompass #define CanSeeRadarC CanSeeRadar+CanSeeCompass
#define CanSeeAll 31 #define CanSeeAll 31

Some files were not shown because too many files have changed in this diff Show More