#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 = [ "", "Advanced Combat Environment 2", "http://dev-heaven.net/projects/ace-mod2", "", __cr_managers, "", __cr_devs, "", __cr_testers, "", "For a full list of acknowledgements, please visit our Wiki:", "http://ace.dev-heaven.net" ]; _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["%1:",_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 + "
"; _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 + "
"} 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;