mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
parent
fab5605ad5
commit
68d08b8c7b
17
.gitattributes
vendored
17
.gitattributes
vendored
@ -1,17 +0,0 @@
|
||||
# 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
12
.gitignore
vendored
@ -1,6 +1,6 @@
|
||||
release/*
|
||||
*.cache
|
||||
*.pbo
|
||||
texHeaders.bin
|
||||
*.swp
|
||||
*.swo
|
||||
release/*
|
||||
*.cache
|
||||
*.pbo
|
||||
texHeaders.bin
|
||||
*.swp
|
||||
*.swo
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler - 2015-04-07 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Attach">
|
||||
<Key ID="STR_ACE_Attach_AttachDetach">
|
||||
@ -48,7 +48,7 @@
|
||||
<Portuguese>Marcador IV Acoplado</Portuguese>
|
||||
<Italian>Strobo IR attaccata</Italian>
|
||||
<Hungarian>Infravörös jeladó hozzácsatolva</Hungarian>
|
||||
<Russian>ИК-маяк присоединён</Russian>
|
||||
<Russian>ИК строб присоединён</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Attach_IrStrobe_Detached">
|
||||
<English>IR Strobe Detached</English>
|
||||
@ -60,7 +60,7 @@
|
||||
<Portuguese>Marcador IV Separado</Portuguese>
|
||||
<Italian>Strobo IR staccata</Italian>
|
||||
<Hungarian>Infravörös jeladó lecsatolva</Hungarian>
|
||||
<Russian>ИК-маяк отсоединён</Russian>
|
||||
<Russian>ИК строб отсоединён</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Attach_IrGrenade_Attached">
|
||||
<English>IR Grenade Attached</English>
|
||||
@ -72,7 +72,7 @@
|
||||
<Portuguese>Granada IV Acoplada</Portuguese>
|
||||
<Italian>Granata IR attaccata</Italian>
|
||||
<Hungarian>Infravörös gránát hozzácsatolva</Hungarian>
|
||||
<Russian>ИК-граната присоединена</Russian>
|
||||
<Russian>ИК граната присоединена</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Attach_IrGrenade_Detached">
|
||||
<English>IR Grenade Detached</English>
|
||||
@ -84,7 +84,7 @@
|
||||
<Portuguese>Granada IV Separada</Portuguese>
|
||||
<Italian>Granata IR staccata</Italian>
|
||||
<Hungarian>Infravörös gránát lecsatolva</Hungarian>
|
||||
<Russian>ИК-граната отсоединена</Russian>
|
||||
<Russian>ИК граната отсоединена</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Attach_Chemlight_Attached">
|
||||
<English>Chemlight Attached</English>
|
||||
@ -132,7 +132,7 @@
|
||||
<Portuguese>Marcador IV</Portuguese>
|
||||
<Italian>Strobo IR</Italian>
|
||||
<Hungarian>Infravörös jeladó</Hungarian>
|
||||
<Russian>ИК-маяк</Russian>
|
||||
<Russian>ИК строб</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_IrStrobe_Description">
|
||||
<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>
|
||||
<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>
|
||||
<Russian>ИК-маяк позволяет сигнализировать о своём местоположении через пульсирующий свет, видимый только через ПНВ.</Russian>
|
||||
<Russian>ИК строб позволяет сигнализировать свое местоположение через пульсирующий маяк, видимый только через ПНВ.</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Attach_PlaceAction">
|
||||
<English>Place</English>
|
||||
@ -156,7 +156,6 @@
|
||||
<Portuguese>Colocar</Portuguese>
|
||||
<Italian>Posiziona</Italian>
|
||||
<Hungarian>Elhelyez</Hungarian>
|
||||
<Russian>Установить</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Attach_CancelAction">
|
||||
<English>Cancel</English>
|
||||
@ -168,14 +167,13 @@
|
||||
<Portuguese>Cancelar</Portuguese>
|
||||
<Italian>Annulla</Italian>
|
||||
<Hungarian>Mégse</Hungarian>
|
||||
<Russian>Отмена</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Attach_Failed">
|
||||
<English>Attach Failed</English>
|
||||
<French>Échec du Attacher</French>
|
||||
<German>Befestigen fehlgeschlagen</German>
|
||||
<Russian>Соединение прервано</Russian>
|
||||
<Russian>Присоединить Ошибка</Russian>
|
||||
<Spanish>Error al acoplar</Spanish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
||||
|
@ -1,20 +1,20 @@
|
||||
class CfgAmmo {
|
||||
class BulletCore;
|
||||
|
||||
class BulletBase: BulletCore {
|
||||
timeToLive = 15; // Default: 6, doubleplusgood all munition range.
|
||||
};
|
||||
|
||||
class B_20mm : BulletBase {
|
||||
timeToLive = 30;
|
||||
};
|
||||
class B_25mm : BulletBase {
|
||||
timeToLive = 30;
|
||||
};
|
||||
class B_35mm_AA : BulletBase {
|
||||
timeToLive = 30;
|
||||
};
|
||||
class B_30mm_AP : BulletBase {
|
||||
timeToLive = 30;
|
||||
};
|
||||
class CfgAmmo {
|
||||
class BulletCore;
|
||||
|
||||
class BulletBase: BulletCore {
|
||||
timeToLive = 15; // Default: 6, doubleplusgood all munition range.
|
||||
};
|
||||
|
||||
class B_20mm : BulletBase {
|
||||
timeToLive = 30;
|
||||
};
|
||||
class B_25mm : BulletBase {
|
||||
timeToLive = 30;
|
||||
};
|
||||
class B_35mm_AA : BulletBase {
|
||||
timeToLive = 30;
|
||||
};
|
||||
class B_30mm_AP : BulletBase {
|
||||
timeToLive = 30;
|
||||
};
|
||||
};
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler - 2015-04-07 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Captives">
|
||||
<Key ID="STR_ACE_Captives_SetCaptive">
|
||||
@ -134,31 +134,26 @@
|
||||
<English>Surrender</English>
|
||||
<German>Kapitulieren</German>
|
||||
<Spanish>Rendirse</Spanish>
|
||||
<Russian>Сдаться</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_StopSurrendering">
|
||||
<English>Stop Surrendering</English>
|
||||
<German>Den Kampf erneut aufnehmen</German>
|
||||
<Spanish>Dejar de rendirse</Spanish>
|
||||
<Russian>Остановить сдачу</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_Zeus_OnlyAlive">
|
||||
<English>Only use on alive units</English>
|
||||
<German>Nur bei lebenden Einheiten verwendbar</German>
|
||||
<Spanish>Utilizar solo en unidades vivas</Spanish>
|
||||
<Russian>Только для живых юнитов</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_Zeus_OnlyInfantry">
|
||||
<English>Only use on dismounted inf</English>
|
||||
<German>Nur bei abgesessener Infanterie verwendbar</German>
|
||||
<Spanish>Utilizar solo en infanteria desmontada</Spanish>
|
||||
<Russian>Только для спеш. солдат</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_Zeus_NothingSelected">
|
||||
<English>Nothing under mouse</English>
|
||||
<German>Es wurde nichts ausgewählt</German>
|
||||
<Spanish>Nada bajo el ratón</Spanish>
|
||||
<Russian>Объекты под мышью отсутствуют</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
||||
|
@ -1,74 +1,74 @@
|
||||
//fnc__handleNetEvent.sqf
|
||||
// internal handler for net events
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_eventType", "_event", "_eventName", "_eventArgs", "_eventNames", "_eventIndex", "_eventTargets", "_sentEvents", "_owner", "_serverFlagged"];
|
||||
|
||||
_eventType = _this select 0;
|
||||
_event = _this select 1;
|
||||
|
||||
if(_eventType == "ACEg") then {
|
||||
_eventName = _event select 0;
|
||||
_eventArgs = _event select 1;
|
||||
|
||||
_eventNames = GVAR(events) select 0;
|
||||
_eventIndex = _eventNames find _eventName;
|
||||
if(_eventIndex != -1) then {
|
||||
_events = (GVAR(events) select 1) select _eventIndex;
|
||||
|
||||
#ifdef DEBUG_EVENTS
|
||||
diag_log text format[ARR_2("* Net Event %1",_eventName)];
|
||||
diag_log text format[ARR_2(" args=%1",_eventArgs)];
|
||||
#endif
|
||||
|
||||
{
|
||||
if(!isNil "_x") then {
|
||||
_eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Net Event %1 ID: %2",_eventName,_forEachIndex)]);
|
||||
#ifdef DEBUG_EVENTS_CALLSTACK
|
||||
diag_log text format[ARR_2(" ID: %1",_forEachIndex)];
|
||||
#endif
|
||||
};
|
||||
} forEach _events;
|
||||
};
|
||||
};
|
||||
|
||||
if(_eventType == "ACEc") then {
|
||||
if(isServer) then {
|
||||
_eventName = _event select 0;
|
||||
_eventTargets = _event select 1;
|
||||
_eventArgs = _event select 2;
|
||||
|
||||
_sentEvents = [];
|
||||
if(!IS_ARRAY(_eventTargets)) then {
|
||||
_eventTargets = [_eventTargets];
|
||||
};
|
||||
|
||||
//If not multiplayer, and there are targets, then just run localy
|
||||
if ((!isMultiplayer) && {(count _eventTargets) > 0}) exitWith {
|
||||
ACEg = [_eventName, _eventArgs];
|
||||
["ACEg", ACEg] call FUNC(_handleNetEvent);
|
||||
};
|
||||
|
||||
_serverFlagged = false;
|
||||
{
|
||||
_owner = _x;
|
||||
if(IS_OBJECT(_x)) then {
|
||||
_owner = owner _x;
|
||||
};
|
||||
if(!(_owner in _sentEvents)) then {
|
||||
PUSH(_sentEvents, _owner);
|
||||
ACEg = [_eventName, _eventArgs];
|
||||
if(isDedicated || {_x != ACE_player}) then {
|
||||
if(isDedicated && {local _x} && {!_serverFlagged}) then {
|
||||
_serverFlagged = true;
|
||||
["ACEg", ACEg] call FUNC(_handleNetEvent);
|
||||
} else {
|
||||
_owner publicVariableClient "ACEg";
|
||||
};
|
||||
} else {
|
||||
["ACEg", ACEg] call FUNC(_handleNetEvent);
|
||||
};
|
||||
};
|
||||
} forEach _eventTargets;
|
||||
};
|
||||
//fnc__handleNetEvent.sqf
|
||||
// internal handler for net events
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_eventType", "_event", "_eventName", "_eventArgs", "_eventNames", "_eventIndex", "_eventTargets", "_sentEvents", "_owner", "_serverFlagged"];
|
||||
|
||||
_eventType = _this select 0;
|
||||
_event = _this select 1;
|
||||
|
||||
if(_eventType == "ACEg") then {
|
||||
_eventName = _event select 0;
|
||||
_eventArgs = _event select 1;
|
||||
|
||||
_eventNames = GVAR(events) select 0;
|
||||
_eventIndex = _eventNames find _eventName;
|
||||
if(_eventIndex != -1) then {
|
||||
_events = (GVAR(events) select 1) select _eventIndex;
|
||||
|
||||
#ifdef DEBUG_EVENTS
|
||||
diag_log text format[ARR_2("* Net Event %1",_eventName)];
|
||||
diag_log text format[ARR_2(" args=%1",_eventArgs)];
|
||||
#endif
|
||||
|
||||
{
|
||||
if(!isNil "_x") then {
|
||||
_eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Net Event %1 ID: %2",_eventName,_forEachIndex)]);
|
||||
#ifdef DEBUG_EVENTS_CALLSTACK
|
||||
diag_log text format[ARR_2(" ID: %1",_forEachIndex)];
|
||||
#endif
|
||||
};
|
||||
} forEach _events;
|
||||
};
|
||||
};
|
||||
|
||||
if(_eventType == "ACEc") then {
|
||||
if(isServer) then {
|
||||
_eventName = _event select 0;
|
||||
_eventTargets = _event select 1;
|
||||
_eventArgs = _event select 2;
|
||||
|
||||
_sentEvents = [];
|
||||
if(!IS_ARRAY(_eventTargets)) then {
|
||||
_eventTargets = [_eventTargets];
|
||||
};
|
||||
|
||||
//If not multiplayer, and there are targets, then just run localy
|
||||
if ((!isMultiplayer) && {(count _eventTargets) > 0}) exitWith {
|
||||
ACEg = [_eventName, _eventArgs];
|
||||
["ACEg", ACEg] call FUNC(_handleNetEvent);
|
||||
};
|
||||
|
||||
_serverFlagged = false;
|
||||
{
|
||||
_owner = _x;
|
||||
if(IS_OBJECT(_x)) then {
|
||||
_owner = owner _x;
|
||||
};
|
||||
if(!(_owner in _sentEvents)) then {
|
||||
PUSH(_sentEvents, _owner);
|
||||
ACEg = [_eventName, _eventArgs];
|
||||
if(isDedicated || {_x != ACE_player}) then {
|
||||
if(isDedicated && {local _x} && {!_serverFlagged}) then {
|
||||
_serverFlagged = true;
|
||||
["ACEg", ACEg] call FUNC(_handleNetEvent);
|
||||
} else {
|
||||
_owner publicVariableClient "ACEg";
|
||||
};
|
||||
} else {
|
||||
["ACEg", ACEg] call FUNC(_handleNetEvent);
|
||||
};
|
||||
};
|
||||
} forEach _eventTargets;
|
||||
};
|
||||
};
|
@ -1,32 +1,32 @@
|
||||
/*
|
||||
* Author: Nou
|
||||
*
|
||||
* Add a event handler.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Event name (string)
|
||||
* 1: Event code (code)
|
||||
*
|
||||
* Return value:
|
||||
* Event handler ID number (for use with fnc_removeEventHandler)
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_eventName", "_eventCode", "_eventNames", "_eventFunctions", "_eventNameCount", "_eventIndex", "_eventFunctionCount"];
|
||||
_eventName = _this select 0;
|
||||
_eventCode = _this select 1;
|
||||
|
||||
_eventNames = GVAR(events) select 0;
|
||||
_eventFunctions = [];
|
||||
_eventIndex = _eventNames find _eventName;
|
||||
if(_eventIndex != -1) then {
|
||||
_eventFunctions = (GVAR(events) select 1) select _eventIndex;
|
||||
} else {
|
||||
_eventNameCount = count _eventNames;
|
||||
_eventNames set[_eventNameCount, _eventName];
|
||||
(GVAR(events) select 1) set[_eventNameCount, _eventFunctions];
|
||||
};
|
||||
|
||||
_eventFunctionCount = count _eventFunctions;
|
||||
_eventFunctions set[_eventFunctionCount, _eventCode];
|
||||
|
||||
/*
|
||||
* Author: Nou
|
||||
*
|
||||
* Add a event handler.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Event name (string)
|
||||
* 1: Event code (code)
|
||||
*
|
||||
* Return value:
|
||||
* Event handler ID number (for use with fnc_removeEventHandler)
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_eventName", "_eventCode", "_eventNames", "_eventFunctions", "_eventNameCount", "_eventIndex", "_eventFunctionCount"];
|
||||
_eventName = _this select 0;
|
||||
_eventCode = _this select 1;
|
||||
|
||||
_eventNames = GVAR(events) select 0;
|
||||
_eventFunctions = [];
|
||||
_eventIndex = _eventNames find _eventName;
|
||||
if(_eventIndex != -1) then {
|
||||
_eventFunctions = (GVAR(events) select 1) select _eventIndex;
|
||||
} else {
|
||||
_eventNameCount = count _eventNames;
|
||||
_eventNames set[_eventNameCount, _eventName];
|
||||
(GVAR(events) select 1) set[_eventNameCount, _eventFunctions];
|
||||
};
|
||||
|
||||
_eventFunctionCount = count _eventFunctions;
|
||||
_eventFunctions set[_eventFunctionCount, _eventCode];
|
||||
|
||||
_eventFunctionCount;
|
@ -1,25 +1,25 @@
|
||||
//fnc_dumpArray.sqf
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_var", "_depth", "_pad", "_i", "_x"];
|
||||
|
||||
_var = _this select 0;
|
||||
_depth = _this select 1;
|
||||
_pad = "";
|
||||
for "_i" from 0 to _depth do {
|
||||
_pad = _pad + toString [9];
|
||||
};
|
||||
_depth = _depth + 1;
|
||||
if(IS_ARRAY(_var)) then {
|
||||
if((count _var) > 0) then {
|
||||
diag_log text format["%1[", _pad];
|
||||
{
|
||||
[_x, _depth] call FUNC(dumpArray);
|
||||
} forEach _var;
|
||||
diag_log text format["%1],", _pad];
|
||||
} else {
|
||||
diag_log text format["%1[],", _pad];
|
||||
};
|
||||
} else {
|
||||
diag_log text format["%1%2", _pad, [_var] call FUNC(formatVar)];
|
||||
};
|
||||
//fnc_dumpArray.sqf
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_var", "_depth", "_pad", "_i", "_x"];
|
||||
|
||||
_var = _this select 0;
|
||||
_depth = _this select 1;
|
||||
_pad = "";
|
||||
for "_i" from 0 to _depth do {
|
||||
_pad = _pad + toString [9];
|
||||
};
|
||||
_depth = _depth + 1;
|
||||
if(IS_ARRAY(_var)) then {
|
||||
if((count _var) > 0) then {
|
||||
diag_log text format["%1[", _pad];
|
||||
{
|
||||
[_x, _depth] call FUNC(dumpArray);
|
||||
} forEach _var;
|
||||
diag_log text format["%1],", _pad];
|
||||
} else {
|
||||
diag_log text format["%1[],", _pad];
|
||||
};
|
||||
} else {
|
||||
diag_log text format["%1%2", _pad, [_var] call FUNC(formatVar)];
|
||||
};
|
||||
|
@ -1,73 +1,73 @@
|
||||
//fnc_dumpPerformanceCounters.sqf
|
||||
#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
|
||||
|
||||
diag_log text format["REGISTERED ACE PFH HANDLERS"];
|
||||
diag_log text format["-------------------------------------------"];
|
||||
if(!isNil "ACE_PFH_COUNTER") then {
|
||||
{
|
||||
private["_pfh"];
|
||||
_pfh = _x select 0;
|
||||
diag_log text format["Registered PFH: id=%1, %1:%2", (_pfh select 0), (_pfh select 1), (_pfh select 2) ];
|
||||
} forEach ACE_PFH_COUNTER;
|
||||
};
|
||||
|
||||
diag_log text format["ACE COUNTER RESULTS"];
|
||||
diag_log text format["-------------------------------------------"];
|
||||
{
|
||||
private["_counterEntry", "_iter", "_total", "_count", "_delta", "_averageResult"];
|
||||
_counterEntry = _x;
|
||||
_iter = 0;
|
||||
_total = 0;
|
||||
_count = 0;
|
||||
_averageResult = 0;
|
||||
if( (count _counterEntry) > 3) then {
|
||||
// calc
|
||||
{
|
||||
if(_iter > 2) then {
|
||||
_count = _count + 1;
|
||||
_delta = (_x select 1) - (_x select 0);
|
||||
|
||||
_total = _total + _delta;
|
||||
};
|
||||
_iter = _iter + 1;
|
||||
} forEach _counterEntry;
|
||||
|
||||
// results
|
||||
_averageResult = (_total / _count) * 1000;
|
||||
|
||||
// dump results
|
||||
diag_log text format["%1: Average: %2s / %3 = %4ms", (_counterEntry select 0), _total, _count, _averageResult];
|
||||
} else {
|
||||
diag_log text format["%1: No results", (_counterEntry select 0) ];
|
||||
};
|
||||
} forEach ACE_COUNTERS;
|
||||
|
||||
/*
|
||||
// Dump PFH Trackers
|
||||
diag_log text format["ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER"];
|
||||
diag_log text format["-------------------------------------------"];
|
||||
{
|
||||
private["_delay"];
|
||||
_delay = _x select 2;
|
||||
//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)];
|
||||
} forEach ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER;
|
||||
|
||||
// Dump PFH Trackers
|
||||
diag_log text format["ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER"];
|
||||
diag_log text format["-------------------------------------------"];
|
||||
{
|
||||
private["_delta"];
|
||||
_delta = _x select 1;
|
||||
//if(_delta > 0) then { _delta = _delta / 1000; };
|
||||
diag_log text format[" DELTA: %1s", _delta];
|
||||
} forEach ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER;
|
||||
|
||||
//{
|
||||
//
|
||||
//} forEach ACRE_EXCESSIVE_FRAME_TRACKER;
|
||||
|
||||
//fnc_dumpPerformanceCounters.sqf
|
||||
#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
|
||||
|
||||
diag_log text format["REGISTERED ACE PFH HANDLERS"];
|
||||
diag_log text format["-------------------------------------------"];
|
||||
if(!isNil "ACE_PFH_COUNTER") then {
|
||||
{
|
||||
private["_pfh"];
|
||||
_pfh = _x select 0;
|
||||
diag_log text format["Registered PFH: id=%1, %1:%2", (_pfh select 0), (_pfh select 1), (_pfh select 2) ];
|
||||
} forEach ACE_PFH_COUNTER;
|
||||
};
|
||||
|
||||
diag_log text format["ACE COUNTER RESULTS"];
|
||||
diag_log text format["-------------------------------------------"];
|
||||
{
|
||||
private["_counterEntry", "_iter", "_total", "_count", "_delta", "_averageResult"];
|
||||
_counterEntry = _x;
|
||||
_iter = 0;
|
||||
_total = 0;
|
||||
_count = 0;
|
||||
_averageResult = 0;
|
||||
if( (count _counterEntry) > 3) then {
|
||||
// calc
|
||||
{
|
||||
if(_iter > 2) then {
|
||||
_count = _count + 1;
|
||||
_delta = (_x select 1) - (_x select 0);
|
||||
|
||||
_total = _total + _delta;
|
||||
};
|
||||
_iter = _iter + 1;
|
||||
} forEach _counterEntry;
|
||||
|
||||
// results
|
||||
_averageResult = (_total / _count) * 1000;
|
||||
|
||||
// dump results
|
||||
diag_log text format["%1: Average: %2s / %3 = %4ms", (_counterEntry select 0), _total, _count, _averageResult];
|
||||
} else {
|
||||
diag_log text format["%1: No results", (_counterEntry select 0) ];
|
||||
};
|
||||
} forEach ACE_COUNTERS;
|
||||
|
||||
/*
|
||||
// Dump PFH Trackers
|
||||
diag_log text format["ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER"];
|
||||
diag_log text format["-------------------------------------------"];
|
||||
{
|
||||
private["_delay"];
|
||||
_delay = _x select 2;
|
||||
//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)];
|
||||
} forEach ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER;
|
||||
|
||||
// Dump PFH Trackers
|
||||
diag_log text format["ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER"];
|
||||
diag_log text format["-------------------------------------------"];
|
||||
{
|
||||
private["_delta"];
|
||||
_delta = _x select 1;
|
||||
//if(_delta > 0) then { _delta = _delta / 1000; };
|
||||
diag_log text format[" DELTA: %1s", _delta];
|
||||
} forEach ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER;
|
||||
|
||||
//{
|
||||
//
|
||||
//} forEach ACRE_EXCESSIVE_FRAME_TRACKER;
|
||||
|
||||
*/
|
@ -1,37 +1,37 @@
|
||||
/*
|
||||
* Author: jaynus
|
||||
*
|
||||
* Get the absolute turret direction for FOV/PIP turret.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Vehicle (Object)
|
||||
* 1: Turret Position
|
||||
*
|
||||
* Return value:
|
||||
* [position, direction]
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
EXPLODE_2_PVT(_this,_vehicle,_position);
|
||||
private ["_turrets", "_turret", "_config", "_turret", "_povPos", "_povDir", "_gunBeginPos", "_gunEndPos", "_pov"];
|
||||
|
||||
_turret = [_vehicle, _position] call CBA_fnc_getTurret;
|
||||
_pov = getText (_turret >> "memoryPointGunnerOptics");
|
||||
_gunBeg = getText (_turret >> "gunBeg");
|
||||
_gunEnd = getText (_turret >> "gunEnd");
|
||||
TRACE_3("", _pov, _gunBeg, _gunEnd);
|
||||
|
||||
// Pull the PIP pov or barrel direction, depending on how the model is set up
|
||||
_povPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _pov ) );
|
||||
_povDir = [0,0,0];
|
||||
|
||||
if(_pov == "pip0_pos") then {
|
||||
_pipDir = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition "pip0_dir" ) );
|
||||
_povDir = _pipDir vectorDiff _povPos;
|
||||
} else {
|
||||
_gunBeginPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _gunBeg ) );
|
||||
_gunEndPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _gunEnd ) );
|
||||
_povDir = _gunBeginPos vectorDiff _gunEndPos;
|
||||
};
|
||||
|
||||
/*
|
||||
* Author: jaynus
|
||||
*
|
||||
* Get the absolute turret direction for FOV/PIP turret.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Vehicle (Object)
|
||||
* 1: Turret Position
|
||||
*
|
||||
* Return value:
|
||||
* [position, direction]
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
EXPLODE_2_PVT(_this,_vehicle,_position);
|
||||
private ["_turrets", "_turret", "_config", "_turret", "_povPos", "_povDir", "_gunBeginPos", "_gunEndPos", "_pov"];
|
||||
|
||||
_turret = [_vehicle, _position] call CBA_fnc_getTurret;
|
||||
_pov = getText (_turret >> "memoryPointGunnerOptics");
|
||||
_gunBeg = getText (_turret >> "gunBeg");
|
||||
_gunEnd = getText (_turret >> "gunEnd");
|
||||
TRACE_3("", _pov, _gunBeg, _gunEnd);
|
||||
|
||||
// Pull the PIP pov or barrel direction, depending on how the model is set up
|
||||
_povPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _pov ) );
|
||||
_povDir = [0,0,0];
|
||||
|
||||
if(_pov == "pip0_pos") then {
|
||||
_pipDir = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition "pip0_dir" ) );
|
||||
_povDir = _pipDir vectorDiff _povPos;
|
||||
} else {
|
||||
_gunBeginPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _gunBeg ) );
|
||||
_gunEndPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _gunEnd ) );
|
||||
_povDir = _gunBeginPos vectorDiff _gunEndPos;
|
||||
};
|
||||
|
||||
[_povPos, _povDir]
|
@ -1,22 +1,22 @@
|
||||
/*
|
||||
* Author: Nou
|
||||
*
|
||||
* Execute a global event on all clients, including self.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Event name (string)
|
||||
* 1: Event args (any)
|
||||
*
|
||||
* Return value:
|
||||
* Nothing
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_eventName", "_eventArgs"];
|
||||
|
||||
_eventName = _this select 0;
|
||||
_eventArgs = _this select 1;
|
||||
|
||||
|
||||
ACEg = [_eventName, _eventArgs];
|
||||
publicVariable "ACEg";
|
||||
/*
|
||||
* Author: Nou
|
||||
*
|
||||
* Execute a global event on all clients, including self.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Event name (string)
|
||||
* 1: Event args (any)
|
||||
*
|
||||
* Return value:
|
||||
* Nothing
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_eventName", "_eventArgs"];
|
||||
|
||||
_eventName = _this select 0;
|
||||
_eventArgs = _this select 1;
|
||||
|
||||
|
||||
ACEg = [_eventName, _eventArgs];
|
||||
publicVariable "ACEg";
|
||||
["ACEg", ACEg] call FUNC(_handleNetEvent);
|
@ -1,34 +1,34 @@
|
||||
/*
|
||||
* Author: Nou
|
||||
*
|
||||
* Execute a local event on this client only.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Event name (string)
|
||||
* 1: Event args (any)
|
||||
*
|
||||
* Return value:
|
||||
* Nothing
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_2(_eventName,_eventArgs);
|
||||
|
||||
_eventNames = GVAR(events) select 0;
|
||||
_eventIndex = _eventNames find _eventName;
|
||||
if(_eventIndex != -1) then {
|
||||
_events = (GVAR(events) select 1) select _eventIndex;
|
||||
#ifdef DEBUG_EVENTS
|
||||
diag_log text format[ARR_2("* Local Event: %1",_eventName)];
|
||||
diag_log text format[ARR_2(" args=%1",_eventArgs)];
|
||||
#endif
|
||||
|
||||
{
|
||||
if(!isNil "_x") then {
|
||||
_eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Local Event %1 ID: %2",_eventName,_forEachIndex)]);
|
||||
#ifdef DEBUG_EVENTS_CALLSTACK
|
||||
diag_log text format[ARR_2(" ID: %1",_forEachIndex)];
|
||||
#endif
|
||||
};
|
||||
} forEach _events;
|
||||
/*
|
||||
* Author: Nou
|
||||
*
|
||||
* Execute a local event on this client only.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Event name (string)
|
||||
* 1: Event args (any)
|
||||
*
|
||||
* Return value:
|
||||
* Nothing
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_2(_eventName,_eventArgs);
|
||||
|
||||
_eventNames = GVAR(events) select 0;
|
||||
_eventIndex = _eventNames find _eventName;
|
||||
if(_eventIndex != -1) then {
|
||||
_events = (GVAR(events) select 1) select _eventIndex;
|
||||
#ifdef DEBUG_EVENTS
|
||||
diag_log text format[ARR_2("* Local Event: %1",_eventName)];
|
||||
diag_log text format[ARR_2(" args=%1",_eventArgs)];
|
||||
#endif
|
||||
|
||||
{
|
||||
if(!isNil "_x") then {
|
||||
_eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Local Event %1 ID: %2",_eventName,_forEachIndex)]);
|
||||
#ifdef DEBUG_EVENTS_CALLSTACK
|
||||
diag_log text format[ARR_2(" ID: %1",_forEachIndex)];
|
||||
#endif
|
||||
};
|
||||
} forEach _events;
|
||||
};
|
@ -1,21 +1,21 @@
|
||||
/*
|
||||
* Author: Nou
|
||||
*
|
||||
* Remove all events of a certain event type.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Event name (string)
|
||||
*
|
||||
* Return value:
|
||||
* Nothing
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_eventName", "_eventNames", "_eventFunctions", "_eventIndex"];
|
||||
_eventName = _this select 0;
|
||||
|
||||
_eventNames = GVAR(events) select 0;
|
||||
_eventFunctions = [];
|
||||
_eventIndex = _eventNames find _eventName;
|
||||
if(_eventIndex != -1) then {
|
||||
(GVAR(events) select 1) set[_eventIndex, []];
|
||||
/*
|
||||
* Author: Nou
|
||||
*
|
||||
* Remove all events of a certain event type.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Event name (string)
|
||||
*
|
||||
* Return value:
|
||||
* Nothing
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_eventName", "_eventNames", "_eventFunctions", "_eventIndex"];
|
||||
_eventName = _this select 0;
|
||||
|
||||
_eventNames = GVAR(events) select 0;
|
||||
_eventFunctions = [];
|
||||
_eventIndex = _eventNames find _eventName;
|
||||
if(_eventIndex != -1) then {
|
||||
(GVAR(events) select 1) set[_eventIndex, []];
|
||||
};
|
@ -1,24 +1,24 @@
|
||||
/*
|
||||
* Author: Nou
|
||||
*
|
||||
* Remove an event handler.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Event name (string)
|
||||
* 1: Event code (number)
|
||||
*
|
||||
* Return value:
|
||||
* Nothing
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_eventName", "_eventNames", "_eventFunctions", "_eventIndex", "_eventCodeIndex"];
|
||||
_eventName = _this select 0;
|
||||
_eventCodeIndex = _this select 1;
|
||||
|
||||
_eventNames = GVAR(events) select 0;
|
||||
_eventFunctions = [];
|
||||
_eventIndex = _eventNames find _eventName;
|
||||
if(_eventIndex != -1) then {
|
||||
_eventFunctions = (GVAR(events) select 1) select _eventIndex;
|
||||
_eventFunctions set[_eventCodeIndex, nil];
|
||||
/*
|
||||
* Author: Nou
|
||||
*
|
||||
* Remove an event handler.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Event name (string)
|
||||
* 1: Event code (number)
|
||||
*
|
||||
* Return value:
|
||||
* Nothing
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_eventName", "_eventNames", "_eventFunctions", "_eventIndex", "_eventCodeIndex"];
|
||||
_eventName = _this select 0;
|
||||
_eventCodeIndex = _this select 1;
|
||||
|
||||
_eventNames = GVAR(events) select 0;
|
||||
_eventFunctions = [];
|
||||
_eventIndex = _eventNames find _eventName;
|
||||
if(_eventIndex != -1) then {
|
||||
_eventFunctions = (GVAR(events) select 1) select _eventIndex;
|
||||
_eventFunctions set[_eventCodeIndex, nil];
|
||||
};
|
@ -1,29 +1,29 @@
|
||||
/*
|
||||
* Author: Nou
|
||||
*
|
||||
* Execute a event only on the server.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Event name (string)
|
||||
* 1: Event args (any)
|
||||
*
|
||||
* Return value:
|
||||
* Nothing
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_eventName", "_eventArgs"];
|
||||
|
||||
_eventName = _this select 0;
|
||||
_eventArgs = _this select 1;
|
||||
|
||||
#ifdef DEBUG_EVENTS
|
||||
diag_log text format[ARR_2("* Server Event: %1",_eventName)];
|
||||
diag_log text format[ARR_2(" args=%1",_eventArgs)];
|
||||
#endif
|
||||
|
||||
ACEg = [_eventName, _eventArgs];
|
||||
if(!isServer) then {
|
||||
publicVariableServer "ACEg";
|
||||
} else {
|
||||
["ACEg", ACEg] call FUNC(_handleNetEvent);
|
||||
};
|
||||
/*
|
||||
* Author: Nou
|
||||
*
|
||||
* Execute a event only on the server.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Event name (string)
|
||||
* 1: Event args (any)
|
||||
*
|
||||
* Return value:
|
||||
* Nothing
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_eventName", "_eventArgs"];
|
||||
|
||||
_eventName = _this select 0;
|
||||
_eventArgs = _this select 1;
|
||||
|
||||
#ifdef DEBUG_EVENTS
|
||||
diag_log text format[ARR_2("* Server Event: %1",_eventName)];
|
||||
diag_log text format[ARR_2(" args=%1",_eventArgs)];
|
||||
#endif
|
||||
|
||||
ACEg = [_eventName, _eventArgs];
|
||||
if(!isServer) then {
|
||||
publicVariableServer "ACEg";
|
||||
} else {
|
||||
["ACEg", ACEg] call FUNC(_handleNetEvent);
|
||||
};
|
||||
|
@ -1,34 +1,34 @@
|
||||
/*
|
||||
* Author: Nou
|
||||
*
|
||||
* Execute a event only on specific clients.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Event name (string)
|
||||
* 1: Event targets (object or array of objects)
|
||||
* 2: Event args (any)
|
||||
*
|
||||
* Note: If local executor is in list of targets, event will execute with
|
||||
* network delay, and not immediatly.
|
||||
*
|
||||
* Return value:
|
||||
* Nothing
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_eventName", "_eventArgs", "_eventTargets"];
|
||||
|
||||
_eventName = _this select 0;
|
||||
_eventTargets = _this select 1;
|
||||
_eventArgs = _this select 2;
|
||||
|
||||
#ifdef DEBUG_EVENTS
|
||||
diag_log text format[ARR_3("* Target Event: %1 - %2",_eventName,_eventTargets)];
|
||||
diag_log text format[ARR_2(" args=%1",_eventArgs)];
|
||||
#endif
|
||||
|
||||
ACEc = [_eventName, _eventTargets, _eventArgs];
|
||||
if(!isServer) then {
|
||||
publicVariableServer "ACEc";
|
||||
} else {
|
||||
["ACEc", ACEc] call FUNC(_handleNetEvent);
|
||||
/*
|
||||
* Author: Nou
|
||||
*
|
||||
* Execute a event only on specific clients.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Event name (string)
|
||||
* 1: Event targets (object or array of objects)
|
||||
* 2: Event args (any)
|
||||
*
|
||||
* Note: If local executor is in list of targets, event will execute with
|
||||
* network delay, and not immediatly.
|
||||
*
|
||||
* Return value:
|
||||
* Nothing
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_eventName", "_eventArgs", "_eventTargets"];
|
||||
|
||||
_eventName = _this select 0;
|
||||
_eventTargets = _this select 1;
|
||||
_eventArgs = _this select 2;
|
||||
|
||||
#ifdef DEBUG_EVENTS
|
||||
diag_log text format[ARR_3("* Target Event: %1 - %2",_eventName,_eventTargets)];
|
||||
diag_log text format[ARR_2(" args=%1",_eventArgs)];
|
||||
#endif
|
||||
|
||||
ACEc = [_eventName, _eventTargets, _eventArgs];
|
||||
if(!isServer) then {
|
||||
publicVariableServer "ACEc";
|
||||
} else {
|
||||
["ACEc", ACEc] call FUNC(_handleNetEvent);
|
||||
};
|
@ -1,13 +1,13 @@
|
||||
#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 ERROR(msg) throw msg + format[" @ %1:%2", _callFrom, _lineNo]
|
||||
#define HANDLECATCH diag_log text _exception; assert(exception=="")
|
||||
|
||||
#define ERRORDATA(c) private ["_callFrom", "_lineNo"];\
|
||||
_callFrom = "";\
|
||||
_lineNo = -1;\
|
||||
if((count _this) > c) then {\
|
||||
_callFrom = _this select c;\
|
||||
_lineNo = _this select c+1;\
|
||||
#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 ERROR(msg) throw msg + format[" @ %1:%2", _callFrom, _lineNo]
|
||||
#define HANDLECATCH diag_log text _exception; assert(exception=="")
|
||||
|
||||
#define ERRORDATA(c) private ["_callFrom", "_lineNo"];\
|
||||
_callFrom = "";\
|
||||
_lineNo = -1;\
|
||||
if((count _this) > c) then {\
|
||||
_callFrom = _this select c;\
|
||||
_lineNo = _this select c+1;\
|
||||
};
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler - 2015-04-07 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Common">
|
||||
<Key ID="STR_ACE_Common_ACETeam">
|
||||
@ -300,78 +300,64 @@
|
||||
<Spanish>Aceptar Peticiones</Spanish>
|
||||
<English>Accept Requests</English>
|
||||
<German>Anfrage annehmen</German>
|
||||
<Russian>Подтвердить запросы</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TITLE">
|
||||
<Polish>Ignoruj prośby</Polish>
|
||||
<Spanish>Rechazar Peticiones</Spanish>
|
||||
<English>Decline Requests</English>
|
||||
<German>Anfrage ablehnen</German>
|
||||
<Russian>Отклонить запросы</Russian>
|
||||
</Key>
|
||||
<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>
|
||||
<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>
|
||||
<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 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>
|
||||
<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>
|
||||
<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 ID="STR_ACE_Common_SettingFeedbackIconsName">
|
||||
<English>Feedback icons</English>
|
||||
<German>Feedback-Icons</German>
|
||||
<Russian>Иконки состояний</Russian>
|
||||
</Key>
|
||||
<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>
|
||||
<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 ID="STR_ACE_Common_SettingProgressbarLocationName">
|
||||
<English>Progress bar location</English>
|
||||
<German>Position des Fortschrittsanzeige</German>
|
||||
<Russian>Положение прогресс-бара</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingProgressbarLocationDesc">
|
||||
<English>Set the desired location of the progress bar on your screen.</English>
|
||||
<German>Wähle die Position der Fortschrittsanzeige.</German>
|
||||
<Russian>Установите желаемое положение строки состояния на экране.</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingDisplayTextColorName">
|
||||
<English>Hint Background color</English>
|
||||
<German>Hinweis Hintergrundfarbe</German>
|
||||
<Russian>Цвет фона всплывающих подсказок</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingDisplayTextColorDesc">
|
||||
<English>The color of the background from the ACE hints.</English>
|
||||
<German>Wähle die Hintergrundfarbe für ACE-Hinweise.</German>
|
||||
<Russian>Цвет фона всплывающий подсказок АСЕ.</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingDisplayTextFontColorName">
|
||||
<English>Hint text font color</English>
|
||||
<German>Hinweis Textfarbe</German>
|
||||
<Russian>Цвет шрифта всплывающих подсказок</Russian>
|
||||
</Key>
|
||||
<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>
|
||||
<German>Wähle die Textfarbe für ACE-Hinweise. </German>
|
||||
<Russian>Цвет шрифта текста всплывающих подсказок АСЕ. Этот цвет является стандартным для всего текста, транслирующегося через систему подсказок АСЕ, если не установлено другого цвета для текста подсказок.</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_bananaDisplayName">
|
||||
<English>Banana</English>
|
||||
<German>Banane</German>
|
||||
<Russian>Банан</Russian>
|
||||
</Key>
|
||||
<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>
|
||||
<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>
|
||||
</Package>
|
||||
</Project>
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2014-12-21 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Dragging">
|
||||
<Key ID="STR_ACE_Dragging_Drag">
|
||||
@ -40,7 +40,6 @@
|
||||
<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>
|
||||
<Hungarian>Túl nehéz ahhoz, hogy elhúzd</Hungarian> -->
|
||||
<Russian>Слишком тяжело</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Dragging_Carry">
|
||||
<English>Carry</English>
|
||||
@ -55,4 +54,4 @@
|
||||
<Russian>Нести</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler - 2015-04-07 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Explosives">
|
||||
<Key ID="STR_ACE_Explosives_Menu">
|
||||
@ -48,7 +48,7 @@
|
||||
<Italian>Codice dell'esplosivo : %1</Italian>
|
||||
<Hungarian>Robbanóanyag kódja: %1</Hungarian>
|
||||
<Portuguese>Código do explosivo: %1</Portuguese>
|
||||
<Russian>Код подрыва: %1</Russian>
|
||||
<Russian>Взрывная код: %1</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_PlaceAction">
|
||||
<English>Place</English>
|
||||
@ -60,7 +60,7 @@
|
||||
<Italian>Piazza</Italian>
|
||||
<Hungarian>Elhelyezés</Hungarian>
|
||||
<Portuguese>Colocar</Portuguese>
|
||||
<Russian>Установить</Russian>
|
||||
<Russian>Положить</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_CancelAction">
|
||||
<English>Cancel</English>
|
||||
@ -132,7 +132,7 @@
|
||||
<Italian>Usato per l'attivazione a distanza degli esplosivi</Italian>
|
||||
<Hungarian>Robbanóanyagok távoli robbantásához</Hungarian>
|
||||
<Portuguese>Usado para acionar explosivos remotamente</Portuguese>
|
||||
<Russian>Используется для удаленной детонации СВУ</Russian>
|
||||
<Russian>Используется для удаленного запуска взрывчатку</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_clacker_displayName">
|
||||
<English>M57 Firing Device</English>
|
||||
@ -156,7 +156,7 @@
|
||||
<Italian>Usato per l'attivazione a distanza degli esplosivi</Italian>
|
||||
<Hungarian>Robbanóanyagok távoli robbantásához</Hungarian>
|
||||
<Portuguese>Usado para acionar explosivos remotamente</Portuguese>
|
||||
<Russian>Используется для удаленной детонации зарядов</Russian>
|
||||
<Russian>Используется для удаленного запуска взрывчатку</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_M26_displayName">
|
||||
<English>M26 Firing Device</English>
|
||||
@ -192,7 +192,7 @@
|
||||
<Italian>Kit E.O.D.</Italian>
|
||||
<Hungarian>Hatástalanító felszerelés</Hungarian>
|
||||
<Portuguese>Kit de desarme</Portuguese>
|
||||
<Russian>Комплект разминирования</Russian>
|
||||
<Russian>Разминирование комплект</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_DefusalKit_description">
|
||||
<English>Allows defusing of explosives</English>
|
||||
@ -204,7 +204,7 @@
|
||||
<Italian>Consente la disattivazione degli ordigni esplosivi</Italian>
|
||||
<Hungarian>Robbanóanyagok hatástalanításához</Hungarian>
|
||||
<Portuguese>Permite o desarme de explosivos</Portuguese>
|
||||
<Russian>Позволяет обезвреживать ВУ</Russian>
|
||||
<Russian>Allows defusing of explosives</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_Phone_AddToSpeedDial">
|
||||
<English>Add to Speed Dial</English>
|
||||
@ -228,7 +228,7 @@
|
||||
<Italian>Libera</Italian>
|
||||
<Hungarian>Törlés</Hungarian>
|
||||
<Portuguese>Limpar</Portuguese>
|
||||
<Russian>Очистить</Russian>
|
||||
<Russian>Pассеиваться</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_Phone_Dial">
|
||||
<English>Dial</English>
|
||||
@ -252,7 +252,7 @@
|
||||
<Italian>Sopra</Italian>
|
||||
<Hungarian>Fel</Hungarian>
|
||||
<Portuguese>Cima</Portuguese>
|
||||
<Russian>Вызов</Russian>
|
||||
<Russian>Поднять</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_Phone_Down">
|
||||
<English>Down</English>
|
||||
@ -264,7 +264,7 @@
|
||||
<Italian>Sotto</Italian>
|
||||
<Hungarian>Le</Hungarian>
|
||||
<Portuguese>Baixo</Portuguese>
|
||||
<Russian>Сброс</Russian>
|
||||
<Russian>Опустить</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_Cancel">
|
||||
<English>Cancel</English>
|
||||
@ -288,7 +288,7 @@
|
||||
<Italian>Menù di detonazione</Italian>
|
||||
<Hungarian>Robbantás menü</Hungarian>
|
||||
<Portuguese>Menu de detonação</Portuguese>
|
||||
<Russian>Меню подрыва</Russian>
|
||||
<Russian>Меню Подрыв</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_PlaceMenu">
|
||||
<English>Place Menu</English>
|
||||
@ -300,7 +300,7 @@
|
||||
<Italian>Menù di collocamento</Italian>
|
||||
<Hungarian>Lerakás menü</Hungarian>
|
||||
<Portuguese>Menu de posicionamento</Portuguese>
|
||||
<Russian>Меню детонации</Russian>
|
||||
<Russian>Меню Установить</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_Defuse">
|
||||
<English>Defuse</English>
|
||||
@ -336,7 +336,7 @@
|
||||
<Italian>Cronometro</Italian>
|
||||
<Hungarian>Időzített</Hungarian>
|
||||
<Portuguese>Timer</Portuguese>
|
||||
<Russian>Таймер</Russian>
|
||||
<Russian>Временной</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_TimerMenu">
|
||||
<English>Time: %1m %2s</English>
|
||||
@ -348,7 +348,7 @@
|
||||
<Italian>Tempo : %1m %2s</Italian>
|
||||
<Hungarian>Idő: %1m %2s</Hungarian>
|
||||
<Portuguese>Tempo: %1m %2s</Portuguese>
|
||||
<Russian>Время: %1m %2c</Russian>
|
||||
<Russian>Tемп: %1m %2c</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_SetTime">
|
||||
<English>Set Time</English>
|
||||
@ -360,7 +360,7 @@
|
||||
<Italian>Modifica il conto alla rovescia</Italian>
|
||||
<Hungarian>Idő állítása</Hungarian>
|
||||
<Portuguese>Configurar Tempo</Portuguese>
|
||||
<Russian>Установить время</Russian>
|
||||
<Russian>Xронометр</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_TriggerMenu">
|
||||
<English>Select a Trigger</English>
|
||||
@ -372,7 +372,7 @@
|
||||
<Italian>Seleziona un Attivatore</Italian>
|
||||
<Hungarian>Detonátor kiválasztása</Hungarian>
|
||||
<Portuguese>Selecionar um Gatilho</Portuguese>
|
||||
<Russian>Выберите детонатор</Russian>
|
||||
<Russian>Выберите</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_SelectTrigger">
|
||||
<English>Select</English>
|
||||
@ -384,7 +384,7 @@
|
||||
<Italian>Seleziona</Italian>
|
||||
<Hungarian>Kiválasztás</Hungarian>
|
||||
<Portuguese>Selecionar</Portuguese>
|
||||
<Russian>Выбрать</Russian>
|
||||
<Russian>Выбрать защелка</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_PressurePlate">
|
||||
<English>Pressure Plate</English>
|
||||
@ -408,7 +408,7 @@
|
||||
<Italian>Filo a Inciampo</Italian>
|
||||
<Hungarian>Botlódrót</Hungarian>
|
||||
<Portuguese>Linha de tração</Portuguese>
|
||||
<Russian>Растяжка</Russian>
|
||||
<Russian>Натяжной</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_IRSensor">
|
||||
<English>IR Sensor</English>
|
||||
@ -420,7 +420,7 @@
|
||||
<Italian>Sensore IR</Italian>
|
||||
<Hungarian>IR szenzor</Hungarian>
|
||||
<Portuguese>Sensor IV</Portuguese>
|
||||
<Russian>ИК сенсор</Russian>
|
||||
<Russian>ИК</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_NoTriggersAvailable">
|
||||
<English>No triggers available for %1</English>
|
||||
@ -432,7 +432,7 @@
|
||||
<Italian>Nessun attivatore disponibile per %1</Italian>
|
||||
<Hungarian>Nincs detonátor a %1</Hungarian>
|
||||
<Portuguese>Nenhum gatilho disponível para %1</Portuguese>
|
||||
<Russian>Нет доступных взрывателей для %1</Russian>
|
||||
<Russian>Нет защелка доступны для %1</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_SLAME_IRSensor">
|
||||
<English>IR Sensor (Side Attack)</English>
|
||||
@ -444,7 +444,7 @@
|
||||
<Italian>Sensore IR (Attacco laterale)</Italian>
|
||||
<Hungarian>IR Sensor (Side Attack)</Hungarian>
|
||||
<Portuguese>Sensor infravermelho (ataque lateral)</Portuguese>
|
||||
<Russian>ИК (детонация вбок)</Russian>
|
||||
<Russian>ИК (боковая атака)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_SLAME_Magnetic">
|
||||
<English>Magnetic Influence Sensor (Bottom Attack)</English>
|
||||
@ -456,7 +456,7 @@
|
||||
<Italian>Sensore Magnetico di Prossimità (Attacco inferiore)</Italian>
|
||||
<Hungarian>Mágneses (Bottom Attack)</Hungarian>
|
||||
<Portuguese>Influência magnética (ataque inferior)</Portuguese>
|
||||
<Russian>Магнитный (детонация вверх)</Russian>
|
||||
<Russian>Магнитный (дно атака)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_NoExplosivesAvailable">
|
||||
<English>No explosives on trigger.</English>
|
||||
@ -468,7 +468,7 @@
|
||||
<Hungarian>Nincs robbanóanyag a detonátorhoz.</Hungarian>
|
||||
<Polish>Brak ładunków na zapalnik.</Polish>
|
||||
<Portuguese>Nenhum explosivo no gatilho.</Portuguese>
|
||||
<Russian>Нет доступных ВУ для взрывателя.</Russian>
|
||||
<Russian>Нет взрывчатки на курок.</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_DeadManSwitch_displayName">
|
||||
<English>Dead Man's Switch</English>
|
||||
@ -478,7 +478,7 @@
|
||||
<Polish>Czuwak</Polish>
|
||||
<Spanish>Detonador de hombre muerto</Spanish>
|
||||
<Hungarian>Dead Man's Switch</Hungarian>
|
||||
<Russian>Ловушка мертвеца</Russian>
|
||||
<Russian>Кнопка мертвеца</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_DeadManSwitch_description">
|
||||
<English>Used to remotely trigger explosives when released.</English>
|
||||
|
@ -1,7 +1,7 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) 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);
|
||||
#include "script_component.hpp"
|
||||
|
||||
if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) 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, false] call FUNC(keyUp);
|
@ -1,81 +1,81 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler - 2014-12-19 -->
|
||||
<Project name="ACE">
|
||||
<Package name="FCS">
|
||||
<Key ID="STR_ACE_FCS_LaseTarget">
|
||||
<English>Lase Target / Measure Distance</English>
|
||||
<German>Ziel anlasern / Entfernung Messen</German>
|
||||
<French>Télémétrer la cible</French>
|
||||
<Polish>Naświetl cel / Zmierz odległość</Polish>
|
||||
<Czech>Označit cíl / Změřit vzdálenost</Czech>
|
||||
<Spanish>Iluminar objetivo / Medir distancia</Spanish>
|
||||
<!-- Outdated
|
||||
<Package name="FCS">
|
||||
<Key ID="STR_ACE_FCS_LaseTarget">
|
||||
<English>Lase Target / Measure Distance</English>
|
||||
<German>Ziel anlasern / Entfernung Messen</German>
|
||||
<French>Télémétrer la cible</French>
|
||||
<Polish>Naświetl cel / Zmierz odległość</Polish>
|
||||
<Czech>Označit cíl / Změřit vzdálenost</Czech>
|
||||
<Spanish>Iluminar objetivo / Medir distancia</Spanish>
|
||||
<!-- Outdated
|
||||
<Russian>Установить зероинг</Russian>
|
||||
<Hungarian>Lézeres célmegjelölés</Hungarian>
|
||||
<Portuguese>Marcar Alvo</Portuguese>
|
||||
<Italian>Designatore Laser</Italian>
|
||||
-->
|
||||
<Russian>Подсветить цель / Замерить расстояние</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_FCS_ZeroedTo">
|
||||
<English>Zeroed To</English>
|
||||
<German>Haltepunkt</German>
|
||||
<Spanish>Fijado a</Spanish>
|
||||
<Polish>Wyzerowany na</Polish>
|
||||
<Czech>Nastaveno na</Czech>
|
||||
<French>Zéroté à</French>
|
||||
<Russian>Выставлено на</Russian>
|
||||
<Hungarian>Nullázás</Hungarian>
|
||||
<Portuguese>Fixado em</Portuguese>
|
||||
<Italian>Azzeramento a</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_FCS_AdjustRangeUp">
|
||||
<English>Adjust FCS Range (Up)</English>
|
||||
<German>Entfernung des FLS erhöhen</German>
|
||||
<Polish>Zwiększ zasięg FCS</Polish>
|
||||
<Spanish>Ajustar distancia del FCS (arriba)</Spanish>
|
||||
<Czech>Nastavit FCS Náměr (nahoru)</Czech>
|
||||
<French>Augmenter la distance du SCT</French>
|
||||
<Hungarian>FCS tartomány állítása (Fel)</Hungarian>
|
||||
<Portuguese>Ajustar distância do FCS (Acima)</Portuguese>
|
||||
<Italian>Aumentare la distanza dell'FCS</Italian>
|
||||
<Russian>Диапазон СУО (Выше)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_FCS_AdjustRangeDown">
|
||||
<English>Adjust FCS Range (Down)</English>
|
||||
<German>Entfernung des FLS verringern</German>
|
||||
<Polish>Zmniejsz zasięg FCS</Polish>
|
||||
<Spanish>Ajustar distancia del FCS (abajo)</Spanish>
|
||||
<Czech>Nastavit FCS Náměr (dolů)</Czech>
|
||||
<French>Réduire la distance du SCT</French>
|
||||
<Hungarian>FCS tartomány állítása (Le)</Hungarian>
|
||||
<Portuguese>Ajustar distância do FCS (Abaixo)</Portuguese>
|
||||
<Italian>Ridurre la distanza dell'FCS</Italian>
|
||||
<Russian>Диапазон СУО (Ниже)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_FCS_ResetFCS">
|
||||
<English>Reset FCS</English>
|
||||
<German>FLS zurücksetzen</German>
|
||||
<Spanish>Reiniciar FCS</Spanish>
|
||||
<French>Réinitialiser le SCT</French>
|
||||
<Polish>Resetuj FCS</Polish>
|
||||
<Czech>Resetovat FCS</Czech>
|
||||
<Hungarian>FCS visszaállítása</Hungarian>
|
||||
<Portuguese>Reiniciar FCS</Portuguese>
|
||||
<Italian>Azzeramento dell'FCS</Italian>
|
||||
<Russian>Обнулить СУО</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_FCS_HasBeenReset">
|
||||
<English>FCS has been reset.</English>
|
||||
<German>FLS wurde zurückgesetzt.</German>
|
||||
<Spanish>FCS reiniciado</Spanish>
|
||||
<French>SCT réinitialisé.</French>
|
||||
<Polish>FCS został zresetowany.</Polish>
|
||||
<Czech>FCS byl resetován.</Czech>
|
||||
<Hungarian>Az FCS visszaállítva</Hungarian>
|
||||
<Portuguese>FCS reiniciado.</Portuguese>
|
||||
<Italian>L'FCS è stato azzerato</Italian>
|
||||
<Russian>СУО обнулен.</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
<Russian>Подсветить цель / Измерить расстояние</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_FCS_ZeroedTo">
|
||||
<English>Zeroed To</English>
|
||||
<German>Haltepunkt</German>
|
||||
<Spanish>Fijado a</Spanish>
|
||||
<Polish>Wyzerowany na</Polish>
|
||||
<Czech>Nastaveno na</Czech>
|
||||
<French>Zéroté à</French>
|
||||
<Russian>Зероинг</Russian>
|
||||
<Hungarian>Nullázás</Hungarian>
|
||||
<Portuguese>Fixado em</Portuguese>
|
||||
<Italian>Azzeramento a</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_FCS_AdjustRangeUp">
|
||||
<English>Adjust FCS Range (Up)</English>
|
||||
<German>Entfernung des FLS erhöhen</German>
|
||||
<Polish>Zwiększ zasięg FCS</Polish>
|
||||
<Spanish>Ajustar distancia del FCS (arriba)</Spanish>
|
||||
<Czech>Nastavit FCS Náměr (nahoru)</Czech>
|
||||
<French>Augmenter la distance du SCT</French>
|
||||
<Hungarian>FCS tartomány állítása (Fel)</Hungarian>
|
||||
<Portuguese>Ajustar distância do FCS (Acima)</Portuguese>
|
||||
<Italian>Aumentare la distanza dell'FCS</Italian>
|
||||
<Russian>Диапазон СУО (Выше)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_FCS_AdjustRangeDown">
|
||||
<English>Adjust FCS Range (Down)</English>
|
||||
<German>Entfernung des FLS verringern</German>
|
||||
<Polish>Zmniejsz zasięg FCS</Polish>
|
||||
<Spanish>Ajustar distancia del FCS (abajo)</Spanish>
|
||||
<Czech>Nastavit FCS Náměr (dolů)</Czech>
|
||||
<French>Réduire la distance du SCT</French>
|
||||
<Hungarian>FCS tartomány állítása (Le)</Hungarian>
|
||||
<Portuguese>Ajustar distância do FCS (Abaixo)</Portuguese>
|
||||
<Italian>Ridurre la distanza dell'FCS</Italian>
|
||||
<Russian>Диапазон СУО (Ниже)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_FCS_ResetFCS">
|
||||
<English>Reset FCS</English>
|
||||
<German>FLS zurücksetzen</German>
|
||||
<Spanish>Reiniciar FCS</Spanish>
|
||||
<French>Réinitialiser le SCT</French>
|
||||
<Polish>Resetuj FCS</Polish>
|
||||
<Czech>Resetovat FCS</Czech>
|
||||
<Hungarian>FCS visszaállítása</Hungarian>
|
||||
<Portuguese>Reiniciar FCS</Portuguese>
|
||||
<Italian>Azzeramento dell'FCS</Italian>
|
||||
<Russian>Обнулить СУО</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_FCS_HasBeenReset">
|
||||
<English>FCS has been reset.</English>
|
||||
<German>FLS wurde zurückgesetzt.</German>
|
||||
<Spanish>FCS reiniciado</Spanish>
|
||||
<French>SCT réinitialisé.</French>
|
||||
<Polish>FCS został zresetowany.</Polish>
|
||||
<Czech>FCS byl resetován.</Czech>
|
||||
<Hungarian>Az FCS visszaállítva</Hungarian>
|
||||
<Portuguese>FCS reiniciado.</Portuguese>
|
||||
<Italian>L'FCS è stato azzerato</Italian>
|
||||
<Russian>СУО обнулен</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -1,352 +1,352 @@
|
||||
#define BASE_DRAG -0.01
|
||||
#define HD_MULT 5
|
||||
#define BASE_DRAG_HD (BASE_DRAG*HD_MULT)
|
||||
|
||||
class CfgAmmo {
|
||||
//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_delay: ace_arty_105mm_m1_m782_prox {
|
||||
// ACE_FRAG_SKIP = 1;
|
||||
//};
|
||||
class 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_METAL = 140000;
|
||||
ACE_FRAG_CHARGE = 87000;
|
||||
ACE_FRAG_GURNEY_C = 2320;
|
||||
ACE_FRAG_GURNEY_K = 1/2;
|
||||
sideAirFriction = 0.04;
|
||||
airFriction = 0.04;
|
||||
laserLock = 0;
|
||||
};
|
||||
|
||||
class GrenadeBase;
|
||||
class Grenade;
|
||||
class GrenadeHand: Grenade {
|
||||
ACE_FRAG_SKIP = 0;
|
||||
ACE_FRAG_FORCE = 1;
|
||||
// This is a good high-drag frag type for grenades.
|
||||
ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"};
|
||||
/*
|
||||
These values are based on the M67 Grenade, should be tweaked for
|
||||
individual grenades.
|
||||
*/
|
||||
ACE_FRAG_METAL = 210; // metal 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_K = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations
|
||||
};
|
||||
class GrenadeHand_stone: GrenadeHand {
|
||||
ACE_FRAG_SKIP = 1;
|
||||
};
|
||||
class SmokeShell: GrenadeHand {
|
||||
ACE_FRAG_SKIP = 1;
|
||||
};
|
||||
|
||||
class RocketBase;
|
||||
//class R_Hydra_HE: RocketBase {
|
||||
// ACE_FRAG_SKIP = 1;
|
||||
//};
|
||||
|
||||
//class R_57mm_HE: RocketBase {
|
||||
// ACE_FRAG_SKIP = 1;
|
||||
//};
|
||||
|
||||
class R_80mm_HE: RocketBase {
|
||||
ACE_FRAG_SKIP = 1;
|
||||
};
|
||||
|
||||
//class R_S8T_AT: RocketBase {
|
||||
// ACE_FRAG_SKIP = 1;
|
||||
//};
|
||||
|
||||
class 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_METAL = 140000;
|
||||
ACE_FRAG_CHARGE = 87000;
|
||||
ACE_FRAG_GURNEY_C = 2320;
|
||||
ACE_FRAG_GURNEY_K = 1/2;
|
||||
};
|
||||
|
||||
|
||||
class G_40mm_HE: GrenadeBase {
|
||||
ACE_FRAG_SKIP = 0;
|
||||
ACE_FRAG_FORCE = 1;
|
||||
};
|
||||
|
||||
class ACE_G_40mm_HEDP: G_40mm_HE {
|
||||
};
|
||||
class ACE_G_40mm_HE: ACE_G_40mm_HEDP {
|
||||
};
|
||||
class ACE_G_40mm_Practice: ACE_G_40mm_HE {
|
||||
ACE_FRAG_SKIP = 1;
|
||||
};
|
||||
class ACE_G40mm_HE_VOG25P: G_40mm_HE {
|
||||
ACE_FRAG_SKIP = 0;
|
||||
ACE_FRAG_FORCE = 1;
|
||||
};
|
||||
|
||||
//class R_SMAW_HEDP;
|
||||
//class R_MEEWS_HEDP : R_SMAW_HEDP {
|
||||
// ACE_FRAG_FORCE = 1;
|
||||
// ACE_FRAG_MULTIPLIER = 1.2;
|
||||
//};
|
||||
|
||||
//class MissileBase;
|
||||
//class M_Hellfire_AT: MissileBase {
|
||||
// ACE_FRAG_FORCE = 1;
|
||||
// ACE_FRAG_MULTIPLIER = 1.75;
|
||||
//};
|
||||
|
||||
/*
|
||||
class B_762x51_Ball;
|
||||
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";
|
||||
timeToLive = 12;
|
||||
typicalSpeed = 800;
|
||||
// Fix sounds
|
||||
effectFly = "AmmoClassic";
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
supersonicCrackFar[] = {"A3\sounds_f\weapons\hits\sscrack2.wav",1,1,135};
|
||||
};
|
||||
*/
|
||||
|
||||
class B_65x39_Caseless;
|
||||
class ACE_frag_base: B_65x39_Caseless {
|
||||
timeToLive = 12;
|
||||
typicalSpeed = 1500;
|
||||
deflecting = 65;
|
||||
};
|
||||
|
||||
class ACE_frag_tiny: ACE_frag_base {
|
||||
hit = 6;
|
||||
airFriction = BASE_DRAG;
|
||||
caliber = 0.75;
|
||||
};
|
||||
|
||||
class ACE_frag_tiny_HD: ACE_frag_base {
|
||||
hit = 6;
|
||||
airFriction = BASE_DRAG_HD;
|
||||
caliber = 0.75;
|
||||
};
|
||||
|
||||
class ACE_frag_small: ACE_frag_base {
|
||||
hit = 12;
|
||||
airFriction = BASE_DRAG*0.9;
|
||||
};
|
||||
|
||||
class ACE_frag_small_HD: ACE_frag_base {
|
||||
hit = 12;
|
||||
airFriction = BASE_DRAG_HD*0.9;
|
||||
};
|
||||
|
||||
class ACE_frag_medium: ACE_frag_base {
|
||||
hit = 14;
|
||||
airFriction = BASE_DRAG*0.75;
|
||||
caliber = 1.2;
|
||||
};
|
||||
|
||||
class ACE_frag_medium_HD: ACE_frag_base {
|
||||
hit = 14;
|
||||
airFriction = BASE_DRAG_HD*0.75;
|
||||
caliber = 1.2;
|
||||
};
|
||||
|
||||
class ACE_frag_large: ACE_frag_base {
|
||||
hit = 28;
|
||||
indirectHit = 2;
|
||||
indirectHitRange = 0.25;
|
||||
airFriction = BASE_DRAG*0.65;
|
||||
caliber = 2;
|
||||
explosive = 0;
|
||||
|
||||
};
|
||||
|
||||
class ACE_frag_large_HD: ACE_frag_large {
|
||||
hit = 28;
|
||||
indirectHit = 2;
|
||||
indirectHitRange = 0.25;
|
||||
airFriction = BASE_DRAG_HD*0.65;
|
||||
caliber = 2;
|
||||
|
||||
|
||||
};
|
||||
|
||||
class ACE_frag_huge: ACE_frag_large {
|
||||
hit = 40;
|
||||
indirectHit = 4;
|
||||
indirectHitRange = 0.5;
|
||||
airFriction = BASE_DRAG*0.5;
|
||||
caliber = 2.8;
|
||||
};
|
||||
|
||||
class ACE_frag_huge_HD: ACE_frag_large {
|
||||
hit = 40;
|
||||
indirectHit = 4;
|
||||
indirectHitRange = 0.5;
|
||||
airFriction = BASE_DRAG_HD*0.5;
|
||||
caliber = 2.8;
|
||||
};
|
||||
|
||||
class ACE_frag_spall_small: ACE_frag_small {
|
||||
timeToLive = 0.1;
|
||||
};
|
||||
|
||||
class ACE_frag_spall_medium: ACE_frag_medium {
|
||||
timeToLive = 0.15;
|
||||
};
|
||||
|
||||
class ACE_frag_spall_large: ACE_frag_large {
|
||||
timeToLive = 0.25;
|
||||
};
|
||||
|
||||
class ACE_frag_spall_huge: ACE_frag_huge {
|
||||
timeToLive = 0.3;
|
||||
};
|
||||
};
|
||||
#define BASE_DRAG -0.01
|
||||
#define HD_MULT 5
|
||||
#define BASE_DRAG_HD (BASE_DRAG*HD_MULT)
|
||||
|
||||
class CfgAmmo {
|
||||
//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_delay: ace_arty_105mm_m1_m782_prox {
|
||||
// ACE_FRAG_SKIP = 1;
|
||||
//};
|
||||
class 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_METAL = 140000;
|
||||
ACE_FRAG_CHARGE = 87000;
|
||||
ACE_FRAG_GURNEY_C = 2320;
|
||||
ACE_FRAG_GURNEY_K = 1/2;
|
||||
sideAirFriction = 0.04;
|
||||
airFriction = 0.04;
|
||||
laserLock = 0;
|
||||
};
|
||||
|
||||
class GrenadeBase;
|
||||
class Grenade;
|
||||
class GrenadeHand: Grenade {
|
||||
ACE_FRAG_SKIP = 0;
|
||||
ACE_FRAG_FORCE = 1;
|
||||
// This is a good high-drag frag type for grenades.
|
||||
ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"};
|
||||
/*
|
||||
These values are based on the M67 Grenade, should be tweaked for
|
||||
individual grenades.
|
||||
*/
|
||||
ACE_FRAG_METAL = 210; // metal 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_K = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations
|
||||
};
|
||||
class GrenadeHand_stone: GrenadeHand {
|
||||
ACE_FRAG_SKIP = 1;
|
||||
};
|
||||
class SmokeShell: GrenadeHand {
|
||||
ACE_FRAG_SKIP = 1;
|
||||
};
|
||||
|
||||
class RocketBase;
|
||||
//class R_Hydra_HE: RocketBase {
|
||||
// ACE_FRAG_SKIP = 1;
|
||||
//};
|
||||
|
||||
//class R_57mm_HE: RocketBase {
|
||||
// ACE_FRAG_SKIP = 1;
|
||||
//};
|
||||
|
||||
class R_80mm_HE: RocketBase {
|
||||
ACE_FRAG_SKIP = 1;
|
||||
};
|
||||
|
||||
//class R_S8T_AT: RocketBase {
|
||||
// ACE_FRAG_SKIP = 1;
|
||||
//};
|
||||
|
||||
class 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_METAL = 140000;
|
||||
ACE_FRAG_CHARGE = 87000;
|
||||
ACE_FRAG_GURNEY_C = 2320;
|
||||
ACE_FRAG_GURNEY_K = 1/2;
|
||||
};
|
||||
|
||||
|
||||
class G_40mm_HE: GrenadeBase {
|
||||
ACE_FRAG_SKIP = 0;
|
||||
ACE_FRAG_FORCE = 1;
|
||||
};
|
||||
|
||||
class ACE_G_40mm_HEDP: G_40mm_HE {
|
||||
};
|
||||
class ACE_G_40mm_HE: ACE_G_40mm_HEDP {
|
||||
};
|
||||
class ACE_G_40mm_Practice: ACE_G_40mm_HE {
|
||||
ACE_FRAG_SKIP = 1;
|
||||
};
|
||||
class ACE_G40mm_HE_VOG25P: G_40mm_HE {
|
||||
ACE_FRAG_SKIP = 0;
|
||||
ACE_FRAG_FORCE = 1;
|
||||
};
|
||||
|
||||
//class R_SMAW_HEDP;
|
||||
//class R_MEEWS_HEDP : R_SMAW_HEDP {
|
||||
// ACE_FRAG_FORCE = 1;
|
||||
// ACE_FRAG_MULTIPLIER = 1.2;
|
||||
//};
|
||||
|
||||
//class MissileBase;
|
||||
//class M_Hellfire_AT: MissileBase {
|
||||
// ACE_FRAG_FORCE = 1;
|
||||
// ACE_FRAG_MULTIPLIER = 1.75;
|
||||
//};
|
||||
|
||||
/*
|
||||
class B_762x51_Ball;
|
||||
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";
|
||||
timeToLive = 12;
|
||||
typicalSpeed = 800;
|
||||
// Fix sounds
|
||||
effectFly = "AmmoClassic";
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
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};
|
||||
supersonicCrackFar[] = {"A3\sounds_f\weapons\hits\sscrack2.wav",1,1,135};
|
||||
};
|
||||
*/
|
||||
|
||||
class B_65x39_Caseless;
|
||||
class ACE_frag_base: B_65x39_Caseless {
|
||||
timeToLive = 12;
|
||||
typicalSpeed = 1500;
|
||||
deflecting = 65;
|
||||
};
|
||||
|
||||
class ACE_frag_tiny: ACE_frag_base {
|
||||
hit = 6;
|
||||
airFriction = BASE_DRAG;
|
||||
caliber = 0.75;
|
||||
};
|
||||
|
||||
class ACE_frag_tiny_HD: ACE_frag_base {
|
||||
hit = 6;
|
||||
airFriction = BASE_DRAG_HD;
|
||||
caliber = 0.75;
|
||||
};
|
||||
|
||||
class ACE_frag_small: ACE_frag_base {
|
||||
hit = 12;
|
||||
airFriction = BASE_DRAG*0.9;
|
||||
};
|
||||
|
||||
class ACE_frag_small_HD: ACE_frag_base {
|
||||
hit = 12;
|
||||
airFriction = BASE_DRAG_HD*0.9;
|
||||
};
|
||||
|
||||
class ACE_frag_medium: ACE_frag_base {
|
||||
hit = 14;
|
||||
airFriction = BASE_DRAG*0.75;
|
||||
caliber = 1.2;
|
||||
};
|
||||
|
||||
class ACE_frag_medium_HD: ACE_frag_base {
|
||||
hit = 14;
|
||||
airFriction = BASE_DRAG_HD*0.75;
|
||||
caliber = 1.2;
|
||||
};
|
||||
|
||||
class ACE_frag_large: ACE_frag_base {
|
||||
hit = 28;
|
||||
indirectHit = 2;
|
||||
indirectHitRange = 0.25;
|
||||
airFriction = BASE_DRAG*0.65;
|
||||
caliber = 2;
|
||||
explosive = 0;
|
||||
|
||||
};
|
||||
|
||||
class ACE_frag_large_HD: ACE_frag_large {
|
||||
hit = 28;
|
||||
indirectHit = 2;
|
||||
indirectHitRange = 0.25;
|
||||
airFriction = BASE_DRAG_HD*0.65;
|
||||
caliber = 2;
|
||||
|
||||
|
||||
};
|
||||
|
||||
class ACE_frag_huge: ACE_frag_large {
|
||||
hit = 40;
|
||||
indirectHit = 4;
|
||||
indirectHitRange = 0.5;
|
||||
airFriction = BASE_DRAG*0.5;
|
||||
caliber = 2.8;
|
||||
};
|
||||
|
||||
class ACE_frag_huge_HD: ACE_frag_large {
|
||||
hit = 40;
|
||||
indirectHit = 4;
|
||||
indirectHitRange = 0.5;
|
||||
airFriction = BASE_DRAG_HD*0.5;
|
||||
caliber = 2.8;
|
||||
};
|
||||
|
||||
class ACE_frag_spall_small: ACE_frag_small {
|
||||
timeToLive = 0.1;
|
||||
};
|
||||
|
||||
class ACE_frag_spall_medium: ACE_frag_medium {
|
||||
timeToLive = 0.15;
|
||||
};
|
||||
|
||||
class ACE_frag_spall_large: ACE_frag_large {
|
||||
timeToLive = 0.25;
|
||||
};
|
||||
|
||||
class ACE_frag_spall_huge: ACE_frag_huge {
|
||||
timeToLive = 0.3;
|
||||
};
|
||||
};
|
||||
|
@ -1,17 +1,17 @@
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_pre_init));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_post_init));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_FiredBIS_EventHandlers {
|
||||
class AllVehicles {
|
||||
ADDON = QUOTE(_this call FUNC(fired));
|
||||
};
|
||||
};
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_pre_init));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_post_init));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_FiredBIS_EventHandlers {
|
||||
class AllVehicles {
|
||||
ADDON = QUOTE(_this call FUNC(fired));
|
||||
};
|
||||
};
|
||||
|
@ -1,18 +1,18 @@
|
||||
#include "script_component.hpp"
|
||||
if(isServer) then {
|
||||
[QGVAR(frag_eh), { _this call FUNC(frago); }] call ace_common_fnc_addEventHandler;
|
||||
};
|
||||
/*
|
||||
GVAR(replacedBisArtyWrapper) = false;
|
||||
[] spawn {
|
||||
waitUntil {
|
||||
if(!(isNil "BIS_ARTY_F_ShellFlight")) then {
|
||||
ACE_WRAPPER_BIS_ARTY_F_ShellFlight = BIS_ARTY_F_ShellFlight;
|
||||
BIS_ARTY_F_ShellFlight = FUNC(BIS_ARTY_WRAPPER);
|
||||
GVAR(replacedBisArtyWrapper) = true;
|
||||
};
|
||||
sleep 4;
|
||||
GVAR(replacedBisArtyWrapper)
|
||||
};
|
||||
};
|
||||
#include "script_component.hpp"
|
||||
if(isServer) then {
|
||||
[QGVAR(frag_eh), { _this call FUNC(frago); }] call ace_common_fnc_addEventHandler;
|
||||
};
|
||||
/*
|
||||
GVAR(replacedBisArtyWrapper) = false;
|
||||
[] spawn {
|
||||
waitUntil {
|
||||
if(!(isNil "BIS_ARTY_F_ShellFlight")) then {
|
||||
ACE_WRAPPER_BIS_ARTY_F_ShellFlight = BIS_ARTY_F_ShellFlight;
|
||||
BIS_ARTY_F_ShellFlight = FUNC(BIS_ARTY_WRAPPER);
|
||||
GVAR(replacedBisArtyWrapper) = true;
|
||||
};
|
||||
sleep 4;
|
||||
GVAR(replacedBisArtyWrapper)
|
||||
};
|
||||
};
|
||||
*/
|
@ -1,45 +1,45 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
|
||||
ADDON = false;
|
||||
|
||||
PREP(fired);
|
||||
PREP(frago);
|
||||
PREP(trackFragRound);
|
||||
PREP(spallTrack);
|
||||
PREP(doSpall);
|
||||
PREP(vectorDiffFast);
|
||||
|
||||
GVAR(trackedObjects) = [];
|
||||
GVAR(blackList) = [];
|
||||
GVAR(traceFrags) = false;
|
||||
|
||||
GVAR(replacedBisArtyWrapper) = true;
|
||||
|
||||
GVAR(TOTALFRAGS) = 0;
|
||||
|
||||
GVAR(spallIsTrackingCount) = 0;
|
||||
GVAR(spallHPData) = [];
|
||||
|
||||
GVAR(traces) = [];
|
||||
GVAR(tracesStarted) = false;
|
||||
GVAR(traceID) = -1;
|
||||
GVAR(autoTrace) = true;
|
||||
|
||||
|
||||
// * Other Shit */
|
||||
PREP(frag_trace);
|
||||
PREP(denyFrag);
|
||||
PREP(BIS_ARTY_WRAPPER);
|
||||
PREP(startTracing);
|
||||
PREP(stopTracing);
|
||||
PREP(clearTraces);
|
||||
PREP(trackTrace);
|
||||
PREP(addTrack);
|
||||
PREP(drawTraces);
|
||||
PREP(removeTrack);
|
||||
PREP(spallHP);
|
||||
PREP(addBlackList);
|
||||
PREP(addManualTrack);
|
||||
|
||||
ADDON = true;
|
||||
#include "script_component.hpp"
|
||||
|
||||
|
||||
ADDON = false;
|
||||
|
||||
PREP(fired);
|
||||
PREP(frago);
|
||||
PREP(trackFragRound);
|
||||
PREP(spallTrack);
|
||||
PREP(doSpall);
|
||||
PREP(vectorDiffFast);
|
||||
|
||||
GVAR(trackedObjects) = [];
|
||||
GVAR(blackList) = [];
|
||||
GVAR(traceFrags) = false;
|
||||
|
||||
GVAR(replacedBisArtyWrapper) = true;
|
||||
|
||||
GVAR(TOTALFRAGS) = 0;
|
||||
|
||||
GVAR(spallIsTrackingCount) = 0;
|
||||
GVAR(spallHPData) = [];
|
||||
|
||||
GVAR(traces) = [];
|
||||
GVAR(tracesStarted) = false;
|
||||
GVAR(traceID) = -1;
|
||||
GVAR(autoTrace) = true;
|
||||
|
||||
|
||||
// * Other Shit */
|
||||
PREP(frag_trace);
|
||||
PREP(denyFrag);
|
||||
PREP(BIS_ARTY_WRAPPER);
|
||||
PREP(startTracing);
|
||||
PREP(stopTracing);
|
||||
PREP(clearTraces);
|
||||
PREP(trackTrace);
|
||||
PREP(addTrack);
|
||||
PREP(drawTraces);
|
||||
PREP(removeTrack);
|
||||
PREP(spallHP);
|
||||
PREP(addBlackList);
|
||||
PREP(addManualTrack);
|
||||
|
||||
ADDON = true;
|
||||
|
@ -1,16 +1,16 @@
|
||||
#include "script_component.hpp"
|
||||
class CfgPatches {
|
||||
class ADDON {
|
||||
units[] = {};
|
||||
weapons[] = {};
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {"ace_common"};
|
||||
author[] = {"Nou"};
|
||||
VERSION_CONFIG;
|
||||
};
|
||||
};
|
||||
|
||||
//PRELOAD_ADDONS;
|
||||
|
||||
#include "CfgEventhandlers.hpp"
|
||||
#include "CfgAmmo.hpp"
|
||||
#include "script_component.hpp"
|
||||
class CfgPatches {
|
||||
class ADDON {
|
||||
units[] = {};
|
||||
weapons[] = {};
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {"ace_common"};
|
||||
author[] = {"Nou"};
|
||||
VERSION_CONFIG;
|
||||
};
|
||||
};
|
||||
|
||||
//PRELOAD_ADDONS;
|
||||
|
||||
#include "CfgEventhandlers.hpp"
|
||||
#include "CfgAmmo.hpp"
|
||||
|
@ -1,13 +1,13 @@
|
||||
#include "script_component.hpp"
|
||||
_ret = [(_this select 6)] call FUNC(removeTrack);
|
||||
if(!_ret) then {
|
||||
[(_this select 6)] call FUNC(addBlackList);
|
||||
};
|
||||
_this call ACE_WRAPPER_BIS_ARTY_F_ShellFlight;
|
||||
_catEntry = BIS_ARTY_SHELLCAT select ((count BIS_ARTY_SHELLCAT) - 1);
|
||||
_shell = _catEntry select 0;
|
||||
_ARTY_DeployOnImpact = getText (configFile >> "CfgAmmo" >> "ARTY_DeployOnImpact");
|
||||
if(_ARTY_DeployOnImpact == "") then {
|
||||
_this set[6, _shell];
|
||||
_this call FUNC(fired);
|
||||
#include "script_component.hpp"
|
||||
_ret = [(_this select 6)] call FUNC(removeTrack);
|
||||
if(!_ret) then {
|
||||
[(_this select 6)] call FUNC(addBlackList);
|
||||
};
|
||||
_this call ACE_WRAPPER_BIS_ARTY_F_ShellFlight;
|
||||
_catEntry = BIS_ARTY_SHELLCAT select ((count BIS_ARTY_SHELLCAT) - 1);
|
||||
_shell = _catEntry select 0;
|
||||
_ARTY_DeployOnImpact = getText (configFile >> "CfgAmmo" >> "ARTY_DeployOnImpact");
|
||||
if(_ARTY_DeployOnImpact == "") then {
|
||||
_this set[6, _shell];
|
||||
_this call FUNC(fired);
|
||||
};
|
@ -1,4 +1,4 @@
|
||||
#include "script_component.hpp"
|
||||
private ["_round"];
|
||||
_round = _this select 0;
|
||||
#include "script_component.hpp"
|
||||
private ["_round"];
|
||||
_round = _this select 0;
|
||||
GVAR(blackList) set[(count GVAR(blackList)), _round];
|
@ -1,7 +1,7 @@
|
||||
#include "script_component.hpp"
|
||||
private ["_round"];
|
||||
_round = _this select 0;
|
||||
if(alive _round) then {
|
||||
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;
|
||||
#include "script_component.hpp"
|
||||
private ["_round"];
|
||||
_round = _this select 0;
|
||||
if(alive _round) then {
|
||||
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;
|
||||
};
|
@ -1,20 +1,20 @@
|
||||
#include "script_component.hpp"
|
||||
if(GVAR(autoTrace)) then {
|
||||
[] call FUNC(startTracing);
|
||||
};
|
||||
|
||||
// setAccTime 0.05;
|
||||
_index = (count GVAR(traces));
|
||||
_obj = _this select 1;
|
||||
_origin = _this select 0;
|
||||
_color = [1,0,0,1];
|
||||
if((count _this) > 2) then {
|
||||
_color = _this select 2;
|
||||
};
|
||||
_positions = [];
|
||||
_objVel = velocity _obj;
|
||||
_objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2);
|
||||
_positions set[(count _positions), [(getPos _obj), _objTVel]];
|
||||
_data = [_origin, typeOf _origin, typeOf _obj, _objTVel, _positions, _color];
|
||||
GVAR(traces) set[_index, _data];
|
||||
#include "script_component.hpp"
|
||||
if(GVAR(autoTrace)) then {
|
||||
[] call FUNC(startTracing);
|
||||
};
|
||||
|
||||
// setAccTime 0.05;
|
||||
_index = (count GVAR(traces));
|
||||
_obj = _this select 1;
|
||||
_origin = _this select 0;
|
||||
_color = [1,0,0,1];
|
||||
if((count _this) > 2) then {
|
||||
_color = _this select 2;
|
||||
};
|
||||
_positions = [];
|
||||
_objVel = velocity _obj;
|
||||
_objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2);
|
||||
_positions set[(count _positions), [(getPos _obj), _objTVel]];
|
||||
_data = [_origin, typeOf _origin, typeOf _obj, _objTVel, _positions, _color];
|
||||
GVAR(traces) set[_index, _data];
|
||||
[DFUNC(trackTrace), 0, [_obj, _index, time]] call cba_fnc_addPerFrameHandler;
|
@ -1,2 +1,2 @@
|
||||
#include "script_component.hpp"
|
||||
#include "script_component.hpp"
|
||||
GVAR(traces) = [];
|
@ -1,7 +1,7 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_ret"];
|
||||
_ret = [(_this select 0)] call FUNC(removeTrack);
|
||||
if(!_ret) then {
|
||||
[(_this select 0)] call FUNC(addBlackList);
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_ret"];
|
||||
_ret = [(_this select 0)] call FUNC(removeTrack);
|
||||
if(!_ret) then {
|
||||
[(_this select 0)] call FUNC(addBlackList);
|
||||
};
|
@ -1,166 +1,166 @@
|
||||
//fnc_doSpall.sqf
|
||||
#include "script_component.hpp"
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
GVAR(traceFrags) = true;
|
||||
#endif
|
||||
// player sideChat "WAAAAAAAAAAAAAAAAAAAAA";
|
||||
private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive",
|
||||
"_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar",
|
||||
"_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k",
|
||||
"_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect",
|
||||
"_fragment"];
|
||||
|
||||
|
||||
_params = _this select 0;
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
_hitData = _params select 0;
|
||||
_initialData = GVAR(spallHPData) select (_hitData select 0);
|
||||
_hpData = (_hitData select 1) select (_params select 1);
|
||||
|
||||
|
||||
_object = _hpData select 0;
|
||||
_object removeEventHandler ["hitPart", _initialData select 0];
|
||||
_foundObjects = _initialData select 7;
|
||||
_index = _foundObjects find _object;
|
||||
if(_index != -1) then {
|
||||
_foundObjecsts set[_index, nil];
|
||||
};
|
||||
|
||||
_roundType = (_initialData select 2);
|
||||
_round = (_initialData select 3);
|
||||
_object = (_initialData select 1);
|
||||
|
||||
_caliber = getNumber(configFile >> "CfgAmmo" >> _roundType >> "caliber");
|
||||
_explosive = getNumber(configFile >> "CfgAmmo" >> _roundType >> "explosive");
|
||||
_idh = getNumber(configFile >> "CfgAmmo" >> _roundType >> "indirectHitRange");
|
||||
|
||||
_alive = true;
|
||||
if(!alive _round && (_initialData select 6) == 1) then {
|
||||
_alive = false;
|
||||
};
|
||||
|
||||
if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
||||
// player sideChat format["BBBB"];
|
||||
_exit = false;
|
||||
_vm = 1;
|
||||
_velocity = _initialData select 5;
|
||||
|
||||
_oldVelocity = _velocity call BIS_fnc_magnitude;
|
||||
_curVelocity = (velocity _round) call BIS_fnc_magnitude;
|
||||
|
||||
if(alive _round) then {
|
||||
_diff = _velocity vectorDiff (velocity _round);
|
||||
_polar = _diff call CBA_fnc_vect2polar;
|
||||
// player sideChat format["polar: %1", _polar];
|
||||
if((abs(_polar select 1) > 45 || abs(_polar select 2) > 45)) then {
|
||||
if(_caliber < 2.5) then {
|
||||
// player sideChat format["exit!"];
|
||||
_exit = true;
|
||||
} else {
|
||||
_vm = 1-(_curVelocity/_oldVelocity);
|
||||
};
|
||||
};
|
||||
};
|
||||
if(!_exit) then {
|
||||
_unitDir = vectorNormalized _velocity;
|
||||
_pos = _hpData select 3;
|
||||
_spallPos = nil;
|
||||
for "_i" from 0 to 100 do {
|
||||
_pos1 = [
|
||||
(_pos select 0) + (((_unitDir select 0)*0.01)*_i),
|
||||
(_pos select 1) + (((_unitDir select 1)*0.01)*_i),
|
||||
(_pos select 2) + (((_unitDir select 2)*0.01)*_i)
|
||||
];
|
||||
_pos2 = [
|
||||
(_pos select 0) + (((_unitDir select 0)*0.01)*(_i+1)),
|
||||
(_pos select 1) + (((_unitDir select 1)*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)];
|
||||
// diag_log text format["b: %1", _blah];
|
||||
|
||||
// _data = [nil, nil, nil, 1, [[ASLtoATL _pos1, 1], [ASLtoATL _pos2, 1]]];
|
||||
// NOU_TRACES set[(count NOU_TRACES), _data];
|
||||
|
||||
if(!lineIntersects [_pos1, _pos2]) exitWith {
|
||||
// player sideChat format["FOUND!"];
|
||||
_spallPos = _pos2;
|
||||
};
|
||||
};
|
||||
if(!isNil "_spallPos") then {
|
||||
_spallPolar = _velocity call CBA_fnc_vect2polar;
|
||||
|
||||
if(_explosive > 0) then {
|
||||
// player sideChat format["EXPLOSIVE!"];
|
||||
_warn = false;
|
||||
_c = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_CHARGE");
|
||||
if(_c == 0) then { _c = 1; _warn = true;};
|
||||
_m = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_METAL");
|
||||
if(_m == 0) then { _m = 2; _warn = true;};
|
||||
_k = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_K");
|
||||
if(_k == 0) then { _k = 1/2; _warn = true;};
|
||||
_gC = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_C");
|
||||
if(_gC == 0) then { _gC = 2440; _warn = true;};
|
||||
|
||||
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
|
||||
};
|
||||
|
||||
_fragPower = (((_m/_c)+_k)^-(1/2))*_gC;
|
||||
_spallPolar set[0, _fragPower*0.66];
|
||||
};
|
||||
|
||||
_fragTypes = [
|
||||
"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_medium", "ACE_frag_spall_large", "ACE_frag_spall_large", "ACE_frag_spall_huge",
|
||||
"ACE_frag_spall_huge"
|
||||
|
||||
];
|
||||
|
||||
// diag_log text format["SPALL POWER: %1", _spallPolar select 0];
|
||||
_spread = 15+(random 25);
|
||||
_spallCount = 5+(random 10);
|
||||
for "_i" from 1 to _spallCount do {
|
||||
_elev = ((_spallPolar select 2)-_spread)+(random (_spread*2));
|
||||
_dir = ((_spallPolar select 1)-_spread)+(random (_spread*2));
|
||||
if(abs _elev > 90) then {
|
||||
_dir = _dir + 180;
|
||||
};
|
||||
_dir = _dir % 360;
|
||||
_vel = (_spallPolar select 0)*0.33*_vm;
|
||||
_vel = (_vel-(_vel*0.25))+(random (_vel*0.5));
|
||||
|
||||
_spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect;
|
||||
_fragType = round (random ((count _fragTypes)-1));
|
||||
_fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
||||
_fragment setPosASL _spallPos;
|
||||
_fragment setVelocity _spallFragVect;
|
||||
if(GVAR(traceFrags)) then {
|
||||
[player, _fragment, [1,0.5,0,1]] call FUNC(addTrack);
|
||||
};
|
||||
};
|
||||
_spread = 5+(random 5);
|
||||
_spallCount = 3+(random 5);
|
||||
for "_i" from 1 to _spallCount do {
|
||||
_elev = ((_spallPolar select 2)-_spread)+(random (_spread*2));
|
||||
_dir = ((_spallPolar select 1)-_spread)+(random (_spread*2));
|
||||
if(abs _elev > 90) then {
|
||||
_dir = _dir + 180;
|
||||
};
|
||||
_dir = _dir % 360;
|
||||
_vel = (_spallPolar select 0)*0.55*_vm;
|
||||
_vel = (_vel-(_vel*0.25))+(random (_vel*0.5));
|
||||
|
||||
_spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect;
|
||||
_fragType = round (random ((count _fragTypes)-1));
|
||||
_fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
||||
_fragment setPosASL _spallPos;
|
||||
_fragment setVelocity _spallFragVect;
|
||||
if(GVAR(traceFrags)) then {
|
||||
[player, _fragment, [1,0,0,1]] call FUNC(addTrack);
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
//fnc_doSpall.sqf
|
||||
#include "script_component.hpp"
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
GVAR(traceFrags) = true;
|
||||
#endif
|
||||
// player sideChat "WAAAAAAAAAAAAAAAAAAAAA";
|
||||
private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive",
|
||||
"_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar",
|
||||
"_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k",
|
||||
"_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect",
|
||||
"_fragment"];
|
||||
|
||||
|
||||
_params = _this select 0;
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
_hitData = _params select 0;
|
||||
_initialData = GVAR(spallHPData) select (_hitData select 0);
|
||||
_hpData = (_hitData select 1) select (_params select 1);
|
||||
|
||||
|
||||
_object = _hpData select 0;
|
||||
_object removeEventHandler ["hitPart", _initialData select 0];
|
||||
_foundObjects = _initialData select 7;
|
||||
_index = _foundObjects find _object;
|
||||
if(_index != -1) then {
|
||||
_foundObjecsts set[_index, nil];
|
||||
};
|
||||
|
||||
_roundType = (_initialData select 2);
|
||||
_round = (_initialData select 3);
|
||||
_object = (_initialData select 1);
|
||||
|
||||
_caliber = getNumber(configFile >> "CfgAmmo" >> _roundType >> "caliber");
|
||||
_explosive = getNumber(configFile >> "CfgAmmo" >> _roundType >> "explosive");
|
||||
_idh = getNumber(configFile >> "CfgAmmo" >> _roundType >> "indirectHitRange");
|
||||
|
||||
_alive = true;
|
||||
if(!alive _round && (_initialData select 6) == 1) then {
|
||||
_alive = false;
|
||||
};
|
||||
|
||||
if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
||||
// player sideChat format["BBBB"];
|
||||
_exit = false;
|
||||
_vm = 1;
|
||||
_velocity = _initialData select 5;
|
||||
|
||||
_oldVelocity = _velocity call BIS_fnc_magnitude;
|
||||
_curVelocity = (velocity _round) call BIS_fnc_magnitude;
|
||||
|
||||
if(alive _round) then {
|
||||
_diff = _velocity vectorDiff (velocity _round);
|
||||
_polar = _diff call CBA_fnc_vect2polar;
|
||||
// player sideChat format["polar: %1", _polar];
|
||||
if((abs(_polar select 1) > 45 || abs(_polar select 2) > 45)) then {
|
||||
if(_caliber < 2.5) then {
|
||||
// player sideChat format["exit!"];
|
||||
_exit = true;
|
||||
} else {
|
||||
_vm = 1-(_curVelocity/_oldVelocity);
|
||||
};
|
||||
};
|
||||
};
|
||||
if(!_exit) then {
|
||||
_unitDir = vectorNormalized _velocity;
|
||||
_pos = _hpData select 3;
|
||||
_spallPos = nil;
|
||||
for "_i" from 0 to 100 do {
|
||||
_pos1 = [
|
||||
(_pos select 0) + (((_unitDir select 0)*0.01)*_i),
|
||||
(_pos select 1) + (((_unitDir select 1)*0.01)*_i),
|
||||
(_pos select 2) + (((_unitDir select 2)*0.01)*_i)
|
||||
];
|
||||
_pos2 = [
|
||||
(_pos select 0) + (((_unitDir select 0)*0.01)*(_i+1)),
|
||||
(_pos select 1) + (((_unitDir select 1)*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)];
|
||||
// diag_log text format["b: %1", _blah];
|
||||
|
||||
// _data = [nil, nil, nil, 1, [[ASLtoATL _pos1, 1], [ASLtoATL _pos2, 1]]];
|
||||
// NOU_TRACES set[(count NOU_TRACES), _data];
|
||||
|
||||
if(!lineIntersects [_pos1, _pos2]) exitWith {
|
||||
// player sideChat format["FOUND!"];
|
||||
_spallPos = _pos2;
|
||||
};
|
||||
};
|
||||
if(!isNil "_spallPos") then {
|
||||
_spallPolar = _velocity call CBA_fnc_vect2polar;
|
||||
|
||||
if(_explosive > 0) then {
|
||||
// player sideChat format["EXPLOSIVE!"];
|
||||
_warn = false;
|
||||
_c = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_CHARGE");
|
||||
if(_c == 0) then { _c = 1; _warn = true;};
|
||||
_m = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_METAL");
|
||||
if(_m == 0) then { _m = 2; _warn = true;};
|
||||
_k = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_K");
|
||||
if(_k == 0) then { _k = 1/2; _warn = true;};
|
||||
_gC = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_C");
|
||||
if(_gC == 0) then { _gC = 2440; _warn = true;};
|
||||
|
||||
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
|
||||
};
|
||||
|
||||
_fragPower = (((_m/_c)+_k)^-(1/2))*_gC;
|
||||
_spallPolar set[0, _fragPower*0.66];
|
||||
};
|
||||
|
||||
_fragTypes = [
|
||||
"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_medium", "ACE_frag_spall_large", "ACE_frag_spall_large", "ACE_frag_spall_huge",
|
||||
"ACE_frag_spall_huge"
|
||||
|
||||
];
|
||||
|
||||
// diag_log text format["SPALL POWER: %1", _spallPolar select 0];
|
||||
_spread = 15+(random 25);
|
||||
_spallCount = 5+(random 10);
|
||||
for "_i" from 1 to _spallCount do {
|
||||
_elev = ((_spallPolar select 2)-_spread)+(random (_spread*2));
|
||||
_dir = ((_spallPolar select 1)-_spread)+(random (_spread*2));
|
||||
if(abs _elev > 90) then {
|
||||
_dir = _dir + 180;
|
||||
};
|
||||
_dir = _dir % 360;
|
||||
_vel = (_spallPolar select 0)*0.33*_vm;
|
||||
_vel = (_vel-(_vel*0.25))+(random (_vel*0.5));
|
||||
|
||||
_spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect;
|
||||
_fragType = round (random ((count _fragTypes)-1));
|
||||
_fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
||||
_fragment setPosASL _spallPos;
|
||||
_fragment setVelocity _spallFragVect;
|
||||
if(GVAR(traceFrags)) then {
|
||||
[player, _fragment, [1,0.5,0,1]] call FUNC(addTrack);
|
||||
};
|
||||
};
|
||||
_spread = 5+(random 5);
|
||||
_spallCount = 3+(random 5);
|
||||
for "_i" from 1 to _spallCount do {
|
||||
_elev = ((_spallPolar select 2)-_spread)+(random (_spread*2));
|
||||
_dir = ((_spallPolar select 1)-_spread)+(random (_spread*2));
|
||||
if(abs _elev > 90) then {
|
||||
_dir = _dir + 180;
|
||||
};
|
||||
_dir = _dir % 360;
|
||||
_vel = (_spallPolar select 0)*0.55*_vm;
|
||||
_vel = (_vel-(_vel*0.25))+(random (_vel*0.5));
|
||||
|
||||
_spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect;
|
||||
_fragType = round (random ((count _fragTypes)-1));
|
||||
_fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
||||
_fragment setPosASL _spallPos;
|
||||
_fragment setVelocity _spallFragVect;
|
||||
if(GVAR(traceFrags)) then {
|
||||
[player, _fragment, [1,0,0,1]] call FUNC(addTrack);
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
@ -1,32 +1,32 @@
|
||||
#include "script_component.hpp"
|
||||
{
|
||||
_positions = _x select 4;
|
||||
_color = _x select 5;
|
||||
_index = 0;
|
||||
_max = count _positions;
|
||||
_startSpeed = (_positions select 0) select 1;
|
||||
if(_startSpeed <= 0) then {
|
||||
_startSpeed = 0.01;
|
||||
};
|
||||
_lastSpd = [];
|
||||
_lastPos = [];
|
||||
while {_index < _max} do {
|
||||
_data1 = _positions select _index;
|
||||
_data2 = nil;
|
||||
if(_index + ACE_TRACE_DRAW_INC >= _max) then {
|
||||
_data2 = _positions select (_max - 1);
|
||||
} else {
|
||||
_data2 = _positions select (_index + ACE_TRACE_DRAW_INC);
|
||||
};
|
||||
|
||||
_pos1 = _data1 select 0;
|
||||
_pos2 = _data2 select 0;
|
||||
_index = _index + ACE_TRACE_DRAW_INC;
|
||||
|
||||
|
||||
drawLine3D [_pos1, _pos2, _color];
|
||||
_lastPos = _pos2;
|
||||
_lastSpd = _data1 select 1;
|
||||
};
|
||||
// drawIcon3D ["", [1,0,0,1], _lastPos, 0, 0, 0, format["%1m/s", _lastSpd], 1, 0.05, "PuristaMedium"];
|
||||
#include "script_component.hpp"
|
||||
{
|
||||
_positions = _x select 4;
|
||||
_color = _x select 5;
|
||||
_index = 0;
|
||||
_max = count _positions;
|
||||
_startSpeed = (_positions select 0) select 1;
|
||||
if(_startSpeed <= 0) then {
|
||||
_startSpeed = 0.01;
|
||||
};
|
||||
_lastSpd = [];
|
||||
_lastPos = [];
|
||||
while {_index < _max} do {
|
||||
_data1 = _positions select _index;
|
||||
_data2 = nil;
|
||||
if(_index + ACE_TRACE_DRAW_INC >= _max) then {
|
||||
_data2 = _positions select (_max - 1);
|
||||
} else {
|
||||
_data2 = _positions select (_index + ACE_TRACE_DRAW_INC);
|
||||
};
|
||||
|
||||
_pos1 = _data1 select 0;
|
||||
_pos2 = _data2 select 0;
|
||||
_index = _index + ACE_TRACE_DRAW_INC;
|
||||
|
||||
|
||||
drawLine3D [_pos1, _pos2, _color];
|
||||
_lastPos = _pos2;
|
||||
_lastSpd = _data1 select 1;
|
||||
};
|
||||
// drawIcon3D ["", [1,0,0,1], _lastPos, 0, 0, 0, format["%1m/s", _lastSpd], 1, 0.05, "PuristaMedium"];
|
||||
} forEach GVAR(traces);
|
@ -1,10 +1,10 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_params", "_shell"];
|
||||
_params = _this select 0;
|
||||
_shell = _params select 0;
|
||||
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,"","",""];
|
||||
} else {
|
||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_params", "_shell"];
|
||||
_params = _this select 0;
|
||||
_shell = _params select 0;
|
||||
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,"","",""];
|
||||
} else {
|
||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||
};
|
@ -1,230 +1,230 @@
|
||||
//fnc_frago.sqf
|
||||
// #define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define FRAG_VEC_VAR 0.004
|
||||
|
||||
#define MAX_FRAG_COUNT 50
|
||||
|
||||
if(!isServer) exitWith { };
|
||||
|
||||
// _startTime = diag_tickTime;
|
||||
private ["_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed",
|
||||
"_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom",
|
||||
"_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox",
|
||||
"_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir",
|
||||
"_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount",
|
||||
"_sectorSize", "_sectorOffset", "_randomDir"];
|
||||
|
||||
|
||||
_round = _this select 0;
|
||||
_lastPos = _this select 1;
|
||||
_lastVel = _this select 2;
|
||||
_shellType = _this select 3;
|
||||
_gun = nil;
|
||||
if((count _this) > 5) then {
|
||||
_gun = _this select 5;
|
||||
};
|
||||
|
||||
_fragTypes = [
|
||||
"ACE_frag_tiny", "ACE_frag_tiny", "ACE_frag_tiny",
|
||||
"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_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"
|
||||
];
|
||||
|
||||
_warn = false;
|
||||
if(isArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES")) then {
|
||||
_fragTypes = getArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES");
|
||||
} else {
|
||||
_warn = true;
|
||||
};
|
||||
|
||||
_atlPos = ASLtoATL _lastPos;
|
||||
|
||||
_isArmed = true;
|
||||
if(!isNil "_gun") then {
|
||||
_fuseDist = getNumber(configFile >> "CfgAmmo" >> _shellType >> "fuseDistance");
|
||||
_isArmed = ((getPosASL _gun) distance _lastPos > _fuseDist);
|
||||
};
|
||||
|
||||
_indirectHitRange = getNumber(configFile >> "CfgAmmo" >> _shellType >> "indirecthitrange");
|
||||
_fragRange = 20*_indirectHitRange*4;
|
||||
// _c = 185; // grams of comp-b
|
||||
// _m = 210; // grams of fragmentating metal
|
||||
// _k = 3/5; // spherical K factor
|
||||
// _gC = 2843; // Gurney constant of comp-b in /ms
|
||||
|
||||
// _c = 429; // grams of tritonal
|
||||
// _m = 496; // grams of fragmentating metal
|
||||
// _k = 1/2; // spherical K factor
|
||||
// _gC = 2320; // Gurney constant of tritonal in /ms
|
||||
|
||||
|
||||
_c = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CHARGE");
|
||||
if(_c == 0) then { _c = 1; _warn = true;};
|
||||
_m = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_METAL");
|
||||
if(_m == 0) then { _m = 2; _warn = true;};
|
||||
_k = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_GURNEY_K");
|
||||
if(_k == 0) then { _k = 1/2; _warn = true;};
|
||||
_gC = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_GURNEY_C");
|
||||
if(_gC == 0) then { _gC = 2440; _warn = true;};
|
||||
|
||||
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
|
||||
};
|
||||
|
||||
_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
|
||||
|
||||
_fragPowerRandom = _fragPower*0.5;
|
||||
if((_atlPos select 2) < 0.5) then {
|
||||
_lastPos set[2, (_lastPos select 2)+0.5];
|
||||
};
|
||||
|
||||
// _manObjects = _atlPos nearEntities ["CaManBase", _fragRange];
|
||||
|
||||
// setAccTime 0.01;
|
||||
|
||||
//_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 = _manObjects;
|
||||
// Target also people inside vehicles or manning weapons
|
||||
_crew = [];
|
||||
{
|
||||
{
|
||||
_crew set [count _crew,_x]
|
||||
} forEach (crew _x);
|
||||
} forEach _objects;
|
||||
|
||||
_objects = _objects - _crew;
|
||||
_objects = _objects + _crew;
|
||||
|
||||
_fragCount = 0;
|
||||
|
||||
_fragArcs = [];
|
||||
_fragArcs set[360, 0];
|
||||
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
player sideChat format["_fragRange: %1", _fragRange];
|
||||
player sideChat format["_objects: %1", _objects];
|
||||
#endif
|
||||
_doRandom = false;
|
||||
if(_isArmed && (count _objects) > 0) then {
|
||||
{
|
||||
//if(random(1) > 0.5) then {
|
||||
_target = _x;
|
||||
if(alive _target) then {
|
||||
_boundingBox = boundingBox _target;
|
||||
_targetPos = (getPosASL _target);
|
||||
_distance = _targetPos distance _lastPos;
|
||||
_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);
|
||||
_bbY = (abs((_boundingBox select 0) select 1))+((_boundingBox select 1) select 1);
|
||||
_bbZ = (abs((_boundingBox select 0) select 2))+((_boundingBox select 1) select 2);
|
||||
_cubic = _bbX*_bbY*_bbZ;
|
||||
if(_cubic > 1) then {
|
||||
_doRandom = true;
|
||||
|
||||
_targetVel = (velocity _target);
|
||||
|
||||
|
||||
_targetPos set[0, (_targetPos select 0)+((_targetVel select 0)*(_distance/_fragPower))];
|
||||
_targetPos set[1, (_targetPos select 1)+((_targetVel select 1)*(_distance/_fragPower))];
|
||||
_targetPos set[2, (_targetPos select 2)+_add];
|
||||
|
||||
_baseVec = _lastPos vectorFromTo _targetPos;
|
||||
|
||||
_dir = floor(_baseVec call CBA_fnc_vectDir);
|
||||
_currentCount = _fragArcs select _dir;
|
||||
if(isNil "_currentCount") then {
|
||||
_currentCount = 0;
|
||||
};
|
||||
if(_currentCount < 20) then {
|
||||
_count = ceil(random(sqrt(_m/1000)));
|
||||
_vecVar = FRAG_VEC_VAR;
|
||||
if(!(_target isKindOf "Man")) then {
|
||||
_vecVar = ((sqrt _cubic)/2000)+FRAG_VEC_VAR;
|
||||
if((count (crew _target)) == 0 && _count > 0) then {
|
||||
_count = 0 max (_count/2);
|
||||
};
|
||||
};
|
||||
for "_i" from 1 to _count do {
|
||||
_vec = +_baseVec;
|
||||
|
||||
_vec set[0, (_vec select 0)-(_vecVar/2)+(random _vecVar)];
|
||||
_vec set[1, (_vec select 1)-(_vecVar/2)+(random _vecVar)];
|
||||
_vec set[2, (_vec select 2)-(_vecVar/2)+(random _vecVar)];
|
||||
|
||||
_fp = (_fragPower-(random (_fragPowerRandom)));
|
||||
_vel = [
|
||||
(_vec select 0)*_fp,
|
||||
(_vec select 1)*_fp,
|
||||
(_vec select 2)*_fp
|
||||
];
|
||||
|
||||
_fragType = round (random ((count _fragTypes)-1));
|
||||
_fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
||||
// diag_log text format["fp: %1 %2", _fp, typeOf _fragObj];
|
||||
_fragObj setPosASL _lastPos;
|
||||
_fragObj setVectorDir _vec;
|
||||
_fragObj setVelocity _vel;
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1;
|
||||
GVAR(traceFrags) = true;
|
||||
#endif
|
||||
if(GVAR(traceFrags)) then {
|
||||
[player, _fragObj, [1,0,0,1]] call FUNC(addTrack);
|
||||
};
|
||||
_fragCount = _fragCount + 1;
|
||||
_currentCount = _currentCount + 1;
|
||||
};
|
||||
_fragArcs set[_dir, _currentCount];
|
||||
};
|
||||
};
|
||||
};
|
||||
//};
|
||||
if(_fragCount > MAX_FRAG_COUNT) exitWith {};
|
||||
} forEach _objects;
|
||||
if(_fragCount > MAX_FRAG_COUNT) exitWith {};
|
||||
_randomCount = (ceil((MAX_FRAG_COUNT-_fragCount)*0.1)) max 0;
|
||||
_sectorSize = 360 / (_randomCount max 1);
|
||||
// _doRandom = false;
|
||||
if(_doRandom) then {
|
||||
for "_i" from 1 to _randomCount do {
|
||||
// Distribute evenly
|
||||
_sectorOffset = 360 * (_i - 1) / (_randomCount max 1);
|
||||
_randomDir = random(_sectorSize);
|
||||
_vec = [cos(_sectorOffset + _randomDir), sin(_sectorOffset + _randomDir), sin(30 - (random 45))];
|
||||
|
||||
_fp = (_fragPower-(random (_fragPowerRandom)));
|
||||
|
||||
_vel = [
|
||||
(_vec select 0)*_fp,
|
||||
(_vec select 1)*_fp,
|
||||
(_vec select 2)*_fp
|
||||
];
|
||||
|
||||
_fragType = round (random ((count _fragTypes)-1));
|
||||
_fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
||||
_fragObj setPosASL _lastPos;
|
||||
_fragObj setVectorDir _vec;
|
||||
_fragObj setVelocity _vel;
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1;
|
||||
GVAR(traceFrags) = true;
|
||||
#endif
|
||||
if(GVAR(traceFrags)) then {
|
||||
[player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack);
|
||||
};
|
||||
_fragCount = _fragCount + 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
// #ifdef DEBUG_MODE_FULL
|
||||
// player sideChat format["total frags: %1", GVAR(TOTALFRAGS)];
|
||||
// player sideChat format["tracks: %1", (count GVAR(trackedObjects))];
|
||||
// #endif
|
||||
// _endTime = diag_tickTime;
|
||||
//fnc_frago.sqf
|
||||
// #define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define FRAG_VEC_VAR 0.004
|
||||
|
||||
#define MAX_FRAG_COUNT 50
|
||||
|
||||
if(!isServer) exitWith { };
|
||||
|
||||
// _startTime = diag_tickTime;
|
||||
private ["_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed",
|
||||
"_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom",
|
||||
"_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox",
|
||||
"_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir",
|
||||
"_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount",
|
||||
"_sectorSize", "_sectorOffset", "_randomDir"];
|
||||
|
||||
|
||||
_round = _this select 0;
|
||||
_lastPos = _this select 1;
|
||||
_lastVel = _this select 2;
|
||||
_shellType = _this select 3;
|
||||
_gun = nil;
|
||||
if((count _this) > 5) then {
|
||||
_gun = _this select 5;
|
||||
};
|
||||
|
||||
_fragTypes = [
|
||||
"ACE_frag_tiny", "ACE_frag_tiny", "ACE_frag_tiny",
|
||||
"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_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"
|
||||
];
|
||||
|
||||
_warn = false;
|
||||
if(isArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES")) then {
|
||||
_fragTypes = getArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES");
|
||||
} else {
|
||||
_warn = true;
|
||||
};
|
||||
|
||||
_atlPos = ASLtoATL _lastPos;
|
||||
|
||||
_isArmed = true;
|
||||
if(!isNil "_gun") then {
|
||||
_fuseDist = getNumber(configFile >> "CfgAmmo" >> _shellType >> "fuseDistance");
|
||||
_isArmed = ((getPosASL _gun) distance _lastPos > _fuseDist);
|
||||
};
|
||||
|
||||
_indirectHitRange = getNumber(configFile >> "CfgAmmo" >> _shellType >> "indirecthitrange");
|
||||
_fragRange = 20*_indirectHitRange*4;
|
||||
// _c = 185; // grams of comp-b
|
||||
// _m = 210; // grams of fragmentating metal
|
||||
// _k = 3/5; // spherical K factor
|
||||
// _gC = 2843; // Gurney constant of comp-b in /ms
|
||||
|
||||
// _c = 429; // grams of tritonal
|
||||
// _m = 496; // grams of fragmentating metal
|
||||
// _k = 1/2; // spherical K factor
|
||||
// _gC = 2320; // Gurney constant of tritonal in /ms
|
||||
|
||||
|
||||
_c = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CHARGE");
|
||||
if(_c == 0) then { _c = 1; _warn = true;};
|
||||
_m = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_METAL");
|
||||
if(_m == 0) then { _m = 2; _warn = true;};
|
||||
_k = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_GURNEY_K");
|
||||
if(_k == 0) then { _k = 1/2; _warn = true;};
|
||||
_gC = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_GURNEY_C");
|
||||
if(_gC == 0) then { _gC = 2440; _warn = true;};
|
||||
|
||||
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
|
||||
};
|
||||
|
||||
_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
|
||||
|
||||
_fragPowerRandom = _fragPower*0.5;
|
||||
if((_atlPos select 2) < 0.5) then {
|
||||
_lastPos set[2, (_lastPos select 2)+0.5];
|
||||
};
|
||||
|
||||
// _manObjects = _atlPos nearEntities ["CaManBase", _fragRange];
|
||||
|
||||
// setAccTime 0.01;
|
||||
|
||||
//_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 = _manObjects;
|
||||
// Target also people inside vehicles or manning weapons
|
||||
_crew = [];
|
||||
{
|
||||
{
|
||||
_crew set [count _crew,_x]
|
||||
} forEach (crew _x);
|
||||
} forEach _objects;
|
||||
|
||||
_objects = _objects - _crew;
|
||||
_objects = _objects + _crew;
|
||||
|
||||
_fragCount = 0;
|
||||
|
||||
_fragArcs = [];
|
||||
_fragArcs set[360, 0];
|
||||
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
player sideChat format["_fragRange: %1", _fragRange];
|
||||
player sideChat format["_objects: %1", _objects];
|
||||
#endif
|
||||
_doRandom = false;
|
||||
if(_isArmed && (count _objects) > 0) then {
|
||||
{
|
||||
//if(random(1) > 0.5) then {
|
||||
_target = _x;
|
||||
if(alive _target) then {
|
||||
_boundingBox = boundingBox _target;
|
||||
_targetPos = (getPosASL _target);
|
||||
_distance = _targetPos distance _lastPos;
|
||||
_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);
|
||||
_bbY = (abs((_boundingBox select 0) select 1))+((_boundingBox select 1) select 1);
|
||||
_bbZ = (abs((_boundingBox select 0) select 2))+((_boundingBox select 1) select 2);
|
||||
_cubic = _bbX*_bbY*_bbZ;
|
||||
if(_cubic > 1) then {
|
||||
_doRandom = true;
|
||||
|
||||
_targetVel = (velocity _target);
|
||||
|
||||
|
||||
_targetPos set[0, (_targetPos select 0)+((_targetVel select 0)*(_distance/_fragPower))];
|
||||
_targetPos set[1, (_targetPos select 1)+((_targetVel select 1)*(_distance/_fragPower))];
|
||||
_targetPos set[2, (_targetPos select 2)+_add];
|
||||
|
||||
_baseVec = _lastPos vectorFromTo _targetPos;
|
||||
|
||||
_dir = floor(_baseVec call CBA_fnc_vectDir);
|
||||
_currentCount = _fragArcs select _dir;
|
||||
if(isNil "_currentCount") then {
|
||||
_currentCount = 0;
|
||||
};
|
||||
if(_currentCount < 20) then {
|
||||
_count = ceil(random(sqrt(_m/1000)));
|
||||
_vecVar = FRAG_VEC_VAR;
|
||||
if(!(_target isKindOf "Man")) then {
|
||||
_vecVar = ((sqrt _cubic)/2000)+FRAG_VEC_VAR;
|
||||
if((count (crew _target)) == 0 && _count > 0) then {
|
||||
_count = 0 max (_count/2);
|
||||
};
|
||||
};
|
||||
for "_i" from 1 to _count do {
|
||||
_vec = +_baseVec;
|
||||
|
||||
_vec set[0, (_vec select 0)-(_vecVar/2)+(random _vecVar)];
|
||||
_vec set[1, (_vec select 1)-(_vecVar/2)+(random _vecVar)];
|
||||
_vec set[2, (_vec select 2)-(_vecVar/2)+(random _vecVar)];
|
||||
|
||||
_fp = (_fragPower-(random (_fragPowerRandom)));
|
||||
_vel = [
|
||||
(_vec select 0)*_fp,
|
||||
(_vec select 1)*_fp,
|
||||
(_vec select 2)*_fp
|
||||
];
|
||||
|
||||
_fragType = round (random ((count _fragTypes)-1));
|
||||
_fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
||||
// diag_log text format["fp: %1 %2", _fp, typeOf _fragObj];
|
||||
_fragObj setPosASL _lastPos;
|
||||
_fragObj setVectorDir _vec;
|
||||
_fragObj setVelocity _vel;
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1;
|
||||
GVAR(traceFrags) = true;
|
||||
#endif
|
||||
if(GVAR(traceFrags)) then {
|
||||
[player, _fragObj, [1,0,0,1]] call FUNC(addTrack);
|
||||
};
|
||||
_fragCount = _fragCount + 1;
|
||||
_currentCount = _currentCount + 1;
|
||||
};
|
||||
_fragArcs set[_dir, _currentCount];
|
||||
};
|
||||
};
|
||||
};
|
||||
//};
|
||||
if(_fragCount > MAX_FRAG_COUNT) exitWith {};
|
||||
} forEach _objects;
|
||||
if(_fragCount > MAX_FRAG_COUNT) exitWith {};
|
||||
_randomCount = (ceil((MAX_FRAG_COUNT-_fragCount)*0.1)) max 0;
|
||||
_sectorSize = 360 / (_randomCount max 1);
|
||||
// _doRandom = false;
|
||||
if(_doRandom) then {
|
||||
for "_i" from 1 to _randomCount do {
|
||||
// Distribute evenly
|
||||
_sectorOffset = 360 * (_i - 1) / (_randomCount max 1);
|
||||
_randomDir = random(_sectorSize);
|
||||
_vec = [cos(_sectorOffset + _randomDir), sin(_sectorOffset + _randomDir), sin(30 - (random 45))];
|
||||
|
||||
_fp = (_fragPower-(random (_fragPowerRandom)));
|
||||
|
||||
_vel = [
|
||||
(_vec select 0)*_fp,
|
||||
(_vec select 1)*_fp,
|
||||
(_vec select 2)*_fp
|
||||
];
|
||||
|
||||
_fragType = round (random ((count _fragTypes)-1));
|
||||
_fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
||||
_fragObj setPosASL _lastPos;
|
||||
_fragObj setVectorDir _vec;
|
||||
_fragObj setVelocity _vel;
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1;
|
||||
GVAR(traceFrags) = true;
|
||||
#endif
|
||||
if(GVAR(traceFrags)) then {
|
||||
[player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack);
|
||||
};
|
||||
_fragCount = _fragCount + 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
// #ifdef DEBUG_MODE_FULL
|
||||
// player sideChat format["total frags: %1", GVAR(TOTALFRAGS)];
|
||||
// player sideChat format["tracks: %1", (count GVAR(trackedObjects))];
|
||||
// #endif
|
||||
// _endTime = diag_tickTime;
|
||||
|
@ -1,14 +1,14 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_ret"];
|
||||
_ret = true;
|
||||
if(IS_ARRAY((_this select 0))) then {
|
||||
_ret = false;
|
||||
} else {
|
||||
if((_this select 0) in GVAR(trackedObjects)) then {
|
||||
GVAR(trackedObjects) = GVAR(trackedObjects) - [(_this select 0)];
|
||||
} else {
|
||||
_ret = false;
|
||||
};
|
||||
};
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_ret"];
|
||||
_ret = true;
|
||||
if(IS_ARRAY((_this select 0))) then {
|
||||
_ret = false;
|
||||
} else {
|
||||
if((_this select 0) in GVAR(trackedObjects)) then {
|
||||
GVAR(trackedObjects) = GVAR(trackedObjects) - [(_this select 0)];
|
||||
} else {
|
||||
_ret = false;
|
||||
};
|
||||
};
|
||||
_ret
|
@ -1,29 +1,29 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_initialData", "_currentCount", "_hpData", "_round", "_hpRound"];
|
||||
//player sideChat format["f: %1 c: %2", (_this select 0), (count GVAR(spallHPData))];
|
||||
if((_this select 0) <= (count GVAR(spallHPData))) then {
|
||||
_initialData = GVAR(spallHPData) select (_this select 0);
|
||||
if(!isNil "_initialData") then {
|
||||
_hpRound = ((_this select 1) select 0) select 2;
|
||||
_round = _initialData select 3;
|
||||
_hpDirect = ((_this select 1) select 0) select 10;
|
||||
if(_hpDirect && {_round == _hpRound}) then {
|
||||
|
||||
{
|
||||
_hpData = _x;
|
||||
_round = _initialData select 3;
|
||||
// diag_log text format["HPDUMP-------------------------------------"];
|
||||
// {
|
||||
// _hp = _x;
|
||||
// diag_log text format["%1 --", _forEachIndex];
|
||||
// {
|
||||
// diag_log text format["%1: %2", _forEachIndex, _x];
|
||||
// } forEach _hp;
|
||||
// } forEach (_this select 1);
|
||||
[DFUNC(doSpall), 0, [_this, _forEachIndex]] call cba_fnc_addPerFrameHandler;
|
||||
// player sideChat "WEEE";
|
||||
} forEach (_this select 1);
|
||||
};
|
||||
};
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_initialData", "_currentCount", "_hpData", "_round", "_hpRound"];
|
||||
//player sideChat format["f: %1 c: %2", (_this select 0), (count GVAR(spallHPData))];
|
||||
if((_this select 0) <= (count GVAR(spallHPData))) then {
|
||||
_initialData = GVAR(spallHPData) select (_this select 0);
|
||||
if(!isNil "_initialData") then {
|
||||
_hpRound = ((_this select 1) select 0) select 2;
|
||||
_round = _initialData select 3;
|
||||
_hpDirect = ((_this select 1) select 0) select 10;
|
||||
if(_hpDirect && {_round == _hpRound}) then {
|
||||
|
||||
{
|
||||
_hpData = _x;
|
||||
_round = _initialData select 3;
|
||||
// diag_log text format["HPDUMP-------------------------------------"];
|
||||
// {
|
||||
// _hp = _x;
|
||||
// diag_log text format["%1 --", _forEachIndex];
|
||||
// {
|
||||
// diag_log text format["%1: %2", _forEachIndex, _x];
|
||||
// } forEach _hp;
|
||||
// } forEach (_this select 1);
|
||||
[DFUNC(doSpall), 0, [_this, _forEachIndex]] call cba_fnc_addPerFrameHandler;
|
||||
// player sideChat "WEEE";
|
||||
} forEach (_this select 1);
|
||||
};
|
||||
};
|
||||
};
|
@ -1,40 +1,40 @@
|
||||
//fnc_spallTrack.sqf
|
||||
#include "script_component.hpp"
|
||||
private ["_params", "_round", "_multiplier", "_delta", "_curPos", "_velocity", "_velocityStep", "_forwardPos", "_intersectsWith", "_index", "_i", "_test", "_hpId", "_data"];
|
||||
// setAccTime 0;
|
||||
_round = _this select 0;
|
||||
_multiplier = _this select 1;
|
||||
_foundObjects = _this select 2;
|
||||
_foundObjectHPIds = _this select 3;
|
||||
|
||||
_delta = (1/diag_fps)*_multiplier;
|
||||
_curPos = getPosASL _round;
|
||||
_velocity = velocity _round;
|
||||
|
||||
_velocityStep = [
|
||||
(_velocity select 0)*_delta,
|
||||
(_velocity select 1)*_delta,
|
||||
(_velocity select 2)*_delta
|
||||
];
|
||||
_forwardPos = [
|
||||
(_curPos select 0) + (_velocityStep select 0),
|
||||
(_curPos select 1) + (_velocityStep select 1),
|
||||
(_curPos select 2) + (_velocityStep select 2)
|
||||
];
|
||||
|
||||
_intersectsWith = lineIntersectsWith [_curPos, _forwardPos];
|
||||
|
||||
if(count _intersectsWith > 0) then {
|
||||
// player sideChat format["inter: %1", _intersectsWith];
|
||||
{
|
||||
if(!(_x in _foundObjects)) then {
|
||||
// diag_log text format["Adding HP: %1", _x];
|
||||
_index = (count GVAR(spallHPData));
|
||||
_hpId = _x addEventHandler ["hitPart", format["[%1, _this] call " + QUOTE(FUNC(spallHP)), _index]];
|
||||
_foundObjects set[(count _foundObjects), _x];
|
||||
_foundObjectHPIds set[(count _foundObjectHPIds), _hpId];
|
||||
_data = [_hpId, _x, typeOf _round, _round, _curPos, _velocity, 0, _foundObjects, _foundObjectHPIds];
|
||||
GVAR(spallHPData) set[_index, _data];
|
||||
};
|
||||
} forEach _intersectsWith;
|
||||
//fnc_spallTrack.sqf
|
||||
#include "script_component.hpp"
|
||||
private ["_params", "_round", "_multiplier", "_delta", "_curPos", "_velocity", "_velocityStep", "_forwardPos", "_intersectsWith", "_index", "_i", "_test", "_hpId", "_data"];
|
||||
// setAccTime 0;
|
||||
_round = _this select 0;
|
||||
_multiplier = _this select 1;
|
||||
_foundObjects = _this select 2;
|
||||
_foundObjectHPIds = _this select 3;
|
||||
|
||||
_delta = (1/diag_fps)*_multiplier;
|
||||
_curPos = getPosASL _round;
|
||||
_velocity = velocity _round;
|
||||
|
||||
_velocityStep = [
|
||||
(_velocity select 0)*_delta,
|
||||
(_velocity select 1)*_delta,
|
||||
(_velocity select 2)*_delta
|
||||
];
|
||||
_forwardPos = [
|
||||
(_curPos select 0) + (_velocityStep select 0),
|
||||
(_curPos select 1) + (_velocityStep select 1),
|
||||
(_curPos select 2) + (_velocityStep select 2)
|
||||
];
|
||||
|
||||
_intersectsWith = lineIntersectsWith [_curPos, _forwardPos];
|
||||
|
||||
if(count _intersectsWith > 0) then {
|
||||
// player sideChat format["inter: %1", _intersectsWith];
|
||||
{
|
||||
if(!(_x in _foundObjects)) then {
|
||||
// diag_log text format["Adding HP: %1", _x];
|
||||
_index = (count GVAR(spallHPData));
|
||||
_hpId = _x addEventHandler ["hitPart", format["[%1, _this] call " + QUOTE(FUNC(spallHP)), _index]];
|
||||
_foundObjects set[(count _foundObjects), _x];
|
||||
_foundObjectHPIds set[(count _foundObjectHPIds), _hpId];
|
||||
_data = [_hpId, _x, typeOf _round, _round, _curPos, _velocity, 0, _foundObjects, _foundObjectHPIds];
|
||||
GVAR(spallHPData) set[_index, _data];
|
||||
};
|
||||
} forEach _intersectsWith;
|
||||
};
|
@ -1,5 +1,5 @@
|
||||
#include "script_component.hpp"
|
||||
if(!GVAR(tracesStarted)) then {
|
||||
GVAR(tracesStarted) = true;
|
||||
GVAR(traceID) = [FUNC(drawTraces), 0, []] call cba_fnc_addPerFrameHandler;
|
||||
#include "script_component.hpp"
|
||||
if(!GVAR(tracesStarted)) then {
|
||||
GVAR(tracesStarted) = true;
|
||||
GVAR(traceID) = [FUNC(drawTraces), 0, []] call cba_fnc_addPerFrameHandler;
|
||||
};
|
@ -1,5 +1,5 @@
|
||||
#include "script_component.hpp"
|
||||
if(GVAR(tracesStarted)) then {
|
||||
GVAR(tracesStarted) = false;
|
||||
[GVAR(traceID)] call cba_fnc_removePerFrameHandler;
|
||||
#include "script_component.hpp"
|
||||
if(GVAR(tracesStarted)) then {
|
||||
GVAR(tracesStarted) = false;
|
||||
[GVAR(traceID)] call cba_fnc_removePerFrameHandler;
|
||||
};
|
@ -1,52 +1,52 @@
|
||||
//fnc_trackFragRound.sqf
|
||||
#include "script_component.hpp"
|
||||
private ["_params", "_round", "_lastPos", "_lastVel", "_type", "_time", "_doSpall", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"];
|
||||
_params = _this select 0;
|
||||
_round = _params select 0;
|
||||
_lastPos = _params select 1;
|
||||
_lastVel = _params select 2;
|
||||
_type = _params select 3;
|
||||
_time = _params select 4;
|
||||
_doSpall = _params select 6;
|
||||
_spallTrack = _params select 7;
|
||||
_foundObjectHPIds = _params select 8;
|
||||
|
||||
if (!alive _round) then {
|
||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||
if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then {
|
||||
GVAR(trackedObjects) = GVAR(trackedObjects) - [_round];
|
||||
_skip = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_SKIP");
|
||||
if(_skip == 0) then {
|
||||
_explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive");
|
||||
_indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange");
|
||||
_force = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_FORCE");
|
||||
_fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt(_indirectRange));
|
||||
if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then {
|
||||
[QGVAR(frag_eh), _params] call ace_common_fnc_serverEvent;
|
||||
GVAR(trackedObjects) = GVAR(trackedObjects) - [_round];
|
||||
};
|
||||
};
|
||||
};
|
||||
if(_doSpall) then {
|
||||
GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) - 1;
|
||||
// diag_log text format["F: %1", _foundObjectHPIds];
|
||||
{
|
||||
if(!isNil "_x") then {
|
||||
_x removeEventHandler ["hitPart", _foundObjectHPIds select _forEachIndex];
|
||||
};
|
||||
} forEach _spallTrack;
|
||||
};
|
||||
} else {
|
||||
if(!(_round in GVAR(trackedObjects)) || {_round in GVAR(blackList)}) then {
|
||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||
if(_round in GVAR(blackList)) then {
|
||||
GVAR(blackList) = GVAR(blackList) - [_round];
|
||||
};
|
||||
};
|
||||
|
||||
_params set[1, (getPosASL _round)];
|
||||
_params set[2, (velocity _round)];
|
||||
if(_doSpall) then {
|
||||
[_round, 1, _spallTrack, _foundObjectHPIds] call FUNC(spallTrack);
|
||||
};
|
||||
};
|
||||
//fnc_trackFragRound.sqf
|
||||
#include "script_component.hpp"
|
||||
private ["_params", "_round", "_lastPos", "_lastVel", "_type", "_time", "_doSpall", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"];
|
||||
_params = _this select 0;
|
||||
_round = _params select 0;
|
||||
_lastPos = _params select 1;
|
||||
_lastVel = _params select 2;
|
||||
_type = _params select 3;
|
||||
_time = _params select 4;
|
||||
_doSpall = _params select 6;
|
||||
_spallTrack = _params select 7;
|
||||
_foundObjectHPIds = _params select 8;
|
||||
|
||||
if (!alive _round) then {
|
||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||
if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then {
|
||||
GVAR(trackedObjects) = GVAR(trackedObjects) - [_round];
|
||||
_skip = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_SKIP");
|
||||
if(_skip == 0) then {
|
||||
_explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive");
|
||||
_indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange");
|
||||
_force = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_FORCE");
|
||||
_fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt(_indirectRange));
|
||||
if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then {
|
||||
[QGVAR(frag_eh), _params] call ace_common_fnc_serverEvent;
|
||||
GVAR(trackedObjects) = GVAR(trackedObjects) - [_round];
|
||||
};
|
||||
};
|
||||
};
|
||||
if(_doSpall) then {
|
||||
GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) - 1;
|
||||
// diag_log text format["F: %1", _foundObjectHPIds];
|
||||
{
|
||||
if(!isNil "_x") then {
|
||||
_x removeEventHandler ["hitPart", _foundObjectHPIds select _forEachIndex];
|
||||
};
|
||||
} forEach _spallTrack;
|
||||
};
|
||||
} else {
|
||||
if(!(_round in GVAR(trackedObjects)) || {_round in GVAR(blackList)}) then {
|
||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||
if(_round in GVAR(blackList)) then {
|
||||
GVAR(blackList) = GVAR(blackList) - [_round];
|
||||
};
|
||||
};
|
||||
|
||||
_params set[1, (getPosASL _round)];
|
||||
_params set[2, (velocity _round)];
|
||||
if(_doSpall) then {
|
||||
[_round, 1, _spallTrack, _foundObjectHPIds] call FUNC(spallTrack);
|
||||
};
|
||||
};
|
||||
|
@ -1,14 +1,14 @@
|
||||
#include "script_component.hpp"
|
||||
_params = _this select 0;
|
||||
_tracerObj = _params select 0;
|
||||
_index = _params select 1;
|
||||
|
||||
if(alive _tracerObj && (count GVAR(traces)) > 0) then {
|
||||
_data = GVAR(traces) select _index;
|
||||
_positions = _data select 4;
|
||||
_objVel = velocity _tracerObj;
|
||||
_objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2);
|
||||
_positions set[(count _positions), [(getPos _tracerObj), _objTVel]];
|
||||
} else {
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
#include "script_component.hpp"
|
||||
_params = _this select 0;
|
||||
_tracerObj = _params select 0;
|
||||
_index = _params select 1;
|
||||
|
||||
if(alive _tracerObj && (count GVAR(traces)) > 0) then {
|
||||
_data = GVAR(traces) select _index;
|
||||
_positions = _data select 4;
|
||||
_objVel = velocity _tracerObj;
|
||||
_objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2);
|
||||
_positions set[(count _positions), [(getPos _tracerObj), _objTVel]];
|
||||
} else {
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
};
|
@ -1,15 +1,15 @@
|
||||
#include "script_component.hpp"
|
||||
private["_p1","_p2","_return"];
|
||||
|
||||
_p1 = _this select 0;
|
||||
_p2 = _this select 1;
|
||||
|
||||
if ((count _p1) != (count _p2)) then {textLogFormat ["BIS_FNC Error: vectors not of same size"]};
|
||||
|
||||
_return = [];
|
||||
|
||||
{
|
||||
_return set[_forEachIndex, (_p2 select _forEachIndex) - _x];
|
||||
} forEach _p1;
|
||||
|
||||
_return
|
||||
#include "script_component.hpp"
|
||||
private["_p1","_p2","_return"];
|
||||
|
||||
_p1 = _this select 0;
|
||||
_p2 = _this select 1;
|
||||
|
||||
if ((count _p1) != (count _p2)) then {textLogFormat ["BIS_FNC Error: vectors not of same size"]};
|
||||
|
||||
_return = [];
|
||||
|
||||
{
|
||||
_return set[_forEachIndex, (_p2 select _forEachIndex) - _x];
|
||||
} forEach _p1;
|
||||
|
||||
_return
|
||||
|
@ -1,16 +1,16 @@
|
||||
#define COMPONENT frag
|
||||
#include "\z\ace\Addons\main\script_mod.hpp"
|
||||
|
||||
//#define DEBUG_ENABLED_FRAG
|
||||
|
||||
#ifdef DEBUG_ENABLED_FRAG
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SETTINGS_FRAG
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_FRAG
|
||||
#endif
|
||||
|
||||
#include "\z\ace\Addons\main\script_macros.hpp"
|
||||
|
||||
#define COMPONENT frag
|
||||
#include "\z\ace\Addons\main\script_mod.hpp"
|
||||
|
||||
//#define DEBUG_ENABLED_FRAG
|
||||
|
||||
#ifdef DEBUG_ENABLED_FRAG
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SETTINGS_FRAG
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_FRAG
|
||||
#endif
|
||||
|
||||
#include "\z\ace\Addons\main\script_macros.hpp"
|
||||
|
||||
#define ACE_TRACE_DRAW_INC 1
|
@ -1,15 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-07 -->
|
||||
<Project name="Arma2">
|
||||
<Package name="ACE2">
|
||||
<Container name="frag">
|
||||
<Key ID="STR_DN_ACE_FRAG">
|
||||
<English>Disable Fragmentation</English>
|
||||
<Czech>Zakázat fragmentaci granátů</Czech>
|
||||
<German>Weapons: Keine Schrapnelle</German>
|
||||
<Polish>Wyłącz głowice fragmentacyjne</Polish>
|
||||
<Russian>Выключить разлёт осколков</Russian>
|
||||
</Key>
|
||||
</Container>
|
||||
</Package>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-07 -->
|
||||
<Project name="Arma2">
|
||||
<Package name="ACE2">
|
||||
<Container name="frag">
|
||||
<Key ID="STR_DN_ACE_FRAG">
|
||||
<English>Disable Fragmentation</English>
|
||||
<Czech>Zakázat fragmentaci granátů</Czech>
|
||||
<German>Weapons: Keine Schrapnelle</German>
|
||||
<Polish>Wyłącz głowice fragmentacyjne</Polish>
|
||||
<Russian>Выключить разлёт осколков</Russian>
|
||||
</Key>
|
||||
</Container>
|
||||
</Package>
|
||||
</Project>
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler - 2014-12-19 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Goggles">
|
||||
<Key ID="STR_ACE_Goggles_ShowInThirdPerson">
|
||||
@ -8,7 +8,7 @@
|
||||
<Spanish>Mostrar efectos de las gafas en tercera persona</Spanish>
|
||||
<Czech>Zobrazit účinky brýlí v třetí osobě</Czech>
|
||||
<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>
|
||||
<Polish>Włącz efekty gogli w trzeciej osobie</Polish>
|
||||
<Portuguese>Mostrar efeitos de óculos em Terceira Pessoa</Portuguese>
|
||||
@ -27,4 +27,4 @@
|
||||
<Italian>Pulisci gli occhiali</Italian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2014-09-11 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Grenades">
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
@ -243,4 +243,4 @@
|
||||
<Spanish>M127A1 (Amarilla)</Spanish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler - 2015-04-07 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Hearing">
|
||||
<Key ID="STR_ACE_Hearing_EarPlugs_Name">
|
||||
@ -102,7 +102,6 @@
|
||||
<English>Disable ear ringing</English>
|
||||
<Spanish>Desactivar zumbido de oídos</Spanish>
|
||||
<German>Knalltrauma deaktivieren</German>
|
||||
<Russian>Отключить эффект баротравмы</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -1,52 +1,52 @@
|
||||
//XEH_clientInit.sqf
|
||||
#include "script_component.hpp"
|
||||
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
// Install the render EH on the main display
|
||||
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.
|
||||
// The thread dies as soon as the mission start, so it's not really compiting for scheduler space.
|
||||
[] spawn {
|
||||
// Wait until the map display is detected
|
||||
waitUntil {(!isNull findDisplay 12)};
|
||||
|
||||
// Install the render EH on the map screen
|
||||
((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", DFUNC(render)];
|
||||
};
|
||||
|
||||
|
||||
["ACE3", QGVAR(InteractKey), (localize "STR_ACE_Interact_Menu_InteractKey"),
|
||||
{
|
||||
// Conditions: canInteract
|
||||
if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||
// Statement
|
||||
[0] call FUNC(keyDown)
|
||||
},
|
||||
{[0] call FUNC(keyUp)},
|
||||
[219, [false, false, false]], false] call cba_fnc_addKeybind; //Left Windows Key
|
||||
|
||||
["ACE3", QGVAR(SelfInteractKey), (localize "STR_ACE_Interact_Menu_SelfInteractKey"),
|
||||
{
|
||||
// Conditions: canInteract
|
||||
if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||
// Statement
|
||||
[1] call FUNC(keyDown)
|
||||
},
|
||||
{[1] call FUNC(keyUp)},
|
||||
[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
|
||||
["medical_onUnconscious", {
|
||||
// If no menu is open just quit
|
||||
if (GVAR(openedMenuType) < 0) exitWith {};
|
||||
|
||||
EXPLODE_2_PVT(_this,_unit,_isUnconscious);
|
||||
|
||||
if (_unit != ACE_player || !_isUnconscious) exitWith {};
|
||||
|
||||
GVAR(actionSelected) = false;
|
||||
[] call FUNC(keyUp);
|
||||
}] call EFUNC(common,addEventhandler);
|
||||
//XEH_clientInit.sqf
|
||||
#include "script_component.hpp"
|
||||
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
// Install the render EH on the main display
|
||||
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.
|
||||
// The thread dies as soon as the mission start, so it's not really compiting for scheduler space.
|
||||
[] spawn {
|
||||
// Wait until the map display is detected
|
||||
waitUntil {(!isNull findDisplay 12)};
|
||||
|
||||
// Install the render EH on the map screen
|
||||
((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", DFUNC(render)];
|
||||
};
|
||||
|
||||
|
||||
["ACE3", QGVAR(InteractKey), (localize "STR_ACE_Interact_Menu_InteractKey"),
|
||||
{
|
||||
// Conditions: canInteract
|
||||
if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||
// Statement
|
||||
[0] call FUNC(keyDown)
|
||||
},
|
||||
{[0] call FUNC(keyUp)},
|
||||
[219, [false, false, false]], false] call cba_fnc_addKeybind; //Left Windows Key
|
||||
|
||||
["ACE3", QGVAR(SelfInteractKey), (localize "STR_ACE_Interact_Menu_SelfInteractKey"),
|
||||
{
|
||||
// Conditions: canInteract
|
||||
if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||
// Statement
|
||||
[1] call FUNC(keyDown)
|
||||
},
|
||||
{[1] call FUNC(keyUp)},
|
||||
[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
|
||||
["medical_onUnconscious", {
|
||||
// If no menu is open just quit
|
||||
if (GVAR(openedMenuType) < 0) exitWith {};
|
||||
|
||||
EXPLODE_2_PVT(_this,_unit,_isUnconscious);
|
||||
|
||||
if (_unit != ACE_player || !_isUnconscious) exitWith {};
|
||||
|
||||
GVAR(actionSelected) = false;
|
||||
[] call FUNC(keyUp);
|
||||
}] call EFUNC(common,addEventhandler);
|
||||
|
@ -1,31 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler - 2015-04-07 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Interact_Menu">
|
||||
<Key ID="STR_ACE_Interact_Menu_AlwaysUseCursorSelfInteraction">
|
||||
<English>Always display cursor for self interaction</English>
|
||||
<German>Immer den Cursor für Selbst-Interaktionen anzeigen.</German>
|
||||
<Russian>Всегда показывать курсор для взаимодействия с собой</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_InteractKey">
|
||||
<English>Interact Key</English>
|
||||
<German>Interaktionstaste</German>
|
||||
<Russian>Клавиша взаимодействия</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_SelfInteractKey">
|
||||
<English>Self Interaction Key</English>
|
||||
<German>Selbst-Interaktionstaste</German>
|
||||
<Russian>Клавиша взаимодействия (с собой)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_SelfActionsRoot">
|
||||
<English>Self Actions</English>
|
||||
<German>Selbst-Interaktion</German>
|
||||
<Russian>Действия с собой</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_VehicleActionsRoot">
|
||||
<English>Vehicle Actions</English>
|
||||
<German>Fahrzeug-Interaktion</German>
|
||||
<Russian>Действия на транспорте</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler - 2015-04-07 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Interaction">
|
||||
<Key ID="STR_ACE_Interaction_MainAction">
|
||||
@ -616,7 +616,7 @@
|
||||
<Polish>Modyfikator</Polish>
|
||||
<French>Modifier la touche</French>
|
||||
<Spanish>Tecla modificadora</Spanish>
|
||||
<Russian>Клавиша-модификатор</Russian>
|
||||
<Russian>клавиша-модификатор</Russian>
|
||||
<Portuguese>Tecla Modificadora</Portuguese>
|
||||
<Italian>Modifica Tasto</Italian>
|
||||
<Hungarian>Módosító billentyű</Hungarian>
|
||||
@ -664,7 +664,6 @@
|
||||
<Key ID="STR_ACE_Interaction_Passengers">
|
||||
<English>Passengers</English>
|
||||
<German>Passagiere</German>
|
||||
<Russian>Пассажиры</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -1,16 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler - 2015-04-07 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Inventory">
|
||||
<Key ID="STR_ACE_Inventory_SettingName">
|
||||
<English>Make Inventory Display Bigger</English>
|
||||
<German>Die Anzeige des Inventar vergrößern.</German>
|
||||
<Russian>Сделать окно инвентаря больше</Russian>
|
||||
</Key>
|
||||
<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>
|
||||
<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>
|
||||
</Package>
|
||||
</Project>
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler - 2014-12-11 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Wind">
|
||||
<Key ID="STR_ACE_Wind_ApproximateTemp">
|
||||
@ -34,7 +34,7 @@
|
||||
<Italian>Monitoraggio Balistico Attivo</Italian>
|
||||
<Hungarian>Applied Ballistics Meter</Hungarian>
|
||||
<Portuguese>Medidor Balístico Ativo</Portuguese>
|
||||
<Russian>Метеостанция</Russian>
|
||||
<Russian>метеостанция</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Wind_OpenKestrel">
|
||||
<English>Open Kestrel</English>
|
||||
|
@ -1,11 +1,11 @@
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_pre_init));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_post_init));
|
||||
};
|
||||
};
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_pre_init));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_post_init));
|
||||
};
|
||||
};
|
||||
|
@ -1,9 +1,9 @@
|
||||
class CfgVehicles {
|
||||
class All;
|
||||
|
||||
class LaserTarget: All {
|
||||
class EventHandlers {
|
||||
init = QUOTE(_this call FUNC(laser_init));
|
||||
};
|
||||
};
|
||||
class CfgVehicles {
|
||||
class All;
|
||||
|
||||
class LaserTarget: All {
|
||||
class EventHandlers {
|
||||
init = QUOTE(_this call FUNC(laser_init));
|
||||
};
|
||||
};
|
||||
};
|
@ -1,3 +1,3 @@
|
||||
#include "script_component.hpp"
|
||||
NO_DEDICATED;
|
||||
|
||||
#include "script_component.hpp"
|
||||
NO_DEDICATED;
|
||||
|
||||
|
@ -1,26 +1,26 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
PREP(rotateVectLineGetMap);
|
||||
PREP(rotateVectLine);
|
||||
PREP(shootRay);
|
||||
PREP(shootCone);
|
||||
PREP(checkLos);
|
||||
|
||||
PREP(findLaserDesignator);
|
||||
PREP(findStrongestRay);
|
||||
|
||||
PREP(translateToModelSpace);
|
||||
PREP(translateToWeaponSpace);
|
||||
|
||||
PREP(laser_init);
|
||||
|
||||
GVAR(laser) = nil; // a single hud draws 1 laser at a time
|
||||
|
||||
PREP(laserTargetPFH);
|
||||
|
||||
ACE_LASERS = [];
|
||||
|
||||
ACE_DEFAULT_LASER_CODE = 1000;
|
||||
ACE_DEFAULT_FIRE_SELECTION = [FIREMODE_DIRECT_LOAL, ACE_DEFAULT_LASER_CODE];
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
PREP(rotateVectLineGetMap);
|
||||
PREP(rotateVectLine);
|
||||
PREP(shootRay);
|
||||
PREP(shootCone);
|
||||
PREP(checkLos);
|
||||
|
||||
PREP(findLaserDesignator);
|
||||
PREP(findStrongestRay);
|
||||
|
||||
PREP(translateToModelSpace);
|
||||
PREP(translateToWeaponSpace);
|
||||
|
||||
PREP(laser_init);
|
||||
|
||||
GVAR(laser) = nil; // a single hud draws 1 laser at a time
|
||||
|
||||
PREP(laserTargetPFH);
|
||||
|
||||
ACE_LASERS = [];
|
||||
|
||||
ACE_DEFAULT_LASER_CODE = 1000;
|
||||
ACE_DEFAULT_FIRE_SELECTION = [FIREMODE_DIRECT_LOAL, ACE_DEFAULT_LASER_CODE];
|
||||
|
||||
FUNC(getPosASL) = {visiblePositionASL (_this select 0)};
|
@ -1,14 +1,14 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
class CfgPatches {
|
||||
class ADDON {
|
||||
units[] = {};
|
||||
weapons[] = {};
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = { "ace_common" };
|
||||
VERSION_CONFIG;
|
||||
};
|
||||
};
|
||||
|
||||
#include "CfgEventhandlers.hpp"
|
||||
#include "script_component.hpp"
|
||||
|
||||
class CfgPatches {
|
||||
class ADDON {
|
||||
units[] = {};
|
||||
weapons[] = {};
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = { "ace_common" };
|
||||
VERSION_CONFIG;
|
||||
};
|
||||
};
|
||||
|
||||
#include "CfgEventhandlers.hpp"
|
||||
#include "CfgVehicles.hpp"
|
@ -1,31 +1,31 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_pos1", "_pos2", "_spacing", "_vectorTo", "_x", "_y", "_z", "_distance", "_count", "_return", "_alt", "_pos", "_designator", "_seeker"];
|
||||
_pos1 = _this select 0;
|
||||
_pos2 = _this select 1;
|
||||
_designator = _this select 2;
|
||||
_seeker = _this select 3;
|
||||
_spacing = 100;
|
||||
if((count _this) > 4) then {
|
||||
_spacing = _this select 4;
|
||||
};
|
||||
|
||||
_return = true;
|
||||
_vectorTo = [_pos2, _pos1] call BIS_fnc_vectorFromXToY;
|
||||
|
||||
_x = (_vectorTo select 0)*0.25;
|
||||
_y = (_vectorTo select 1)*0.25;
|
||||
_z = (_vectorTo select 2)*0.25;
|
||||
|
||||
_pos2 = [(_pos2 select 0) + _x, (_pos2 select 1) + _y, (_pos2 select 2) + _z];
|
||||
|
||||
// player sideChat format["new los check"];
|
||||
if(terrainIntersect [_pos2, _pos1]) then {
|
||||
_return = false;
|
||||
} else {
|
||||
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]];
|
||||
_return = false;
|
||||
};
|
||||
};
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_pos1", "_pos2", "_spacing", "_vectorTo", "_x", "_y", "_z", "_distance", "_count", "_return", "_alt", "_pos", "_designator", "_seeker"];
|
||||
_pos1 = _this select 0;
|
||||
_pos2 = _this select 1;
|
||||
_designator = _this select 2;
|
||||
_seeker = _this select 3;
|
||||
_spacing = 100;
|
||||
if((count _this) > 4) then {
|
||||
_spacing = _this select 4;
|
||||
};
|
||||
|
||||
_return = true;
|
||||
_vectorTo = [_pos2, _pos1] call BIS_fnc_vectorFromXToY;
|
||||
|
||||
_x = (_vectorTo select 0)*0.25;
|
||||
_y = (_vectorTo select 1)*0.25;
|
||||
_z = (_vectorTo select 2)*0.25;
|
||||
|
||||
_pos2 = [(_pos2 select 0) + _x, (_pos2 select 1) + _y, (_pos2 select 2) + _z];
|
||||
|
||||
// player sideChat format["new los check"];
|
||||
if(terrainIntersect [_pos2, _pos1]) then {
|
||||
_return = false;
|
||||
} else {
|
||||
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]];
|
||||
_return = false;
|
||||
};
|
||||
};
|
||||
_return;
|
@ -1,70 +1,70 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_missile", "_headingPitch", "_found", "_vectorTo", "_polarTo", "_dir", "_vertOk", "_horzOk", "_fov",
|
||||
"_closestDistance", "_pos1", "_pos2", "_disCheck", "_currentTarget", "_potentialTargets", "_offset", "_vector"];
|
||||
_missile = _this select 0;
|
||||
_laserCode = _this select 1;
|
||||
_fov = if (count _this > 2) then {_this select 2} else {75};
|
||||
_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]};
|
||||
|
||||
_headingPitch = _vector call CBA_fnc_vect2polar;
|
||||
_currentTarget = nil;
|
||||
_found = false;
|
||||
|
||||
LOG("Searching lasers");
|
||||
if(!(isNil "ACE_LASERS")) then {
|
||||
_potentialTargets = [];
|
||||
TRACE_1("", ACE_LASERS);
|
||||
|
||||
{
|
||||
if(!(isNull _x)) then {
|
||||
_sensorPos = ATLtoASL(_missile modelToWorldVisual _offset);
|
||||
_vectorTo = [_sensorPos, ([_x] call FUNC(getPosASL))] call BIS_fnc_vectorFromXToY;
|
||||
_polarTo = _vectorTo call CBA_fnc_vect2polar;
|
||||
_dir = _polarTo select 1;
|
||||
_dir = _dir - (_headingPitch select 1);
|
||||
|
||||
TRACE_4("Calc", _sensorPos, _vectorTo, _polarTo, _dir);
|
||||
|
||||
if (_dir < 0) then {_dir = _dir + 360};
|
||||
if (_dir > 360) then {_dir = _dir - 360};
|
||||
_vertOk = false;
|
||||
_horzOk = false;
|
||||
if(_dir < _fov || {_dir > (360-_fov)}) then {
|
||||
_horzOk = true;
|
||||
};
|
||||
if(abs((abs(_polarTo select 2))-(abs(_headingPitch select 2))) < _fov) then {
|
||||
_vertOk = true;
|
||||
};
|
||||
|
||||
TRACE_2("Results", _vertOk, _horzOk);
|
||||
|
||||
if(_vertOk && {_horzOk}) then {
|
||||
// Does the laser currently have our current code, if we have one?
|
||||
_targetCode = _x getVariable ["ACE_LASERTARGET_CODE", ACE_DEFAULT_LASER_CODE];
|
||||
TRACE_1("Target in sight, checking code", _targetCode, _laserCode);
|
||||
if(_targetCode == _laserCode) then {
|
||||
_potentialTargets set[(count _potentialTargets), _x];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
} forEach ACE_LASERS;
|
||||
|
||||
TRACE_1("", _potentialTargets);
|
||||
|
||||
_closestDistance = 100000;
|
||||
{
|
||||
_pos1 = (getPosASL _missile);
|
||||
_pos2 = ([_x] call FUNC(getPosASL));
|
||||
_disCheck = _pos1 distance _pos2;
|
||||
// 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 {
|
||||
_found = true;
|
||||
_currentTarget = _x;
|
||||
_closestDistance = _disCheck;
|
||||
};
|
||||
} forEach _potentialTargets;
|
||||
};
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_missile", "_headingPitch", "_found", "_vectorTo", "_polarTo", "_dir", "_vertOk", "_horzOk", "_fov",
|
||||
"_closestDistance", "_pos1", "_pos2", "_disCheck", "_currentTarget", "_potentialTargets", "_offset", "_vector"];
|
||||
_missile = _this select 0;
|
||||
_laserCode = _this select 1;
|
||||
_fov = if (count _this > 2) then {_this select 2} else {75};
|
||||
_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]};
|
||||
|
||||
_headingPitch = _vector call CBA_fnc_vect2polar;
|
||||
_currentTarget = nil;
|
||||
_found = false;
|
||||
|
||||
LOG("Searching lasers");
|
||||
if(!(isNil "ACE_LASERS")) then {
|
||||
_potentialTargets = [];
|
||||
TRACE_1("", ACE_LASERS);
|
||||
|
||||
{
|
||||
if(!(isNull _x)) then {
|
||||
_sensorPos = ATLtoASL(_missile modelToWorldVisual _offset);
|
||||
_vectorTo = [_sensorPos, ([_x] call FUNC(getPosASL))] call BIS_fnc_vectorFromXToY;
|
||||
_polarTo = _vectorTo call CBA_fnc_vect2polar;
|
||||
_dir = _polarTo select 1;
|
||||
_dir = _dir - (_headingPitch select 1);
|
||||
|
||||
TRACE_4("Calc", _sensorPos, _vectorTo, _polarTo, _dir);
|
||||
|
||||
if (_dir < 0) then {_dir = _dir + 360};
|
||||
if (_dir > 360) then {_dir = _dir - 360};
|
||||
_vertOk = false;
|
||||
_horzOk = false;
|
||||
if(_dir < _fov || {_dir > (360-_fov)}) then {
|
||||
_horzOk = true;
|
||||
};
|
||||
if(abs((abs(_polarTo select 2))-(abs(_headingPitch select 2))) < _fov) then {
|
||||
_vertOk = true;
|
||||
};
|
||||
|
||||
TRACE_2("Results", _vertOk, _horzOk);
|
||||
|
||||
if(_vertOk && {_horzOk}) then {
|
||||
// Does the laser currently have our current code, if we have one?
|
||||
_targetCode = _x getVariable ["ACE_LASERTARGET_CODE", ACE_DEFAULT_LASER_CODE];
|
||||
TRACE_1("Target in sight, checking code", _targetCode, _laserCode);
|
||||
if(_targetCode == _laserCode) then {
|
||||
_potentialTargets set[(count _potentialTargets), _x];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
} forEach ACE_LASERS;
|
||||
|
||||
TRACE_1("", _potentialTargets);
|
||||
|
||||
_closestDistance = 100000;
|
||||
{
|
||||
_pos1 = (getPosASL _missile);
|
||||
_pos2 = ([_x] call FUNC(getPosASL));
|
||||
_disCheck = _pos1 distance _pos2;
|
||||
// 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 {
|
||||
_found = true;
|
||||
_currentTarget = _x;
|
||||
_closestDistance = _disCheck;
|
||||
};
|
||||
} forEach _potentialTargets;
|
||||
};
|
||||
[_found, _currentTarget]
|
@ -1,49 +1,49 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
_list = _this select 0;
|
||||
_checkPos = _this select 1;
|
||||
_spots = [];
|
||||
_outliers = [];
|
||||
_spot = [];
|
||||
_testPos = (_list select 0) select 0;
|
||||
{
|
||||
_samplePos = _x select 0;
|
||||
if(!lineIntersects [_samplePos, _checkPos] && {!terrainIntersectASL [_samplePos, _checkPos]}) then {
|
||||
if(_samplePos distance _testPos < 2) then {
|
||||
_spot pushBack _samplePos;
|
||||
} else {
|
||||
_outliers pushBack _samplePos;
|
||||
};
|
||||
};
|
||||
} forEach _list;
|
||||
_spots pushBack _spot;
|
||||
|
||||
if(count _outliers > 0) then {
|
||||
for "_i" from 1 to 3 do {
|
||||
_remainingSpots = _outliers;
|
||||
_outliers = [];
|
||||
_spot = [];
|
||||
_testPos = (_remainingSpots select 0);
|
||||
{
|
||||
_samplePos = _x;
|
||||
if(!lineIntersects [_samplePos, _checkPos] && {!terrainIntersectASL [_samplePos, _checkPos]}) then {
|
||||
if(_samplePos distance _testPos < 2) then {
|
||||
_spot pushBack _samplePos;
|
||||
} else {
|
||||
_outliers pushBack _samplePos;
|
||||
};
|
||||
};
|
||||
} forEach _remainingSpots;
|
||||
_spots pushBack _spot;
|
||||
};
|
||||
};
|
||||
_largest = 0;
|
||||
_largestSpot = [];
|
||||
{
|
||||
if((count _x) > _largest) then {
|
||||
_largest = (count _x);
|
||||
_largestSpot = _x;
|
||||
};
|
||||
} forEach _spots;
|
||||
// player sideChat format["g: %1", _spots];
|
||||
#include "script_component.hpp"
|
||||
|
||||
_list = _this select 0;
|
||||
_checkPos = _this select 1;
|
||||
_spots = [];
|
||||
_outliers = [];
|
||||
_spot = [];
|
||||
_testPos = (_list select 0) select 0;
|
||||
{
|
||||
_samplePos = _x select 0;
|
||||
if(!lineIntersects [_samplePos, _checkPos] && {!terrainIntersectASL [_samplePos, _checkPos]}) then {
|
||||
if(_samplePos distance _testPos < 2) then {
|
||||
_spot pushBack _samplePos;
|
||||
} else {
|
||||
_outliers pushBack _samplePos;
|
||||
};
|
||||
};
|
||||
} forEach _list;
|
||||
_spots pushBack _spot;
|
||||
|
||||
if(count _outliers > 0) then {
|
||||
for "_i" from 1 to 3 do {
|
||||
_remainingSpots = _outliers;
|
||||
_outliers = [];
|
||||
_spot = [];
|
||||
_testPos = (_remainingSpots select 0);
|
||||
{
|
||||
_samplePos = _x;
|
||||
if(!lineIntersects [_samplePos, _checkPos] && {!terrainIntersectASL [_samplePos, _checkPos]}) then {
|
||||
if(_samplePos distance _testPos < 2) then {
|
||||
_spot pushBack _samplePos;
|
||||
} else {
|
||||
_outliers pushBack _samplePos;
|
||||
};
|
||||
};
|
||||
} forEach _remainingSpots;
|
||||
_spots pushBack _spot;
|
||||
};
|
||||
};
|
||||
_largest = 0;
|
||||
_largestSpot = [];
|
||||
{
|
||||
if((count _x) > _largest) then {
|
||||
_largest = (count _x);
|
||||
_largestSpot = _x;
|
||||
};
|
||||
} forEach _spots;
|
||||
// player sideChat format["g: %1", _spots];
|
||||
_largestSpot select (random (floor(count _largestSpot)));
|
@ -1,26 +1,26 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private["_args", "_laserTarget"];
|
||||
//TRACE_1("enter", _this);
|
||||
_args = _this select 0;
|
||||
_laserTarget = _args select 0;
|
||||
|
||||
if(isNull _laserTarget || !alive player) exitWith {
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
REM(ACE_LASERS, _laserTarget);
|
||||
};
|
||||
|
||||
_end = diag_tickTime;
|
||||
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
// Iconize the location of the actual laserTarget
|
||||
_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"];
|
||||
|
||||
{
|
||||
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"];
|
||||
} forEach DRAW_LINES;
|
||||
DRAW_LINES = [];
|
||||
#endif
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private["_args", "_laserTarget"];
|
||||
//TRACE_1("enter", _this);
|
||||
_args = _this select 0;
|
||||
_laserTarget = _args select 0;
|
||||
|
||||
if(isNull _laserTarget || !alive player) exitWith {
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
REM(ACE_LASERS, _laserTarget);
|
||||
};
|
||||
|
||||
_end = diag_tickTime;
|
||||
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
// Iconize the location of the actual laserTarget
|
||||
_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"];
|
||||
|
||||
{
|
||||
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"];
|
||||
} forEach DRAW_LINES;
|
||||
DRAW_LINES = [];
|
||||
#endif
|
||||
|
||||
|
@ -1,25 +1,25 @@
|
||||
#include "script_component.hpp"
|
||||
PARAMS_1(_laserTarget);
|
||||
|
||||
TRACE_1("enter", _this);
|
||||
|
||||
// Add the target to the global targets array
|
||||
// Everyone tracks them
|
||||
|
||||
// Add the laser localized to the laser array, and give it the default localized code
|
||||
PUSH(ACE_LASERS, _laserTarget);
|
||||
// Check the vehicle, otherwise use the default
|
||||
_laserTarget setVariable ["ACE_LASERTARGET_CODE", ACE_DEFAULT_LASER_CODE, false];
|
||||
// Clean the lasers of any null objects while we are here
|
||||
REM(ACE_LASERS, objNull);
|
||||
|
||||
if(!(local _laserTarget)) exitWith { };
|
||||
// The target is local, so its on this client
|
||||
if(!isDedicated) then {
|
||||
_laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", player, true];
|
||||
|
||||
[FUNC(laserTargetPFH), 0, [_laserTarget, player]] call cba_fnc_addPerFrameHandler;
|
||||
} else {
|
||||
// server side ownership of laser
|
||||
//_laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", nil, false];
|
||||
};
|
||||
#include "script_component.hpp"
|
||||
PARAMS_1(_laserTarget);
|
||||
|
||||
TRACE_1("enter", _this);
|
||||
|
||||
// Add the target to the global targets array
|
||||
// Everyone tracks them
|
||||
|
||||
// Add the laser localized to the laser array, and give it the default localized code
|
||||
PUSH(ACE_LASERS, _laserTarget);
|
||||
// Check the vehicle, otherwise use the default
|
||||
_laserTarget setVariable ["ACE_LASERTARGET_CODE", ACE_DEFAULT_LASER_CODE, false];
|
||||
// Clean the lasers of any null objects while we are here
|
||||
REM(ACE_LASERS, objNull);
|
||||
|
||||
if(!(local _laserTarget)) exitWith { };
|
||||
// The target is local, so its on this client
|
||||
if(!isDedicated) then {
|
||||
_laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", player, true];
|
||||
|
||||
[FUNC(laserTargetPFH), 0, [_laserTarget, player]] call cba_fnc_addPerFrameHandler;
|
||||
} else {
|
||||
// server side ownership of laser
|
||||
//_laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", nil, false];
|
||||
};
|
||||
|
@ -1,38 +1,38 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
_map = _this select 0;
|
||||
_theta = _this select 1;
|
||||
|
||||
_p = _map select 0;
|
||||
_p1 = _map select 1;
|
||||
_p2 = _map select 2;
|
||||
|
||||
_q1 = +(_map select 3);
|
||||
_q2 = +(_map select 4);
|
||||
_u = _map select 5;
|
||||
_d = _map select 6;
|
||||
|
||||
/* Step 4 */
|
||||
_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[2, (_q1 select 2)];
|
||||
|
||||
/* Inverse of step 3 */
|
||||
_q1 set[0, (_q2 select 0) * _d + (_q2 select 2) * (_u select 0)];
|
||||
_q1 set[1, (_q2 select 1)];
|
||||
_q1 set[2, - (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d];
|
||||
|
||||
/* Inverse of step 2 */
|
||||
if (_d != 0) then {
|
||||
_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[2, - (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d];
|
||||
} else {
|
||||
_q2 = _q1;
|
||||
};
|
||||
|
||||
/* Inverse of step 1 */
|
||||
_q1 set[0, (_q2 select 0) + (_p1 select 0)];
|
||||
_q1 set[1, (_q2 select 1) + (_p1 select 1)];
|
||||
_q1 set[2, (_q2 select 2) + (_p1 select 2)];
|
||||
#include "script_component.hpp"
|
||||
|
||||
_map = _this select 0;
|
||||
_theta = _this select 1;
|
||||
|
||||
_p = _map select 0;
|
||||
_p1 = _map select 1;
|
||||
_p2 = _map select 2;
|
||||
|
||||
_q1 = +(_map select 3);
|
||||
_q2 = +(_map select 4);
|
||||
_u = _map select 5;
|
||||
_d = _map select 6;
|
||||
|
||||
/* Step 4 */
|
||||
_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[2, (_q1 select 2)];
|
||||
|
||||
/* Inverse of step 3 */
|
||||
_q1 set[0, (_q2 select 0) * _d + (_q2 select 2) * (_u select 0)];
|
||||
_q1 set[1, (_q2 select 1)];
|
||||
_q1 set[2, - (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d];
|
||||
|
||||
/* Inverse of step 2 */
|
||||
if (_d != 0) then {
|
||||
_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[2, - (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d];
|
||||
} else {
|
||||
_q2 = _q1;
|
||||
};
|
||||
|
||||
/* Inverse of step 1 */
|
||||
_q1 set[0, (_q2 select 0) + (_p1 select 0)];
|
||||
_q1 set[1, (_q2 select 1) + (_p1 select 1)];
|
||||
_q1 set[2, (_q2 select 2) + (_p1 select 2)];
|
||||
_q1;
|
@ -1,37 +1,37 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_p", "_theta", "_p1", "_p2", "_q1", "_q2", "_u", "_d"];
|
||||
_p = _this select 0;
|
||||
_p1 = _this select 1;
|
||||
_p2 = _this select 2;
|
||||
|
||||
_q1 = [];
|
||||
_q2 = [];
|
||||
_u = [];
|
||||
|
||||
/* Step 1 */
|
||||
_q1 set[0, (_p select 0) - (_p1 select 0)];
|
||||
_q1 set[1, (_p select 1) - (_p1 select 1)];
|
||||
_q1 set[2, (_p select 2) - (_p1 select 2)];
|
||||
|
||||
_u set[0, (_p2 select 0) - (_p1 select 0)];
|
||||
_u set[1, (_p2 select 1) - (_p1 select 1)];
|
||||
_u set[2, (_p2 select 2) - (_p1 select 2)];
|
||||
_u = _u call BIS_fnc_unitVector;
|
||||
_d = sqrt((_u select 1)*(_u select 1) + (_u select 2)*(_u select 2));
|
||||
|
||||
/* Step 2 */
|
||||
if (_d != 0) then {
|
||||
_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[2, (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d];
|
||||
} else {
|
||||
_q2 = _q1;
|
||||
};
|
||||
|
||||
/* Step 3 */
|
||||
_q1 set[0, (_q2 select 0) * _d - (_q2 select 2) * (_u select 0)];
|
||||
_q1 set[1, (_q2 select 1)];
|
||||
_q1 set[2, (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d];
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_p", "_theta", "_p1", "_p2", "_q1", "_q2", "_u", "_d"];
|
||||
_p = _this select 0;
|
||||
_p1 = _this select 1;
|
||||
_p2 = _this select 2;
|
||||
|
||||
_q1 = [];
|
||||
_q2 = [];
|
||||
_u = [];
|
||||
|
||||
/* Step 1 */
|
||||
_q1 set[0, (_p select 0) - (_p1 select 0)];
|
||||
_q1 set[1, (_p select 1) - (_p1 select 1)];
|
||||
_q1 set[2, (_p select 2) - (_p1 select 2)];
|
||||
|
||||
_u set[0, (_p2 select 0) - (_p1 select 0)];
|
||||
_u set[1, (_p2 select 1) - (_p1 select 1)];
|
||||
_u set[2, (_p2 select 2) - (_p1 select 2)];
|
||||
_u = _u call BIS_fnc_unitVector;
|
||||
_d = sqrt((_u select 1)*(_u select 1) + (_u select 2)*(_u select 2));
|
||||
|
||||
/* Step 2 */
|
||||
if (_d != 0) then {
|
||||
_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[2, (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d];
|
||||
} else {
|
||||
_q2 = _q1;
|
||||
};
|
||||
|
||||
/* Step 3 */
|
||||
_q1 set[0, (_q2 select 0) * _d - (_q2 select 2) * (_u select 0)];
|
||||
_q1 set[1, (_q2 select 1)];
|
||||
_q1 set[2, (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d];
|
||||
|
||||
[_p, _p1, _p2, _q1, _q2, _u, _d]
|
@ -1,66 +1,66 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
_divergence = 0.3;
|
||||
_pos = _this select 0;
|
||||
_vec = _this select 1;
|
||||
_longestReturn = -1000000000;
|
||||
_shortestReturn = 1000000000;
|
||||
_resultPositions = [];
|
||||
_p1 = [0,0,0];
|
||||
_p2 = +_vec;
|
||||
_p = (_vec call CBA_fnc_vect2polar);
|
||||
_v = [(_p select 0), (_p select 1), (_p select 2)+90] call CBA_fnc_polar2vect;
|
||||
_cp = [_vec, _v] call BIS_fnc_crossProduct;
|
||||
|
||||
_vecRotateMap = [_cp, _p1, _p2] call FUNC(rotateVectLineGetMap);
|
||||
|
||||
_result = [_pos, _vec] call FUNC(shootRay);
|
||||
_resultPos = _result select 0;
|
||||
if(!isNil "_resultPos") then {
|
||||
_distance = _result select 1;
|
||||
if(_distance < _shortestReturn) then {
|
||||
_shortestReturn = _distance;
|
||||
};
|
||||
if(_distance > _longestReturn) then {
|
||||
_longestReturn = _distance;
|
||||
};
|
||||
_resultPositions set[(count _resultPositions), _result];
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]];
|
||||
#endif
|
||||
};
|
||||
_count = 8;
|
||||
|
||||
_pos2 = [
|
||||
(_pos select 0)+((_vec select 0)*1000),
|
||||
(_pos select 1)+((_vec select 1)*1000),
|
||||
(_pos select 2)+((_vec select 2)*1000)
|
||||
];
|
||||
{
|
||||
for "_i" from 0 to ceil(_count*_x) do {
|
||||
_radOffset = random 360;
|
||||
_offset = [_vecRotateMap, (((360/_count)*_i)+_radOffset) mod 360] call FUNC(rotateVectLine);
|
||||
_offsetPos = [
|
||||
(_pos2 select 0)+((_offset select 0)*(_divergence*_x)),
|
||||
(_pos2 select 1)+((_offset select 1)*(_divergence*_x)),
|
||||
(_pos2 select 2)+((_offset select 2)*(_divergence*_x))
|
||||
];
|
||||
_offsetVector = [_pos, _offsetPos] call BIS_fnc_vectorFromXtoY;
|
||||
_result = [_pos, _offsetVector] call FUNC(shootRay);
|
||||
_resultPos = _result select 0;
|
||||
if(!isNil "_resultPos") then {
|
||||
_distance = _result select 1;
|
||||
if(_distance < _shortestReturn) then {
|
||||
_shortestReturn = _distance;
|
||||
};
|
||||
if(_distance > _longestReturn) then {
|
||||
_longestReturn = _distance;
|
||||
};
|
||||
_resultPositions set[(count _resultPositions), _result];
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]];
|
||||
#endif
|
||||
};
|
||||
};
|
||||
} forEach [1,0.5,0.25];
|
||||
#include "script_component.hpp"
|
||||
|
||||
_divergence = 0.3;
|
||||
_pos = _this select 0;
|
||||
_vec = _this select 1;
|
||||
_longestReturn = -1000000000;
|
||||
_shortestReturn = 1000000000;
|
||||
_resultPositions = [];
|
||||
_p1 = [0,0,0];
|
||||
_p2 = +_vec;
|
||||
_p = (_vec call CBA_fnc_vect2polar);
|
||||
_v = [(_p select 0), (_p select 1), (_p select 2)+90] call CBA_fnc_polar2vect;
|
||||
_cp = [_vec, _v] call BIS_fnc_crossProduct;
|
||||
|
||||
_vecRotateMap = [_cp, _p1, _p2] call FUNC(rotateVectLineGetMap);
|
||||
|
||||
_result = [_pos, _vec] call FUNC(shootRay);
|
||||
_resultPos = _result select 0;
|
||||
if(!isNil "_resultPos") then {
|
||||
_distance = _result select 1;
|
||||
if(_distance < _shortestReturn) then {
|
||||
_shortestReturn = _distance;
|
||||
};
|
||||
if(_distance > _longestReturn) then {
|
||||
_longestReturn = _distance;
|
||||
};
|
||||
_resultPositions set[(count _resultPositions), _result];
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]];
|
||||
#endif
|
||||
};
|
||||
_count = 8;
|
||||
|
||||
_pos2 = [
|
||||
(_pos select 0)+((_vec select 0)*1000),
|
||||
(_pos select 1)+((_vec select 1)*1000),
|
||||
(_pos select 2)+((_vec select 2)*1000)
|
||||
];
|
||||
{
|
||||
for "_i" from 0 to ceil(_count*_x) do {
|
||||
_radOffset = random 360;
|
||||
_offset = [_vecRotateMap, (((360/_count)*_i)+_radOffset) mod 360] call FUNC(rotateVectLine);
|
||||
_offsetPos = [
|
||||
(_pos2 select 0)+((_offset select 0)*(_divergence*_x)),
|
||||
(_pos2 select 1)+((_offset select 1)*(_divergence*_x)),
|
||||
(_pos2 select 2)+((_offset select 2)*(_divergence*_x))
|
||||
];
|
||||
_offsetVector = [_pos, _offsetPos] call BIS_fnc_vectorFromXtoY;
|
||||
_result = [_pos, _offsetVector] call FUNC(shootRay);
|
||||
_resultPos = _result select 0;
|
||||
if(!isNil "_resultPos") then {
|
||||
_distance = _result select 1;
|
||||
if(_distance < _shortestReturn) then {
|
||||
_shortestReturn = _distance;
|
||||
};
|
||||
if(_distance > _longestReturn) then {
|
||||
_longestReturn = _distance;
|
||||
};
|
||||
_resultPositions set[(count _resultPositions), _result];
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]];
|
||||
#endif
|
||||
};
|
||||
};
|
||||
} forEach [1,0.5,0.25];
|
||||
[_longestReturn, _shortestReturn, _resultPositions];
|
@ -1,30 +1,30 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_pos", "_vec", "_distance", "_resultPos", "_fidelity", "_lastPos", "_i", "_nextPos"];
|
||||
scopeName "main";
|
||||
_pos = _this select 0;
|
||||
_vec = _this select 1;
|
||||
_distance = 0;
|
||||
_resultPos = nil;
|
||||
_fidelity = [1000,100,10,1,0.1];
|
||||
_lastPos = +_pos;
|
||||
{
|
||||
scopeName "mainSearch";
|
||||
for "_i" from 1 to 10 do {
|
||||
_nextPos = [
|
||||
(_lastPos select 0)+((_vec select 0)*_x),
|
||||
(_lastPos select 1)+((_vec select 1)*_x),
|
||||
(_lastPos select 2)+((_vec select 2)*_x)
|
||||
];
|
||||
|
||||
if(lineIntersects [_lastPos, _nextPos] || terrainIntersectASL [_lastPos, _nextPos]) then {
|
||||
_resultPos = _lastPos;
|
||||
breakTo "mainSearch";
|
||||
} else {
|
||||
_distance = _distance + _x;
|
||||
_lastPos = _nextPos;
|
||||
};
|
||||
};
|
||||
|
||||
} forEach _fidelity;
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_pos", "_vec", "_distance", "_resultPos", "_fidelity", "_lastPos", "_i", "_nextPos"];
|
||||
scopeName "main";
|
||||
_pos = _this select 0;
|
||||
_vec = _this select 1;
|
||||
_distance = 0;
|
||||
_resultPos = nil;
|
||||
_fidelity = [1000,100,10,1,0.1];
|
||||
_lastPos = +_pos;
|
||||
{
|
||||
scopeName "mainSearch";
|
||||
for "_i" from 1 to 10 do {
|
||||
_nextPos = [
|
||||
(_lastPos select 0)+((_vec select 0)*_x),
|
||||
(_lastPos select 1)+((_vec select 1)*_x),
|
||||
(_lastPos select 2)+((_vec select 2)*_x)
|
||||
];
|
||||
|
||||
if(lineIntersects [_lastPos, _nextPos] || terrainIntersectASL [_lastPos, _nextPos]) then {
|
||||
_resultPos = _lastPos;
|
||||
breakTo "mainSearch";
|
||||
} else {
|
||||
_distance = _distance + _x;
|
||||
_lastPos = _nextPos;
|
||||
};
|
||||
};
|
||||
|
||||
} forEach _fidelity;
|
||||
[_resultPos, _distance];
|
@ -1,16 +1,16 @@
|
||||
_object = _this select 0;
|
||||
_origin = getPosASL _object;
|
||||
_matrix = _this select 1;
|
||||
_xVec = _matrix select 0;
|
||||
_yVec = _matrix select 1;
|
||||
_zVec = _matrix select 2;
|
||||
|
||||
_offset = _this select 2;
|
||||
|
||||
_x = _offset select 0;
|
||||
_y = _offset select 1;
|
||||
_z = _offset select 2;
|
||||
|
||||
_out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin;
|
||||
|
||||
_object = _this select 0;
|
||||
_origin = getPosASL _object;
|
||||
_matrix = _this select 1;
|
||||
_xVec = _matrix select 0;
|
||||
_yVec = _matrix select 1;
|
||||
_zVec = _matrix select 2;
|
||||
|
||||
_offset = _this select 2;
|
||||
|
||||
_x = _offset select 0;
|
||||
_y = _offset select 1;
|
||||
_z = _offset select 2;
|
||||
|
||||
_out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin;
|
||||
|
||||
_out;
|
@ -1,22 +1,22 @@
|
||||
_object = _this select 0;
|
||||
_origin = getPosASL _object;
|
||||
_matrix = _this select 1;
|
||||
_xVec = _matrix select 0;
|
||||
_yVec = _matrix select 1;
|
||||
_zVec = _matrix select 2;
|
||||
|
||||
_offset = _this select 2;
|
||||
|
||||
_offset = _offset vectorDiff _origin;
|
||||
|
||||
_x = _offset select 0;
|
||||
_y = _offset select 1;
|
||||
_z = _offset select 2;
|
||||
|
||||
_out = [
|
||||
((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec 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)
|
||||
];
|
||||
|
||||
_object = _this select 0;
|
||||
_origin = getPosASL _object;
|
||||
_matrix = _this select 1;
|
||||
_xVec = _matrix select 0;
|
||||
_yVec = _matrix select 1;
|
||||
_zVec = _matrix select 2;
|
||||
|
||||
_offset = _this select 2;
|
||||
|
||||
_offset = _offset vectorDiff _origin;
|
||||
|
||||
_x = _offset select 0;
|
||||
_y = _offset select 1;
|
||||
_z = _offset select 2;
|
||||
|
||||
_out = [
|
||||
((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec 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)
|
||||
];
|
||||
|
||||
_out;
|
@ -1,15 +1,15 @@
|
||||
#define COMPONENT laser
|
||||
#include "\z\ace\Addons\main\script_mod.hpp"
|
||||
|
||||
#ifdef DEBUG_ENABLED_LASER
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SETTINGS_LASER
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_LASER
|
||||
#endif
|
||||
|
||||
#include "\z\ace\Addons\main\script_macros.hpp"
|
||||
|
||||
|
||||
#define COMPONENT laser
|
||||
#include "\z\ace\Addons\main\script_mod.hpp"
|
||||
|
||||
#ifdef DEBUG_ENABLED_LASER
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SETTINGS_LASER
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_LASER
|
||||
#endif
|
||||
|
||||
#include "\z\ace\Addons\main\script_macros.hpp"
|
||||
|
||||
|
||||
#define FIREMODE_DIRECT_LOAL 1
|
@ -1,19 +1,19 @@
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_pre_init));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_post_init));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_Init_EventHandlers {
|
||||
class Helicopter {
|
||||
class ADDON {
|
||||
init = QUOTE(_this call DFUNC(initDesignatorActions));
|
||||
};
|
||||
};
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_pre_init));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_post_init));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_Init_EventHandlers {
|
||||
class Helicopter {
|
||||
class ADDON {
|
||||
init = QUOTE(_this call DFUNC(initDesignatorActions));
|
||||
};
|
||||
};
|
||||
};
|
@ -1,32 +1,32 @@
|
||||
class RscPicture;
|
||||
class RscText;
|
||||
class RscControlsGroupNoScrollbars;
|
||||
/* This disables air radar. We need to make this a seperate HUD addon
|
||||
class RscInGameUI
|
||||
{
|
||||
class RscUnitInfo
|
||||
{
|
||||
class CA_Radar: RscControlsGroupNoScrollbars
|
||||
{
|
||||
class controls
|
||||
{
|
||||
class CA_RadarBackground: RscPicture {
|
||||
colorText[] = {0,0,0,0};
|
||||
text = "";
|
||||
};
|
||||
class CA_RadarIcon: RscPicture {
|
||||
colorText[] = {0,0,0,0};
|
||||
};
|
||||
class CA_Heading: RscText {
|
||||
colorText[] = {0,0,0,0};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
class CfgInGameUI
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
class RscPicture;
|
||||
class RscText;
|
||||
class RscControlsGroupNoScrollbars;
|
||||
/* This disables air radar. We need to make this a seperate HUD addon
|
||||
class RscInGameUI
|
||||
{
|
||||
class RscUnitInfo
|
||||
{
|
||||
class CA_Radar: RscControlsGroupNoScrollbars
|
||||
{
|
||||
class controls
|
||||
{
|
||||
class CA_RadarBackground: RscPicture {
|
||||
colorText[] = {0,0,0,0};
|
||||
text = "";
|
||||
};
|
||||
class CA_RadarIcon: RscPicture {
|
||||
colorText[] = {0,0,0,0};
|
||||
};
|
||||
class CA_Heading: RscText {
|
||||
colorText[] = {0,0,0,0};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
class CfgInGameUI
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
*/
|
@ -1,30 +1,30 @@
|
||||
class CfgVehicles {
|
||||
class AllVehicles;
|
||||
class Air: AllVehicles {
|
||||
class Turrets;
|
||||
};
|
||||
|
||||
class Helicopter: Air {
|
||||
class Turrets {
|
||||
class MainTurret;
|
||||
};
|
||||
|
||||
// TODO: move these to a different HUD addon
|
||||
// commanderCanSee = 2+32;
|
||||
// gunnerCanSee = 2+32;
|
||||
// driverCanSee = 2+32;
|
||||
|
||||
};
|
||||
|
||||
class Helicopter_Base_F: Helicopter {};
|
||||
|
||||
class Heli_Attack_01_base_F: Helicopter_Base_F {};
|
||||
|
||||
class B_Heli_Attack_01_F: Heli_Attack_01_base_F {
|
||||
class Turrets: Turrets {
|
||||
class MainTurret: MainTurret {
|
||||
GVAR(Enabled) = 1; // Enable laser self-designation
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
class CfgVehicles {
|
||||
class AllVehicles;
|
||||
class Air: AllVehicles {
|
||||
class Turrets;
|
||||
};
|
||||
|
||||
class Helicopter: Air {
|
||||
class Turrets {
|
||||
class MainTurret;
|
||||
};
|
||||
|
||||
// TODO: move these to a different HUD addon
|
||||
// commanderCanSee = 2+32;
|
||||
// gunnerCanSee = 2+32;
|
||||
// driverCanSee = 2+32;
|
||||
|
||||
};
|
||||
|
||||
class Helicopter_Base_F: Helicopter {};
|
||||
|
||||
class Heli_Attack_01_base_F: Helicopter_Base_F {};
|
||||
|
||||
class B_Heli_Attack_01_F: Heli_Attack_01_base_F {
|
||||
class Turrets: Turrets {
|
||||
class MainTurret: MainTurret {
|
||||
GVAR(Enabled) = 1; // Enable laser self-designation
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -1,11 +1,11 @@
|
||||
class CfgWeapons {
|
||||
// Disable locking unless newb mode
|
||||
class LauncherCore;
|
||||
class RocketPods: LauncherCore {
|
||||
canLock = 1;
|
||||
};
|
||||
|
||||
class missiles_DAGR: RocketPods {
|
||||
canLock = 1;
|
||||
};
|
||||
};
|
||||
class CfgWeapons {
|
||||
// Disable locking unless newb mode
|
||||
class LauncherCore;
|
||||
class RocketPods: LauncherCore {
|
||||
canLock = 1;
|
||||
};
|
||||
|
||||
class missiles_DAGR: RocketPods {
|
||||
canLock = 1;
|
||||
};
|
||||
};
|
||||
|
@ -1,3 +1,3 @@
|
||||
#include "script_component.hpp"
|
||||
NO_DEDICATED;
|
||||
|
||||
#include "script_component.hpp"
|
||||
NO_DEDICATED;
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
PREP(initDesignatorActions);
|
||||
PREP(laserHudDesignateOn);
|
||||
PREP(laserHudDesignateOff);
|
||||
PREP(unitTurretHasDesignator);
|
||||
|
||||
GVAR(laser) = nil;
|
||||
GVAR(laserActive) = false;
|
||||
|
||||
FUNC(getPosASL) = {visiblePositionASL (_this select 0)};
|
||||
#include "script_component.hpp"
|
||||
|
||||
PREP(initDesignatorActions);
|
||||
PREP(laserHudDesignateOn);
|
||||
PREP(laserHudDesignateOff);
|
||||
PREP(unitTurretHasDesignator);
|
||||
|
||||
GVAR(laser) = nil;
|
||||
GVAR(laserActive) = false;
|
||||
|
||||
FUNC(getPosASL) = {visiblePositionASL (_this select 0)};
|
||||
|
@ -1,17 +1,17 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
class CfgPatches {
|
||||
class ADDON {
|
||||
units[] = {};
|
||||
weapons[] = {};
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {"ace_laser"};
|
||||
version = VERSION;
|
||||
};
|
||||
};
|
||||
|
||||
#include "CfgUI.hpp"
|
||||
|
||||
#include "CfgEventhandlers.hpp"
|
||||
#include "CfgWeapons.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
#include "script_component.hpp"
|
||||
|
||||
class CfgPatches {
|
||||
class ADDON {
|
||||
units[] = {};
|
||||
weapons[] = {};
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {"ace_laser"};
|
||||
version = VERSION;
|
||||
};
|
||||
};
|
||||
|
||||
#include "CfgUI.hpp"
|
||||
|
||||
#include "CfgEventhandlers.hpp"
|
||||
#include "CfgWeapons.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
|
@ -1,20 +1,20 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
if(isNil QGVAR(laser)) exitWith {
|
||||
false
|
||||
};
|
||||
if(!local GVAR(laser)) then {
|
||||
false
|
||||
};
|
||||
|
||||
_handle = GVAR(laser) getVariable ["ACE_PFH_HANDLE", nil];
|
||||
if(!isNil "_handle") then {
|
||||
[_handle] call cba_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
REM(ACE_LASERS, GVAR(laser));
|
||||
deleteVehicle GVAR(laser);
|
||||
GVAR(laser) = nil;
|
||||
GVAR(laserActive) = false;
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
if(isNil QGVAR(laser)) exitWith {
|
||||
false
|
||||
};
|
||||
if(!local GVAR(laser)) then {
|
||||
false
|
||||
};
|
||||
|
||||
_handle = GVAR(laser) getVariable ["ACE_PFH_HANDLE", nil];
|
||||
if(!isNil "_handle") then {
|
||||
[_handle] call cba_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
REM(ACE_LASERS, GVAR(laser));
|
||||
deleteVehicle GVAR(laser);
|
||||
GVAR(laser) = nil;
|
||||
GVAR(laserActive) = false;
|
||||
|
||||
true
|
@ -1,111 +1,111 @@
|
||||
//#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
|
||||
TRACE_1("enter", _this);
|
||||
|
||||
#define FCS_UPDATE_DELAY 1
|
||||
|
||||
FUNC(magnitude) = {
|
||||
_this distance [0, 0, 0]
|
||||
};
|
||||
|
||||
FUNC(mat_normalize3d) = {
|
||||
private ["_mag"];
|
||||
PARAMS_3(_vx,_vy,_vz);
|
||||
|
||||
_mag = _this call FUNC(magnitude);
|
||||
if (_mag == 0) then {_mag = 1};
|
||||
[(_vx/_mag), (_vy/_mag), (_vz/_mag)]
|
||||
};
|
||||
|
||||
FUNC(laserHudDesignatePFH) = {
|
||||
private["_args", "_laserTarget", "_shooter", "_vehicle", "_weapon", "_gunnerInfo", "_turret", "_pov", "_gunBeg", "_gunEnd", "_povPos", "_povDir", "_result", "_resultPositions", "_firstResult", "_forceUpdateTime"];
|
||||
_args = _this select 0;
|
||||
_laserTarget = _args select 0;
|
||||
_shooter = _args select 1;
|
||||
|
||||
if( (count _args) < 3) then {
|
||||
_args set[2, diag_tickTime + FCS_UPDATE_DELAY];
|
||||
};
|
||||
_forceUpdateTime = _args select 2;
|
||||
|
||||
_vehicle = vehicle _shooter;
|
||||
_weapon = currentWeapon _vehicle;
|
||||
|
||||
TRACE_1("", _args);
|
||||
|
||||
if(!alive _shooter || isNull _vehicle || isNull _laserTarget || !GVAR(laserActive) ) exitWith {
|
||||
[] call FUNC(laserHudDesignateOff);
|
||||
};
|
||||
if(!([ACE_player] call FUNC(unitTurretHasDesignator)) ) exitWith {
|
||||
[] call FUNC(laserHudDesignateOff);
|
||||
};
|
||||
|
||||
// Retrieve the gunner and turret memory point information
|
||||
_gunnerInfo = [_vehicle, _weapon] call CBA_fnc_getFirer;
|
||||
_turretInfo = [_vehicle, _gunnerInfo select 1] call EFUNC(common,getTurretDirection);
|
||||
_povPos = _turretInfo select 0;
|
||||
_povDir = _turretInfo select 1;
|
||||
|
||||
|
||||
|
||||
_result = [_povPos, _povDir] call EFUNC(laser,shootCone);
|
||||
if((count _result) > 0) then {
|
||||
_resultPositions = _result select 2;
|
||||
|
||||
if((count _resultPositions) > 0) then {
|
||||
_firstResult = _resultPositions select 0;
|
||||
_pos = _firstResult select 0;
|
||||
|
||||
// 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,
|
||||
// but not across multiple close frames.
|
||||
// This loses accuracy a little, but saves position updates per frame.
|
||||
TRACE_5("", diag_tickTime, _forceUpdateTime, getPosASL _laserTarget, _pos, ((getPosASL _laserTarget) distance _pos));
|
||||
|
||||
if(diag_tickTime > _forceUpdateTime) then {
|
||||
TRACE_1("FCS Update", "");
|
||||
["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent;
|
||||
};
|
||||
|
||||
if( (_laserTarget distance _pos) > 0.1) then {
|
||||
TRACE_1("LaserPos Update", "");
|
||||
_laserTarget setPosATL (ASLToATL _pos);
|
||||
};
|
||||
|
||||
if(diag_tickTime > _forceUpdateTime) then {
|
||||
_args set[2, diag_tickTime + FCS_UPDATE_DELAY];
|
||||
};
|
||||
#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"];
|
||||
|
||||
{
|
||||
private["_position"];
|
||||
_position = _x select 0;
|
||||
drawLine3d [ASLToATL _povPos, ASLToATL _position, [0,0,1,1] ];
|
||||
} forEach _resultPositions;
|
||||
#endif
|
||||
};
|
||||
};
|
||||
|
||||
_this set[0, _args];
|
||||
};
|
||||
|
||||
private "_laserTarget";
|
||||
private "_handle";
|
||||
|
||||
if(isNil QGVAR(laser)) then {
|
||||
|
||||
_laserTarget = "LaserTargetW" createVehicle (getpos player);
|
||||
|
||||
GVAR(laserActive) = true;
|
||||
|
||||
_handle = [FUNC(laserHudDesignatePFH), 0.1, [_laserTarget, player]] call cba_fnc_addPerFrameHandler;
|
||||
_laserTarget setVariable ["ACE_PFH_HANDLE", _handle, false];
|
||||
|
||||
GVAR(laser) = _laserTarget;
|
||||
} else {
|
||||
[] call FUNC(laserHudDesignateOff);
|
||||
[] call FUNC(laserHudDesignateOn);
|
||||
};
|
||||
|
||||
//#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
|
||||
TRACE_1("enter", _this);
|
||||
|
||||
#define FCS_UPDATE_DELAY 1
|
||||
|
||||
FUNC(magnitude) = {
|
||||
_this distance [0, 0, 0]
|
||||
};
|
||||
|
||||
FUNC(mat_normalize3d) = {
|
||||
private ["_mag"];
|
||||
PARAMS_3(_vx,_vy,_vz);
|
||||
|
||||
_mag = _this call FUNC(magnitude);
|
||||
if (_mag == 0) then {_mag = 1};
|
||||
[(_vx/_mag), (_vy/_mag), (_vz/_mag)]
|
||||
};
|
||||
|
||||
FUNC(laserHudDesignatePFH) = {
|
||||
private["_args", "_laserTarget", "_shooter", "_vehicle", "_weapon", "_gunnerInfo", "_turret", "_pov", "_gunBeg", "_gunEnd", "_povPos", "_povDir", "_result", "_resultPositions", "_firstResult", "_forceUpdateTime"];
|
||||
_args = _this select 0;
|
||||
_laserTarget = _args select 0;
|
||||
_shooter = _args select 1;
|
||||
|
||||
if( (count _args) < 3) then {
|
||||
_args set[2, diag_tickTime + FCS_UPDATE_DELAY];
|
||||
};
|
||||
_forceUpdateTime = _args select 2;
|
||||
|
||||
_vehicle = vehicle _shooter;
|
||||
_weapon = currentWeapon _vehicle;
|
||||
|
||||
TRACE_1("", _args);
|
||||
|
||||
if(!alive _shooter || isNull _vehicle || isNull _laserTarget || !GVAR(laserActive) ) exitWith {
|
||||
[] call FUNC(laserHudDesignateOff);
|
||||
};
|
||||
if(!([ACE_player] call FUNC(unitTurretHasDesignator)) ) exitWith {
|
||||
[] call FUNC(laserHudDesignateOff);
|
||||
};
|
||||
|
||||
// Retrieve the gunner and turret memory point information
|
||||
_gunnerInfo = [_vehicle, _weapon] call CBA_fnc_getFirer;
|
||||
_turretInfo = [_vehicle, _gunnerInfo select 1] call EFUNC(common,getTurretDirection);
|
||||
_povPos = _turretInfo select 0;
|
||||
_povDir = _turretInfo select 1;
|
||||
|
||||
|
||||
|
||||
_result = [_povPos, _povDir] call EFUNC(laser,shootCone);
|
||||
if((count _result) > 0) then {
|
||||
_resultPositions = _result select 2;
|
||||
|
||||
if((count _resultPositions) > 0) then {
|
||||
_firstResult = _resultPositions select 0;
|
||||
_pos = _firstResult select 0;
|
||||
|
||||
// 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,
|
||||
// but not across multiple close frames.
|
||||
// This loses accuracy a little, but saves position updates per frame.
|
||||
TRACE_5("", diag_tickTime, _forceUpdateTime, getPosASL _laserTarget, _pos, ((getPosASL _laserTarget) distance _pos));
|
||||
|
||||
if(diag_tickTime > _forceUpdateTime) then {
|
||||
TRACE_1("FCS Update", "");
|
||||
["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent;
|
||||
};
|
||||
|
||||
if( (_laserTarget distance _pos) > 0.1) then {
|
||||
TRACE_1("LaserPos Update", "");
|
||||
_laserTarget setPosATL (ASLToATL _pos);
|
||||
};
|
||||
|
||||
if(diag_tickTime > _forceUpdateTime) then {
|
||||
_args set[2, diag_tickTime + FCS_UPDATE_DELAY];
|
||||
};
|
||||
#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"];
|
||||
|
||||
{
|
||||
private["_position"];
|
||||
_position = _x select 0;
|
||||
drawLine3d [ASLToATL _povPos, ASLToATL _position, [0,0,1,1] ];
|
||||
} forEach _resultPositions;
|
||||
#endif
|
||||
};
|
||||
};
|
||||
|
||||
_this set[0, _args];
|
||||
};
|
||||
|
||||
private "_laserTarget";
|
||||
private "_handle";
|
||||
|
||||
if(isNil QGVAR(laser)) then {
|
||||
|
||||
_laserTarget = "LaserTargetW" createVehicle (getpos player);
|
||||
|
||||
GVAR(laserActive) = true;
|
||||
|
||||
_handle = [FUNC(laserHudDesignatePFH), 0.1, [_laserTarget, player]] call cba_fnc_addPerFrameHandler;
|
||||
_laserTarget setVariable ["ACE_PFH_HANDLE", _handle, false];
|
||||
|
||||
GVAR(laser) = _laserTarget;
|
||||
} else {
|
||||
[] call FUNC(laserHudDesignateOff);
|
||||
[] call FUNC(laserHudDesignateOn);
|
||||
};
|
||||
|
||||
|
@ -1 +1 @@
|
||||
#include "\z\ace\Addons\laser_selfdesignate\script_component.hpp"
|
||||
#include "\z\ace\Addons\laser_selfdesignate\script_component.hpp"
|
||||
|
@ -1,12 +1,12 @@
|
||||
#define COMPONENT laser_selfdesignate
|
||||
#include "\z\ace\Addons\main\script_mod.hpp"
|
||||
|
||||
#ifdef DEBUG_ENABLED_LASER_SELFDESIGNATE
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SETTINGS_LASER_SELFDESIGNATE
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_LASER_SELFDESIGNATE
|
||||
#endif
|
||||
|
||||
#include "\z\ace\Addons\main\script_macros.hpp"
|
||||
#define COMPONENT laser_selfdesignate
|
||||
#include "\z\ace\Addons\main\script_mod.hpp"
|
||||
|
||||
#ifdef DEBUG_ENABLED_LASER_SELFDESIGNATE
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SETTINGS_LASER_SELFDESIGNATE
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_LASER_SELFDESIGNATE
|
||||
#endif
|
||||
|
||||
#include "\z\ace\Addons\main\script_macros.hpp"
|
||||
|
@ -1,16 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler - 2015-04-07 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Laser_SelfDesignate">
|
||||
<Key ID="STR_ACE_Laser_SelfDesignate_DesignatorOn">
|
||||
<English>Laser<br/>Designator On</English>
|
||||
<German>Lasermarkierer<br/>an</German>
|
||||
<Russian>ЛЦУ<br/>ВКЛ</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Laser_SelfDesignate_DesignatorOff">
|
||||
<English>Laser<br/>Designator Off</English>
|
||||
<German>Lasermarkierer<br/>aus</German>
|
||||
<Russian>ЛЦУ<br/>ВЫКЛ</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -1,22 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Laserpointer">
|
||||
|
||||
<Key ID="STR_ACE_Laserpointer_red">
|
||||
<English>Laser Pointer (red)</English>
|
||||
<German>Laserpointer (rot)</German>
|
||||
<Russian>Лазерный прицел (красный)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Laserpointer_green">
|
||||
<English>Laser Pointer (green)</English>
|
||||
<German>Laserpointer (grün)</German>
|
||||
<Russian>Лазерный прицел (зелёный)</Russian>
|
||||
</Key>
|
||||
|
||||
<Key ID="STR_ACE_Laserpointer_Description">
|
||||
<English>Emits visible light. </English>
|
||||
<German>Strahlt sichtbares Licht aus. </German>
|
||||
<Russian>Испускает узкий пучок видимого света.</Russian>
|
||||
</Key>
|
||||
|
||||
<Key ID="STR_ACE_Laserpointer_useLaser">
|
||||
<English><t color='#9cf953'>Use: </t>Turn Laser ON/OFF</English>
|
||||
<Czech><t color='#9cf953'>Použití: </t>Zapnout/vypnout laser</Czech>
|
||||
@ -28,5 +27,6 @@
|
||||
<Russian><t color='#9cf953'>Использовать: </t>вкл/выкл лазер</Russian>
|
||||
<Spanish><t color='#9cf953'>Usar: </t>encender/apagar láser</Spanish>
|
||||
</Key>
|
||||
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler - 2014-12-21 -->
|
||||
<Project name="ACE">
|
||||
<Package name="logistics_uavbattery">
|
||||
<Key ID="STR_ACE_logistics_uavbattery_Full">
|
||||
@ -24,7 +24,7 @@
|
||||
<Czech>Potřebuješ UAV-Baterii</Czech>
|
||||
<Portuguese>Você precisa de uma Bateria para VANT</Portuguese>
|
||||
<Italian>Hai bisogno di una Batteria UAV</Italian>
|
||||
<Russian>Требуется аккумулятор для БПЛА</Russian>
|
||||
<Russian>Требуется аккумулятор БПЛА</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_logistics_uavbattery_Recharge">
|
||||
<English>Recharge</English>
|
||||
@ -36,7 +36,7 @@
|
||||
<Czech>Dobít</Czech>
|
||||
<Portuguese>Recarregar</Portuguese>
|
||||
<Italian>Ricarica</Italian>
|
||||
<Russian>Зарядить</Russian>
|
||||
<Russian>Подзарядить</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_logistics_uavbattery_Battery_Name">
|
||||
<English>UAV Battery</English>
|
||||
@ -60,7 +60,7 @@
|
||||
<Czech>Používané k dobíjení UAV</Czech>
|
||||
<Portuguese>Usada para reabastecer VANT</Portuguese>
|
||||
<Italian>Usata per ricaricare la Batteria dell'UAV</Italian>
|
||||
<Russian>Используется для зарядки БПЛА</Russian>
|
||||
<Russian>Используется для подзарядки БПЛА</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_logistics_uavbattery_Battery_Recharge">
|
||||
<English>Recharging ...</English>
|
||||
@ -72,7 +72,7 @@
|
||||
<Czech>Dobíjení ...</Czech>
|
||||
<Portuguese>Recarregando ...</Portuguese>
|
||||
<Italian>In ricarica ...</Italian>
|
||||
<Russian>Заряжается ...</Russian>
|
||||
<Russian>Подзаряжаем ...</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -1,17 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler - 2015-04-07 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Wirecutter">
|
||||
<Key ID="STR_ACE_logistics_wirecutter_wirecutterName">
|
||||
<English>Wirecutter</English>
|
||||
<German>Drahtschneider</German>
|
||||
<Spanish>Wirecutter</Spanish>
|
||||
<Russian>Клещи-кусачки</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_logistics_wirecutter_wirecutterDescription">
|
||||
<English>Wirecutter</English>
|
||||
<German>Schneidet Draht.</German>
|
||||
<Russian>Позволяют быстро перекусывать сеточные конструкции.</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_logistics_wirecutter_CutFence">
|
||||
<English>Cut Fence</English>
|
||||
@ -23,7 +21,7 @@
|
||||
<Portuguese>Cortar Cerca</Portuguese>
|
||||
<Italian>Taglia</Italian>
|
||||
<Hungarian>Drótkerítés átvágása</Hungarian>
|
||||
<Russian>Разрезать забор</Russian>
|
||||
<Russian>Вырезать забор</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_logistics_wirecutter_CuttingFence">
|
||||
<English>Cutting Fences / Wires ...</English>
|
||||
@ -35,7 +33,7 @@
|
||||
<Portuguese>Cortando Cerca / Arame ...</Portuguese>
|
||||
<Italian>Sto tagliando ...</Italian>
|
||||
<Hungarian>Drótok elvágása ...</Hungarian>
|
||||
<Russian>Разрезаем забор / провода ...</Russian>
|
||||
<Russian>Вырезаем забор / провода ...</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_logistics_wirecutter_FenceCut">
|
||||
<English>Fence cut</English>
|
||||
@ -47,7 +45,7 @@
|
||||
<Portuguese>Cerca cortada</Portuguese>
|
||||
<Italian>Fatto!</Italian>
|
||||
<Hungarian>Drótkerítés átvágva</Hungarian>
|
||||
<Russian>Забор разрезан</Russian>
|
||||
<Russian>Забор вырезан</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler - 2015-02-08 -->
|
||||
<Project name="ACE">
|
||||
<Package name="MagazineRepack">
|
||||
<Key ID="STR_ACE_MagazineRepack_RepackMagazines">
|
||||
@ -78,19 +78,16 @@
|
||||
<English>Repacking Finished</English>
|
||||
<German>Wiederverpacken Fertig</German>
|
||||
<Spanish>Reembalaje Finalizado</Spanish>
|
||||
<Russian>Перепаковка завершена</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MagazineRepack_RepackInterrupted">
|
||||
<English>Repacking Interrupted</English>
|
||||
<German>Umpacken Unterbrochen</German>
|
||||
<Spanish>Reempaque Interrupted</Spanish>
|
||||
<Russian>Перепаковка прервана</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MagazineRepack_RepackedMagazinesCount">
|
||||
<English>%1 Full and %2 Partial</English>
|
||||
<German>%1 Vollständigen und %2 Teilweisen</German>
|
||||
<Spanish>%1 Total y %2 Parcial</Spanish>
|
||||
<Russian>%1 полных и %2 неполных</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler - 2014-12-15 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Magazines">
|
||||
<!-- MX -->
|
||||
@ -13,7 +13,7 @@
|
||||
<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>
|
||||
<Italian>Caricatore 6.5mm 30Rnd Traccianti IR-DIM</Italian>
|
||||
<Russian>Магазин из 30-ти 6.5 мм трассирующих под ПНВ</Russian>
|
||||
<Russian>Магазин из 30-и 6.5 мм трассирующих под ПНВ</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimNameShort">
|
||||
<English>6.5mm IR-DIM</English>
|
||||
@ -25,7 +25,7 @@
|
||||
<Czech>6.5mm IR-DIM</Czech>
|
||||
<Portuguese>6,5mm IR-DIM</Portuguese>
|
||||
<Italian>6.5 IR-DIM</Italian>
|
||||
<Russian>6.5 мм ИК-трассирующие</Russian>
|
||||
<Russian>6.5 мм трассирущие под ПНВ</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimDescription">
|
||||
<English>Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL</English>
|
||||
@ -49,7 +49,7 @@
|
||||
<Czech>6.5mm 30ks SD Zásobník</Czech>
|
||||
<Portuguese>Carregador de 30 projéteis SD de 6,5mm</Portuguese>
|
||||
<Italian>Caricatore 6.5mm 30Rnd Sil.</Italian>
|
||||
<Russian>Магазин из 30-ти 6.5 мм дозвуковых</Russian>
|
||||
<Russian>Магазин из 30-и 6.5 мм дозвуковых</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_65x39_caseless_mag_SDNameShort">
|
||||
<English>6.5mm SD</English>
|
||||
@ -85,7 +85,7 @@
|
||||
<Czech>6.5mm 30ks AP Zásobník</Czech>
|
||||
<Portuguese>Carregador de 30 projéteis AP de 6,5mm</Portuguese>
|
||||
<Italian>Caricatore 6.5mm 30Rnd AP</Italian>
|
||||
<Russian>Магазин из 30-ти 6.5 мм бронебойных</Russian>
|
||||
<Russian>Магазин из 30-и 6.5 мм бронебойных</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_65x39_caseless_mag_APNameShort">
|
||||
<English>6.5mm AP</English>
|
||||
@ -122,7 +122,7 @@
|
||||
<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>
|
||||
<Italian>Caricatore 6.5mm 30Rnd Traccianti IR-DIM</Italian>
|
||||
<Russian>Магазин из 30-ти 6.5 мм трассирующих под ПНВ</Russian>
|
||||
<Russian>Магазин из 30-и 6.5 мм трассирующих под ПНВ</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimNameShort">
|
||||
<English>6.5mm IR-DIM</English>
|
||||
@ -134,7 +134,7 @@
|
||||
<Czech>6.5mm IR-DIM</Czech>
|
||||
<Portuguese>6,5mm IR-DIM</Portuguese>
|
||||
<Italian>6.5mm IR-DIM</Italian>
|
||||
<Russian>6.5 мм ИК-трассирующие</Russian>
|
||||
<Russian>6.5 мм трассирущие под ПНВ</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimDescription">
|
||||
<English>Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: Katiba</English>
|
||||
@ -158,7 +158,7 @@
|
||||
<Czech>6.5mm 30ks SD Zásobník</Czech>
|
||||
<Portuguese>Carregador de 30 projéteis SD de 6,5mm</Portuguese>
|
||||
<Italian>Caricatore 6.5mm 30Rnd Sil.</Italian>
|
||||
<Russian>Магазин из 30-ти 6.5 мм дозвуковых</Russian>
|
||||
<Russian>Магазин из 30-и 6.5 мм дозвуковых</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_SDNameShort">
|
||||
<English>6.5mm SD</English>
|
||||
@ -194,7 +194,7 @@
|
||||
<Czech>6.5mm 30ks AP Zásobník</Czech>
|
||||
<Portuguese>Carregador de 30 projéteis AP de 6,5mm</Portuguese>
|
||||
<Italian>Caricatore 6.5mm 30Rnd AP</Italian>
|
||||
<Russian>Магазин из 30-ти 6.5 мм бронебойных</Russian>
|
||||
<Russian>Магазин из 30-и 6.5 мм бронебойных</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_APNameShort">
|
||||
<English>6.5mm AP</English>
|
||||
@ -231,7 +231,7 @@
|
||||
<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>
|
||||
<Italian>Caricatore 5.56mm 30rnd Traccianti IR-DIM</Italian>
|
||||
<Russian>Магазин из 30-ти 5.56 мм трассирующих под ПНВ</Russian>
|
||||
<Russian>Магазин из 30-и 5.56 мм трассирующих под ПНВ</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_556x45_mag_Tracer_DimNameShort">
|
||||
<English>5.56mm IR-DIM</English>
|
||||
@ -243,7 +243,7 @@
|
||||
<Czech>5.56mm IR-DIM</Czech>
|
||||
<Portuguese>5,56mm IR-DIM</Portuguese>
|
||||
<Italian>5.56mm IR-DIM</Italian>
|
||||
<Russian>5.56 мм ИК-трассирующие</Russian>
|
||||
<Russian>5.56 мм трассирущие под ПНВ</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_556x45_mag_Tracer_DimDescription">
|
||||
<English>Caliber: 5.56x45 mm Tracer IR-DIM<br />Rounds: 30<br />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>
|
||||
<Portuguese>Carregador de 30 projéteis SD de 5,56mm</Portuguese>
|
||||
<Italian>Caricatore 5.56mm 30Rnd Sil.</Italian>
|
||||
<Russian>Магазин из 30-ти 5.56 мм дозвуковых</Russian>
|
||||
<Russian>Магазин из 30-и 5.56 мм дозвуковых</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_556x45_mag_SDNameShort">
|
||||
<English>5.56mm SD</English>
|
||||
@ -303,7 +303,7 @@
|
||||
<Czech>5.56mm 30ks AP Zásobník</Czech>
|
||||
<Portuguese>Carregador de 30 projéteis AP de 5,56mm</Portuguese>
|
||||
<Italian>Caricatore 5.56mm 30Rnd AP</Italian>
|
||||
<Russian>Магазин из 30-ти 5.56 мм бронебойных</Russian>
|
||||
<Russian>Магазин из 30-и 5.56 мм бронебойных</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_556x45_mag_APNameShort">
|
||||
<English>5.56mm AP</English>
|
||||
@ -340,7 +340,7 @@
|
||||
<Czech>7.62mm 20ks Svítící Zásobník</Czech>
|
||||
<Portuguese>Carregador de 20 projéteis traçantes de 7,62mm</Portuguese>
|
||||
<Italian>Caricatore 7.62mm 20Rnd Traccianti</Italian>
|
||||
<Russian>Магазин из 20-ти 7.62 мм трассирующих</Russian>
|
||||
<Russian>Магазин из 20-и 7.62 мм трассирующих</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x51_mag_TracerNameShort">
|
||||
<English>7.62mm Tracer</English>
|
||||
@ -376,7 +376,7 @@
|
||||
<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>
|
||||
<Italian>Caricatore 7.62mm 20rnd Traccianti IR-DIM</Italian>
|
||||
<Russian>Магазин из 20-ти 7.62 мм трассирующих под ПНВ</Russian>
|
||||
<Russian>Магазин из 20-и 7.62 мм трассирующих под ПНВ</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x51_mag_Tracer_DimNameShort">
|
||||
<English>7.62mm IR-DIM</English>
|
||||
@ -388,7 +388,7 @@
|
||||
<Czech>7.62mm IR-DIM</Czech>
|
||||
<Portuguese>7,62mm IR-DIM</Portuguese>
|
||||
<Italian>7.62mm IR-DIM</Italian>
|
||||
<Russian>7.62 мм ИК-трассирующие</Russian>
|
||||
<Russian>7.62 мм трассирущие под ПНВ</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x51_mag_Tracer_DimDescription">
|
||||
<English>Caliber: 7.62x51 mm Tracer IR-DIM<br />Rounds: 20<br />Used in: Mk18 ABR</English>
|
||||
@ -412,7 +412,7 @@
|
||||
<Czech>7.62mm 20ks SD Zásobník</Czech>
|
||||
<Portuguese>Carregador de 20 projéteis SD de 7,62mm</Portuguese>
|
||||
<Italian>Caricatore 7.62mm 20Rnd Sil.</Italian>
|
||||
<Russian>Магазин из 20-ти 7.62 мм дозвуковых</Russian>
|
||||
<Russian>Магазин из 20-и 7.62 мм дозвуковых</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x51_mag_SDNameShort">
|
||||
<English>7.62mm SD</English>
|
||||
@ -448,7 +448,7 @@
|
||||
<Czech>7.62mm 20ks AP Zásobník</Czech>
|
||||
<Portuguese>Carregador de 20 projéteis AP de 7,62mm</Portuguese>
|
||||
<Italian>Caricatore 7.62mm 20Rnd AP</Italian>
|
||||
<Russian>Магазин из 20-ти 7.62 мм бронебойных</Russian>
|
||||
<Russian>Магазин из 20-и 7.62 мм бронебойных</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x51_mag_APNameShort">
|
||||
<English>7.62mm AP</English>
|
||||
@ -487,4 +487,4 @@
|
||||
<Italian>Calibro: 7.62x51mm M118LR<br />Munizioni:20<br />In uso su: M14</Italian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
||||
|
@ -1,35 +1,35 @@
|
||||
#include "script_dialog_defines.hpp"
|
||||
|
||||
class ACE_ABOUT_DLG {
|
||||
idd = 114137;
|
||||
movingEnable = 0;
|
||||
onLoad = "with uiNameSpace do { ACE_ABOUT_DLG = _this select 0; };";
|
||||
onKeyDown = "if((_this select 1) == 1) then {ACE_ABOUT_STP = true;};";
|
||||
class controlsBackground {
|
||||
class Contents : RscStructuredText {
|
||||
idc = 1141371;
|
||||
colorBackground[] = { 0, 0, 0, 0 };
|
||||
__SX(0.45);
|
||||
__SY(0.25);
|
||||
__SW(0.45);
|
||||
__SH(0.6);
|
||||
size = "0.025 * SafeZoneH";
|
||||
class Attributes {
|
||||
font = "TahomaB";
|
||||
color = "#C8C8C8";
|
||||
align = "left";
|
||||
valign = "middle";
|
||||
shadow = true;
|
||||
shadowColor = "#191970";
|
||||
size = "1";
|
||||
};
|
||||
};
|
||||
class ACE_ABOUT_NEXT : ACE_ABOUT_CTRL { //dummy visible
|
||||
idc = 1141372;
|
||||
__SX(0.065);
|
||||
__SW(0.03);
|
||||
text = "";
|
||||
action = "";
|
||||
};
|
||||
}; //controlsBackground
|
||||
};
|
||||
#include "script_dialog_defines.hpp"
|
||||
|
||||
class ACE_ABOUT_DLG {
|
||||
idd = 114137;
|
||||
movingEnable = 0;
|
||||
onLoad = "with uiNameSpace do { ACE_ABOUT_DLG = _this select 0; };";
|
||||
onKeyDown = "if((_this select 1) == 1) then {ACE_ABOUT_STP = true;};";
|
||||
class controlsBackground {
|
||||
class Contents : RscStructuredText {
|
||||
idc = 1141371;
|
||||
colorBackground[] = { 0, 0, 0, 0 };
|
||||
__SX(0.45);
|
||||
__SY(0.25);
|
||||
__SW(0.45);
|
||||
__SH(0.6);
|
||||
size = "0.025 * SafeZoneH";
|
||||
class Attributes {
|
||||
font = "TahomaB";
|
||||
color = "#C8C8C8";
|
||||
align = "left";
|
||||
valign = "middle";
|
||||
shadow = true;
|
||||
shadowColor = "#191970";
|
||||
size = "1";
|
||||
};
|
||||
};
|
||||
class ACE_ABOUT_NEXT : ACE_ABOUT_CTRL { //dummy visible
|
||||
idc = 1141372;
|
||||
__SX(0.065);
|
||||
__SW(0.03);
|
||||
text = "";
|
||||
action = "";
|
||||
};
|
||||
}; //controlsBackground
|
||||
};
|
||||
|
@ -1,8 +1,8 @@
|
||||
class CfgFactionClasses {
|
||||
class NO_CATEGORY;
|
||||
class ACE: NO_CATEGORY {
|
||||
displayName = "ACE";
|
||||
priority = 2;
|
||||
side = 7;
|
||||
};
|
||||
class CfgFactionClasses {
|
||||
class NO_CATEGORY;
|
||||
class ACE: NO_CATEGORY {
|
||||
displayName = "ACE";
|
||||
priority = 2;
|
||||
side = 7;
|
||||
};
|
||||
};
|
@ -1,210 +1,210 @@
|
||||
#include "script_component.hpp"
|
||||
#include "\z\ace\addons\main\script_common.hpp"
|
||||
|
||||
if (!isNil "ACE_ABOUT_RUN") exitWith {ACE_ABOUT_RUN = false;};
|
||||
ACE_ABOUT_RUN = true;
|
||||
|
||||
disableSerialization;
|
||||
|
||||
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"];
|
||||
|
||||
_pcredits = [
|
||||
"",
|
||||
"<t align='center' color='#CC1100'>Advanced Combat Environment 2</t>",
|
||||
"<t align='center' color='#566D7E'>http://dev-heaven.net/projects/ace-mod2</t>",
|
||||
"",
|
||||
__cr_managers,
|
||||
"",
|
||||
__cr_devs,
|
||||
"",
|
||||
__cr_testers,
|
||||
"",
|
||||
"For a full list of acknowledgements, please visit our Wiki:",
|
||||
"<t color='#566D7E'>http://ace.dev-heaven.net</t>"
|
||||
];
|
||||
|
||||
_pkeynam = { //local function
|
||||
_shift = if (_shift > 0) then {42} else {0};
|
||||
_ctrl = if (_ctrl > 0) then {56} else {0};
|
||||
_alt = if (_alt > 0) then {29} else {0};
|
||||
_keys = [_shift,_ctrl,_alt,_key];
|
||||
_keystrg = "^";
|
||||
{
|
||||
_mod = _x in [42,56,29];
|
||||
_knaml = call compile format["format['%2',%1]",(keyName _x),"%1"];
|
||||
_knaml = [_knaml, " "] call CBA_fnc_split;
|
||||
_knam = "^";
|
||||
{_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;
|
||||
_keystrg = _keystrg + "-" + _knam;
|
||||
} forEach _keys;
|
||||
_keystrg = [_keystrg, "^ ", ""] call CBA_fnc_replace;
|
||||
_keystrg = [_keystrg, "^-", ""] call CBA_fnc_replace;
|
||||
_keystrg = [_keystrg, "^", "None"] call CBA_fnc_replace;
|
||||
_keystrg
|
||||
};
|
||||
_pkeys = {
|
||||
_pary = [];
|
||||
_tpages = [];
|
||||
_cEvents = configFile/"CfgSettings"/"CBA"/"events";
|
||||
for "_i" from 0 to (count _cEvents) - 1 do {
|
||||
_cSys = _cEvents select _i;
|
||||
_tSys = configName _cSys;
|
||||
if (isNumber ((_cSys select 0)/"key")) then {
|
||||
//format system name
|
||||
_aSys = [_tSys, "_"] call CBA_fnc_split;
|
||||
_tS = "^";
|
||||
{if (_x != "ace" && _x != "sys") then {_tS = _tS + " " + _x}} forEach _aSys;
|
||||
_tS = [_tS, "^ ", ""] call CBA_fnc_replace;
|
||||
_tS = format["<t color='#99cccc'>%1:</t>",_tS];
|
||||
PUSH(_pary,_tS);
|
||||
for "_j" from 0 to (count _cSys) - 1 do {
|
||||
_c = _cSys select _j;
|
||||
_tC = configName _c;
|
||||
_tC = [_tC, "_", " "] call CBA_fnc_replace;
|
||||
//key
|
||||
_key = getNumber (_c/"key");
|
||||
_shift = getNumber (_c/"shift");
|
||||
_ctrl = getNumber (_c/"ctrl");
|
||||
_alt = getNumber (_c/"alt");
|
||||
_keyn = [_key,_shift,_ctrl,_alt] call _pkeynam;
|
||||
_tC = format[" %1: %2",_tC,_keyn];
|
||||
PUSH(_pary,_tC);
|
||||
};
|
||||
};
|
||||
if (count _pary > 20) then { //split full page
|
||||
PUSH(_tpages,_pary);
|
||||
_pary = [];
|
||||
};
|
||||
};
|
||||
if (count _pary > 0) then { //partial page
|
||||
PUSH(_tpages,_pary);
|
||||
_pary = [];
|
||||
};
|
||||
_tpages
|
||||
};
|
||||
|
||||
//pages (make sure each will fit within 24 lines, word wrap is on)
|
||||
switch(_menu) do {
|
||||
case "MAIN": { //note: not all scripting commands available on main menu (not compiled yet?)
|
||||
_fadet = 13;
|
||||
_page1 = _pcredits;
|
||||
};
|
||||
case "SING": {
|
||||
_fadet = 20; //fade time
|
||||
_color = [1,1,1,1];
|
||||
//_bcolor = [0,0,0,0.3];
|
||||
_page1 = _pcredits;
|
||||
_newpages = [] call _pkeys;
|
||||
_pstart = 2;
|
||||
_pcount = count _newpages;
|
||||
_pnext = _pstart + _pcount;
|
||||
};
|
||||
case "MULT": {
|
||||
_fadet = 20;
|
||||
_color = [1,1,1,1];
|
||||
//_bcolor = [0,0,0,0.3];
|
||||
_page1 = _pcredits;
|
||||
_newpages = [] call _pkeys;
|
||||
_pstart = 2;
|
||||
_pcount = count _newpages;
|
||||
_pnext = _pstart + _pcount;
|
||||
};
|
||||
default {};
|
||||
};
|
||||
|
||||
//main menu display
|
||||
if (typeName(_data select 0) == "DISPLAY") then {
|
||||
_display = _data select 0;
|
||||
};
|
||||
|
||||
if (typeName(_data select 0) == "CONTROL") then {
|
||||
_control = _data select 0;
|
||||
_display = ctrlParent _control;
|
||||
};
|
||||
|
||||
//dynamic pages
|
||||
_pnames = [];
|
||||
for "_x" from _pstart to _pnext - 1 do {
|
||||
_pnam = format ["_page%1",_x];
|
||||
PUSH(_pnames,_pnam);
|
||||
};
|
||||
private _pnames;
|
||||
for "_x" from 0 to _pcount - 1 do {
|
||||
call compile format ["%1 = %2", _pnames select _x, _newpages select _x];
|
||||
};
|
||||
|
||||
//get num pages
|
||||
_pages = 0;
|
||||
_run = true;
|
||||
while {_run} do {
|
||||
INC(_pages);
|
||||
if (isNil format ["_page%1", _pages]) exitWith {_pages = _pages - 1; _run = false};
|
||||
};
|
||||
|
||||
if (_pages > 0) then {
|
||||
//Dialog
|
||||
createDialog "ACE_ABOUT_DLG";
|
||||
_disp = uiNamespace getVariable "ACE_ABOUT_DLG";
|
||||
_ctrl = _disp displayCtrl 1141371;
|
||||
_next = _disp displayCtrl 1141372;
|
||||
|
||||
if (_pages > 1) then {_next ctrlSetText "Next"};
|
||||
|
||||
_ctrl ctrlSetFade 1;
|
||||
_ctrl ctrlCommit 0;
|
||||
_ctrl ctrlSetFade 0;
|
||||
_ctrl ctrlCommit 3;
|
||||
|
||||
ACE_ABOUT_INC = 0;
|
||||
_input = { //local function
|
||||
_nesc = isNil "ACE_ABOUT_STP";
|
||||
if (_pages == 1) then {ACE_ABOUT_INC = 0}; //ignore special control
|
||||
_unset = (ACE_ABOUT_INC == 0) && ACE_ABOUT_RUN;
|
||||
if (_unset && _nesc) then {false} else {_fadet = _fadet + 5; true};
|
||||
};
|
||||
|
||||
//by default cycle
|
||||
for "_p" from 1 to _pages do {
|
||||
_text = "";
|
||||
_page = call compile format["_page%1",_p];
|
||||
_curPage = _p;
|
||||
{
|
||||
_text = _text + _x + "<br />";
|
||||
_ctrl ctrlSetStructuredText parseText _text;
|
||||
if (call _input) exitWith {_p = _pages};
|
||||
if (_x != "") then {uisleep 0.8};
|
||||
} forEach _page;
|
||||
};
|
||||
|
||||
_run = true;
|
||||
while {if (isNil "ACE_ABOUT_STP") then {_run} else {false}} do {
|
||||
_ctrl ctrlSetFade 0;
|
||||
_ctrl ctrlCommit 0;
|
||||
if (!isNil "_color") then {_ctrl ctrlSetTextColor _color};
|
||||
if (!isNil "_bcolor") then {_ctrl ctrlSetBackgroundColor _bcolor};
|
||||
|
||||
_curPage = _curPage + ACE_ABOUT_INC;
|
||||
if (_curPage > _pages) then {_curPage = 1};
|
||||
if (_curPage <= 0) then {_curPage = 1};
|
||||
ACE_ABOUT_INC = 0;
|
||||
|
||||
if (!ACE_ABOUT_RUN) then {ACE_ABOUT_RUN = true};
|
||||
|
||||
_text = "";
|
||||
_page = call compile format ["_page%1",_curPage];
|
||||
{_text = _text + _x + "<br />"} forEach _page;
|
||||
_ctrl ctrlSetStructuredText parseText _text;
|
||||
|
||||
_ctrl ctrlSetFade 1;
|
||||
_ctrl ctrlCommit _fadet;
|
||||
|
||||
_time = time + _fadet + 2;
|
||||
waitUntil{uisleep 1; _run = call _input; _faded = time > _time; (_run || _faded)};
|
||||
}; //while RUN
|
||||
};
|
||||
ACE_ABOUT_STP = Nil;
|
||||
ACE_ABOUT_RUN = Nil;
|
||||
#include "script_component.hpp"
|
||||
#include "\z\ace\addons\main\script_common.hpp"
|
||||
|
||||
if (!isNil "ACE_ABOUT_RUN") exitWith {ACE_ABOUT_RUN = false;};
|
||||
ACE_ABOUT_RUN = true;
|
||||
|
||||
disableSerialization;
|
||||
|
||||
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"];
|
||||
|
||||
_pcredits = [
|
||||
"",
|
||||
"<t align='center' color='#CC1100'>Advanced Combat Environment 2</t>",
|
||||
"<t align='center' color='#566D7E'>http://dev-heaven.net/projects/ace-mod2</t>",
|
||||
"",
|
||||
__cr_managers,
|
||||
"",
|
||||
__cr_devs,
|
||||
"",
|
||||
__cr_testers,
|
||||
"",
|
||||
"For a full list of acknowledgements, please visit our Wiki:",
|
||||
"<t color='#566D7E'>http://ace.dev-heaven.net</t>"
|
||||
];
|
||||
|
||||
_pkeynam = { //local function
|
||||
_shift = if (_shift > 0) then {42} else {0};
|
||||
_ctrl = if (_ctrl > 0) then {56} else {0};
|
||||
_alt = if (_alt > 0) then {29} else {0};
|
||||
_keys = [_shift,_ctrl,_alt,_key];
|
||||
_keystrg = "^";
|
||||
{
|
||||
_mod = _x in [42,56,29];
|
||||
_knaml = call compile format["format['%2',%1]",(keyName _x),"%1"];
|
||||
_knaml = [_knaml, " "] call CBA_fnc_split;
|
||||
_knam = "^";
|
||||
{_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;
|
||||
_keystrg = _keystrg + "-" + _knam;
|
||||
} forEach _keys;
|
||||
_keystrg = [_keystrg, "^ ", ""] call CBA_fnc_replace;
|
||||
_keystrg = [_keystrg, "^-", ""] call CBA_fnc_replace;
|
||||
_keystrg = [_keystrg, "^", "None"] call CBA_fnc_replace;
|
||||
_keystrg
|
||||
};
|
||||
_pkeys = {
|
||||
_pary = [];
|
||||
_tpages = [];
|
||||
_cEvents = configFile/"CfgSettings"/"CBA"/"events";
|
||||
for "_i" from 0 to (count _cEvents) - 1 do {
|
||||
_cSys = _cEvents select _i;
|
||||
_tSys = configName _cSys;
|
||||
if (isNumber ((_cSys select 0)/"key")) then {
|
||||
//format system name
|
||||
_aSys = [_tSys, "_"] call CBA_fnc_split;
|
||||
_tS = "^";
|
||||
{if (_x != "ace" && _x != "sys") then {_tS = _tS + " " + _x}} forEach _aSys;
|
||||
_tS = [_tS, "^ ", ""] call CBA_fnc_replace;
|
||||
_tS = format["<t color='#99cccc'>%1:</t>",_tS];
|
||||
PUSH(_pary,_tS);
|
||||
for "_j" from 0 to (count _cSys) - 1 do {
|
||||
_c = _cSys select _j;
|
||||
_tC = configName _c;
|
||||
_tC = [_tC, "_", " "] call CBA_fnc_replace;
|
||||
//key
|
||||
_key = getNumber (_c/"key");
|
||||
_shift = getNumber (_c/"shift");
|
||||
_ctrl = getNumber (_c/"ctrl");
|
||||
_alt = getNumber (_c/"alt");
|
||||
_keyn = [_key,_shift,_ctrl,_alt] call _pkeynam;
|
||||
_tC = format[" %1: %2",_tC,_keyn];
|
||||
PUSH(_pary,_tC);
|
||||
};
|
||||
};
|
||||
if (count _pary > 20) then { //split full page
|
||||
PUSH(_tpages,_pary);
|
||||
_pary = [];
|
||||
};
|
||||
};
|
||||
if (count _pary > 0) then { //partial page
|
||||
PUSH(_tpages,_pary);
|
||||
_pary = [];
|
||||
};
|
||||
_tpages
|
||||
};
|
||||
|
||||
//pages (make sure each will fit within 24 lines, word wrap is on)
|
||||
switch(_menu) do {
|
||||
case "MAIN": { //note: not all scripting commands available on main menu (not compiled yet?)
|
||||
_fadet = 13;
|
||||
_page1 = _pcredits;
|
||||
};
|
||||
case "SING": {
|
||||
_fadet = 20; //fade time
|
||||
_color = [1,1,1,1];
|
||||
//_bcolor = [0,0,0,0.3];
|
||||
_page1 = _pcredits;
|
||||
_newpages = [] call _pkeys;
|
||||
_pstart = 2;
|
||||
_pcount = count _newpages;
|
||||
_pnext = _pstart + _pcount;
|
||||
};
|
||||
case "MULT": {
|
||||
_fadet = 20;
|
||||
_color = [1,1,1,1];
|
||||
//_bcolor = [0,0,0,0.3];
|
||||
_page1 = _pcredits;
|
||||
_newpages = [] call _pkeys;
|
||||
_pstart = 2;
|
||||
_pcount = count _newpages;
|
||||
_pnext = _pstart + _pcount;
|
||||
};
|
||||
default {};
|
||||
};
|
||||
|
||||
//main menu display
|
||||
if (typeName(_data select 0) == "DISPLAY") then {
|
||||
_display = _data select 0;
|
||||
};
|
||||
|
||||
if (typeName(_data select 0) == "CONTROL") then {
|
||||
_control = _data select 0;
|
||||
_display = ctrlParent _control;
|
||||
};
|
||||
|
||||
//dynamic pages
|
||||
_pnames = [];
|
||||
for "_x" from _pstart to _pnext - 1 do {
|
||||
_pnam = format ["_page%1",_x];
|
||||
PUSH(_pnames,_pnam);
|
||||
};
|
||||
private _pnames;
|
||||
for "_x" from 0 to _pcount - 1 do {
|
||||
call compile format ["%1 = %2", _pnames select _x, _newpages select _x];
|
||||
};
|
||||
|
||||
//get num pages
|
||||
_pages = 0;
|
||||
_run = true;
|
||||
while {_run} do {
|
||||
INC(_pages);
|
||||
if (isNil format ["_page%1", _pages]) exitWith {_pages = _pages - 1; _run = false};
|
||||
};
|
||||
|
||||
if (_pages > 0) then {
|
||||
//Dialog
|
||||
createDialog "ACE_ABOUT_DLG";
|
||||
_disp = uiNamespace getVariable "ACE_ABOUT_DLG";
|
||||
_ctrl = _disp displayCtrl 1141371;
|
||||
_next = _disp displayCtrl 1141372;
|
||||
|
||||
if (_pages > 1) then {_next ctrlSetText "Next"};
|
||||
|
||||
_ctrl ctrlSetFade 1;
|
||||
_ctrl ctrlCommit 0;
|
||||
_ctrl ctrlSetFade 0;
|
||||
_ctrl ctrlCommit 3;
|
||||
|
||||
ACE_ABOUT_INC = 0;
|
||||
_input = { //local function
|
||||
_nesc = isNil "ACE_ABOUT_STP";
|
||||
if (_pages == 1) then {ACE_ABOUT_INC = 0}; //ignore special control
|
||||
_unset = (ACE_ABOUT_INC == 0) && ACE_ABOUT_RUN;
|
||||
if (_unset && _nesc) then {false} else {_fadet = _fadet + 5; true};
|
||||
};
|
||||
|
||||
//by default cycle
|
||||
for "_p" from 1 to _pages do {
|
||||
_text = "";
|
||||
_page = call compile format["_page%1",_p];
|
||||
_curPage = _p;
|
||||
{
|
||||
_text = _text + _x + "<br />";
|
||||
_ctrl ctrlSetStructuredText parseText _text;
|
||||
if (call _input) exitWith {_p = _pages};
|
||||
if (_x != "") then {uisleep 0.8};
|
||||
} forEach _page;
|
||||
};
|
||||
|
||||
_run = true;
|
||||
while {if (isNil "ACE_ABOUT_STP") then {_run} else {false}} do {
|
||||
_ctrl ctrlSetFade 0;
|
||||
_ctrl ctrlCommit 0;
|
||||
if (!isNil "_color") then {_ctrl ctrlSetTextColor _color};
|
||||
if (!isNil "_bcolor") then {_ctrl ctrlSetBackgroundColor _bcolor};
|
||||
|
||||
_curPage = _curPage + ACE_ABOUT_INC;
|
||||
if (_curPage > _pages) then {_curPage = 1};
|
||||
if (_curPage <= 0) then {_curPage = 1};
|
||||
ACE_ABOUT_INC = 0;
|
||||
|
||||
if (!ACE_ABOUT_RUN) then {ACE_ABOUT_RUN = true};
|
||||
|
||||
_text = "";
|
||||
_page = call compile format ["_page%1",_curPage];
|
||||
{_text = _text + _x + "<br />"} forEach _page;
|
||||
_ctrl ctrlSetStructuredText parseText _text;
|
||||
|
||||
_ctrl ctrlSetFade 1;
|
||||
_ctrl ctrlCommit _fadet;
|
||||
|
||||
_time = time + _fadet + 2;
|
||||
waitUntil{uisleep 1; _run = call _input; _faded = time > _time; (_run || _faded)};
|
||||
}; //while RUN
|
||||
};
|
||||
ACE_ABOUT_STP = Nil;
|
||||
ACE_ABOUT_RUN = Nil;
|
||||
closeDialog 0;
|
File diff suppressed because it is too large
Load Diff
@ -1,92 +1,92 @@
|
||||
License (short)
|
||||
===============
|
||||
|
||||
You are free:
|
||||
- to Share — to copy, distribute and transmit the work
|
||||
|
||||
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).
|
||||
- Noncommercial — You may not use this work for commercial purposes.
|
||||
- No Derivative Works — You may not alter, transform, or build upon this work.
|
||||
|
||||
With the understanding that:
|
||||
|
||||
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.
|
||||
|
||||
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;
|
||||
- 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.
|
||||
|
||||
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
|
||||
=================
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
"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.
|
||||
"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.
|
||||
"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.
|
||||
"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.
|
||||
|
||||
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.
|
||||
|
||||
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:
|
||||
|
||||
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).
|
||||
|
||||
4. 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 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.
|
||||
|
||||
For the avoidance of doubt:
|
||||
|
||||
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;
|
||||
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).
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
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.
|
||||
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.
|
||||
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.
|
||||
License (short)
|
||||
===============
|
||||
|
||||
You are free:
|
||||
- to Share — to copy, distribute and transmit the work
|
||||
|
||||
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).
|
||||
- Noncommercial — You may not use this work for commercial purposes.
|
||||
- No Derivative Works — You may not alter, transform, or build upon this work.
|
||||
|
||||
With the understanding that:
|
||||
|
||||
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.
|
||||
|
||||
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;
|
||||
- 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.
|
||||
|
||||
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
|
||||
=================
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
"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.
|
||||
"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.
|
||||
"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.
|
||||
"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.
|
||||
|
||||
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.
|
||||
|
||||
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:
|
||||
|
||||
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).
|
||||
|
||||
4. 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 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.
|
||||
|
||||
For the avoidance of doubt:
|
||||
|
||||
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;
|
||||
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).
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
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.
|
||||
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.
|
||||
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.
|
||||
|
@ -1,92 +1,92 @@
|
||||
License (short)
|
||||
===============
|
||||
|
||||
You are free:
|
||||
- to Share — to copy, distribute and transmit the work
|
||||
|
||||
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).
|
||||
- Noncommercial — You may not use this work for commercial purposes.
|
||||
- No Derivative Works — You may not alter, transform, or build upon this work.
|
||||
|
||||
With the understanding that:
|
||||
|
||||
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.
|
||||
|
||||
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;
|
||||
- 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.
|
||||
|
||||
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
|
||||
=================
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
"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.
|
||||
"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.
|
||||
"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.
|
||||
"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.
|
||||
|
||||
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.
|
||||
|
||||
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:
|
||||
|
||||
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).
|
||||
|
||||
4. 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 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.
|
||||
|
||||
For the avoidance of doubt:
|
||||
|
||||
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;
|
||||
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).
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
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.
|
||||
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.
|
||||
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.
|
||||
License (short)
|
||||
===============
|
||||
|
||||
You are free:
|
||||
- to Share — to copy, distribute and transmit the work
|
||||
|
||||
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).
|
||||
- Noncommercial — You may not use this work for commercial purposes.
|
||||
- No Derivative Works — You may not alter, transform, or build upon this work.
|
||||
|
||||
With the understanding that:
|
||||
|
||||
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.
|
||||
|
||||
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;
|
||||
- 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.
|
||||
|
||||
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
|
||||
=================
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
"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.
|
||||
"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.
|
||||
"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.
|
||||
"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.
|
||||
|
||||
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.
|
||||
|
||||
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:
|
||||
|
||||
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).
|
||||
|
||||
4. 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 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.
|
||||
|
||||
For the avoidance of doubt:
|
||||
|
||||
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;
|
||||
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).
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
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.
|
||||
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.
|
||||
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.
|
||||
|
@ -1,3 +1,3 @@
|
||||
#define __cr_managers "Manager: "
|
||||
#define __cr_devs "Developer:"
|
||||
#define __cr_testers "Contributor: "
|
||||
#define __cr_managers "Manager: "
|
||||
#define __cr_devs "Developer:"
|
||||
#define __cr_testers "Contributor: "
|
||||
|
@ -1,14 +1,14 @@
|
||||
#define COMPONENT main
|
||||
#include "\z\ace\addons\main\script_mod.hpp"
|
||||
|
||||
// #define DEBUG_MODE_FULL
|
||||
|
||||
#ifdef DEBUG_ENABLED_CORE
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SETTINGS_CORE
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_CORE
|
||||
#endif
|
||||
|
||||
#include "\z\ace\addons\main\script_macros.hpp"
|
||||
#define COMPONENT main
|
||||
#include "\z\ace\addons\main\script_mod.hpp"
|
||||
|
||||
// #define DEBUG_MODE_FULL
|
||||
|
||||
#ifdef DEBUG_ENABLED_CORE
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SETTINGS_CORE
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_CORE
|
||||
#endif
|
||||
|
||||
#include "\z\ace\addons\main\script_macros.hpp"
|
||||
|
@ -1,43 +1,43 @@
|
||||
#define true 1
|
||||
#define false 0
|
||||
|
||||
#define private 0
|
||||
#define protected 1
|
||||
#define public 2
|
||||
|
||||
#define TEast 0
|
||||
#define TWest 1
|
||||
#define TGuerrila 2
|
||||
#define TCivilian 3
|
||||
#define TSideUnknown 4
|
||||
#define TEnemy 5
|
||||
#define TFriendly 6
|
||||
#define TLogic 7
|
||||
|
||||
#define VSoft 0
|
||||
#define VArmor 1
|
||||
#define VAir 2
|
||||
|
||||
#define LockNo 0
|
||||
#define LockCadet 1
|
||||
#define LockYes 2
|
||||
|
||||
#define ReadAndWrite 0
|
||||
#define ReadAndCreate 1
|
||||
#define ReadOnly 2
|
||||
#define ReadOnlyVerified 3
|
||||
|
||||
#define WeaponNoSlot 0 // dummy weapons
|
||||
#define WeaponSlotPrimary 1 // primary weapons
|
||||
#define WeaponSlotSecondary 16 // secondary weapons
|
||||
#define WeaponSlotItem 256 // items
|
||||
#define WeaponSlotBinocular 4096 // binocular
|
||||
#define WeaponHardMounted 65536
|
||||
|
||||
#define CanSeeRadar 1
|
||||
#define CanSeeRye 2
|
||||
#define CanSeeOptics 4
|
||||
#define CanSeeEar 4
|
||||
#define CanSeeCompass 16
|
||||
#define CanSeeRadarC CanSeeRadar+CanSeeCompass
|
||||
#define CanSeeAll 31
|
||||
#define true 1
|
||||
#define false 0
|
||||
|
||||
#define private 0
|
||||
#define protected 1
|
||||
#define public 2
|
||||
|
||||
#define TEast 0
|
||||
#define TWest 1
|
||||
#define TGuerrila 2
|
||||
#define TCivilian 3
|
||||
#define TSideUnknown 4
|
||||
#define TEnemy 5
|
||||
#define TFriendly 6
|
||||
#define TLogic 7
|
||||
|
||||
#define VSoft 0
|
||||
#define VArmor 1
|
||||
#define VAir 2
|
||||
|
||||
#define LockNo 0
|
||||
#define LockCadet 1
|
||||
#define LockYes 2
|
||||
|
||||
#define ReadAndWrite 0
|
||||
#define ReadAndCreate 1
|
||||
#define ReadOnly 2
|
||||
#define ReadOnlyVerified 3
|
||||
|
||||
#define WeaponNoSlot 0 // dummy weapons
|
||||
#define WeaponSlotPrimary 1 // primary weapons
|
||||
#define WeaponSlotSecondary 16 // secondary weapons
|
||||
#define WeaponSlotItem 256 // items
|
||||
#define WeaponSlotBinocular 4096 // binocular
|
||||
#define WeaponHardMounted 65536
|
||||
|
||||
#define CanSeeRadar 1
|
||||
#define CanSeeRye 2
|
||||
#define CanSeeOptics 4
|
||||
#define CanSeeEar 4
|
||||
#define CanSeeCompass 16
|
||||
#define CanSeeRadarC CanSeeRadar+CanSeeCompass
|
||||
#define CanSeeAll 31
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user