/* By Ghostrider-GRG- -------------------------- License -------------------------- All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License. http://creativecommons.org/licenses/by-nc-sa/4.0/ */ #include "\q\addons\custom_server\Configs\blck_defines.hpp"; diag_log format["[blckeagls] blck_init_server started"]; // Only run this on a dedicated server if ( !(isServer) || hasInterface) exitWith{}; // Only run this once if !(isNil "blck_Initialized") exitWith{}; // This is just a flag so we know if blckeagls has been started or not. blck_Initialized = true; // find and set Mod blck_modType = ""; if (!isNull (configFile >> "CfgPatches" >> "exile_server")) then {blck_modType = "Exile"}; if (!isnull (configFile >> "CfgPatches" >> "a3_epoch_server")) then {blck_modType = "Epoch"}; if (!(blck_modType in ["Exile","Epoch"] )) then {blck_modType = "default"}; diag_log format["[blckeagls] blck_modType = %1",blck_modtype]; publicVariable "blck_modType"; // This block waits for the mod to start but is disabled for now if ((tolower blck_modType) isEqualto "epoch") then { diag_log "[blckeagls] Waiting until EpochMod is ready..."; //waituntil {!isnil "EPOCH_SERVER_READY"}; diag_log "[blckeagls] EpochMod is ready...loading blckeagls"; }; if ((toLower blck_modType) isEqualTo "exile") then { diag_log "[blckeagls] Waiting until ExileMod is ready ..."; //waitUntil {!PublicServerIsLoaded}; diag_log "[blckeagls] Exilemod is ready...loading blckeagls"; }; if ((toLower blck_modType) isEqualTo "default") then { diag_log "[blckeagls] Configuring Mission System for Default Settings..."; }; // Just some housekeeping for ghost. private _blck_loadingStartTime = diag_tickTime; #include "\q\addons\custom_server\init\build.sqf"; //diag_log format["[blckeagls] build information loaded at %1",diag_tickTime]; // compile functions [] call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\blck_functions.sqf"; //diag_log format["[blckeagls] functions compiled at %1",diag_tickTime]; [] call compile preprocessfilelinenumbers "\q\addons\custom_server\Configs\blck_configs.sqf"; if (blck_debugOn) then {diag_log format["[blckeagls] blck_configs.sqf run at %1",diag_tickTime]}; waitUntil{(!isNil "blck_useHC") && (!isNil "blck_simulationManager") && (!isNil "blck_debugOn") && (!isNil "blck_AI_Side")}; uiSleep 10; if (blck_debugOn) then {diag_log format["[blckeagls] blck_AI_Side = %1",blck_AI_Side]}; // Load any user-defined specifications or overrides #include "\q\addons\custom_server\Configs\blck_custom_config.sqf"; diag_log format["[blckeagls] Custom Configurations Loaded at %1",diag_tickTime]; diag_log format["[blckeagls] debug mode settings:blck_debugON = %1 | blck_debugLevel = %2",blck_debugON,blck_debugLevel]; // blck_customConfigsLoaded diag_log format["[blckeagls] blck_customConfigsLoaded = %1",if(isNil "blck_customConfigsLoaded") then {"nil"} else {blck_customConfigsLoaded}]; //diag_log format["[blckeagls] blck_CUPWeapons = %1",if(isNil "blck_CUPWeapons") then {"nil"} else {blck_CUPWeapons}]; // Load vaariables used to store information for the mission system. [] call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\blck_variables.sqf"; if (blck_debugOn) then {diag_log format["[blckeagls] Variables loaded at %1",diag_tickTime]}; // configure dynamic simulation management is this is being used. if (blck_simulationManager == 2) then { "Group" setDynamicSimulationDistance 1800; enableDynamicSimulationSystem true; }; // spawn map addons to give the server time to position them before spawning in crates etc. if (blck_spawnMapAddons) then { call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\MapAddons\MapAddons_init.sqf"; }else{ diag_log "[blckeagls] Map Addons disabled"; }; // find and set Mapcenter and size call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\init\GMS_fnc_findWorld.sqf"; if (blck_debugOn) then {diag_log "[blckeagls] Map-specific information defined"}; // set up the lists of available missions for each mission category #include "\q\addons\custom_server\Missions\GMS_missionLists.sqf"; if (blck_debugOn) then {diag_log "[blckeagls] Mission Lists Loaded Successfully"}; call compile preprocessfilelinenumbers "\q\addons\custom_server\Missions\Static\GMS_StaticMissions_init.sqf"; call compile preprocessfilelinenumbers "q\addons\custom_server\Missions\UMS\GMS_UMS_init.sqf"; // loads functions and spawns any static missions. diag_log "[blckeagls] blck_init_server: ->> Static and UMS systems initialized."; switch (blck_simulationManager) do { case 2: {diag_log "[blckeagls] dynamic simulation manager enabled"}; case 1: {diag_log "[blckeagls] blckeagls simulation manager enabled"}; case 0: {diag_log "[blckeagls] simulation management disabled"}; }; diag_log format["[blckeagls] version %1 Build %2 Loaded in %3 seconds",blck_versionNumber,blck_buildNumber,diag_tickTime - _blck_loadingStartTime]; //,blck_modType]; diag_log format["[blckeagls] waiting for players to join ---- >>>>"]; if ( !(blck_debugON) && (blck_debugLevel isEqualTo 0)) then { waitUntil{{isPlayer _x}count allPlayers > 0}; diag_log "[blckeagls] Player Connected, spawning missions"; } else { diag_log "[blckeagls] Debug mode ON, proceding without players"; }; if (blck_spawnStaticLootCrates) then { [] spawn compile preprocessfilelinenumbers "\q\addons\custom_server\SLS\SLS_init.sqf"; diag_log "[blckeagls] SLS:: -- >> Static Loot Spawner Done"; }else{ diag_log "[blckeagls] SLS:: -- >> Static Loot Spawner disabled"; }; if (blck_blacklistTraderCities) then { [] spawn compile preprocessfilelinenumbers "\q\addons\custom_server\init\GMS_fnc_getTraderCites.sqf"; }; if (blck_ai_offload_to_client) then { if (blck_useHC) then { blck_useHC = false; diag_log "[blckeagls] <WARNING> blck_useHC has been diabled to allow offloading to clients"; }; // Broadcast some code to clients publicVariable "blck_fnc_setNextWaypoint"; publicVariable "blck_EH_unitWeaponReloaded"; publicVariable "blck_EH_AIfiredNear"; publicVariable "blck_fnc_processAIfiredNear"; publicVariable "blck_EH_vehicleGetOut"; publicVariable "blck_fnc_handleVehicleGetOut"; publicVariable "blck_EH_vehicleManGetOut"; publicVariable "blck_fnc_checkForEmptyVehicle"; publicVariable "blck_fnc_handleEmptyVehicle"; publicVariable "blck_fnc_unlockVehicle"; publicVariable "blck_EH_AIKilled"; publicVariable "blck_fnc_processAIKill"; }; _fn_setupLocationType = { params[ "_locationType"]; private _locations = nearestLocations [getArray (configFile >> "CfgWorlds" >> worldName >> "centerPosition"), [_locationType], worldSize]; _locations }; private _villages = ["NameVillage"] call _fn_setupLocationType; private _cites = ["NameCity"] call _fn_setupLocationType; private _capitals = ["NameCityCapital"] call _fn_setupLocationType; private _marine = ["NameMarine"] call _fn_setupLocationType; private _other = ["NameLocal"] call _fn_setupLocationType; private _airport = ["Airport"] call _fn_setupLocationType; blck_townLocations = _villages + _cites + _capitals + _marine + _other + _airport; { blck_locationBlackList pushBack [locationPosition _x, blck_minDistanceFromTowns]; } forEach blck_townLocations; //Start the mission timers if (blck_enableOrangeMissions > 0) then { [_missionListOrange,_pathOrange,"OrangeMarker","orange",blck_TMin_Orange,blck_TMax_Orange,blck_enableOrangeMissions] call blck_fnc_addMissionToQue; }; if (blck_enableGreenMissions > 0) then { [_missionListGreen,_pathGreen,"GreenMarker","green",blck_TMin_Green,blck_TMax_Green,blck_enableGreenMissions] call blck_fnc_addMissionToQue; }; if (blck_enableRedMissions > 0) then { [_missionListRed,_pathRed,"RedMarker","red",blck_TMin_Red,blck_TMax_Red,blck_enableRedMissions] call blck_fnc_addMissionToQue; }; if (blck_enableBlueMissions > 0) then { [_missionListBlue,_pathBlue,"BlueMarker","blue",blck_TMin_Blue,blck_TMax_Blue,blck_enableBlueMissions] call blck_fnc_addMissionToQue; }; // Setup a group for AI corpses blck_graveyardGroup = createGroup [blck_AI_Side,false]; blck_graveyardGroup setGroupId ["blck_graveyard"]; blck_graveyardGroup setVariable ["blck_group",1]; // start the main thread for the mission system which monitors missions running and stuff to be cleaned up [] spawn blck_fnc_mainThread; blck_pvs_version = blck_versionNumber; publicVariable "blck_pvs_version"; diag_log format["[blckeagls] version %1 Build %2 Date %4 Loaded in %3 seconds",blck_versionNumber,blck_buildNumber,diag_tickTime - _blck_loadingStartTime,blck_buildDate]; //,blck_modType]; /* if (blck_debugOn || (blck_debugLevel >= 1)) then { private _pos = [] call blck_fnc_findSafePosn; private _root = ""; private _path = "Orange"; private _mission = "officeComplex"; //"bunkerMission"; private _compiledMission = compilefinal preprocessFileLineNumbers format["\q\addons\custom_server\Missions\%1\%2.sqf",_path,_mission]; diag_log format["[blckeagls] mission test sequence run for mission path %1 name %2",_path,_mission]; [_pos,"testMarkerGRG","blue"] spawn _compiledMission; diag_log format["testmarker mission spawned at %1",diag_tickTime]; { diag_log format["<GRG-TEST.Here are some settings: %1 = %2", ['blck_MinDistanceFromMission','blck_minDistanceToBases','blck_minDistanceToPlayer','blck_minDistanceFromTowns'] select _forEachIndex,_x]; } forEach [blck_MinDistanceFromMission,blck_minDistanceToBases,blck_minDistanceToPlayer,blck_minDistanceFromTowns]; }; */