Update local_lights_init.sqf

Lots.. :D
This commit is contained in:
Andrew Gregory
2013-09-11 00:37:53 +01:00
parent d82bf40d16
commit fd4841d406

View File

@@ -2,30 +2,33 @@
DayZ Epoch Lighting System - Light Control
Made for DayZ Epoch please ask permission to use/edit/distrubute email axeman@thefreezer.co.uk.
To Do - Tidy up decision logic | light poles ? | player movement detection currently removed, need to deal with newly started generators | Tidy up tower light code
To Do - Light poles - Automatic lighting for bases (with or without generator) - Menu action to switch off house and tower lights
Wishlist - Detect weather to make lights fail in thunder :)
*/
private ["_nrGen","_rndLights","_genClass","_i","_doHouse","_doStreet","_doTower","_doLight","_fnHr","_stHr","_plyr","_hndlSLights","_hndlHLights","_hndlTLights","_hndlDelLights","_hndlFailLights","_tmpPlyrPos","_ndGen","_trgRng","_rngPlyr","_arrStreetLights","_rtnLights","_wait","_waitcmd","_waitCount","_trigDist","_lightTrig","_lmpCol","_failPcnt"];
private ["_sleep","_lpRange","_nrGen","_genCount","_rndLightsIn","_rndLightsOut","_genClass","_i","_doHouse","_doStreet","_doTower","_doLight","_fnHr","_stHr","_plyr","_hndlSLights","_hndlHLights","_hndlTLights","_hndlDelLights","_hndlFailLights","_tmpPlyrPos","_ndGen","_trgRng","_rngPlyr","_arrStreetLights","_wait","_waitcmd","_waitCount","_trigDist","_lightTrig","_lmpCol"];
_stHr = _this select 0;//Hour (in 24 hours) to start lights
_fnHr = _this select 1;//Hour (in 24 hours) to stop lights
waitUntil {(daytime<_fnHr||daytime>_stHr)};
_doHouse = _this select 2;//House Lights ?
_doStreet = _this select 3;//Street Lights ?
_doStreet = _this select 3;//Street Lights ? Currently default to false as server search code handles built in streetlights. Can be switched on, will add an additional routine deciding if to switch streetlights on or off based on _rndLightsIn..?
_doTower = _this select 4;// Tower Lights ?
_ndGen = _this select 5;//Require a Generator ?
_rndLights = _this select 6;//Add a chance for lights to come on as a precentage. 100 = always on.. Use this to reduce frequency of lights, designed for no generator but will work with either option
_rndLightsIn = _this select 6;//Add a chance for lights to come on as a precentage. 100 = always on.. Use this to reduce frequency of lights, uses the opposite value to delete / fail lights..
_trgRng = _this select 7;//Range from trigger (generator or player) to light up objects.
_rngPlyr = _this select 8;//Distance from player to search for generators.
_trigDist = _this select 9;//Distance that player needs to move to trigger the routine.
_lmpCol = _this select 10;//Change Street Lamp Colour
_genClass = _this select 11;//Generator class. NB. Is Epcoh specific as variable
_rngPlyr = _this select 8;//Distance from player to search for generators. If Generator not required distance to light objects (generally (: )
_trigDist = _this select 9;//Distance that player needs to move to trigger the routine. (NOT USED CURRENTLY)
_lmpCol = _this select 10;//Change House Light Colour. Streetlamps now set in config, not editable at runtime.
_genClass = _this select 11;//Generator class. Any (client viewable) Object with variable "GeneratorRunning" set to true will suffice.
_lpRange = _this select 12;//Range to create lightpoints (from player). And delete beyond (for houses only).
_sleep = _this select 14;//Sleep time - Code cycles too quickly to be realistic. Increasing _trgRng and/or _rngPlyr will have a similar effect but will cost in processing time..
_tmpPlyrPos = [0,0,0];
_wait = [];
_doLight = true;
_nrGen = [];
_failPcnt = 42;//Percentage to fail house lights
_genCount = 0;
_lightTrig = [];//Central point around which to run the lights - _trigDist is calculated from the position of this entity (player or generator)
call compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_lightFunctions.sqf";
axeTowerLights = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\local_lights_tower.sqf";
@@ -41,40 +44,44 @@ do
_plyr = vehicle player;
_waitCount = 0;
if(_ndGen)then{
_rndLightsOut = _rndLightsIn;
_nrGen = nearestObjects [_plyr, [_genClass], _rngPlyr];
_lightTrig = _nrGen;
}else{
_lightTrig = [_plyr];
_nrGen = [];
};
_genCount = count _nrGen;
if(_ndGen)then{_lightTrig = _nrGen;}else{_lightTrig = [_plyr];};
//Logic to decide if lights to be done or not
if(_ndGen && (count _nrGen)<1)then{_doLight = false;}else{_doLight=true;};//Nearby Generator ?
if(_ndGen && _genCount<1)then{_doLight = false;}else{_doLight=true;};//Nearby Generator ?
if(!_ndGen)then{_doLight = true;};//Generator not required !
//Make lights reliable if generator running (for non generator requirement)
if(!_ndGen)then{
if(_genCount>0&&((_nrGen select 0) getVariable["GeneratorRunning",false]))then{
_rndLightsOut = 100;
};
};
{
if(_ndGen && !(_x getVariable["GeneratorRunning",false]))then{_doLight = false;};//Final check - Not run if nearest gen isn't running
//Get streetlight objects anyway, will turn on streetlights and randomly switch some off.
_arrStreetLights = [_trgRng,_x,_rndLightsOut] call axe_returnStreetLights;
if(_doLight)then{
_rtnLights = [_trgRng,_x] call axe_returnStreetLights;
_arrStreetLights = _rtnLights select 0;
_waitcmd="";
_wait=[];
if(_doTower)then{
_hndlTLights = [_trgRng,_x,_rndLights] spawn axeTowerLights;
_hndlTLights = [_trgRng,_x,_rndLightsOut] spawn axeTowerLights;
_waitCount=_waitCount+1;
[_wait , "scriptDone _hndlTLights"] call BIS_fnc_arrayPush;
};
if(_doHouse)then{
_hndlHLights = [_trgRng,_x,_rndLights,_lmpCol] spawn axeHouseLights;
_hndlHLights = [_rngPlyr,_x,_rndLightsOut,_lmpCol,_lpRange] spawn axeHouseLights;
_waitCount=_waitCount+1;
[_wait , "scriptDone _hndlHLights"] call BIS_fnc_arrayPush;
};
if(_doStreet)then{
_hndlSLights = [_arrStreetLights,_x,_lmpCol,_rndLights] spawn axeStreetLights;
_hndlSLights = [_arrStreetLights,_x,_lmpCol,_rndLightsOut] spawn axeStreetLights;
_waitCount=_waitCount+1;
[_wait , "scriptDone _hndlSLights"] call BIS_fnc_arrayPush;
};
@@ -85,15 +92,16 @@ do
if(_ndGen && !(_x getVariable["GeneratorRunning",false]))then{
//hint "Lights Off";
_hndlDelLights = [_trgRng,_x,false] spawn axeDeleteLights;
_hndlDelLights = [_rngPlyr,_x,false,_genCount,_lpRange] spawn axeDeleteLights;
waitUntil {scriptDone _hndlDelLights};
};
//Random Light Failure
if(_failPcnt>(random 100))then{
_hndlFailLights = [_trgRng,_x,true] spawn axeDeleteLights;
//Random Light Failure - Unless generator nearby
if(_rndLightsOut<random 100)then{
_hndlFailLights = [_rngPlyr,_x,true,_genCount,_lpRange] spawn axeDeleteLights;
waitUntil {scriptDone _hndlFailLights};
};
}forEach _lightTrig;
};
sleep _sleep;
};