sreVbriefing.html]Qbriefing.sqf]QClient\Action\Action_Build.sqf]Q}Client\Action\Action_BuildRepair.sqf^QdClient\Action\Action_EjectCargo.sqf^QClient\Action\Action_HALO.sqf^QClient\Action\Action_Menu.sqf^QClient\Action\Action_Push.sqf^QClient\Action\Action_RepairCamp.sqf^Q Client\Action\Action_RepairMHQ.sqf_QClient\Action\Action_TaxiReverse.sqf_QClient\Action\Action_ToggleLock.sqf_QClient\Action\Action_ToggleMHQLock.sqf_QClient\Client_EndGame.sqf_QM Client\FSM\client_title_capture.fsm_QH#Client\FSM\conquest_helper.fsm`QClient\FSM\env_fast_time_cli.fsm`QClient\FSM\env_weather_cli.fsm`QQ Client\FSM\resources_cli.fsm`QClient\FSM\updateactions.fsm`Q(Client\FSM\updateavailableactions.fsm`QM9Client\FSM\updateclient.fsmaQClient\FSM\updatesalvage.fsmaQClient\FSM\updatesupply.fsmaQ#Client\FSM\updateteamsmarkers.fsmaQ Client\FSM\updatetownmarkers.fsmaQClient\Functions\Client_BuildUnit.sqfaQ+Client\Functions\Client_ChangePlayerFunds.sqfbQ)Client\Functions\Client_CommandChatMessage.sqfbQClient\Functions\Client_FNC_Groups.sqfbQ*Client\Functions\Client_FNC_Special.sqfbQjClient\Functions\Client_FX.sqfbQClient\Functions\Client_GetAIID.sqfbQ)Client\Functions\Client_GetBackpackContent.sqfcQClient\Functions\Client_GetClosestAirport.sqfcQClient\Functions\Client_GetClosestCamp.sqfcQrClient\Functions\Client_GetClosestDepot.sqfcQClient\Functions\Client_GetGearCargoSize.sqfcQOClient\Functions\Client_GetIncome.sqfdQClient\Functions\Client_GetMagazinesSize.sqfdQClient\Functions\Client_GetParsedGear.sqfdQClient\Functions\Client_GetPlayerFunds.sqfdQClient\Functions\Client_GetRespawnAvailable.sqfdQClient\Functions\Client_GetStructureMarkerLabel.sqfdQClient\Functions\Client_GetTime.sqfeQClient\Functions\Client_GetUnitBackpack.sqfeQClient\Functions\Client_GetVehicleCargoSize.sqfeQClient\Functions\Client_GetVehicleContent.sqfeQClient\Functions\Client_GroupChatMessage.sqfeQClient\Functions\Client_HandleHQAction.sqfeQClient\Functions\Client_HandleOnMap.sqffQClient\Functions\Client_HandlePVF.sqffQClient\Functions\Client_IsOnMap.sqffQClient\Functions\Client_MarkerAnim.sqffQPClient\Functions\Client_OnKilled.sqffQ| Client\Functions\Client_OnRespawnHandler.sqffQ Client\Functions\Client_OperateCargoGear.sqfgQClient\Functions\Client_PreRespawnHandler.sqfgQClient\Functions\Client_RemoveMagazineGear.sqfgQ Client\Functions\Client_ReplaceArray.sqfgQClient\Functions\Client_ReplaceMagazinesGear.sqfgQClient\Functions\Client_RequestFireMission.sqfgQClient\Functions\Client_SetControlFadeAnim.sqfhQ-Client\Functions\Client_SetControlFadeAnimStop.sqfhQ9Client\Functions\Client_SetGroupsID.sqfhQClient\Functions\Client_SupportHeal.sqfhQP Client\Functions\Client_SupportRearm.sqfhQ Client\Functions\Client_SupportRefuel.sqfiQ Client\Functions\Client_SupportRepair.sqfiQ Client\Functions\Client_TaskSystem.sqfiQ Client\Functions\Client_TitleTextMessage.sqfiQClient\Functions\Client_UIChangeComboBuyUnits.sqfkQClient\Functions\Client_UIFillListBuyUnits.sqflQClient\Functions\Client_UIFillListTeamOrders.sqflQClient\Functions\Client_UIFindLBValue.sqflQ Client\Functions\Client_UI_Gear_AddTemplate.sqfiQClient\Functions\Client_UI_Gear_DeleteTemplate.sqfjQClient\Functions\Client_UI_Gear_DisplayInventory.sqfjQClient\Functions\Client_UI_Gear_FillCargoList.sqfjQClient\Functions\Client_UI_Gear_FillList.sqfjQClient\Functions\Client_UI_Gear_FillTemplates.sqfjQClient\Functions\Client_UI_Gear_ParseTemplateContent.sqfjQClient\Functions\Client_UI_Gear_Sanitize.sqfkQClient\Functions\Client_UI_Gear_UpdatePrice.sqfkQ Client\Functions\Client_UI_Gear_UpdateTarget.sqfkQ` Client\Functions\Client_UI_Gear_UpdateView.sqfkQ9Client\Functions\Client_UI_Respawn_Selector.sqfkQClient\GUI\GUI_BuyGearMenu.sqflQClient\GUI\GUI_ClearCurrentCutDisplay.sqflQ7Client\GUI\GUI_Display_Parameters.sqfmQ]Client\GUI\GUI_EndOfGameStats.sqfmQClient\GUI\GUI_GroupsMenu.sqfmQClient\GUI\GUI_Menu.sqfmQClient\GUI\GUI_Menu_BuyUnits.sqfmQEClient\GUI\GUI_Menu_Command.sqfmQNClient\GUI\GUI_Menu_EASA.sqfnQoClient\GUI\GUI_Menu_Economy.sqfnQ"Client\GUI\GUI_Menu_Service.sqfnQClient\GUI\GUI_Menu_Tactical.sqfnQ\Client\GUI\GUI_Menu_Team.sqfnQClient\GUI\GUI_Menu_UnitCamera.sqfnQ Client\GUI\GUI_RespawnMenu.sqfoQClient\GUI\GUI_SetCurrentCutDisplay.sqfoQ:Client\GUI\GUI_TransferMenu.sqfoQ4 Client\GUI\GUI_UpgradeMenu.sqfoQW.Client\GUI\GUI_VoteMenu.sqfoQm Client\Images\con_depot.paaoQClient\Images\con_task.paapQClient\Images\geariconall.paapQClient\Images\geariconmisc.paapQClient\Images\geariconprimary.paapQClient\Images\geariconsecondary.paapQClient\Images\geariconsidearm.paaqQClient\Images\gearicontemplate.paaqQClient\Images\icon_wf_building_aa_radar.paarQClient\Images\icon_wf_building_air.paarQClient\Images\icon_wf_building_am_radar.paarQClient\Images\icon_wf_building_barracks.paarQClient\Images\icon_wf_building_cc.paarQClient\Images\icon_wf_building_firstaid.paasQClient\Images\icon_wf_building_gear.paasQClient\Images\icon_wf_building_hangar.paasQClient\Images\icon_wf_building_hvs.paasQClient\Images\icon_wf_building_lvs.paasQClient\Images\icon_wf_building_mhq.paasQClient\Images\icon_wf_building_repair.paatQClient\Images\icon_wf_support_artilery.paatQClient\Images\icon_wf_support_cas.paatQClient\Images\icon_wf_support_fasttravel.paatQClient\Images\icon_wf_support_mortar.paatQClient\Images\icon_wf_support_supplydrop.paauQClient\Images\icon_wf_support_transport.paauQClient\Images\icon_wf_support_uav.paauQClient\Images\i_commander.paaqQClient\Images\i_driver.paaqQClient\Images\i_extra.paaqQClient\Images\i_gunner.paaqQClient\Images\i_lock.paarQClient\Images\picturepapercar_ca.paauQI+Client\Images\tog_arty.paauQClient\Images\ui_button_main_down.paauQ.Client\Images\ui_button_main_focus.paavQcClient\Images\ui_button_main_normal.paavQClient\Images\ui_button_main_over.paavQ"Client\Images\upgrade_air.paavQ0Client\Images\upgrade_heavy.paavQ0Client\Images\upgrade_infantry.paavQ0Client\Images\upgrade_light.paawQ0Client\Images\upgrade_supply.paawQ0Client\Init\Init_BaseStructure.sqfwQClient\Init\Init_Client.sqfwQ{\Client\Init\Init_Coin.sqfwQxClient\Init\Init_Faction.sqfwQClient\Init\Init_Keybind.sqfxQClient\Init\Init_Markers.sqfxQClient\kb\hq.bikbxQ*Client\kb\hq.fsmxQ]Client\kb\hq.sqfxQClient\Module\CM\CM_Countermeasures.sqfyQ Client\Module\CM\CM_Flares.sqfyQ) Client\Module\CM\CM_Init.sqfyQClient\Module\CM\CM_Set.sqfyQClient\Module\CM\CM_Spoofing.sqfyQClient\Module\CoIn\coin_interface.sqfyQClient\Module\EASA\EASA_Equip.sqfzQClient\Module\EASA\EASA_Init.sqfzQ NClient\Module\EASA\EASA_RemoveLoadout.sqfzQ!Client\Module\Missions\M_PLAYERS_Attack_Air\m_init_client.sqfzQ0Client\Module\Missions\M_UAV_RetrieveModule\m_init_client.sqfzQG Client\Module\Nuke\damage.sqfzQClient\Module\Nuke\ICBM_Init.sqf{QhClient\Module\Nuke\nuke.sqf{QClient\Module\Nuke\nukeincoming.sqf{Q&Client\Module\Nuke\radzone.sqf{QClient\Module\Skill\Actions\Officer_Undeploy_MASH.sqf{QClient\Module\Skill\Skill_Apply.sqf{QClient\Module\Skill\Skill_Engineer.sqf|Q Client\Module\Skill\Skill_Init.sqf|Q Client\Module\Skill\Skill_Officer.sqf|QClient\Module\Skill\Skill_Sniper.sqf|QClient\Module\Skill\Skill_SpecOps.sqf|QClient\Module\UAV\uav.sqf}QClient\Module\UAV\uav_interface.sqf}Q,Client\Module\UAV\uav_interface_oa.sqf}QClient\Module\UAV\uav_spotter.sqf}QXClient\Module\ZetaCargo\Zeta_Hook.sqf}QClient\Module\ZetaCargo\Zeta_Init.sqf}QClient\Module\ZetaCargo\Zeta_Unhook.sqf~QClient\PVFunctions\AllCampsCaptured.sqf~QDClient\PVFunctions\AwardBounty.sqf~QClient\PVFunctions\CampCaptured.sqf~QClient\PVFunctions\ChangeScore.sqf~QClient\PVFunctions\HandleSpecial.sqf~QClient\PVFunctions\LocalizeMessage.sqfQClient\PVFunctions\SECOPS_ReceiveMission.sqfQClient\PVFunctions\SetTask.sqfQpClient\PVFunctions\SetVehicleLock.sqfQ'Client\PVFunctions\TownCaptured.sqfQXCommon\Common_AARadarMarkerUpdate.sqfQCommon\Common_InitArtillery.sqfQwCommon\Common_MarkerUpdate.sqfQCommon\Config\Config_Backpack.sqfQCommon\Config\Config_Defenses_Towns.sqfQvCommon\Config\Config_Groups.sqfQCommon\Config\Config_Magazines.sqfQCommon\Config\Config_SetTemplates.sqfQCommon\Config\Config_SortMagazines.sqfQCommon\Config\Config_SortWeapons.sqfQQ Common\Config\Config_Weapons.sqfQ Common\Config\Core\Core_ACE_RU.sqfQh Common\Config\Core\Core_ACE_US_D.sqfQCommon\Config\Core\Core_ACE_US_W.sqfQCommon\Config\Core\Core_ACR.sqfQ Common\Config\Core\Core_BAF.sqfQeCommon\Config\Core\Core_BAFD.sqfQ)Common\Config\Core\Core_BAFW.sqfQCommon\Config\Core\Core_CDF.sqfQCommon\Config\Core\Core_CIV.sqfQFCommon\Config\Core\Core_DeltaForce.sqfQ Common\Config\Core\Core_FR.sqfQ2 Common\Config\Core\Core_GUE.sqfQCommon\Config\Core\Core_INS.sqfQKCommon\Config\Core\Core_KSK.sqfQQCommon\Config\Core\Core_MVD.sqfQCommon\Config\Core\Core_OFrP.sqfYeQ.Common\Config\Core\Core_PMC.sqfQ Common\Config\Core\Core_RU.sqfQCommon\Config\Core\Core_Spetsnaz.sqfQCommon\Config\Core\Core_TKA.sqfQ"Common\Config\Core\Core_TKCIV.sqfQCommon\Config\Core\Core_TKGUE.sqfQCommon\Config\Core\Core_TKSF.sqfQCommon\Config\Core\Core_US.sqfQb"Common\Config\Core\Core_USMC.sqfQyCommon\Config\Core_Artillery\Artillery_CDF.sqfQ Common\Config\Core_Artillery\Artillery_CO_GUE.sqfQ Common\Config\Core_Artillery\Artillery_CO_OFrP.sqf eQ Common\Config\Core_Artillery\Artillery_CO_RU.sqfQ: Common\Config\Core_Artillery\Artillery_CO_US.sqfQ Common\Config\Core_Artillery\Artillery_GUE.sqfQCommon\Config\Core_Artillery\Artillery_INS.sqfQ Common\Config\Core_Artillery\Artillery_OA_OFrP.sqfeQ Common\Config\Core_Artillery\Artillery_OA_TKA.sqfQ Common\Config\Core_Artillery\Artillery_OA_TKGUE.sqfQ Common\Config\Core_Artillery\Artillery_OA_US.sqfQw Common\Config\Core_Artillery\Artillery_RU.sqfQ Common\Config\Core_Artillery\Artillery_USMC.sqfQ Common\Config\Core_Models\Arrowhead.sqfQCommon\Config\Core_Models\CombinedOps.sqfQCommon\Config\Core_Models\CombinedOps_W.sqfQCommon\Config\Core_Models\Vanilla.sqfQCommon\Config\Core_Root\Root_CDF.sqfQ&Common\Config\Core_Root\Root_GUE.sqfQ~(Common\Config\Core_Root\Root_INS.sqfQ&Common\Config\Core_Root\Root_OFrP.sqfeQu.Common\Config\Core_Root\Root_PMC.sqfQ{%Common\Config\Core_Root\Root_RU.sqfQ(Common\Config\Core_Root\Root_TKA.sqfQ*Common\Config\Core_Root\Root_TKGUE.sqfQ*Common\Config\Core_Root\Root_US.sqfQ+Common\Config\Core_Root\Root_USMC.sqfQ)Common\Config\Core_Root\Root_US_Camo.sqfQ)Common\Config\Core_Squads\Squads_GetFactionGroups.sqfQ% Common\Config\Core_Squads\Squad_CDF.sqfQQCommon\Config\Core_Squads\Squad_GUE.sqfQCommon\Config\Core_Squads\Squad_INS.sqfQPCommon\Config\Core_Squads\Squad_OA_TKA.sqfQCommon\Config\Core_Squads\Squad_OA_TKGUE.sqfQCommon\Config\Core_Squads\Squad_OA_US.sqfQCommon\Config\Core_Squads\Squad_OFrP.sqfƲeQ Common\Config\Core_Squads\Squad_RU.sqfQ Common\Config\Core_Squads\Squad_USMC.sqfQ0 Common\Config\Core_Structures\Structures_CDF.sqfQcCommon\Config\Core_Structures\Structures_CO_CDF.sqfQCommon\Config\Core_Structures\Structures_CO_GUE.sqfQBCommon\Config\Core_Structures\Structures_CO_INS.sqfQCommon\Config\Core_Structures\Structures_CO_OFrP.sqfA^hQCommon\Config\Core_Structures\Structures_CO_RU.sqfQCommon\Config\Core_Structures\Structures_CO_US.sqfQCommon\Config\Core_Structures\Structures_GUE.sqfQCommon\Config\Core_Structures\Structures_INS.sqfQbCommon\Config\Core_Structures\Structures_OA_OFrP.sqfy^hQRCommon\Config\Core_Structures\Structures_OA_TKA.sqfQCommon\Config\Core_Structures\Structures_OA_TKGUE.sqfQCommon\Config\Core_Structures\Structures_OA_US.sqfQxCommon\Config\Core_Structures\Structures_RU.sqfQCommon\Config\Core_Structures\Structures_USMC.sqfQ[Common\Config\Core_Units\Units_CDF.sqfQ Common\Config\Core_Units\Units_CO_GUE.sqfQkCommon\Config\Core_Units\Units_CO_OFrP.sqfeQCommon\Config\Core_Units\Units_CO_RU.sqfQ:Common\Config\Core_Units\Units_CO_US.sqfQh.Common\Config\Core_Units\Units_GUE.sqfQ Common\Config\Core_Units\Units_INS.sqfQR Common\Config\Core_Units\Units_OA_OFrP.sqfeQ+Common\Config\Core_Units\Units_OA_TKA.sqfQ[Common\Config\Core_Units\Units_OA_TKGUE.sqfQCommon\Config\Core_Units\Units_OA_US.sqfQ=!Common\Config\Core_Units\Units_RU.sqfQoCommon\Config\Core_Units\Units_USMC.sqfQCommon\Config\Core_Upgrades\Check_Upgrades.sqfQCommon\Config\Core_Upgrades\Labels_Upgrades.sqfQCommon\Config\Core_Upgrades\Upgrades_CDF.sqfQCommon\Config\Core_Upgrades\Upgrades_CO_GUE.sqfQCommon\Config\Core_Upgrades\Upgrades_CO_RU.sqfQCommon\Config\Core_Upgrades\Upgrades_CO_US.sqfQCommon\Config\Core_Upgrades\Upgrades_GUE.sqfQ6Common\Config\Core_Upgrades\Upgrades_INS.sqfQCommon\Config\Core_Upgrades\Upgrades_OA_TKA.sqfQCommon\Config\Core_Upgrades\Upgrades_OA_TKGUE.sqfQCommon\Config\Core_Upgrades\Upgrades_OA_US.sqfQCommon\Config\Core_Upgrades\Upgrades_RU.sqfQCommon\Config\Core_Upgrades\Upgrades_USMC.sqfQCommon\Config\Defenses\Defenses_CDF.sqfQCommon\Config\Defenses\Defenses_GUE.sqfQCommon\Config\Defenses\Defenses_INS.sqfQ Common\Config\Defenses\Defenses_OFrP.sqfKhQICommon\Config\Defenses\Defenses_PMC.sqfQCommon\Config\Defenses\Defenses_RU.sqfQCommon\Config\Defenses\Defenses_TKA.sqfQCommon\Config\Defenses\Defenses_TKGUE.sqfQCommon\Config\Defenses\Defenses_US.sqfQ@Common\Config\Defenses\Defenses_USMC.sqfQCommon\Config\Gear\Gear_ACE_RU.sqfQ+Common\Config\Gear\Gear_ACE_US.sqfQ4Common\Config\Gear\Gear_BAF.sqfQCommon\Config\Gear\Gear_GUE.sqfQ.Common\Config\Gear\Gear_OFrP.sqf=eQ7Common\Config\Gear\Gear_PMC.sqfQ Common\Config\Gear\Gear_RU.sqfQCommon\Config\Gear\Gear_TKA.sqfQG4Common\Config\Gear\Gear_US.sqfQL7Common\Config\Gear\Gear_USMC.sqfQX&Common\Config\Groups\Groups_CDF.sqfMhQCommon\Config\Groups\Groups_GUE.sqfMhQeCommon\Config\Groups\Groups_INS.sqfMhQdCommon\Config\Groups\Groups_OFrP.sqfLhQ=Common\Config\Groups\Groups_PMC.sqfMhQCommon\Config\Groups\Groups_RU.sqfMhQCommon\Config\Groups\Groups_TKA.sqfMhQCommon\Config\Groups\Groups_TKGUE.sqfMhQCommon\Config\Groups\Groups_US.sqfMhQCommon\Config\Groups\Groups_USMC.sqfMhQCommon\Config\Loadout\Loadout_ACE_RU.sqfQ!Common\Config\Loadout\Loadout_ACE_US.sqfQP(Common\Config\Loadout\Loadout_BAF.sqfQSCommon\Config\Loadout\Loadout_CDF.sqfQCommon\Config\Loadout\Loadout_GUE.sqfQCommon\Config\Loadout\Loadout_INS.sqfQCommon\Config\Loadout\Loadout_OFrP.sqfkeQCommon\Config\Loadout\Loadout_PMC.sqfQCommon\Config\Loadout\Loadout_RU.sqfQCommon\Config\Loadout\Loadout_TKA.sqfQCommon\Config\Loadout\Loadout_TKGUE.sqfQrCommon\Config\Loadout\Loadout_US.sqfQCommon\Config\Loadout\Loadout_USMC.sqfQCommon\Config\readme.txtQCommon\Functions\Common_ArrayPush.sqfQCommon\Functions\Common_ArrayRemoveIndex.sqfQ Common\Functions\Common_ArrayShift.sqfQICommon\Functions\Common_ArrayShuffle.sqfQxCommon\Functions\Common_BalanceInit.sqfQCommon\Functions\Common_BuildingInRange.sqfQCommon\Functions\Common_ChangeSideSupply.sqfQCommon\Functions\Common_ChangeTeamFunds.sqfQCommon\Functions\Common_ChangeUnitGroup.sqfQPCommon\Functions\Common_ClearVehicleCargo.sqfQCommon\Functions\Common_ClearVehicleCargoOA.sqfQCommon\Functions\Common_CreateTeam.sqfQNCommon\Functions\Common_CreateTownUnits.sqfQ2Common\Functions\Common_CreateUnit.sqfQCommon\Functions\Common_CreateVehicle.sqfQoCommon\Functions\Common_EquipArtillery.sqfQCommon\Functions\Common_EquipBackpack.sqfQCommon\Functions\Common_EquipLoadout.sqfQCommon\Functions\Common_EquipUnit.sqfQ7Common\Functions\Common_EquipVehicle.sqfQCommon\Functions\Common_FindTurretsRecursive.sqfQoCommon\Functions\Common_FireArtillery.sqfQDCommon\Functions\Common_GetAIDigit.sqfQCommon\Functions\Common_GetAreaEnemiesCount.sqfQCommon\Functions\Common_GetClientTeam.sqfQCommon\Functions\Common_GetClosestEnemyLocation.sqfQCCommon\Functions\Common_GetClosestEntity.sqfQ_Common\Functions\Common_GetClosestLocation.sqfQaCommon\Functions\Common_GetClosestLocationBySide.sqfQ+Common\Functions\Common_GetCommanderTeam.sqfQCommon\Functions\Common_GetConfigEntry.sqfQCommon\Functions\Common_GetConfigInfo.sqfQ Common\Functions\Common_GetConfigVehicleCrewSlot.sqfQCommon\Functions\Common_GetConfigVehicleTurrets.sqfQCommon\Functions\Common_GetConfigVehicleTurretsReturn.sqfQCommon\Functions\Common_GetDirTo.sqfQCommon\Functions\Common_GetEmptyPosition.sqfQdCommon\Functions\Common_GetFactories.sqfQJCommon\Functions\Common_GetFriendlyCamps.sqfQCommon\Functions\Common_GetGroupFromConfig.sqfQCommon\Functions\Common_GetHostilesInArea.sqfQCommon\Functions\Common_GetLiveUnits.sqfQCommon\Functions\Common_GetNameSpace.sqfQRCommon\Functions\Common_GetPositionFrom.sqfQCommon\Functions\Common_GetRandomPosition.sqfQYCommon\Functions\Common_GetRespawnCamps.sqfQCommon\Functions\Common_GetRespawnThreeway.sqfQ!Common\Functions\Common_GetSafePlace.sqfQCommon\Functions\Common_GetSideFromID.sqfQ=Common\Functions\Common_GetSideHQ.sqfQCommon\Functions\Common_GetSideHQDeployStatus.sqfQCommon\Functions\Common_GetSideID.sqfQCommon\Functions\Common_GetSideLogic.sqfQCommon\Functions\Common_GetSideStructures.sqfQCommon\Functions\Common_GetSideSupply.sqfQCommon\Functions\Common_GetSideTowns.sqfQCommon\Functions\Common_GetSideUpgrades.sqfQCommon\Functions\Common_GetSleepFPS.sqfQ:Common\Functions\Common_GetTeamArtillery.sqfQCommon\Functions\Common_GetTeamAutonomous.sqfQICommon\Functions\Common_GetTeamFunds.sqfQCommon\Functions\Common_GetTeamMoveMode.sqfQHCommon\Functions\Common_GetTeamMovePos.sqfQHCommon\Functions\Common_GetTeamRespawn.sqfQBCommon\Functions\Common_GetTeamType.sqfQBCommon\Functions\Common_GetTeamVehicles.sqfQ2Common\Functions\Common_GetTotalCamps.sqfQCommon\Functions\Common_GetTotalCampsOnSide.sqfQCommon\Functions\Common_GetTotalSupplyValue.sqfQCommon\Functions\Common_GetTownsHeld.sqfQCommon\Functions\Common_GetTownsIncome.sqfQ2Common\Functions\Common_GetTownsSupply.sqfQCommon\Functions\Common_GetUnitConfigGear.sqfQCommon\Functions\Common_GetUnitsBelowHeight.sqfQ;Common\Functions\Common_GetUnitsPerSide.sqfQCommon\Functions\Common_GetUnitVehicle.sqfQ}Common\Functions\Common_GetVehicleTurretsGear.sqfQKCommon\Functions\Common_HandleArtillery.sqfQCommon\Functions\Common_HandleIncomingMissile.sqfQCommon\Functions\Common_IsArtillery.sqfQBCommon\Functions\Common_LogContent.sqfQCommon\Functions\Common_OnUnitHit.sqfQ\Common\Functions\Common_OnUnitKilled.sqfQCommon\Functions\Common_PlaceNear.sqfQCommon\Functions\Common_PlaceSafe.sqfQCommon\Functions\Common_RearmVehicle.sqfQW Common\Functions\Common_RearmVehicleOA.sqfQ8Common\Functions\Common_RemoveCountermeasures.sqfQmCommon\Functions\Common_RevealArea.sqfQCommon\Functions\Common_SendToClient.sqfQCommon\Functions\Common_SendToClients.sqfQCommon\Functions\Common_SendToServer.sqfQGCommon\Functions\Common_SendToServerOptimized.sqfQwCommon\Functions\Common_SetCommanderVotes.sqfQCommon\Functions\Common_SetNamespace.sqfQCommon\Functions\Common_SetTeamAutonomous.sqfQCommon\Functions\Common_SetTeamMoveMode.sqfQCommon\Functions\Common_SetTeamMovePos.sqfQCommon\Functions\Common_SetTeamRespawn.sqfQCommon\Functions\Common_SetTeamType.sqfQCommon\Functions\Common_SetTurretsMagazines.sqfQpCommon\Functions\Common_SortByDistance.sqfQCommon\Functions\Common_SpawnTurrets.sqfQCommon\Functions\Common_UpdateStatistics.sqfQCommon\Functions\Common_UseStationaryDefense.sqfQQCommon\Functions\Common_WaypointPatrol.sqfQ+Common\Functions\Common_WaypointPatrolTown.sqfQCommon\Functions\Common_WaypointsAdd.sqfQPCommon\Functions\Common_WaypointSimple.sqfQCommon\Functions\Common_WaypointsRemove.sqfQCommon\Init\Init_Airports.sqfQ,Common\Init\Init_Boundaries.sqfQCommon\Init\Init_Common.sqfQiCommon\Init\Init_CommonConstants.sqfQ5Common\Init\Init_Neighbors.sqfQ:Common\Init\Init_Parameters.sqfQ Common\Init\Init_PublicVariables.sqfQ#Common\Init\Init_Town.sqfQqCommon\Init\Init_TownMode.sqfQ Common\Init\Init_Towns.sqfQCommon\Init\Init_Unit.sqfQCommon\Module\Arty\ARTY_HandleILLUM.sqfQCommon\Module\Arty\ARTY_HandleSADARM.sqfQ Common\Module\Arty\ARTY_mobileMissionFinish.sqfQCommon\Module\Arty\ARTY_mobileMissionPrep.sqfQCommon\Module\CIPHER\CIPHER_Init.sqfQ2 Common\Module\CIPHER\CIPHER_Sort.sqfQ Common\Module\IRS\IRS_CreateSmoke.sqfQCommon\Module\IRS\IRS_DeploySmoke.sqfQCommon\Module\IRS\IRS_HandleMissile.sqfQ< Common\Module\IRS\IRS_Init.sqfQj Common\Module\IRS\IRS_OnIncomingMissile.sqfQldescription.extQinitJIPCompatible.sqfQmission.sqmQereadme.nfoQWRsc\Dialogs.hppQ2Rsc\Header.hppQRsc\Identities.hppQ?Rsc\Parameters.hppQ`Rsc\Ressources.hppQHRsc\Styles.hppQRsc\Titles.hppQ%Server\AI\AI_AddMultiplayerRespawnEH.sqfQServer\AI\AI_AdvancedRespawn.sqfQServer\AI\AI_Resistance.sqfQServer\AI\AI_SquadRespawn.sqfQSServer\AI\AI_TLWPHandler.sqsQxServer\AI\AI_UpdateSupplyTruck.sqfQServer\AI\Orders\AI_MoveTo.sqfQcServer\AI\Orders\AI_Patrol.sqfQServer\AI\Orders\AI_TownPatrol.sqfQ Server\AI\Orders\AI_WPAdd.sqfQKServer\AI\Orders\AI_WPRemove.sqfQServer\Config\Config_Allies.sqfQ{BServer\Construction\Construction_HQSite.sqfQServer\Construction\Construction_MediumSite.sqfQ&Server\Construction\Construction_SmallSite.sqfQServer\Construction\Construction_StationaryDefense.sqfQHServer\FSM\aicommander.fsmQIServer\FSM\aiteam.fsmQServer\FSM\allies.fsmQ4Server\FSM\allies_team.fsmQ Server\FSM\basearea.fsmQServer\FSM\basepatrol.fsmQ,Server\FSM\conquest.fsmQServer\FSM\emptyvehiclescollector.fsmQ Server\FSM\env_fast_time.fsmQ1Server\FSM\env_weather.fsmQ Server\FSM\module_missions.fsmQServer\FSM\server_collector_garbage.fsmQ Server\FSM\server_collector_garbage_va.fsmQ Server\FSM\server_patrols.fsmQW,Server\FSM\server_town.fsmQRcServer\FSM\server_town_ai.fsmQ~xServer\FSM\server_town_camp.fsmQ3Server\FSM\server_town_patrol.fsmQ?Server\FSM\server_victory_defender_helper.fsmQLServer\FSM\server_victory_threeway.fsmQServer\FSM\supplytruck.fsmQ/Server\FSM\updateresources.fsmQServer\FSM\updateserver.fsmQ2Server\FSM\workers.fsmQo3Server\Functions\Server_AI_Com_Upgrade.sqfQ'Server\Functions\Server_AI_SetTownAttackPath.sqfQBServer\Functions\Server_AI_SetTownAttackPath_PathIsSafe.sqfQbServer\Functions\Server_AI_SetTownAttackPath_PosIsSafe.sqfQ@Server\Functions\Server_AlliesBuyUnit.sqfQServer\Functions\Server_BuildingDamaged.sqfQGServer\Functions\Server_BuildingHandleDamages.sqfQServer\Functions\Server_BuildingKilled.sqfQ Server\Functions\Server_BuyUnit.sqfQServer\Functions\Server_CanUpdateTeam.sqfQServer\Functions\Server_ChangeAICommanderFunds.sqfQServer\Functions\Server_CreateDefenseTemplate.sqfQServer\Functions\Server_FNC_Delegation.sqf¸QServer\Functions\Server_FNC_TownDefenses.sqf¸QServer\Functions\Server_GetAICommanderFunds.sqf¸QDServer\Functions\Server_GetDelegators.sqf¸QServer\Functions\Server_GetTownGroups.sqf¸Q#Server\Functions\Server_GetTownGroupsDefender.sqføQrServer\Functions\Server_GetTownPatrol.sqføQ*Server\Functions\Server_HandleBuildingDamage.sqføQServer\Functions\Server_HandleBuildingRepair.sqføQoServer\Functions\Server_HandleDefense.sqføQAServer\Functions\Server_HandleEmptyVehicle.sqfĸQServer\Functions\Server_HandlePVF.sqfĸQServer\Functions\Server_HandleSpecial.sqfĸQServer\Functions\Server_ManageTownDefenses.sqfĸQServer\Functions\Server_MHQRepair.sqfĸQ_Server\Functions\Server_OnHQKilled.sqfŸQServer\Functions\Server_OnPlayerConnected.sqfŸQLServer\Functions\Server_OnPlayerDisconnected.sqfŸQrServer\Functions\Server_OperateTownDefensesUnits.sqfŸQServer\Functions\Server_ProcessUpgrade.sqfŸQ7Server\Functions\Server_SECOPS_HandleJIP.sqfƸQServer\Functions\Server_SetCampsToSide.sqfƸQServer\Functions\Server_SetLocalityOwner.sqfƸQ#Server\Functions\Server_SideMessage.sqfƸQ[ Server\Functions\Server_SpawnTownDefense.sqfƸQServer\Functions\Server_SpawnTownMortars.sqfǸQ!Server\Functions\Server_TrashObject.sqfǸQServer\Functions\Server_UpdateTeam.sqfǸQ Server\Functions\Server_VoteForCommander.sqfǸQ Server\Init\Init_Defenses.sqfǸQServer\Init\Init_Server.sqfȸQT]Server\Init\Init_Towns.sqfȸQServer\Module\Missions\Init_Missions.sqfȸQ Server\Module\Missions\Missions_CanAssign.sqfɸQ]Server\Module\Missions\Missions_CanRun.sqfɸQServer\Module\Missions\M_PLAYERS_Attack_Air\m_init.sqfȸQ Server\Module\Missions\M_UAV_RetrieveModule\m_init.sqfȸQVEServer\Module\NEURO\NEURO.sqfɸQServer\Module\UPSMON\Init_UPSMON.sqfɸQl^Server\Module\UPSMON\UPSMON\!R\markerAlpha.sqfʸQServer\Module\UPSMON\UPSMON\!R\R_functions.sqfʸQU!Server\Module\UPSMON\UPSMON\actions\followme.sqfʸQS Server\Module\UPSMON\UPSMON\common\MON_functions.sqfʸQServer\Module\UPSMON\UPSMON\MON_artillery_add.sqfʸQK Server\Module\UPSMON\UPSMON\MON_spawn.sqf˸QServer\Module\UPSMON\UPSMON\MON_surrended.sqf˸QServer\Module\UPSMON\UPSMON.sqfɸQlXServer\PVFunctions\RequestChangeScore.sqf˸QServer\PVFunctions\RequestCommanderVote.sqf˸QServer\PVFunctions\RequestDefense.sqf˸QServer\PVFunctions\RequestJoin.sqf̸QServer\PVFunctions\RequestMHQRepair.sqf̸QServer\PVFunctions\RequestSpecial.sqf̸QServer\PVFunctions\RequestStructure.sqf̸QServer\PVFunctions\RequestTeamUpdate.sqf̸QCServer\PVFunctions\RequestUpgrade.sqf͸QKServer\PVFunctions\RequestVehicleLock.sqf͸QServer\PVFunctions\RequestWorker.sqf͸QServer\Support\Support_ParaAmmo.sqf͸QServer\Support\Support_Paratroopers.sqf͸Q Server\Support\Support_ParaVehicles.sqfθQServer\Support\Support_UAV.sqfθQ)stringtable.xmlθQ8version.sqfθQ //--- Author [ICE] player createDiaryRecord["Diary", ["Upgrades", "
To be able to purchase higher levels of equipment or units, the factories need to be upgraded by the commander. The commander will need both cash and supply points to do this. He may ask for contributions from other team players to help out. Each factory has 3 levels."]]; player createDiaryRecord["Diary", ["Supplies", "
Each captured town has an Actual and Potential Value. On the map you will see this represented as 2 numbers seperated by a / for example; Zelenogorsk, once captured will start as 30/120. This means that the current supplies to each player from this town is $30 per minute. Each time a supply truck arrives at the town depot its value will increase by 10. Remember though, the supply truck must be either fully loaded from the HQ or a Supply point or, have come from a town with a higher actual value. you will also receive 4 x the actual value as cash if you or one of your squad drives the truck. Supply runs should be the responsibility of all. The best way to win Warfare is to work together capping and then supping up the town before moving to another."]]; player createDiaryRecord["Diary", ["Building", "
The commander builds a base. Each side starts with one Mobile Headqarters (MHQ). This is a vehicle the commander can use to build th headquarters (HQ) anywhere on the map. After the HQ is built, other buildings can be constructed. Only the commander can build factories and defenses around the base using the HQ. The HQ can also be packed up back as MHQ again and moved to another location."]]; player createDiaryRecord["Diary", ["Team", "
All players and AI soldiers can buy subordinates, equipment and vehicles from the main base as well as some vehicles from the captured town forts. You can access all available facilities through the Purchase interface from inside the main base perimeter or anywhere on the map once a Command Center has been erected. Accessible supply factories are indicated by icons on right edge of the screen. If a Barracks has been built, select the Purchase Gear button to purchase weapons and ammunition. The equipment you purchase here will also be your starting kit when you respawn. In Purchase Units button, you will find a list of unit type icons along the top. Here you can buy empty or manned units from soldiers to aircraft."]]; player createDiaryRecord["Diary", ["Commander", "
The Commander can be controlled either by player or by AI. He has access to extra resources and abilities: developing the base, setting objectives for teams, and defining the strategy of your side."]]; player createDiaryRecord["Diary", ["Voting", "
After starting the warfare mission, you are confronted with the Vote Commander screen. Click on any name in the player list to cast your vote. If you join a game that has already started, you will not see the Vote Commander screen. A new vote for a new Commander can be started anytime using the Vote option in the Options interface. The commander assigns a mission and a role to a team leader, whether it be AI or human player. The role can include the type of equipment and vehicles the AI teams will use. Players have control of what they will use in their team. Mission is the task for the team to perform. You may disable the Commander Vote Pop-up in the Team Menu."]]; player createDiaryRecord["Diary", ["Summary", "
Warfare is a blend of a team-based multiplayer mission and realtime strategy, where BLUFOR and OPFOR fight for the island control. Key objectives are to capture towns, defend your base and destroy the base of enemy. Both sides are lead by a commander, who influences his side's strategy. There are two kinds of resources: Supply points are used by the commander for building factories. Money is used to purchase weapons, units and vehicles."]]; player createDiaryRecord["Diary", ["Note OFrP:", "
Munitions truck corresponds to GBC180 APD
Repair Truck corresponds to GBC180 lot7
Air aumbu corresponds to Puma RESCO."]];[player,player,2,MCoin,getpos player,(sideJoined) Call WFBE_CO_FNC_GetSideHQ] ExecVM "Client\Module\CoIn\coin_interface.sqf";[player,player,2,RCoin,getpos player,_this select 0] ExecVM "Client\Module\CoIn\coin_interface.sqf";Private ["_cargo","_vehicle"]; _vehicle = _this select 0; //--- Get the crew. _cargo = (crew _vehicle) - [driver _vehicle, gunner _vehicle, commander _vehicle]; { if (alive _x && _vehicle == vehicle _x) then { if (local _x) then { //--- Dealing with a local unit, probably an AI. unassignVehicle _x; _x action ["EJECT", _vehicle]; } else { //--- Dealing with a player or a non local unit. if (isPlayer(leader (group _x))) then { // if (WF_A2_Vanilla) then { [getPlayerUID(leader(group _x)), "HandleSpecial", ["action-perform", _x, "EJECT", _vehicle]] Call WFBE_CO_FNC_SendToClients; // } else { // [leader (group _x), "PerformAction", [_x, "EJECT", _vehicle]] Call WFBE_CO_FNC_SendToClient; // }; }; }; }; sleep 1; } forEach _cargo;Private ["_act","_caller","_vehicle"]; _vehicle = _this select 0; _caller = _this select 1; _act = _this select 2; _caller action ["EJECT",_vehicle]; _caller setVelocity [0,0,0]; [_caller] Exec "ca\air2\Halo\data\Scripts\HALO_getout.sqs";createDialog "WF_Menu";Private ["_dir","_speed","_vehicle","_vel"]; _vehicle = _this select 0; _vel = velocity _vehicle; _dir = direction _vehicle; _speed = 10; _vehicle setVelocity [(_vel select 0)+(sin _dir*_speed),(_vel select 1)+(cos _dir*_speed),(_vel select 2)];/* The client or an AI attempt to repair a camp. todo, action can be reused after x time. */ Private ["_camp","_camp_sideID","_camps","_delay","_range","_temp","_townModel","_vehicle"]; _vehicle = _this select 0; _range = missionNamespace getVariable "WFBE_C_CAMPS_REPAIR_RANGE"; //--- Attempt to get a nearby camp. _camps = (_vehicle) nearEntities [WFBE_Logic_Camp, _range]; //--- Only get the "real" camps, remove the possible undefined ones. _temp = _camps; { if (isNil {_x getVariable 'sideID'}) then {_camps = _camps - [_x]}; } forEach _temp; //--- Make sure that there is at least one camp nearby, abort otherwise. if (count _camps == 0) exitWith {hint (localize "STR_WF_Repair_Camp_None")}; //--- Now, we need to check if one of those camp is destroyed at least, remove the living ones. _temp = _camps; { if (alive (_x getVariable 'wfbe_camp_bunker')) then {_camps = _camps - [_x]}; } forEach _temp; //--- If we have no repairable camps in range, abort with a message. if (count _camps == 0) exitWith {hint (localize "STR_WF_Repair_Camp_None_Dead")}; //--- Check if the repair is free or if it need to be paid. if ((missionNamespace getVariable "WFBE_C_CAMPS_REPAIR_PRICE") > 0) then { //--- Check that the player has enough funds for a repair. if ((Call WFBE_CL_FNC_GetClientFunds) < (missionNamespace getVariable "WFBE_C_CAMPS_REPAIR_PRICE")) exitWith {hint Format [localize "STR_WF_Repair_Camp_NoFunds", (missionNamespace getVariable "WFBE_C_CAMPS_REPAIR_PRICE") - (Call WFBE_CL_FNC_GetClientFunds)]}; //--- Purchase a repair. -(missionNamespace getVariable "WFBE_C_CAMPS_REPAIR_PRICE") Call WFBE_CL_FNC_ChangeClientFunds; }; //--- Get the closest camp then. _camp = [_vehicle, _camps] Call WFBE_CO_FNC_GetClosestEntity; hint (localize "STR_WF_Repair_Camp_IsBeingRepaired"); //--- Begin the repair. _delay = missionNamespace getVariable "WFBE_C_CAMPS_REPAIR_DELAY"; while {_delay > 0} do { if (!alive _vehicle || alive (_camp getVariable 'wfbe_camp_bunker') || (_vehicle distance _camp > _range)) exitWith {}; sleep 1; _delay = _delay - 1; }; if (!(alive _vehicle) || (_vehicle distance _camp > _range)) exitWith {hint (localize "STR_WF_Repair_TruckIsDeadOrTooFar")}; if (alive (_camp getVariable 'wfbe_camp_bunker')) exitWith { hint (localize "STR_WF_Repair_Camp_IsAlive"); //--- Refunds the player. (missionNamespace getVariable "WFBE_C_CAMPS_REPAIR_PRICE") Call WFBE_CL_FNC_ChangeClientFunds; }; //--- Repair the camp, and announce it to the players. _townModel = (missionNamespace getVariable "WFBE_C_CAMP") createVehicle (getPos _camp); _townModel setDir ((getDir _camp) + (missionNamespace getVariable "WFBE_C_CAMP_RDIR")); _townModel setPos (getPos _camp); _camp setVariable ["wfbe_camp_bunker", _townModel, true]; //--- Do we have to update the camp SID ? _camp_sideID = _camp getVariable "sideID"; if (_camp_sideID != WFBE_Client_SideID) then { Private ["_town"]; _camp setVariable ["sideID", WFBE_Client_SideID, true]; //--- Notify / update map if needed. [nil, "CampCaptured", [_camp, WFBE_Client_SideID, _camp_sideID, true]] Call WFBE_CO_FNC_SendToClients; if (local player && !isServer) then {[_camp, WFBE_Client_SideID, _camp_sideID, true] Spawn CLTFNCCampCaptured}; }; hint (localize "STR_WF_Repair_Camp_IsRepaired");Private ["_currency","_currencySym","_currency_system","_hq","_repairPrice","_vehicle"]; _vehicle = _this select 0; _hq = (sideJoined) Call WFBE_CO_FNC_GetSideHQ; if (alive _hq || (_hq distance _vehicle > 30)) exitWith {hint (localize "STR_WF_INFO_Repair_MHQ_None")}; //--- Is HQ already being fixed? if (WFBE_Client_Logic getVariable "wfbe_hq_repairing") exitWith {hint (localize "STR_WF_INFO_Repair_MHQ_BeingRepaired")}; _currency_system = missionNamespace getVariable "WFBE_C_ECONOMY_CURRENCY_SYSTEM"; _repairPrice = (missionNamespace getVariable 'WFBE_C_BASE_HQ_REPAIR_PRICE') * (WFBE_Client_Logic getVariable "wfbe_hq_repair_count"); _currency = if (_currency_system == 0) then {(sideJoined) Call GetSideSupply} else {Call GetPlayerFunds}; _currencySym = if (_currency_system == 0) then {"S"} else {"$"}; if (_currency < _repairPrice) exitWith {hint Format [localize "STR_WF_INFO_Repair_MHQ_Funds",_currencySym,_repairPrice - _currency]}; if (_currency_system == 0) then { [sideJoined,-_repairPrice] Call ChangeSideSupply; } else { -(_repairPrice) Call ChangePlayerFunds; }; ["RequestMHQRepair", sideJoined] Call WFBE_CO_FNC_SendToServer; WF_Logic setVariable [Format ["%1MHQRepair",sideJoinedText],true,true]; hint (localize "STR_WF_INFO_Repair_MHQ_Repair");Private ["_dir","_speed","_vehicle","_vel"]; _vehicle = _this select 0; _vel = velocity _vehicle; _dir = direction _vehicle; _speed = -5; _vehicle setVelocity [(_vel select 0)+(sin _dir*_speed),(_vel select 1)+(cos _dir*_speed),(_vel select 2)];Private ["_lock","_vehicle"]; _vehicle = _this select 0; _lock = if (locked _vehicle) then {false} else {true}; _vehicle lock _lock;Private ["_lock","_MHQ"]; _MHQ = _this select 0; _lock = if (locked _MHQ) then {false} else {true}; // WFBE_RequestVehicleLock = ['SRVFNCREQUESTVEHICLELOCK',[_MHQ,_lock]]; // publicVariable 'WFBE_RequestVehicleLock'; // if (isHostedServer) then {['SRVFNCREQUESTVEHICLELOCK',[_MHQ,_lock]] Spawn HandleSPVF}; //--- If HQ is local to the client, then just perform the action locally. if (local _MHQ) then { _MHQ lock _lock; } else { ["RequestVehicleLock", [_MHQ,_lock]] Call WFBE_CO_FNC_SendToServer; };Private ['_HQ','_base','_blist','_camShotOrder','_camera','_nvgstate','_position','_secTarget','_side','_track','_vehi']; _side = _this; //todo improve that script, _side is the looser. if (_side == west) then { _side = east; } else { if (_side == east) then {_side = west}; }; [_side] ExecVM "Client\GUI\GUI_EndOfGameStats.sqf"; //_track = if (WF_A2_Vanilla) then {"Track21_Rise_Of_The_Fallen"} else {"EP1_Track15"}; //---old _track = if (WF_A2_Vanilla) then {["Track21_Rise_Of_The_Fallen",41]} else {["EP1_Track13",91]}; //---changed-MrNiceGuy playMusic _track; _track_hq = []; _track = []; { if (missionNamespace getVariable Format["WFBE_%1_PRESENT", _x]) then { _logik = (_x) Call WFBE_CO_FNC_GetSideLogic; _hq = _logik getVariable "wfbe_hq"; _track_hq = _track_hq + [_hq]; _track = _track + ([_hq, (_x) Call WFBE_CO_FNC_GetSideStructures] Call SortByDistance); }; } forEach ([west,east,resistance] - [_side]); _hq = (_side) Call WFBE_CO_FNC_GetSideHQ; _blist = [_hq] + _track_hq + ([_hq, (_side) Call WFBE_CO_FNC_GetSideStructures] Call SortByDistance) + _track; // _base = WestMHQ; // _secTarget = EastMHQ; // if (_side == West) then {_base = EastMHQ;_secTarget = WestMHQ}; // _position = getPos _base; // _blist = [_secTarget,_blist] Call SortByDistance; // _blist = [_secTarget] + _blist; //--- Safety Pos. _hq = (sideJoined) Call WFBE_CO_FNC_GetSideHQ; _vehi = vehicle player; if (_vehi != player) then {player action ["EJECT", _vehi];_vehi = player}; _vehi setVelocity [0,0,-0.1]; _vehi setPos ([getPos _hq,20,30] Call GetRandomPosition); if (!isNil "DeathCamera") then { DeathCamera cameraEffect["TERMINATE","BACK"]; camDestroy DeathCamera; "colorCorrections" ppEffectEnable false; "dynamicBlur" ppEffectEnable false; }; _camera = "camera" camCreate (getPos (_blist select 0)); _camera camSetDir 0; _camera camSetFov 0.200; _camera cameraEffect["Internal","back"]; _camera camSetTarget getPos (_blist select 0); _camera camSetRelPos [160.80,130.29,140.07]; _camera camCommit 0; _nvgstate = if (daytime > 18.5 || daytime < 5.5) then {true} else {false}; camUseNVG _nvgstate; waitUntil {camCommitted _camera}; _camera camSetRelPos [-190.71,190.55,180.94]; _camera camCommit 10; waitUntil {camCommitted _camera}; _camShotOrder = [[0,100,35],[50,0,20],[0,-50,20],[-50,0,20]]; { _camera camSetPos getPos _x; _camera camSetTarget getPos _x; { _camera camSetRelPos _x; _camera camCommit 5; waitUntil {camCommitted _camera}; } forEach _camShotOrder; _camera camSetRelPos [0,100,35]; _camera camCommit 5; waitUntil {camCommitted _camera}; } forEach _blist; sleep 3; failMission "END1";/*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,4346,50.000000,-225.000000,150.000000,-175.000000,0.000000,"Init"}; item1[] = {"Check_Towns",2,250,-100.000000,-125.000000,0.000000,-75.000000,0.000000,"Check Towns"}; item2[] = {"End",1,250,-100.000000,-325.000000,0.000000,-275.000000,0.000000,"End"}; item3[] = {"Loop",4,218,50.000000,-125.000000,150.000000,-75.000000,0.000000,"Loop"}; item4[] = {"Gameover",4,218,-100.000000,-225.000000,0.000000,-175.000000,1.000000,"Gameover"}; item5[] = {"Update_Capture",2,250,50.000000,-25.000000,150.000000,25.000000,0.000000,"Update Capture"}; item6[] = {"In_Range",4,218,-100.000000,-25.000000,0.000000,25.000000,0.800000,"In Range"}; item7[] = {"Not_in_Range",4,218,-225.000000,25.000000,-125.000000,75.000000,0.700000,"Not in Range"}; item8[] = {"Hide",2,250,200.000000,25.000000,300.000000,75.000000,0.000000,"Hide"}; link0[] = {0,3}; link1[] = {1,4}; link2[] = {1,6}; link3[] = {1,7}; link4[] = {3,1}; link5[] = {4,2}; link6[] = {5,3}; link7[] = {6,5}; link8[] = {7,8}; link9[] = {8,3}; globals[] = {25.000000,1,0,0,0,640,480,1,25,6316128,1,-327.502472,459.015900,273.669495,-419.340637,699,906,1}; window[] = {2,-1,-1,-1,-1,784,150,1410,150,3,717}; *//*%FSM*/ class FSM { fsmName = "client_title_capture.fsm"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_delay = 4;" \n "_lastCheck = """";" \n "_lastSID = -1;" \n "_lastUpdate = time;" \n "_txt = """";" \n "" \n "_colorBlue = [0,0,0.7,0.6];" \n "_colorGreen = [0,0.7,0,0.6];" \n "_colorRed = [0.7,0,0,0.6];" \n "_colorBlack = [0,0,0,0.6];" \n "" \n "_ui_bg = [0,0,0,0.7];" \n "_town_capture_mode = missionNamespace getVariable ""WFBE_C_TOWNS_CAPTURE_MODE"";" \n "_town_conquest_mode = missionNamespace getVariable 'WFBE_C_TOWNS_CONQUEST_MODE';" \n "" \n "_snap = 0;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check_Towns"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Towns { name = "Check_Towns"; init = /*%FSM*/"_nearest = [player,towns] Call WFBE_CO_FNC_GetClosestEntity;" \n "_update = if (player distance _nearest < (_nearest getVariable ""range"") && alive player) then {true} else {false};" \n "" \n "_snap = time + 2;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 1.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class In_Range { priority = 0.800000; to="Update_Capture"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_update && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Not_in_Range { priority = 0.700000; to="Hide"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_update && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Update_Capture { name = "Update_Capture"; init = /*%FSM*/"_sideID = _nearest getVariable ""sideID"";" \n "_curSV = _nearest getVariable ""supplyValue"";" \n "_maxSV = _nearest getVariable ""maxSupplyValue"";" \n "" \n "_camp = [vehicle player, 12, true] Call WFBE_CL_FNC_GetClosestCamp;" \n "" \n "if (_town_capture_mode != 0 && !isNull _camp) then {" \n " if (alive (_camp getVariable ""wfbe_camp_bunker"")) then {" \n " _sideID = _camp getVariable ""sideID"";" \n " _curSV = _camp getVariable ""supplyValue"";" \n " if (_lastCheck == ""Town"") then {_delay = 0};" \n " _txt = """";" \n " _lastCheck = ""Camp"";" \n " };" \n "} else {" \n " _txt = Format [localize ""STR_WF_TownSV"", _curSV,_maxSV];" \n " _lastCheck = ""Town"";" \n "};" \n "" \n "if (_sideID != _lastSID) then {_delay = 0};" \n "if (isNull (uiNamespace getVariable ""wfbe_title_capture"")) then {600200 cutRsc[""CaptureBar"",""PLAIN"",0];_delay = 0};" \n "if !(isNull (uiNamespace getVariable ""wfbe_title_capture"")) then {" \n "" \n " _barColor = switch (_sideID) do {" \n " case WFBE_C_WEST_ID: {_colorBlue};" \n " case WFBE_C_EAST_ID: {_colorRed};" \n " case WFBE_C_GUER_ID: {_colorGreen};" \n " case WFBE_C_UNKNOWN_ID: {_colorBlack};" \n " default {_colorGreen};" \n " };" \n " " \n " //--- Territorial mode." \n " if (_town_conquest_mode == 1) then {" \n " if (_sideID != WFBE_Client_SideID) then {" \n " if (isNil {_nearest getVariable ""wfbe_marker""}) then {_barColor = _colorBlack};" \n " };" \n " };" \n "" \n " _control = (uiNamespace getVariable ""wfbe_title_capture"") displayCtrl 601001;" \n " _control ctrlShow true;" \n " _control ctrlSetBackgroundColor _barColor;" \n " _backgroundControl = (uiNamespace getVariable ""wfbe_title_capture"") displayCtrl 601000;" \n " _backgroundControl ctrlShow true;" \n " _backgroundControl ctrlSetBackgroundColor _ui_bg;" \n " _textControl = (uiNamespace getVariable ""wfbe_title_capture"") displayCtrl 601002;" \n " _textControl ctrlShow true;" \n " _textControl ctrlSetText _txt;" \n " _maxWidth = (ctrlPosition _backgroundControl Select 2) - 0.02;" \n " _position = ctrlPosition _control;" \n " _position set [2,_maxWidth * _curSV / _maxSV];" \n " _control ctrlSetPosition _position;" \n " _control ctrlCommit _delay;" \n " _delay = 4;" \n " _lastSID = _sideID;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check_Towns"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Hide { name = "Hide"; init = /*%FSM*/"_delay = 0;" \n "if (isNull (uiNamespace getVariable ""wfbe_title_capture"")) then {600200 cutRsc[""CaptureBar"",""PLAIN"",0]};" \n "if (!isNull (uiNamespace getVariable ""wfbe_title_capture"")) then {" \n " {((uiNamespace getVariable ""wfbe_title_capture"") displayCtrl _x) ctrlShow false} forEach [601000,601001,601002];" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check_Towns"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,53.240814,-221.988968,143.240845,-171.989166,0.000000,"Init"}; item1[] = {"End",1,250,-216.387955,-52.508366,-126.387947,-2.508394,0.000000,"End"}; item2[] = {"Update_Conquest",2,4346,-82.090652,-139.314026,7.909359,-89.314034,0.000000,"Update" \n "Conquest"}; item3[] = {"Loop",4,218,53.846153,-139.681244,143.846161,-89.681236,0.000000,"Loop"}; item4[] = {"Gameover",4,218,-216.387955,-139.464890,-126.387947,-89.464890,0.000000,"Gameover"}; link0[] = {0,3}; link1[] = {2,3}; link2[] = {2,4}; link3[] = {3,2}; link4[] = {4,1}; globals[] = {0.000000,0,0,0,0,640,480,1,8,6316128,1,-348.696411,348.696136,79.849762,-328.514618,679,592,1}; window[] = {0,-1,-1,-1,-1,887,150,1563,150,1,697}; *//*%FSM*/ class FSM { fsmName = "conquest_helper"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_ntime = 0;" \n "" \n "_brush = if !(WF_A2_Vanilla) then {""SolidBorder""} else {""SOLID""};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Update_Conquest"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _ntime"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Update_Conquest { name = "Update_Conquest"; init = /*%FSM*/"_towns = (sideJoined) Call WFBE_CO_FNC_GetSideTowns;" \n "_set = [];" \n "" \n "if (count _towns > 0) then {" \n " {" \n " _neighbors = _x getVariable ""wfbe_town_neighbors"";" \n " " \n " if !(isNil ""_neighbors"") then {" \n " {" \n " if ((_x getVariable 'sideID') != sideID) then {" \n " if (isNil {_x getVariable ""wfbe_marker""}) then {" \n " _marker = Format [""wfbe_conquest_%1"", buildingMarker];" \n " buildingMarker = buildingMarker + 1;" \n " _x setVariable ['wfbe_marker', _marker];" \n " createMarkerLocal [_marker, getPos _x];" \n " _marker setMarkerColorLocal ""ColorOrange"";" \n " _marker setMarkerShapeLocal ""ELLIPSE"";" \n " _marker setMarkerAlphaLocal 0.4;" \n " _marker setMarkerBrushLocal _brush;" \n " _marker setMarkerSizeLocal [350,350];" \n " };" \n " if !(_x in _set) then {_set = _set + [_x]};" \n " };" \n " } forEach _neighbors;" \n " };" \n " } forEach _towns;" \n "} else {" \n " _nearest = [(sideJoined) Call WFBE_CO_FNC_GetSideHQ, towns] Call WFBE_CO_FNC_GetClosestEntity;" \n " if (isNil {_nearest getVariable ""wfbe_marker""}) then {" \n " _marker = Format [""wfbe_conquest_%1"", buildingMarker];" \n " buildingMarker = buildingMarker + 1;" \n " _nearest setVariable ['wfbe_marker', _marker];" \n " createMarkerLocal [_marker, getPos _nearest];" \n " _marker setMarkerColorLocal ""ColorOrange"";" \n " _marker setMarkerShapeLocal ""ELLIPSE"";" \n " _marker setMarkerAlphaLocal 0.4;" \n " _marker setMarkerBrushLocal _brush;" \n " _marker setMarkerSizeLocal [350,350];" \n " };" \n " _set = [_nearest];" \n "};" \n "" \n "_set = towns - _set;" \n "{" \n " if !(isNil {_x getVariable ""wfbe_marker""}) then {" \n " deleteMarkerLocal (_x getVariable ""wfbe_marker"");" \n " _x setVariable [""wfbe_marker"", nil];" \n " };" \n "} forEach _set;" \n "" \n "_ntime = time + 10;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Update_Conquest"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _ntime"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,4346,150.000000,-475.000000,250.000000,-425.000000,0.000000,"Init"}; item1[] = {"Loop",4,218,150.000000,-375.000000,250.000000,-325.000000,0.000000,"Loop"}; item2[] = {"End",1,250,150.000000,-75.000000,250.000000,-25.000000,0.000000,"End"}; item3[] = {"Time",2,250,150.000000,-275.000000,250.000000,-225.000000,0.000000,"Time"}; item4[] = {"Gameover",4,218,150.000000,-175.000000,250.000000,-125.000000,0.000000,"Gameover"}; link0[] = {0,1}; link1[] = {1,3}; link2[] = {3,1}; link3[] = {3,4}; link4[] = {4,2}; globals[] = {25.000000,1,0,0,0,640,480,1,38,6316128,1,-366.140930,481.526276,9.508422,-578.645630,655,489,1}; window[] = {0,-1,-1,-1,-1,659,25,1285,25,1,673}; *//*%FSM*/ class FSM { fsmName = "env_fast_time_cli.fsm"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"/*" \n " Fast Time calculation Formula:" \n " For (Real Life Hour) = (24 Hours Ingame)." \n " > ((((86400/((Real Life Hour)*60*60))*86400)/24/60)/60) * (skipTime Delay) = Needed skipped time." \n " > ((((86400/((1)*60*60))*86400)/24/60)/60) * (2) = 48 >> To have 1H = 24H we need to skipTime 48 seconds each 3 seconds." \n "*/" \n "" \n "_snap = 0;" \n "" \n "_lastDateSync = -10000;" \n "_ft = (missionNamespace getVariable ""WFBE_C_ENVIRONMENT_FAST_TIME"")/3600;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Time"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Time { name = "Time"; init = /*%FSM*/"if (time - _lastDateSync >= 600) then {" \n " setDate WFBE_SERVERDATE;" \n " _lastDateSync = time;" \n "};" \n "" \n "skipTime _ft;" \n "" \n "_snap = time + 2;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Time"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,4346,75.000000,-150.000000,175.000000,-100.000000,0.000000,"Init"}; item1[] = {"Update_Weather",2,250,-75.000000,-50.000000,25.000000,0.000000,0.000000,"Update Weather"}; item2[] = {"End",1,250,-225.000000,50.000000,-125.000000,100.000000,0.000000,"End"}; item3[] = {"Loop",4,218,75.000000,-50.000000,175.000000,0.000000,0.000000,"Loop"}; item4[] = {"Gameover",4,218,-225.000000,-50.000000,-125.000000,0.000000,0.000000,"Gameover"}; link0[] = {0,3}; link1[] = {1,3}; link2[] = {1,4}; link3[] = {3,1}; link4[] = {4,2}; globals[] = {25.000000,1,0,0,0,640,480,1,14,6316128,1,-295.152435,281.205109,161.639832,-270.628296,652,489,1}; window[] = {0,-1,-1,-1,-1,709,75,1335,75,1,670}; *//*%FSM*/ class FSM { fsmName = "env_weather_cli"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_lastOverCast = -1;" \n "_overCast = 0;" \n "" \n "_overcast_delay = missionNamespace getVariable ""WFBE_C_ENVIRONMENT_WEATHER_TRANSITION"";" \n "_snap = -600;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Update_Weather"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_Weather { name = "Update_Weather"; init = /*%FSM*/"_overCast = WF_Logic getVariable ""overCast"";" \n "if (_overCast != _lastOverCast) then {_overcast_delay setOvercast _overCast; _lastOverCast = _overCast};" \n "" \n "_snap = time + 5;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Update_Weather"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,4346,65.361679,-140.426117,155.361542,-90.426193,0.000000,"Init"}; item1[] = {"Update_Income",2,250,-66.836029,-56.267544,23.163887,-6.267582,0.000000,"Update Income"}; item2[] = {"End",1,250,-218.006683,15.304325,-128.006653,65.304314,0.000000,"End"}; item3[] = {"Loop",4,218,65.605347,-56.267605,155.605377,-6.267574,0.000000,"Loop"}; item4[] = {"Gameover",4,218,-216.668854,-56.267559,-126.668869,-6.267574,0.000000,"Gameover"}; link0[] = {0,3}; link1[] = {1,3}; link2[] = {1,4}; link3[] = {3,1}; link4[] = {4,2}; globals[] = {0.000000,0,0,0,0,640,480,1,14,6316128,1,-365.650940,391.210938,85.220795,-348.477112,758,489,1}; window[] = {0,-1,-1,-1,-1,834,200,1460,200,1,776}; *//*%FSM*/ class FSM { fsmName = "resources_cli"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_pside = _this;" \n "" \n "_lastUpdate = time;" \n "" \n "_is = missionNamespace getVariable ""WFBE_C_ECONOMY_INCOME_SYSTEM"";" \n "_ii = missionNamespace getVariable ""WFBE_C_ECONOMY_INCOME_INTERVAL"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Update_Income"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > _ii && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_Income { name = "Update_Income"; init = /*%FSM*/"_lastUpdate = time;" \n "" \n "_income = 0;" \n "" \n "//--- Income Getter." \n "{" \n " _side = (_x getVariable ""sideID"") Call GetSideFromID;" \n " _supply = _x getVariable ""supplyValue"";" \n " if (_side == _pside) then {_income = _income + (_supply / _is)};" \n "} forEach towns;" \n "" \n "//--- Only change the funds if needed." \n "if (_income > 0) then {" \n " (_income) Call ChangePlayerFunds;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Update_Income"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > _ii && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,-64.944939,-176.579712,25.055046,-126.579880,0.000000,"Init"}; item1[] = {"Check_Player",2,250,-66.836029,-56.267544,23.163887,-6.267582,0.000000,"Check Player"}; item2[] = {"End",1,250,-218.006683,15.304325,-128.006653,65.304314,0.000000,"End"}; item3[] = {"Loop",4,218,65.605347,-56.267605,155.605377,-6.267574,0.000000,"Loop"}; item4[] = {"Not_Alive",4,218,-216.668854,-56.267559,-126.668869,-6.267574,1.000000,"Not Alive"}; item5[] = {"Update_Actions",2,4346,66.545509,15.865158,156.545563,65.865219,0.000000,"Update Actions"}; item6[] = {"Alive",4,218,-66.545601,15.865162,23.454397,65.865189,0.000000,"Alive"}; item7[] = {"_",8,218,-37.459465,-108.411957,-3.868937,-87.498108,0.000000,""}; link0[] = {0,7}; link1[] = {1,3}; link2[] = {1,4}; link3[] = {1,6}; link4[] = {3,1}; link5[] = {4,2}; link6[] = {5,3}; link7[] = {6,5}; link8[] = {7,1}; globals[] = {0.000000,0,0,0,0,640,480,1,29,6316128,1,-395.307037,395.306915,167.465607,-285.572937,407,514,1}; window[] = {0,-1,-1,-1,-1,834,200,1460,200,1,425}; *//*%FSM*/ class FSM { fsmName = "updateactions"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_optionsID = -1;" \n "_lastVehicle = player;" \n "_UpdateActions = true;" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Check_Player"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Player { name = "Check_Player"; init = /*%FSM*/"if (Vehicle player != _lastVehicle) then {_UpdateActions = true};" \n "" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Not_Alive { priority = 1.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver || !alive player"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Alive { priority = 0.000000; to="Update_Actions"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"alive player && !gameOver && _UpdateActions"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Check_Player"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 0.5 && !gameOver && alive player && !_UpdateActions"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/"_lastVehicle RemoveAction _optionsID"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Update_Actions { name = "Update_Actions"; init = /*%FSM*/"_UpdateActions = false;" \n "_vehicle = Vehicle player;" \n "if (_vehicle != player) then {_optionsID = _vehicle addAction ["""" + (localize ""STR_WF_Options"") + """",""Client\Action\Action_Menu.sqf"", """", 1, false, true, """", """"]} else {_lastVehicle RemoveAction _optionsID};" \n "_lastVehicle = _vehicle;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check_Player"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 0.5 && !gameOver && alive player && !_UpdateActions"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,64.986191,-133.045959,154.986206,-83.046036,0.000000,"Init"}; item1[] = {"Update_Client_Ac",2,4346,-66.836029,-56.267544,23.163887,-6.267582,0.000000,"Update Client" \n "Actions"}; item2[] = {"End",1,250,-207.023727,26.287281,-117.023697,76.287277,0.000000,"End"}; item3[] = {"Loop",4,218,65.605347,-56.267605,155.605377,-6.267574,0.000000,"Loop"}; item4[] = {"Gameover",4,218,-64.280334,28.850353,25.719648,78.850410,0.000000,"Gameover"}; link0[] = {0,3}; link1[] = {1,3}; link2[] = {1,4}; link3[] = {3,1}; link4[] = {4,2}; globals[] = {0.000000,0,0,0,0,640,480,1,38,6316128,1,-111.691933,155.520172,120.003662,-163.348785,596,632,1}; window[] = {0,-1,-1,-1,-1,964,55,1315,187,1,614}; *//*%FSM*/ class FSM { fsmName = "updateavailableactions"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_lastUpdate = time;" \n "_txt = '';" \n "_handle = nil;" \n "_ft = missionNamespace getVariable ""WFBE_C_GAMEPLAY_FAST_TRAVEL"";" \n "_ftr = missionNamespace getVariable ""WFBE_C_GAMEPLAY_FAST_TRAVEL_RANGE"";" \n "_mhqbr = missionNamespace getVariable ""WFBE_C_BASE_HQ_BUILD_RANGE"";" \n "_pur = missionNamespace getVariable ""WFBE_C_UNITS_PURCHASE_RANGE"";" \n "_pura = missionNamespace getVariable ""WFBE_C_UNITS_PURCHASE_HANGAR_RANGE"";" \n "_ccr = missionNamespace getVariable ""WFBE_C_STRUCTURES_COMMANDCENTER_RANGE"";" \n "_pgr = missionNamespace getVariable ""WFBE_C_UNITS_PURCHASE_GEAR_RANGE"";" \n "_rptr = missionNamespace getVariable ""WFBE_C_UNITS_REPAIR_TRUCK_RANGE"";" \n "_spr = missionNamespace getVariable ""WFBE_C_STRUCTURES_SERVICE_POINT_RANGE"";" \n "_tpr = missionNamespace getVariable ""WFBE_C_TOWNS_BUILD_PROTECTION_RANGE"";" \n "_tcr = missionNamespace getVariable ""WFBE_C_TOWNS_CAPTURE_RANGE"";" \n "_is = missionNamespace getVariable ""WFBE_C_ECONOMY_INCOME_SYSTEM"";" \n "_ac = missionNamespace getVariable ""WFBE_C_ARTILLERY_COMPUTER"";" \n "_buygearfrom = missionNamespace getVariable ""WFBE_C_TOWNS_GEAR"";" \n "_gear_field_range = missionNamespace getVariable ""WFBE_C_UNITS_PURCHASE_GEAR_MOBILE_RANGE"";" \n "_currency_system = missionNamespace getVariable ""WFBE_C_ECONOMY_CURRENCY_SYSTEM"";" \n "_acenabled = false;" \n "_antiairradar_enabled = if ((missionNamespace getVariable ""WFBE_C_STRUCTURES_ANTIAIRRADAR"") > 0) then {true} else {false};" \n "_boundaries_enabled = if ((missionNamespace getVariable ""WFBE_C_GAMEPLAY_BOUNDARIES_ENABLED"") > 0) then {true} else {false};" \n "_hc_enabled = if ((missionNamespace getVariable ""WFBE_C_MODULE_BIS_HC"") > 0) then {true} else {false};" \n "" \n "_ai_delegation_enabled = if ((missionNamespace getVariable ""WFBE_C_AI_DELEGATION"") > 0) then {true} else {false};" \n "_ai_delegation_lastsent = time;" \n "_ai_delegation_fps = 0;" \n "_ai_delegation_fps_count = 0;" \n "" \n "_fastTravel = false;" \n "" \n "_commandCenter = objNull;" \n "" \n "_typeRepair = missionNamespace getVariable Format['WFBE_%1REPAIRTRUCKS',sideJoinedText];" \n "" \n "//--- Keep actions updated (GUI). - changed-MrNiceGuy " \n "12450 cutRsc [""OptionsAvailable"",""PLAIN"",0];" \n "_icons = [" \n """Client\Images\icon_wf_building_mhq.paa"", //mhq deployable" \n """Client\Images\icon_wf_building_barracks.paa"", //barracks " \n """Client\Images\icon_wf_building_gear.paa"", //gear avail" \n """Client\Images\icon_wf_building_lvs.paa"", //lvsp" \n """Client\Images\icon_wf_building_hvs.paa"", //hvsp" \n """Client\Images\icon_wf_building_air.paa"", //helipad" \n """Client\Images\icon_wf_building_hangar.paa"", //hangar" \n """Client\Images\icon_wf_building_repair.paa"", //rearm | repair | refuel" \n """Client\Images\icon_wf_building_firstaid.paa"", //heal " \n """Client\Images\icon_wf_support_fasttravel.paa"", //fast travel" \n """Client\Images\icon_wf_building_cc.paa"", //command center" \n """Client\Images\icon_wf_building_aa_radar.paa"", //AA radar" \n """Client\Images\icon_wf_building_am_radar.paa"", //ARTY radar" \n """Client\Images\icon_wf_support_transport.paa"", //transport" \n """Client\Images\icon_wf_support_supplydrop.paa"", //supply drop" \n """Client\Images\icon_wf_support_artilery.paa"", //ARTY" \n """Client\Images\icon_wf_support_mortar.paa"", //ARTY - mortar" \n """Client\Images\icon_wf_support_cas.paa"", //CAS" \n """Client\Images\icon_wf_support_uav.paa"" //UAV" \n "];"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Update_Client_Ac"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _lastUpdate > 5 || WFBE_ForceUpdate) && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_Client_Ac { name = "Update_Client_Ac"; init = /*%FSM*/"_buildings = (sideJoined) Call WFBE_CO_FNC_GetSideStructures;" \n "_base = (sideJoined) Call WFBE_CO_FNC_GetSideHQ;" \n "_upgrades = (sideJoined) Call WFBE_CO_FNC_GetSideUpgrades;" \n " " \n "_purchaseRange = if (commandInRange) then {_ccr} else {_pur};" \n " " \n "_closest = [vehicle player, towns] Call WFBE_CO_FNC_GetClosestEntity;" \n "" \n "if (!isNull(commanderTeam) && _hc_enabled) then {" \n " if (commanderTeam == group player) then {" \n " {if !(isNil '_x') then {if !(_x in (hcAllGroups player)) then {player HCSetGroup [_x]}}} forEach clientTeams;" \n " };" \n "};" \n "" \n "if (_ai_delegation_enabled) then { //--- AI delegation." \n " _ai_delegation_fps = _ai_delegation_fps + diag_fps;" \n " _ai_delegation_fps_count = _ai_delegation_fps_count + 1;" \n " if (time - _ai_delegation_lastsent > (missionNamespace getVariable ""WFBE_C_AI_DELEGATION_FPS_INTERVAL"")) then { //--- Send the FPS Avg to the server." \n " [""RequestSpecial"", [""update-clientfps"", getPlayerUID(player), round(_ai_delegation_fps / _ai_delegation_fps_count)]] Call WFBE_CO_FNC_SendToServer;" \n " _ai_delegation_lastsent = time;" \n " _ai_delegation_fps_count = 0;" \n " _ai_delegation_fps = 0;" \n " };" \n "};" \n "" \n "//--- Boundaries are limited ?" \n "if (_boundaries_enabled) then {" \n " _isOnMap = Call BoundariesIsOnMap;" \n " if (!_isOnMap && alive player && !WFBE_Client_IsRespawning) then {" \n " if !(paramBoundariesRunning) then {_handle = [] Spawn BoundariesHandleOnMap};" \n " } else {" \n " if !(isNil '_handle') then {terminate _handle;_handle = nil};" \n " paramBoundariesRunning = false;" \n " };" \n "};" \n "" \n "//--- Map info." \n "if (visibleMap) then {" \n " if (!isNull commanderTeam) then {_txt = format [localize 'STR_WF_Commander',name (leader commanderTeam)]} else {_txt = format [localize 'STR_WF_Commander',localize 'STR_WF_AI']};" \n " _txt = _txt + ' ' + Format [localize ""STR_WF_Income"",Call GetPlayerFunds,(sideJoined) Call GetIncome];" \n " if (_is in [3,4]) then {_txt = _txt + Format["" (%1%2)"", WFBE_Client_Logic getVariable ""wfbe_commander_percent"",""%""]};" \n " if (_currency_system == 0) then {_txt = _txt + ' ' + localize 'STR_WF_UPGRADE_Supply' + ': '+ str((sideJoined) Call GetSideSupply)};" \n " (findDisplay 12 displayCtrl 116) ctrlSetText _txt;" \n "};" \n "" \n "//--- HQ." \n "if !(isNull _base) then {" \n " hqInRange = if ((player distance _base < _mhqbr) && alive _base && (player distance _closest > _tpr) && (side _base in [sideJoined,civilian])) then {true} else {false}" \n "};" \n "" \n "barracksInRange = if (isNull (['BARRACKSTYPE',_buildings,_purchaseRange,sideJoined,player] Call BuildingInRange)) then {false} else {true};" \n "gearInRange = if (isNull (['BARRACKSTYPE',_buildings,_pgr,sideJoined,player] Call BuildingInRange)) then {false} else {true};" \n "if !(gearInRange) then {" \n " if (_buygearfrom in [1,2,3]) then {" \n " _nObject = objNull;" \n " switch (_buygearfrom) do { " \n " case 1:{_nObject = [vehicle player, _gear_field_range] Call WFBE_CL_FNC_GetClosestCamp}; " \n " case 2:{_nObject = [vehicle player, _gear_field_range] Call WFBE_CL_FNC_GetClosestDepot}; " \n " case 3:{{if !(isNull _x) exitWith {_nObject = _x}} forEach [[vehicle player, _gear_field_range] Call WFBE_CL_FNC_GetClosestCamp, [vehicle player, _gear_field_range] Call WFBE_CL_FNC_GetClosestDepot]}; " \n " };" \n " gearInRange = if !(isNull _nObject) then {true} else {false};" \n " };" \n "};" \n "" \n "lightInRange = if (isNull (['LIGHTTYPE',_buildings,_purchaseRange,sideJoined,player] Call BuildingInRange)) then {false} else {true};" \n "heavyInRange = if (isNull (['HEAVYTYPE',_buildings,_purchaseRange,sideJoined,player] Call BuildingInRange)) then {false} else {true};" \n "aircraftInRange = if (isNull (['AIRCRAFTTYPE',_buildings,_purchaseRange,sideJoined,player] Call BuildingInRange)) then {false} else {true};" \n "serviceInRange = if (isNull (['SERVICEPOINTTYPE',_buildings,_spr,sideJoined,player] Call BuildingInRange)) then {false} else {true};" \n "" \n "if !(serviceInRange) then {" \n " _checks = (getPos player) nearEntities[_typeRepair,_rptr];" \n " if (count _checks > 0) then {serviceInRange = true};" \n "};" \n "" \n "if (_antiairradar_enabled) then {" \n " _checks = [sideJoined, missionNamespace getVariable Format [""WFBE_%1AARADARTYPE"",sideJoinedText],_buildings] Call GetFactories;" \n " if (count _checks > 0) then {antiAirRadarInRange = true} else {antiAirRadarInRange = false};" \n "};" \n "" \n "//--- Town Depot." \n "depotInRange = if !(isNull ([vehicle player, _tcr] Call WFBE_CL_FNC_GetClosestDepot)) then {true} else {false};" \n "if (depotInRange) then {serviceInRange = true};" \n "" \n "_checks = ['COMMANDCENTERTYPE',_buildings,_ccr,sideJoined,player] Call BuildingInRange;" \n "_commandCenter = _checks;" \n "commandInRange = if (isNull _checks) then {false} else {true};" \n "" \n "//--- Airport." \n "if ((missionNamespace getVariable ""WFBE_C_GAMEPLAY_HANGARS_ENABLED"") > 0) then {" \n " hangarInRange = if !(isNull ([vehicle player, _pura] Call WFBE_CL_FNC_GetClosestAirport)) then {true} else {false};" \n "};" \n "" \n "//--- Fast Travel." \n "if ((_ft > 0) && commandInRange) then {" \n " _fastTravel = false;" \n " _isDeployed = (sideJoined) Call WFBE_CO_FNC_GetSideHQDeployStatus;" \n " if (_upgrades select WFBE_UP_FASTTRAVEL > 0) then {" \n " if (player distance _base < _ftr && alive _base && _isDeployed) then {_fastTravel = true} else {" \n " _sideID = _closest getVariable 'sideID';" \n " if (player distance _closest < _ftr && _sideID == sideID) then {_fastTravel = true} else {" \n " if (!isNull _commandCenter) then {" \n " if (player distance _commandCenter < _ftr) then {_fastTravel = true};" \n " };" \n " };" \n " }; " \n " }; " \n "};" \n "" \n "//--- AC." \n "if (_ac == 1 && !_acenabled && !WF_A2_Vanilla) then {" \n " if ((_upgrades select WFBE_UP_ARTYTIMEOUT) == 3) then {Call Compile ""enableEngineArtillery true;"";_acenabled = true};" \n "};" \n "" \n "_usable = [hqInRange,barracksInRange,gearInRange,lightInRange,heavyInRange,aircraftInRange,hangarInRange,serviceInRange,serviceInRange,_fastTravel,commandInRange,antiAirRadarInRange];" \n "" \n "_c = 0;" \n "if (isNull ([""currentCutDisplay""] call BIS_FNC_GUIget)) then {12450 cutRsc[""OptionsAvailable"",""PLAIN"",0]};" \n "{" \n " if (_x) then {" \n " (([""currentCutDisplay""] call BIS_FNC_GUIget) DisplayCtrl (3500 + _c)) CtrlSetText (_icons select _c);" \n " } else {" \n " (([""currentCutDisplay""] call BIS_FNC_GUIget) DisplayCtrl (3500 + _c)) CtrlSetText """";" \n " };" \n " _c = _c + 1;" \n "}forEach _usable;" \n "" \n "if (WFBE_ForceUpdate) then {WFBE_ForceUpdate = false};" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Update_Client_Ac"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _lastUpdate > 5 || WFBE_ForceUpdate) && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,66.278671,-152.869141,156.278748,-102.869209,0.000000,"Init"}; item1[] = {"Update_Client",2,250,-66.836029,-56.267544,23.163887,-6.267582,0.000000,"Update Client"}; item2[] = {"End",1,250,-218.006683,15.304325,-128.006653,65.304314,0.000000,"End"}; item3[] = {"Loop",4,218,65.605347,-56.267605,155.605377,-6.267574,0.000000,"Loop"}; item4[] = {"Gameover",4,218,-216.668854,-56.267559,-126.668869,-6.267574,0.000000,"Gameover"}; item5[] = {"Update_Commander",2,4346,66.545486,22.916348,156.545471,72.916397,0.000000,"Update" \n "Commander"}; item6[] = {"Change_Commander",4,218,-66.545563,22.916351,23.454376,72.916374,0.000000,"Change" \n "Commander"}; link0[] = {0,3}; link1[] = {1,3}; link2[] = {1,4}; link3[] = {1,6}; link4[] = {3,1}; link5[] = {4,2}; link6[] = {5,3}; link7[] = {6,5}; globals[] = {0.000000,0,0,0,0,640,480,1,22,6316128,1,-345.209412,345.209290,108.499458,-297.536255,854,906,1}; window[] = {2,-1,-1,-1,-1,784,150,1602,150,3,872}; *//*%FSM*/ class FSM { fsmName = "updateclient"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"commanderTeam = (sideJoined) Call WFBE_CO_FNC_GetCommanderTeam;" \n "" \n "_hc_enabled = if ((missionNamespace getVariable ""WFBE_C_MODULE_BIS_HC"") > 0) then {true} else {false};" \n "" \n "_lastCommanderTeam = commanderTeam;" \n "_changeCommander = false;" \n "_timer = 0;" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Update_Client"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 1 && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_Client { name = "Update_Client"; init = /*%FSM*/"commanderTeam = (sideJoined) Call WFBE_CO_FNC_GetCommanderTeam;" \n "if (IsNull commanderTeam && !IsNull _lastCommanderTeam) then {_changeCommander = true};" \n "if (!IsNull commanderTeam && IsNull _lastCommanderTeam) then {_changeCommander = true};" \n "if (!isNull commanderTeam && !isNull _lastCommanderTeam) then {" \n " if (commanderTeam != _lastCommanderTeam) then {_changeCommander = true};" \n "};" \n "" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Change_Commander { priority = 0.000000; to="Update_Commander"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_changeCommander && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Update_Client"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 1 && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Update_Commander { name = "Update_Commander"; init = /*%FSM*/"_changeCommander = false;" \n "_lastCommanderTeam = commanderTeam; " \n "_MHQ = (sideJoined) Call WFBE_CO_FNC_GetSideHQ;" \n "" \n "if (IsNull commanderTeam) then {" \n " if (!IsNull _MHQ) then {" \n " _MHQ RemoveAction 0;" \n " _MHQ RemoveAction 1;" \n " _MHQ RemoveAction 2;" \n " _MHQ RemoveAction 3;" \n " };" \n " if (!isNil ""HQAction"") then {player removeAction HQAction};" \n " if (count (hcAllGroups player) > 0) then {HCRemoveAllGroups player};" \n " {[_x,false] Call SetTeamAutonomous} forEach clientTeams;" \n "};" \n " " \n "if (!isNull(commanderTeam)) then {" \n " if (commanderTeam == Group player) then {" \n " if (!IsNull _MHQ) then {" \n " _MHQ addAction [localize ""STR_WF_Unlock_MHQ"",""Client\Action\Action_ToggleLock.sqf"", [], 95, false, true, '', 'alive _target && locked _target'];" \n " _MHQ addAction [localize ""STR_WF_Lock_MHQ"",""Client\Action\Action_ToggleLock.sqf"", [], 94, false, true, '', 'alive _target && !(locked _target)'];" \n " };" \n " _deployed = (sideJoined) Call WFBE_CO_FNC_GetSideHQDeployStatus;" \n " if (_deployed) then {" \n " [missionNamespace getVariable ""WFBE_C_BASE_COIN_AREA_HQ_DEPLOYED"",true,MCoin] Call Compile PreprocessFile ""Client\Init\Init_Coin.sqf"";" \n " } else {" \n " [missionNamespace getVariable ""WFBE_C_BASE_COIN_AREA_HQ_UNDEPLOYED"",false,MCoin] Call Compile PreprocessFile ""Client\Init\Init_Coin.sqf"";" \n " };" \n " HQAction = leader(group player) addAction [localize ""STR_WF_BuildMenu"",""Client\Action\Action_Build.sqf"", [_MHQ], 100, false, true, """", ""hqInRange && canBuildWHQ && (_target == player)""]; " \n " if (_hc_enabled) then {player setVariable [""BIS_HC_scope"",HC];{if !(isNil '_x') then {player HCSetGroup [_x]; [_x,false] Call SetTeamAutonomous}} forEach clientTeams};" \n " [Localize ""STR_WF_CHAT_PlayerCommander""] Call TitleTextMessage;" \n " } else {" \n " if (!isNil ""HQAction"") then {player removeAction HQAction};" \n " if (count (hcAllGroups player) > 0 && _hc_enabled) then {HCRemoveAllGroups player};" \n " };" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Update_Client"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 1 && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,-64.944939,-176.579712,25.055046,-126.579880,0.000000,"Init"}; item1[] = {"Check_Towns",2,250,-66.836029,-56.267544,23.163887,-6.267582,0.000000,"Check Towns"}; item2[] = {"End",1,250,-218.006683,15.304325,-128.006653,65.304314,0.000000,"End"}; item3[] = {"Loop",4,218,65.605347,-56.267605,155.605377,-6.267574,0.000000,"Loop"}; item4[] = {"Truck_is_Dead",4,218,-216.668854,-56.267559,-126.668869,-6.267574,1.000000,"Truck is" \n "Dead"}; item5[] = {"Check_Wrecks",2,4346,66.545509,15.865158,156.545563,65.865219,0.000000,"Check Wrecks"}; item6[] = {"Has_Driver",4,218,-66.545601,15.865162,23.454397,65.865189,0.000000,"Has Driver"}; item7[] = {"_",8,218,-37.459465,-108.411957,-3.868937,-87.498108,0.000000,""}; link0[] = {0,7}; link1[] = {1,3}; link2[] = {1,4}; link3[] = {1,6}; link4[] = {3,1}; link5[] = {4,2}; link6[] = {5,3}; link7[] = {6,5}; link8[] = {7,1}; globals[] = {0.000000,0,0,0,0,640,480,1,29,6316128,1,-280.138428,228.260757,186.219727,-258.197296,588,489,1}; window[] = {0,-1,-1,-1,-1,784,150,1410,150,1,606}; *//*%FSM*/ class FSM { fsmName = "updatesalvage"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_vehicle = _this select 0;" \n "" \n "_salvagerRange = missionNamespace getVariable ""WFBE_C_UNITS_SALVAGER_SCAVENGE_RANGE"";" \n "_percentage = missionNamespace getVariable ""WFBE_C_UNITS_SALVAGER_SCAVENGE_RATIO"";" \n "" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Check_Towns"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Towns { name = "Check_Towns"; init = /*%FSM*/"_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Truck_is_Dead { priority = 1.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver || !(alive _vehicle)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Has_Driver { priority = 0.000000; to="Check_Wrecks"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(isNull (driver _vehicle)) && !gameOver && alive _vehicle"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Check_Towns"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 5 && !gameOver && alive _vehicle"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Check_Wrecks { name = "Check_Wrecks"; init = /*%FSM*/"_vehicles = nearestObjects [getPos _vehicle, ['Car','Motorcycle','Ship','Air','Tank','StaticWeapon'],_salvagerRange];" \n "" \n "_wrecks = [];" \n "{" \n " if !(alive _x) then {_wrecks = _wrecks + [_x]};" \n "} forEach _vehicles;" \n "" \n "_hqs = [];" \n "{_hqs = _hqs + [_x Call WFBE_CO_FNC_GetSideHQ]} forEach WFBE_PRESENTSIDES;" \n "" \n "_wrecks = _wrecks - _hqs;" \n "" \n "_overAllCost = 0;" \n "{" \n " _isNeeded = _x getVariable 'keepAlive';" \n " " \n " if (isNil '_isNeeded') then {" \n " _get = missionNamespace getVariable (typeOf _x);" \n " _salvageCost = 250;" \n " if !(isNil '_get') then {" \n " _salvageCost = round(((_get select QUERYUNITPRICE)*_percentage) / 100);" \n " };" \n " " \n " _overAllCost = _overAllCost + _salvageCost;" \n " (Format [localize 'STR_WF_CHAT_Salvaged_Unit',_salvageCost,[typeOf _x,'displayName'] Call GetConfigInfo]) Call GroupChatMessage;" \n " " \n " deleteVehicle _x;" \n " };" \n "} foreach _wrecks;" \n "" \n "if (_overAllCost > 0) then {(_overAllCost) Call ChangePlayerfunds};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check_Towns"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 5 && !gameOver && alive _vehicle"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,-64.944939,-176.579712,25.055046,-126.579880,0.000000,"Init"}; item1[] = {"Check_Towns",2,250,-66.836029,-56.267544,23.163887,-6.267582,0.000000,"Check Towns"}; item2[] = {"End",1,250,-218.006683,15.304325,-128.006653,65.304314,0.000000,"End"}; item3[] = {"Loop",4,218,65.605347,-56.267605,155.605377,-6.267574,0.000000,"Loop"}; item4[] = {"Truck_is_Dead",4,218,-216.668854,-56.267559,-126.668869,-6.267574,1.000000,"Truck is" \n "Dead"}; item5[] = {"Truck_Check",2,4346,66.545509,15.865158,156.545563,65.865219,0.000000,"Truck Check"}; item6[] = {"Has_Driver",4,218,-66.545601,15.865162,23.454397,65.865189,0.000000,"Has Driver"}; item7[] = {"_",8,218,-37.459465,-108.411957,-3.868937,-87.498108,0.000000,""}; link0[] = {0,7}; link1[] = {1,3}; link2[] = {1,4}; link3[] = {1,6}; link4[] = {3,1}; link5[] = {4,2}; link6[] = {5,3}; link7[] = {6,5}; link8[] = {7,1}; globals[] = {0.000000,0,0,0,0,640,480,1,29,6316128,1,-338.339722,338.339386,553.058655,-220.453583,587,646,1}; window[] = {0,-1,-1,-1,-1,816,25,1285,25,1,605}; *//*%FSM*/ class FSM { fsmName = "updatesupply"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_vehicle = _this select 0;" \n "_side = _this select 1;" \n "_driver = driver _vehicle;" \n "_lastDriver = driver _vehicle;" \n "" \n "_SV = 1000;" \n "_currentSV = 0;" \n "_maxSV = 0;" \n "_timer = 0;" \n "_exit = false;" \n "_canDeliver = false;" \n "_hq = (sideJoined) Call WFBE_CO_FNC_GetSideHQ;" \n "_lastDestination = _hq;" \n "_delRange = missionNamespace getVariable ""WFBE_C_PLAYERS_SUPPLY_TRUCKS_DELIVERY_RANGE"";" \n "_fpsp = missionNamespace getVariable ""WFBE_C_PLAYERS_SUPPLY_TRUCKS_DELIVERY_FUNDS_COEF"";" \n "_spsp = missionNamespace getVariable ""WFBE_C_PLAYERS_SCORE_DELIVERY"";" \n "" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Check_Towns"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Towns { name = "Check_Towns"; init = /*%FSM*/"if (!alive _vehicle || isNull _vehicle) then {_exit = true}; " \n "" \n "_driver = driver _vehicle;" \n "_hasDriver = false;" \n "_playerInVehicle = false;" \n "if (!IsNull _driver) then {" \n " if (Alive _driver) then {_hasDriver = true};" \n " if (isPlayer _driver) then {_playerInVehicle = true};" \n "};" \n "" \n "_lastDriver = _driver;" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Truck_is_Dead { priority = 1.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver || _exit"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Has_Driver { priority = 0.000000; to="Truck_Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_hasDriver && !gameOver && !_exit"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Check_Towns"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 3 && !gameOver && !_exit"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Truck_Check { name = "Truck_Check"; init = /*%FSM*/"if (!isNull _driver) then {" \n " if (_driver != _lastDriver) then {" \n " _lastDriver = _driver;" \n " if (_playerInVehicle) then {" \n " _txt = localize ""STR_WF_INFO_Supply_Full"";" \n " if (_SV != 1000) then {_txt = Format [localize ""STR_WF_INFO_Supply_Status"",_SV]};" \n " hint _txt;" \n " };" \n " };" \n "};" \n " " \n "_hq = (sideJoined) Call WFBE_CO_FNC_GetSideHQ;" \n "_isDeployed = (sideJoined) Call WFBE_CO_FNC_GetSideHQDeployStatus;" \n "if (_vehicle Distance _hq < 70 && _SV != 1000 && getDammage _hq < 1 && _isDeployed) then {_SV = 1000;_vehicle setFuel 1;_lastDestination = _hq;if (_playerInVehicle) then {hint (localize ""STR_WF_INFO_Supply_Full"")}};" \n "" \n "if (_SV != 1000) then {" \n " _buildings = (sideJoined) Call WFBE_CO_FNC_GetSideStructures;" \n " _checks = [sideJoined,missionNamespace getVariable Format [""WFBE_%1SERVICEPOINTTYPE"",sideJoinedText],_buildings] Call GetFactories;" \n " if (count _checks > 0) then {" \n " _sorted = [_vehicle,_checks] Call SortByDistance;" \n " _nearest = _sorted select 0;" \n " if (_vehicle distance _nearest < 70) then {_SV = 1000;_vehicle setFuel 1;_lastDestination = _nearest;if (_playerInVehicle) then {hint (localize ""STR_WF_INFO_Supply_Full"")}};" \n " };" \n "};" \n "" \n "_loc = [_vehicle,towns] Call SortByDistance;" \n "_closest = _loc select 0;" \n "_name = _closest getVariable ""name"";" \n "_locationSide = (_closest getVariable ""sideID"") Call GetSideFromID;" \n "" \n "_canDeliver = if (_locationSide == _side) then {true} else {false};" \n "" \n "if ((_vehicle Distance _closest < _delRange)&&(_canDeliver)&&(_lastDestination != _closest)) then {" \n " _lastDestination = _closest;" \n " _currentSV = _closest getVariable ""supplyValue"";" \n " _maxSV = _closest getVariable ""maxSupplyValue"";" \n " if (_SV > _currentSV) then {" \n " if (_currentSV != _maxSV) then {" \n " _upgrades = (sideJoined) Call WFBE_CO_FNC_GetSideUpgrades;" \n " _increaseOf = (missionNamespace getVariable ""WFBE_C_TOWNS_SUPPLY_LEVELS_TRUCK"") select (_upgrades select WFBE_UP_SUPPLYRATE);" \n " _currentSV = _currentSV + _increaseOf;" \n " if (_currentSV > _maxSV) then {_currentSV = _maxSV};" \n " _closest setVariable [""supplyValue"",_currentSV,true];" \n " _SV = _currentSV;" \n " _funds = _SV * _fpsp;" \n " hint Format[localize ""STR_WF_INFO_Supply_Deliver"",_name,_SV,_maxSV,_funds];" \n " _funds Call ChangePlayerFunds;" \n " WFBE_RequestChangeScore = ['SRVFNCREQUESTCHANGESCORE',[player,score player + _spsp]];" \n " publicVariable 'WFBE_RequestChangeScore';" \n " if (isHostedServer) then {['SRVFNCREQUESTCHANGESCORE',[player,score player + _spsp]] Spawn HandleSPVF};" \n " };" \n " } else {" \n " hint Format[localize ""STR_WF_INFO_Supply_Equal"",_name,_currentSV,_maxSV];" \n " _SV = _currentSV;" \n " };" \n " WFBE_RequestChangeScore = ['SRVFNCREQUESTCHANGESCORE',[player,score player + _spsp]];" \n " publicVariable 'WFBE_RequestChangeScore';" \n " if (isHostedServer) then {['SRVFNCREQUESTCHANGESCORE',[player,score player + _spsp]] Spawn HandleSPVF};" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check_Towns"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 3 && !gameOver && !_exit"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,4346,66.542603,-131.405823,156.542603,-81.406097,0.000000,"Init"}; item1[] = {"Update_Markers",2,250,-66.836029,-56.267544,23.163887,-6.267582,0.000000,"Update Markers"}; item2[] = {"End",1,250,-194.208939,14.422928,-104.208908,64.422928,0.000000,"End"}; item3[] = {"Loop",4,218,65.605347,-56.267605,155.605377,-6.267574,0.000000,"Loop"}; item4[] = {"Gameover",4,218,-192.871109,-57.148956,-102.871117,-7.148972,0.000000,"Gameover"}; link0[] = {0,3}; link1[] = {1,3}; link2[] = {1,4}; link3[] = {3,1}; link4[] = {4,2}; globals[] = {0.000000,0,0,0,0,640,480,1,14,6316128,1,-395.307037,395.306915,79.046959,-351.956635,725,489,1}; window[] = {0,-1,-1,-1,-1,834,200,1460,200,1,743}; *//*%FSM*/ class FSM { fsmName = "updateteamsmarkers"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_sideText = sideJoinedText;" \n "_label = """";" \n "" \n "_count = 1;" \n "{" \n " _marker = Format[""%1AdvancedSquad%2Marker"",_sideText,_count];" \n " createMarkerLocal [_marker,[0,0,0]];" \n " _marker setMarkerTypeLocal ""b_inf"";" \n " _marker setMarkerColorLocal ""ColorOrange"";" \n " _marker setMarkerSizeLocal [1,1];" \n " _count = _count +1;" \n "} forEach clientTeams;" \n "" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Update_Markers"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 1 && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_Markers { name = "Update_Markers"; init = /*%FSM*/"_count = 1;" \n "{" \n " if !(isNil '_x') then {" \n " _markerType = ""b_inf"";" \n " _marker = Format[""%1AdvancedSquad%2Marker"",_sideText,_count];" \n " " \n " if (alive (leader _x)) then {" \n " _label = """";" \n " if (isPlayer (leader _x)) then {_label = Format[""%1 [%2]"",name (leader _x),_count]} else {_label = Format[""AI [%1]"",_count]};" \n " _marker setMarkerTextLocal _label;" \n " _marker setMarkerPosLocal GetPos (leader _x);" \n " } else {" \n " _markerType = ""b_empty"";" \n " };" \n " " \n " _marker setMarkerTypeLocal _markerType;" \n " };" \n " _count = _count + 1;" \n "} forEach clientTeams;" \n "" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Update_Markers"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 1 && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,4346,64.620567,-141.323822,154.620590,-91.323967,0.000000,"Init"}; item1[] = {"Check_Towns",2,250,-65.773369,-55.204887,24.226547,-5.204931,0.000000,"Check Towns"}; item2[] = {"End",1,250,-218.006683,15.304325,-128.006653,65.304314,0.000000,"End"}; item3[] = {"Loop",4,218,65.605347,-56.267605,155.605377,-6.267574,0.000000,"Loop"}; item4[] = {"Gameover",4,218,-216.668854,-56.267559,-126.668869,-6.267574,0.000000,"Gameover"}; link0[] = {0,3}; link1[] = {1,3}; link2[] = {1,4}; link3[] = {3,1}; link4[] = {4,2}; globals[] = {0.000000,0,0,0,0,640,480,1,30,6316128,1,-395.307037,395.306915,93.428192,-337.575409,744,514,1}; window[] = {0,-1,-1,-1,-1,734,100,1432,100,1,762}; *//*%FSM*/ class FSM { fsmName = "updatetownmarkers"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_lastUpdate = time;" \n "" \n "_tcarm = missionNamespace getVariable ""WFBE_C_PLAYERS_MARKER_TOWN_RANGE"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check_Towns"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 5 && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Towns { name = "Check_Towns"; init = /*%FSM*/"_units = (Units Group player) Call GetLiveUnits;" \n "" \n "{" \n " _town = _x;" \n " _range = (_town getVariable ""range"") * _tcarm;" \n " _visible = false;" \n " if ((_town getVariable ""sideID"") == sideID) then {_visible = true} else {{if (_town distance _x < _range) then {_visible = true}} forEach _units};" \n " _marker = Format [""WFBE_%1_CityMarker"", str _town];" \n " if (_visible) then {_marker setMarkerTextLocal Format["" SV: %1/%2"",_town getVariable ""supplyValue"",_town getVariable ""maxSupplyValue""]} else {_marker setMarkerTextLocal """"};" \n "} forEach towns;" \n "" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Check_Towns"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 5 && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*/Private ["_building","_cpt","_commander","_crew","_currentUnit","_description","_direction","_distance","_driver","_extracrew","_factory","_factoryPosition","_factoryType","_group","_gunner","_index","_init","_isArtillery","_isMan","_locked","_longest","_position","_queu","_queu2","_ret","_show","_soldier","_waitTime","_txt","_type","_upgrades","_unique","_unit","_vehi","_vehicle","_vehicles"]; _building = _this select 0; _unit = _this select 1; _vehi = _this select 2; _factory = _this select 3; _cpt = _this select 4; _isMan = if (_unit isKindOf "Man") then {true} else {false}; unitQueu = unitQueu + _cpt; _distance = 0; _direction = 0; _longest = 0; _position = 0; _waitTime = 0; _factoryType = ""; _description = ""; _currentUnit = missionNamespace getVariable _unit; _waitTime = _currentUnit select QUERYUNITTIME; _description = _currentUnit select QUERYUNITLABEL; _type = typeOf _building; _index = (missionNamespace getVariable Format ["WFBE_%1STRUCTURENAMES",sideJoinedText]) find _type; if (_index != -1) then { _distance = (missionNamespace getVariable Format ["WFBE_%1STRUCTUREDISTANCES",sideJoinedText]) select _index; _direction = (missionNamespace getVariable Format ["WFBE_%1STRUCTUREDIRECTIONS",sideJoinedText]) select _index; _factoryType = (missionNamespace getVariable Format ["WFBE_%1STRUCTURES",sideJoinedText]) select _index; _position = [getPos _building,_distance,getDir _building + _direction] Call GetPositionFrom; _longest = missionNamespace getVariable Format ["WFBE_LONGEST%1BUILDTIME",_factoryType]; } else { if (_type == WFBE_Logic_Depot) then { _distance = missionNamespace getVariable "WFBE_C_DEPOT_BUY_DISTANCE"; _direction = missionNamespace getVariable "WFBE_C_DEPOT_BUY_DIR"; _factoryType = "Depot"; }; if (_type == WFBE_Logic_Airfield) then { _distance = missionNamespace getVariable "WFBE_C_HANGAR_BUY_DISTANCE"; _direction = missionNamespace getVariable "WFBE_C_HANGAR_BUY_DIR"; _factoryType = "Airport"; }; _position = [getPos _building,_distance,getDir _building + _direction] Call GetPositionFrom; _longest = missionNamespace getVariable Format ["WFBE_LONGEST%1BUILDTIME",_factoryType]; }; _unique = varQueu; varQueu = random(10)+random(100)+random(1000); _queu = _building getVariable "queu"; if (isNil "_queu") then {_queu = []}; _queu = _queu + [_unique]; _building setVariable ["queu",_queu,true]; _ret = 0; _queu2 = [0]; if (count _queu > 0) then {_queu2 = _building getVariable "queu"}; _show = false; while {_unique != _queu select 0 && alive _building && !isNull _building} do { sleep 4; _show = true; _ret = _ret + 4; _queu = _building getVariable "queu"; if (_queu select 0 == _queu2 select 0) then { if (_ret > _longest) then { if (count _queu > 0) then { _queu = _building getVariable "queu"; _queu = _queu - [_queu select 0]; _building setVariable ["queu",_queu,true]; }; }; }; if (count _queu != count _queu2) then { _ret = 0; _queu2 = _building getVariable "queu"; }; }; if (_show) then {hint(parseText(Format [localize "STR_WF_INFO_BuyEffective",_description]))}; sleep _waitTime; _queu = _building getVariable "queu"; _queu = _queu - [_unique]; _building setVariable ["queu",_queu,true]; _group = group player; if (!alive _building || isNull _building) exitWith { unitQueu = unitQueu - _cpt; missionNamespace setVariable [Format["WFBE_C_QUEUE_%1",_factory],(missionNamespace getVariable Format["WFBE_C_QUEUE_%1",_factory])-1]; }; if (_isMan) then { _soldier = [_unit,_group,_position,WFBE_Client_SideID] Call WFBE_CO_FNC_CreateUnit; [sideJoinedText,'UnitsCreated',1] Call UpdateStatistics; } else { _driver = _vehi select 0; _gunner = _vehi select 1; _commander = _vehi select 2; _extracrew = _vehi select 3; _locked = _vehi select 4; _factoryPosition = getPos _building; _direction = -((((_position select 1) - (_factoryPosition select 1)) atan2 ((_position select 0) - (_factoryPosition select 0))) - 90);//--- model to world that later on. _vehicle = [_unit, _position, sideID, _direction, _locked] Call WFBE_CO_FNC_CreateVehicle; clientTeam reveal _vehicle; _vehicles = (WF_Logic getVariable "emptyVehicles") + [_vehicle]; WF_Logic setVariable ["emptyVehicles",_vehicles,true]; if (isHostedServer) then {_vehicle setVariable ["WFBE_Taxi_Prohib", true]}; //--- Clear the vehicle. (_vehicle) call WFBE_CO_FNC_ClearVehicleCargo; /* Section: Local Init (Client Only) */ //--- Lock / Unlock. _vehicle addAction [localize "STR_WF_Unlock","Client\Action\Action_ToggleLock.sqf", [], 95, false, true, '', 'alive _target && locked _target']; _vehicle addAction [localize "STR_WF_Lock","Client\Action\Action_ToggleLock.sqf", [], 94, false, true, '', 'alive _target && !(locked _target)']; //--- Supply Truck. if (_unit in (missionNamespace getVariable Format['WFBE_%1SUPPLYTRUCKS',sideJoinedText])) then {[_vehicle,sideJoined] ExecFSM 'Client\FSM\updatesupply.fsm'}; //--- Salvage Truck. if (_unit in (missionNamespace getVariable Format['WFBE_%1SALVAGETRUCK',sideJoinedText])) then {[_vehicle] ExecFSM 'Client\FSM\updatesalvage.fsm'}; //--- Units Balancing. if ((missionNamespace getVariable "WFBE_C_UNITS_BALANCING") > 0) then {(_vehicle) Spawn BalanceInit}; if (_unit isKindOf "Air") then { if !(WF_A2_Vanilla) then { switch (missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES") do { //--- Remove CM if needed. case 0: {(_vehicle) Call WFBE_CO_FNC_RemoveCountermeasures}; //--- Disabled. case 1: { //--- Enabled with upgrades. if (((sideJoined Call WFBE_CO_FNC_GetSideUpgrades) select WFBE_UP_FLARESCM) == 0) then { (_vehicle) Call WFBE_CO_FNC_RemoveCountermeasures; }; }; }; }; }; //--- Are we dealing with an artillery unit. _isArtillery = [_unit,sideJoinedText] Call IsArtillery; if (_isArtillery != -1) then {[_vehicle,_isArtillery,sideJoinedText] Call EquipArtillery}; /* Section: Creation */ [sideJoinedText,'VehiclesCreated',1] Call UpdateStatistics; _built = 0; _group addVehicle _vehicle; //--- Empty Vehicle. if (!_driver && !_gunner && !_commander) exitWith {}; //--- Crew Management. _crew = missionNamespace getVariable Format ["WFBE_%1SOLDIER",sideJoinedText]; if (_unit isKindOf "Tank") then {_crew = missionNamespace getVariable Format ["WFBE_%1CREW",sideJoinedText]}; if (_unit isKindOf "Air") then { _crew = missionNamespace getVariable Format ["WFBE_%1PILOT",sideJoinedText]; }; //--- Driver. if (_driver) then { _soldier = [_crew,_group,_position,WFBE_Client_SideID] Call WFBE_CO_FNC_CreateUnit; [_soldier] allowGetIn true; _soldier moveInDriver _vehicle; }; //--- Gunner. if (_gunner) then { _soldier = [_crew,_group,_position,WFBE_Client_SideID] Call WFBE_CO_FNC_CreateUnit; [_soldier] allowGetIn true; _soldier moveInGunner _vehicle; }; //--- Commander. if (_commander) then { _soldier = [_crew,_group,_position,WFBE_Client_SideID] Call WFBE_CO_FNC_CreateUnit; [_soldier] allowGetIn true; _soldier moveInCommander _vehicle; }; //--- Extra vehicle turrets. if (_extracrew) then { Private ["_turrets"]; _turrets = _currentUnit select QUERYUNITTURRETS; { if (isNull (_vehicle turretUnit _x)) then { _soldier = [_crew,_group,_position,WFBE_Client_SideID] Call WFBE_CO_FNC_CreateUnit; [_soldier] allowGetIn true; _soldier moveInTurret [_vehicle, _x]; }; } forEach _turrets; }; [sideJoinedText,'UnitsCreated',_cpt] Call UpdateStatistics; }; unitQueu = unitQueu - _cpt; missionNamespace setVariable [Format["WFBE_C_QUEUE_%1",_factory],(missionNamespace getVariable Format["WFBE_C_QUEUE_%1",_factory])-1]; hint parseText(Format [localize "STR_WF_INFO_Build_Complete",_description]);[clientTeam, _this] Call ChangeTeamFunds;player commandChat _this;/* Groups Specific Functions. Scope: Client. */ //todo call from init_client.sqf //--- The client join request has been accepted. WFBE_CL_FNC_Groups_JoinAccepted = { Private ["_group"]; _group = _this select 0; WFBE_Client_PendingRequests = [];//--- Flush all existing requests. hint parseText Format["Information:

Your request to join the the group %1 has been Accepted.", _group]; }; //--- The client join request has been denied. WFBE_CL_FNC_Groups_JoinDenied = { Private ["_group"]; _group = _this select 0; hint parseText Format["Information:

Your request to join the the group %1 has been Denied.", _group]; }; //--- The client get kicked back to his original group. WFBE_CL_FNC_Groups_KickedOff = { Private ["_group"]; _group = _this select 0; [player, WFBE_Client_Team, WFBE_Client_SideJoined] Call WFBE_CO_FNC_ChangeUnitGroup; if (leader WFBE_Client_Team != player) then {WFBE_Client_Team selectLeader player}; hint parseText Format["Information:

You were kicked from the group %1, you have been transfered back to your Original group.", _group]; }; //--- Used to display incomming group join requests. WFBE_CL_FNC_Groups_ReceiveRequest = { Private ["_name","_player","_uid"]; _player = _this select 0; _uid = getPlayerUID(_player); _name = name _player; if (alive _player) then { _exists = false; {if ((_x select 0) == _uid) exitWith {_exists = true}} forEach WFBE_Client_PendingRequests; if !(_exists) then { [_uid, _name] Spawn { Private ["_data","_delay","_index","_is_present","_name","_uid"]; _uid = _this select 0; _name = _this select 1; _delay = missionNamespace getVariable "WFBE_C_PLAYERS_SQUADS_REQUEST_TIMEOUT"; while {_delay > -1} do { sleep 1; _is_present = false; { if ((_x select 0) == _uid && (_x select 1) == _name) exitWith {_is_present = true}; } forEach WFBE_Client_PendingRequests; _delay = _delay - 1; if !(_is_present) exitWith {}; }; if (_delay <= 0) then { _index = -1; for '_i' from 0 to count(WFBE_Client_PendingRequests)-1 do { _data = WFBE_Client_PendingRequests select _i; if ((_data select 0) == _uid && (_data select 1) == _name) exitWith {_index = _i}; }; if (_index != -1) then { WFBE_Client_PendingRequests set [_index, "***NIL***"]; WFBE_Client_PendingRequests = WFBE_Client_PendingRequests - ["***NIL***"]; }; }; }; [WFBE_Client_PendingRequests, [_uid, _name]] Call WFBE_CO_FNC_ArrayPush; hint parseText Format["Information:

Player %1 has been requested to join your squad, you may accept or deny the request in the Groups Menu.", _name]; }; }; }; //--- Groups LB filler. WFBE_CL_FNC_UI_Groups_FillUnits = { Private ["_lb","_unit","_units","_u_label","_u_pic","_u_player","_u_veh"]; _units = _this select 0; _lb = _this select 1; if (typeName _units == "GROUP") then {_units = units _units}; for '_i' from 0 to count(_units)-1 do { _unit = _units select _i; _u_veh = if (_unit != vehicle _unit) then {true} else {false}; _u_pic = if (_u_veh) then {"picture"} else {"portrait"}; _u_label = getText(configFile >> "CfgVehicles" >> typeOf(vehicle _unit) >> "displayName"); _u_player = if (isPlayer _unit) then {"*"} else {""}; lnbAddRow[_lb, [Format["%1(%2) [%3]",_u_player,name _unit,_u_label]]]; lnbSetPicture [_lb, [_i,0], getText(configFile >> "CfgVehicles" >> typeOf(vehicle _unit) >> _u_pic)]; }; }; //--- Join a group. WFBE_CL_FNC_UI_Groups_Join = { Private ["_ai","_group","_players","_units"]; _group = _this; _units = (units _group) Call WFBE_CO_FNC_GetLiveUnits; _players = {isPlayer _x} count _units; _ai = (count _units) - _players; if (group player != _group) then { if (_players < (missionNamespace getVariable "WFBE_C_PLAYERS_SQUADS_MAX_PLAYERS")) then { if (time - WFBE_Client_LastGroupJoinRequest > (missionNamespace getVariable "WFBE_C_PLAYERS_SQUADS_REQUEST_DELAY")) then { WFBE_Client_LastGroupJoinRequest = time; //--- Don't bother if the client try to join his original team. if (_group == WFBE_Client_Team) then { [player, _group, WFBE_Client_SideJoined] Call WFBE_CO_FNC_ChangeUnitGroup; _group selectLeader _unit; hint parseText Format["Information:

You have joined back your original group (%1) as a squad leader.",_group]; _update_group = true; _update_list = -1; } else { //---- Always join a team where the leader is not null. if (alive leader _group) then { //--- The team might be controlled by a player, if so this is a request. if (isPlayer leader _group) then { ["RequestSpecial", ["group-query", _group, player, WFBE_Client_SideJoined]] Call WFBE_CO_FNC_SendToServer; hint parseText Format["Information:

A Group join Request has been sent to the group %1 controlled by %2.", _group, name leader _group]; } else { //--- AI Teams may only be joined if the AI TL parameter is enabled. if ((missionNamespace getVariable "WFBE_C_AI_TEAMS_ENABLED") > 0) then { ["RequestSpecial", ["group-query", _group, player, WFBE_Client_SideJoined]] Call WFBE_CO_FNC_SendToServer; _update_group = true; } else { hint parseText "Warning:

AI Teams might not be joined if the AI Teams parameter is disabled."; WFBE_Client_LastGroupJoinRequest = -5000; }; }; } else { hint parseText Format["Warning:

The group you've attempted to join has no leader or the leader is dead (%1).", if (isNull _group) then {"Null"} else {_group}]; WFBE_Client_LastGroupJoinRequest = -5000; }; }; } else { hint parseText Format["Warning:

You cannot change groups that often, please wait %1 seconds.", round(((missionNamespace getVariable "WFBE_C_PLAYERS_SQUADS_REQUEST_DELAY") + WFBE_Client_LastGroupJoinRequest) - time)]; }; } else { hint parseText Format["Warning:

The player limit on this group has been reached (%1).",missionNamespace getVariable "WFBE_C_PLAYERS_SQUADS_MAX_PLAYERS"]; }; } else { hint parseText "Information:

You are already in this squad."; }; }; //--- Kick a player from a squad. WFBE_CL_FNC_UI_Groups_Kick = { Private ["_selected"]; _selected = _group_units select _ui_lnb_sel; if (isPlayer _selected && group _selected == group player) then { lnbDeleteRow [508003, _ui_lnb_sel]; [getPlayerUID _selected, "HandleSpecial", ["group-kick", group player]] Call WFBE_CO_FNC_SendToClients; }; }; //--- Accept a join request. WFBE_CL_FNC_UI_Groups_RequestAccept = { Private ["_data","_index","_players","_units","_type","_uid"]; _units = (units group player) Call WFBE_CO_FNC_GetLiveUnits; _players = {isPlayer _x} count _units; if ((count WFBE_Client_PendingRequests_Accepted) + _players <= (missionNamespace getVariable "WFBE_C_PLAYERS_SQUADS_MAX_PLAYERS")) then { _type = lnbData[508007, [_ui_lnb_sel, 0]]; _uid = lnbData[508007, [_ui_lnb_sel, 1]]; lnbDeleteRow [508007, _ui_lnb_sel]; _index = -1; for '_i' from 0 to count(WFBE_Client_PendingRequests)-1 do { _data = WFBE_Client_PendingRequests select _i; if ((_data select 0) == _uid) exitWith {_index = _i}; }; if (_index != -1) then { WFBE_Client_PendingRequests set [_index, "***NIL***"]; WFBE_Client_PendingRequests = WFBE_Client_PendingRequests - ["***NIL***"]; }; //--- Make sure that the request hasn't timed out. if (_index != -1) then { //--- Use a local array to temporary store the requests, this will prevent mass acceptation glitch with lag. WFBE_Client_PendingRequests_Accepted = WFBE_Client_PendingRequests_Accepted + [_uid]; (_uid) Spawn {sleep 6; WFBE_Client_PendingRequests_Accepted = WFBE_Client_PendingRequests_Accepted - [_this]}; //--- Make the client join my squad. _player = objNull; { {if (getPlayerUID(_x) == _uid) exitWith {_player = _x}} forEach units _x; if !(isNull _player) exitWith {}; } forEach (WFBE_Client_Logic getVariable "wfbe_teams"); if !(isNull _player) then { //--- The player can join our squad. [_player, group player, WFBE_Client_SideJoined] Call WFBE_CO_FNC_ChangeUnitGroup; //--- Inform the remote client that he can join. [_uid, "HandleSpecial", ["group-join-accept", group player]] Call WFBE_CO_FNC_SendToClients; }; }; } else { hint parseText Format["Warning:

The player limit on this group has been reached (%1).", missionNamespace getVariable "WFBE_C_PLAYERS_SQUADS_MAX_PLAYERS"]; }; }; //--- Deny a join request. WFBE_CL_FNC_UI_Groups_RequestDeny = { Private ["_data","_index","_player","_type","_uid"]; _type = lnbData[508007, [_ui_lnb_sel, 0]]; _uid = lnbData[508007, [_ui_lnb_sel, 1]]; lnbDeleteRow [508007, _ui_lnb_sel]; _index = -1; for '_i' from 0 to count(WFBE_Client_PendingRequests)-1 do { _data = WFBE_Client_PendingRequests select _i; if ((_data select 0) == _uid) exitWith {_index = _i}; }; if (_index != -1) then { WFBE_Client_PendingRequests set [_index, "***NIL***"]; WFBE_Client_PendingRequests = WFBE_Client_PendingRequests - ["***NIL***"]; }; //--- Make sure that the request hasn't timed out. if (_index != -1) then { //--- Make sure that the player still exists. _player = objNull; { {if (getPlayerUID(_x) == _uid) exitWith {_player = _x}} forEach units _x; if !(isNull _player) exitWith {}; } forEach (WFBE_Client_Logic getVariable "wfbe_teams"); if !(isNull _player) then { //--- Inform the remote client that he cannot join. [_uid, "HandleSpecial", ["group-join-deny", group player]] Call WFBE_CO_FNC_SendToClients; }; }; };/* Client Special Handled events (HandleSpecial.sqf) Scope: Client. */ WFBE_CL_FNC_Commander_VoteEnd = { Private["_commanderTeam","_text"]; _commanderTeam = _this select 0; _text = Localize "STR_WF_CHAT_AI_Commander"; if (!isNull _commanderTeam) then { _text = Format[localize "STR_WF_CHAT_VoteForNewCommander",name (leader _commanderTeam)]; if (group player == _commanderTeam) then {_text = localize "STR_WF_CHAT_PlayerCommander"}; }; [_text] Call TitleTextMessage; }; WFBE_CL_FNC_Commander_VoteStart = { Private ["_name"]; _name = _this select 0; if (votePopUp) then { waitUntil {!isNil {WFBE_Client_Logic getVariable "wfbe_votetime"}}; if ((WFBE_Client_Logic getVariable "wfbe_votetime") > 0 && !voted) then {createDialog "WFBE_VoteMenu"}; if (voted) then {voted = false}; }; if (isMultiplayer) then {[Format[localize "STR_WF_CHAT_HasVotedForNewCommander", _name]] Call TitleTextMessage}; }; WFBE_CL_FNC_Delegate_TownAI = { Private ["_groups", "_positions", "_side", "_teams", "_town", "_town_vehicles"]; _town = _this select 0; _side = _this select 1; _groups = _this select 2; _positions = _this select 3; _teams = _this select 4; sleep (random 3); //--- Delay a bit to prevent a bandwidth congestion. _retVal = [_town, _side, _groups, _positions, _teams] call WFBE_CO_FNC_CreateTownUnits; _town_vehicles = _retVal select 1; if (count _town_vehicles > 0) then {["RequestSpecial", ["update-delegation", _town, _town_vehicles]] Call WFBE_CO_FNC_SendToServer}; //--- If there is any vehicles, we give them to the server. { _x Spawn { Private ["_team"]; _team = _this; while {count (units _team) > 0} do {sleep 1}; deleteGroup _team; }; } forEach _teams; //--- Delete the group client-sided. }; WFBE_CL_FNC_Display_ICBM = { Private ["_cruise", "_obj"]; _obj = _this select 0; _cruise = _this select 1; waitUntil {!alive _cruise}; [_obj] Spawn Nuke; }; WFBE_CL_FNC_EndGame = { Private["_sideValue"]; _sideValue = _this select 0; gameOver = true; WFBE_GameOver = true; (_sideValue Call WFBE_CO_FNC_GetSideFromID) ExecVM "Client\Client_EndGame.sqf"; }; WFBE_CL_FNC_HQ_SetStatus = { if (_this select 0) then { [missionNamespace getVariable "WFBE_C_BASE_COIN_AREA_HQ_DEPLOYED",true,MCoin] Call Compile preprocessFile "Client\Init\Init_Coin.sqf"; } else { [missionNamespace getVariable "WFBE_C_BASE_COIN_AREA_HQ_UNDEPLOYED",false,MCoin] Call Compile preprocessFile "Client\Init\Init_Coin.sqf"; }; }; WFBE_CL_FNC_Perform_Action = { Private ['_action','_from','_unit']; _unit = _this select 0; _action = _this select 1; _from = _this select 2; _unit action [_action, _from]; switch (_action) do { case "EJECT": {unassignVehicle _unit}; }; }; WFBE_CL_FNC_Reveal_UAV = { Private ['_marker','_size','_target','_uav']; _uav = _this select 0; _target = _this select 1; if (typeName _uav != 'OBJECT' || typeName _target != 'OBJECT') exitWith {["ERROR", Format ["uav-reveal: An object is expected for both parameters given (UAV: [%1] Target: [%2]).",_uav,_target]] Call WFBE_CO_FNC_LogContent}; _size = round((_uav distance _target) / 16); _marker = Format["WFBE_UAV_SPOTTED_%1",unitMarker]; unitMarker = unitMarker + 1; createMarkerLocal [_marker,[(getPos _target select 0) - random(_size) + random(_size),(getPos _target select 1) - random(_size) + random(_size),0]]; _marker setMarkerShapeLocal "Ellipse"; _marker setMarkerColorLocal "ColorOrange"; _marker setMarkerSizeLocal [_size,_size]; sleep ((missionNamespace getVariable "WFBE_C_PLAYERS_UAV_SPOTTING_DELAY")*3); deleteMarkerLocal _marker; }; WFBE_CL_FNC_Upgrade_Complete = { Private ["_upgrade","_level"]; _upgrade = _this select 0; _level = _this select 1; (Format [Localize "STR_WF_CHAT_Upgrade_Complete_Message",(missionNamespace getVariable "WFBE_C_UPGRADES_LABELS") select _upgrade, _level]) Call CommandChatMessage; if !(isNull commanderTeam) then { //--- Commander reward (if the player is the commander) if (commanderTeam == group player) then { ["RequestChangeScore", [player, score player + (missionNamespace getVariable "WFBE_C_PLAYERS_COMMANDER_SCORE_UPGRADE")]] Call WFBE_CO_FNC_SendToServer; }; }; };Private ["_index"]; _index = _this select 0; switch (_index) do { case 0: { // None. "colorCorrections" ppEffectEnable false; "chromAberration" ppEffectEnable false; "radialBlur" ppEffectEnable false; "filmGrain" ppEffectEnable false; }; case 1: { // High contrast postprocess added. "colorCorrections" ppEffectAdjust [1, 0.9, -0.002, [0.0, 0.0, 0.0, 0.0], [1.0, 0.6, 0.4, 0.6], [0.199, 0.587, 0.114, 0.0]]; "colorCorrections" ppEffectCommit 1; "colorCorrections" ppEffectEnable true; }; case 2: { // Blue color corrections added (movie night style). "colorCorrections" ppEffectAdjust [1, 1, 0, [0.0, 0.0, 0.0, 0.0], [0.6, 0.6, 1.8, 0.7], [0.199, 0.587, 0.114, 0.0]]; "colorCorrections" ppEffectCommit 1; "colorCorrections" ppEffectEnable true; }; case 3: { // Color corrections. "colorCorrections" ppEffectAdjust [1, 0.8, -0.002, [0.0, 0.0, 0.0, 0.0], [0.6, 0.7, 0.8, 0.65], [0.199, 0.587, 0.114, 0.0]]; "colorCorrections" ppEffectCommit 1; "colorCorrections" ppEffectEnable true; }; case 4: { // Color corrections. "colorCorrections" ppEffectAdjust [1, 1, -0.0045, [0.0, 0.0, 0.0, 0.0], [1, 0.6, 0.4, 0.4], [0.199, 0.587, 0.114, 0.0]]; "colorCorrections" ppEffectCommit 1; "colorCorrections" ppEffectEnable true; // Light film grain. "filmGrain" ppEffectEnable true; "filmGrain" ppEffectAdjust [0.02, 1, 1, 0.1, 1, false]; "filmGrain" ppEffectCommit 1; }; case 5: { // Color corrections. "colorCorrections" ppEffectAdjust [1, 1, -0.002, [0.1, 0.05, 0.0, 0.02], [1.2, 1.0, 0.8, 0.666], [0.5, 0.5, 0.5, 0.0]]; "colorCorrections" ppEffectCommit 1; "colorCorrections" ppEffectEnable true; // Light film grain. "filmGrain" ppEffectEnable true; "filmGrain" ppEffectAdjust [0.02, 1, 1, 0.1, 1, false]; "filmGrain" ppEffectCommit 1; }; };/* Get the AI ID Parameters: - Unit */ Private ["_i","_split","_unit","_yield"]; _unit = _this; if (_unit == leader (group _unit)) exitWith {"Leader"}; if (isPlayer _unit && _unit != leader (group _unit)) exitWith {"Player"}; _split = toArray(str _unit); _find = _split find 58; _yield = []; if (_find != -1) then { for '_i' from (_find+1) to count(_split)-1 do { if ((_split select _i) == 65 || (_split select _i) == 32) exitWith {}; _yield = _yield + [_split select _i]; }; }; if (count _yield == 0) exitWith {"0"}; toString(_yield)/* Return the gear of unit's backpack. Parameters: - unit */ Private ["_return"]; _return = [[],[]]; if !(isNull (unitBackpack _this)) then { _return set [0, getWeaponCargo(unitBackpack _this)]; _return set [1, getMagazineCargo(unitBackpack _this)]; }; _return/* Return the closest airport of the given entitie. Parameters: - Object */ Private ["_closest","_near","_pos","_range"]; _closest = objNull; _pos = _this select 0; _range = _this select 1; _near = _pos nearEntities [WFBE_Logic_Airfield, _range]; {if !(isNil {_x getVariable "wfbe_hangar"}) then {if (alive (_x getVariable "wfbe_hangar")) then {_closest = _x}}} forEach _near; _closest/* Return the closest depot of the given entitie. Parameters: - Object - Range - Ignore camp side ID */ Private ["_closest","_near","_pos","_range"]; _closest = objNull; _pos = _this select 0; _range = _this select 1; _ignore_side = if (count _this > 2) then {_this select 2} else {false}; _near = _pos nearEntities [WFBE_Logic_Camp, _range]; { if !(isNil {_x getVariable "sideID"}) then { if (alive(_x getVariable "wfbe_camp_bunker")) then { if (_ignore_side) then { _closest = _x; } else { if ((_x getVariable "sideID") == sideID) then {_closest = _x;}; }; }; }; } forEach _near; _closest/* Return the closest depot of the given entitie. Parameters: - Object */ Private ["_closest","_near","_pos","_range"]; _closest = objNull; _pos = _this select 0; _range = _this select 1; _near = _pos nearEntities [WFBE_Logic_Depot, _range]; {if !(isNil {_x getVariable "sideID"}) then {if ((_x getVariable "sideID") == sideID && isNil {_x getVariable "wfbe_inactive"}) then {_closest = _x}}} forEach _near; _closest/* Return the free cargo capacity of a backpack Parameters: - unit - category to check - existing loadout */ Private ["_count","_existing_content","_get","_items","_limit_mag","_limit_wep","_m","_prefix","_roomfor_mag","_roomfor_wep","_size","_size_m","_size_w","_unit","_w"]; _unit = _this select 0; _existing_content = _this select 1; _limit_mag = getNumber(configFile >> 'CfgVehicles' >> _unit >> "transportMaxMagazines"); _limit_wep = getNumber(configFile >> 'CfgVehicles' >> _unit >> "transportMaxWeapons"); _w = 0; _size = 0; _size_w = 0; _size_m = 0; _m = 0; for '_i' from 0 to 2 do { if (count(_existing_content select _i) > 0) then { _prefix = if (_i == 1) then {"Mag_"} else {""}; _items = ((_existing_content) select _i) select 0; _count = ((_existing_content) select _i) select 1; for '_j' from 0 to count(_items)-1 do { _get = missionNamespace getVariable Format["%1%2",_prefix,_items select _j]; if !(isNil '_get') then { _size = _size + ((_get select 5) * (_count select _j)); if (_i == 1) then { _m = _m + (_count select _j); _size_m = _size_m + ((_get select 5) * (_count select _j)); } else { if ((_get select 4) in [4,5]) then {_m = _m + (_count select _j);_size_m = _size_m + ((_get select 5) * (_count select _j));} else {_w = _w + (_count select _j);_size_w = _size_w + ((_get select 5) * (_count select _j));}; }; }; }; }; }; _roomfor_mag = if (_m < _limit_mag) then {true} else {false}; _roomfor_wep = if (_w < _limit_wep) then {true} else {false}; [_limit_mag - _size, _roomfor_mag, _roomfor_wep, _size_w, _size_m, _w, _m]Private["_commanderTeam","_income","_incomeSystem","_side"]; _side = _this; _incomeSystem = missionNamespace getVariable "WFBE_C_ECONOMY_INCOME_SYSTEM"; _income = (_side) Call GetTownsIncome; switch (_incomeSystem) do { case 2: {_income = round(_income /2)}; case 3: { Private["_ply"]; _commanderTeam = (_side) Call WFBE_CO_FNC_GetCommanderTeam; if (isNull _commanderTeam) then {_commanderTeam = grpNull}; _ply = round(_income * (((100 - (WFBE_Client_Logic getVariable "wfbe_commander_percent"))/100)/WFBE_Client_Teams_Count)); if (_commanderTeam == group player) then { _income = round((_income * ((WFBE_Client_Logic getVariable "wfbe_commander_percent")/100)) / (missionNamespace getVariable "WFBE_C_ECONOMY_INCOME_DIVIDED")) + _ply; } else { _income = _ply; }; }; case 4: { Private["_ply"]; _commanderTeam = (_side) Call WFBE_CO_FNC_GetCommanderTeam; if (isNull _commanderTeam) then {_commanderTeam = grpNull}; _ply = round(_income * (100 - (WFBE_Client_Logic getVariable "wfbe_commander_percent")) / 100); if (_commanderTeam == group player) then { _income = _ply + round((_income - _ply)*WFBE_Client_Teams_Count); } else { _income = _ply; }; }; }; _income/* Calculate the size of the magazines Parameters: - Magazines */ Private ["_get","_size"]; _size = 0; { _get = missionNamespace getVariable Format["Mag_%1",_x]; if !(isNil '_x') then { _size = _size + (_get select 5); }; } forEach _this; _size/* Return a parsed gear inventory. Parameters: - Weapons - Magazines */ Private ["_get","_get_backpack","_get_backpack_content","_get_hand","_get_mag_main","_get_mag_seco","_get_misc","_get_prim","_get_seco","_get_spec","_magazines","_return","_unit","_weapons"]; _weapons = _this select 0; _magazines = _this select 1; _unit = if (count _this > 2) then {_this select 2} else {objNull}; _return = []; _get_prim = ""; _get_seco = ""; _get_backpack = ""; _get_hand = ""; _get_spec = []; _get_misc = []; _get_mag_main = []; _get_mag_seco = []; { _get = missionNamespace getVariable _x; if !(isNil '_get') then { switch (_get select 4) do { case 0: {_get_prim = _x}; case 1: {_get_hand = _x}; case 2: {_get_seco = _x}; case 3: {_get_prim = _x; _get_seco = ""}; case 4: {_get_spec = _get_spec + [_x]}; case 5: {_get_misc = _get_misc + [_x]}; case 200: {_get_backpack = _x}; case 201: {_get_backpack = _x}; }; }; } forEach _weapons; { _get = missionNamespace getVariable Format ["Mag_%1",_x]; if !(isNil '_get') then { switch (_get select 4) do { case 100: {_get_mag_seco = _get_mag_seco + [_x]}; case 101: {_get_mag_main = _get_mag_main + [_x]}; }; }; } forEach _magazines; _get_backpack_content = [[[],[]],[[],[]]]; if (!isNull _unit && _get_backpack != "") then {_get_backpack_content = (_unit) Call WFBE_CL_FNC_GetBackpackContent}; [_get_prim,_get_seco,_get_hand,_get_backpack,_get_spec,_get_misc,_get_mag_main,_get_mag_seco,_get_backpack_content](clientTeam) Call GetTeamFundsPrivate ["_availableSpawn","_base_respawn","_buildings","_checks","_deathLoc","_farps","_has_baserespawn","_hq","_mobileRespawns","_range","_side","_sideText","_upgrades"]; _side = _this select 0; _deathLoc = _this select 1; _sideText = str _side; //--- Base. _hq = (_side) Call WFBE_CO_FNC_GetSideHQ; _availableSpawn = [_hq]; _buildings = (_side) Call WFBE_CO_FNC_GetSideStructures; _checks = [_side,missionNamespace getVariable Format["WFBE_%1BARRACKSTYPE",_sideText],_buildings] Call GetFactories; if (count _checks > 0) then {_availableSpawn = _availableSpawn + _checks}; _checks = [_side,missionNamespace getVariable Format["WFBE_%1LIGHTTYPE",_sideText],_buildings] Call GetFactories; if (count _checks > 0) then {_availableSpawn = _availableSpawn + _checks}; _checks = [_side,missionNamespace getVariable Format["WFBE_%1HEAVYTYPE",_sideText],_buildings] Call GetFactories; if (count _checks > 0) then {_availableSpawn = _availableSpawn + _checks}; _checks = [_side,missionNamespace getVariable Format["WFBE_%1AIRCRAFTTYPE",_sideText],_buildings] Call GetFactories; if (count _checks > 0) then {_availableSpawn = _availableSpawn + _checks}; _base_respawn = _availableSpawn - [_hq]; _has_baserespawn = if (alive _hq || count _base_respawn > 0) then {true} else {false}; _checks = [_side,missionNamespace getVariable Format["WFBE_%1COMMANDCENTERTYPE",_sideText],_buildings] Call GetFactories; if (count _checks > 0) then {_availableSpawn = _availableSpawn + _checks}; _checks = [_side,missionNamespace getVariable Format["WFBE_%1SERVICEPOINTTYPE",_sideText],_buildings] Call GetFactories; if (count _checks > 0) then {_availableSpawn = _availableSpawn + _checks}; //--- HQ is dead, but we can spawn at other buildings. if (!alive _hq && count _availableSpawn > 1) then {_availableSpawn = _availableSpawn - [_hq]}; //--- Mobile respawn. if ((missionNamespace getVariable "WFBE_C_RESPAWN_MOBILE") > 0) then { _mobileRespawns = missionNamespace getVariable Format["WFBE_%1AMBULANCES",_sideText]; _upgrades = (_side) Call WFBE_CO_FNC_GetSideUpgrades; _range = (missionNamespace getVariable "WFBE_C_RESPAWN_RANGES") select (_upgrades select WFBE_UP_RESPAWNRANGE); _checks = _deathLoc nearEntities[_mobileRespawns,_range]; if (count _checks > 0) then { { if (_x emptyPositions "cargo" > 0) then { _availableSpawn = _availableSpawn + [_x]; }; } forEach _checks; }; }; //--- MASH. if ((missionNamespace getVariable "WFBE_C_RESPAWN_MASH") > 0) then { _mash = WFBE_Client_Logic getVariable "wfbe_mash"; if (alive _mash) then { _upgrades = (_side) Call WFBE_CO_FNC_GetSideUpgrades; _range = (missionNamespace getVariable "WFBE_C_RESPAWN_RANGES") select (_upgrades select WFBE_UP_RESPAWNRANGE); if (_deathLoc distance _mash <= _range) then {_availableSpawn = _availableSpawn + [_mash]}; }; }; //--- Leader. if ((missionNamespace getVariable "WFBE_C_RESPAWN_LEADER") > 0) then { if (group player != WFBE_Client_Team && (leader group player) != player) then { if (alive (leader group player) && _deathLoc distance vehicle(leader group player) <= (missionNamespace getVariable "WFBE_C_RESPAWN_RANGE_LEADER")) then {_availableSpawn = _availableSpawn + [leader group player]}; }; }; //--- In a threeway, defender players are able to respawn in side-controlled towns as long as all camps are owned by the defender's side. if (WFBE_ISTHREEWAY && _side == WFBE_DEFENDER) then { _availableSpawn = _availableSpawn + (_side Call GetRespawnThreeway); //--- Victory condition may allow random respawn on startup locations. if ((missionNamespace getVariable "WFBE_C_VICTORY_THREEWAY") in [0]) then { //--- Make sure that at least one base respawn is available. if !(_has_baserespawn) then {_availableSpawn = _availableSpawn - [_hq];_availableSpawn = _availableSpawn + [WFBE_Client_Logic getVariable "wfbe_startpos"]}; }; }; //--- Camps. if ((missionNamespace getVariable "WFBE_C_RESPAWN_CAMPS_MODE") > 0) then { _availableSpawn = _availableSpawn + ([_deathLoc, _side] Call GetRespawnCamps); }; _availableSpawnPrivate["_class","_label","_rlType","_side","_structure","_structures","_structuresNames"]; _structure = _this select 0; _side = _this select 1; _class = typeOf _structure; _structures = missionNamespace getVariable Format ['WFBE_%1STRUCTURES', _side]; _structuresNames = missionNamespace getVariable Format ['WFBE_%1STRUCTURENAMES',_side]; _rlType = _structures select (_structuresNames find _class); _label = switch (_rlType) do { case "Barracks": {"B"}; case "Light": {"L"}; case "CommandCenter": {"C"}; case "Heavy": {"H"}; case "Aircraft": {"A"}; case "ServicePoint": {"S"}; case "AARadar": {"AAR"}; default {""}; }; _labelPrivate ["_days","_hours","_minutes","_seconds","_uptime"]; _days = 0; _hours = 0; _minutes = 0; _seconds = 0; _uptime = time; _days = floor(_uptime / 86400); _hours = floor((_uptime - (_days * 86400)) / 3600); _minutes = floor((_uptime - (_hours * 3600) - (_days * 86400)) / 60); _seconds = floor(_uptime - (_minutes * 60) - (_hours * 3600) -(_days * 86400)); [_days,_hours,_minutes,_seconds]/* Return the backpack of a unit (script friendly). Parameters: - Unit */ if !(isNull(unitBackpack _this)) then {typeOf(unitBackpack _this)} else {""}/* Return the free cargo capacity of a vehicle Parameters: - unit - category to check - existing loadout */ Private ["_b","_count","_existing_content","_get","_items","_limit_bak","_limit_mag","_limit_wep","_m","_prefix","_unit","_w"]; _unit = _this select 0; _existing_content = _this select 1; _limit_bak = getNumber(configFile >> 'CfgVehicles' >> _unit >> "transportMaxBackpacks"); _limit_mag = getNumber(configFile >> 'CfgVehicles' >> _unit >> "transportMaxMagazines"); _limit_wep = getNumber(configFile >> 'CfgVehicles' >> _unit >> "transportMaxWeapons"); _w = 0;_b = 0;_m = 0; for '_i' from 0 to 2 do { if (count(_existing_content select _i) > 0) then { _prefix = if (_i == 1) then {"Mag_"} else {""}; _items = ((_existing_content) select _i) select 0; _count = ((_existing_content) select _i) select 1; for '_j' from 0 to count(_items)-1 do { _get = missionNamespace getVariable Format["%1%2",_prefix,_items select _j]; if !(isNil '_get') then { switch (true) do { case ((_get select 4) in [4,5,100,101]): {_m = _m + (_count select _j)}; case ((_get select 4) < 4): {_w = _w + (_count select _j)}; case ((_get select 4) in [200,201]): {_b = _b + (_count select _j)}; }; }; }; }; }; [_limit_wep - _w, _limit_mag - _m, _limit_bak - _b, _w, _m, _b]/* Return the known gear of a vehicle. Parameters: - Vehicle */ Private ["_return"]; _return = [[],[],[]]; if (alive _this) then { _u = 0; { _content = _x select 0; _prefix = _x select 1; _items = _content select 0; _count = _content select 1; for '_i' from 0 to count(_items)-1 do { if (isNil {missionNamespace getVariable Format ["%1%2",_prefix,_items select _i]}) then {_items set [_i, false];_count set [_i, false]}; }; _items = _items - [false]; _count = _count - [false]; _return set [_u, [_items, _count]]; _u = _u + 1; } forEach [[getWeaponCargo _this, ""],[getMagazineCargo _this, "Mag_"],[getBackpackCargo _this, ""]]; }; _returnplayer groupChat _thisPrivate ['_hq']; _hq = _this; if (isNull _hq) exitWith {}; /* Lag Handler */ while {!isNull _hq} do { canBuildWHQ = false; sleep 0.21; }; canBuildWHQ = true;Private ['_isOnMap','_timeToKill']; _timeToKill = missionNamespace getVariable "WFBE_C_PLAYERS_OFFMAP_TIMEOUT"; paramBoundariesRunning = true; while {true} do { sleep 1; _isOnMap = Call BoundariesIsOnMap; if !(_isOnMap) then { hint parseText(Format[localize 'STR_WF_INFO_OffmapWarning',_timeToKill]); _timeToKill = _timeToKill - 1; }; if (_timeToKill < 0 || _isOnMap || !(alive player)) exitWith { if !(_isOnMap && alive player) then {(vehicle player) setDamage 1}; paramBoundariesRunning = false; }; };/* Client receives PVF Here. Parameters: - Client PVF */ Private ["_destination","_exit","_parameters","_publicVar","_script"]; _publicVar = _this; _exit = true; _destination = _publicVar select 0; if (isNil '_destination') then {_destination = 0;_exit = false}; if (typeName(_destination) == 'SIDE') then {if (sideJoined == _destination) then {_exit = false}}; if (typeName(_destination) == 'STRING') then {if (isMultiplayer) then {if (getPlayerUID player == _destination) then {_exit = false}} else {_exit = false}}; if (_exit) exitWith {}; _script = _publicVar select 1; _parameters = if (count _this > 2) then {_publicVar select 2} else {[]}; _parameters Spawn (Call Compile _script);Private ['_adis','_bdis','_borderdis','_boundary','_difx','_dify','_dir','_position','_positiondis','_sqrradH','_sqrradHR']; _boundary = missionNamespace getVariable 'WFBE_BOUNDARIESXY'; _sqrradH = _boundary / 2; _sqrradHR = [_sqrradH,_sqrradH]; _position = [getPos player select 0, getPos player select 1]; _difx = (_position select 0) - _sqrradH; _dify = (_position select 1) - _sqrradH; _dir = atan (_difx / _dify); if (_dify < 0) then {_dir = _dir + 180}; _adis = abs (_sqrradH / cos (90 - _dir)); _bdis = abs (_sqrradH / cos _dir); _borderdis = _adis min _bdis; _positiondis = _position distance _sqrradHR; if (_positiondis < _borderdis) then {true} else {false}Private ["_additionalErase","_direction","_expand","_markerColor","_markerMax","_markerMin","_markerName","_markerPosition","_markerSize","_markerType"]; _markerName = _this select 0; _markerPosition = _this select 1; _markerType = _this select 2; _markerSize = _this select 3; _markerColor = _this select 4; _markerMin = _this select 5; _markerMax = _this select 6; _additionalErase = ""; if (count _this > 7) then {_additionalErase = _this select 7}; deleteMarkerLocal _markerName; CreateMarkerLocal [_markerName,_markerPosition]; _markerName setMarkerTypeLocal _markerType; _markerName setMarkerColorLocal _markerColor; _markerName setMarkerSizeLocal [_markerSize,_markerSize]; _difference = (_markerMax - _markerMin)/10; _direction = 0; _expand = true; activeAnimMarker = true; if (_additionalErase != "") then { Private ["_pr"]; _pr = missionNamespace getVariable "WFBE_C_AI_PATROL_RANGE"; createMarkerLocal [_additionalErase,_markerPosition]; _additionalErase setMarkerShapeLocal "Ellipse"; _additionalErase setMarkerColorLocal _markerColor; _additionalErase setMarkerSizeLocal [_pr,_pr]; }; while {activeAnimMarker} do { sleep 0.03; _direction = (_direction + 1) % 360; _markerName setMarkerDirLocal _direction; _markerName setMarkerSizeLocal [_markerSize,_markerSize]; if (_markerSize > _markerMax) then {_expand = false}; if (_markerSize < _markerMin) then {_expand = true}; if (_expand) then {_markerSize = _markerSize + _difference} else {_markerSize = _markerSize - _difference}; }; deleteMarkerLocal _markerName; if (_additionalErase != "") then {deleteMarkerLocal _additionalErase};/* Triggered whenever the player die Parameters: - Killed */ Private ["_body"]; _body = _this select 0; //--- EH are flushed on unit death, still, just make sure. player removeEventHandler ["killed", WFBE_PLAYERKEH]; WFBE_Client_IsRespawning = true; {player removeAction 0} forEach [0,1,2,3,4,5]; if !(isNil "HQAction") then {player removeAction HQAction}; player removeAction Options; //--- Close any existing dialogs. if (dialog) then {closeDialog 0}; WFBE_DeathLocation = getPos _body; //--- Fade transition. titleCut["","BLACK OUT",1]; waitUntil {alive player}; //--- Update the player. ["RequestSpecial", ["update-teamleader", WFBE_Client_Team, player]] Call WFBE_CO_FNC_SendToServer; //--- Make sure that player is always the leader (of his group). if (group player == WFBE_Client_Team) then { if (leader(group player) != player) then {(group player) selectLeader player}; }; titleCut["","BLACK IN",1]; //--- Re-add the KEH to the client. WFBE_PLAYERKEH = player addEventHandler ['Killed', {[_this select 0,_this select 1] Spawn WFBE_CL_FNC_OnKilled; [_this select 0,_this select 1, sideID] Spawn WFBE_CO_FNC_OnUnitKilled}]; //--- Call the pre respawn routine. (player) Call PreRespawnHandler; //--- Camera & PP thread [] Spawn { Private ["_delay"]; _delay = missionNamespace getVariable "WFBE_C_RESPAWN_DELAY"; "dynamicBlur" ppEffectEnable true; "dynamicBlur" ppEffectAdjust [1]; "dynamicBlur" ppEffectCommit _delay/3; "colorCorrections" ppEffectAdjust [1, 1, 0, [0.1, 0.0, 0.0, 1], [1.0, 0.5, 0.5, 0.1], [0.199, 0.587, 0.114, 0.0]]; "colorCorrections" ppEffectCommit 0.1; "colorCorrections" ppEffectEnable true; "colorCorrections" ppEffectAdjust [1, 1, 0, [0.1, 0.0, 0.0, 0.5], [1.0, 0.5, 0.5, 0.1], [0.199, 0.587, 0.114, 0.0]]; "colorCorrections" ppEffectCommit _delay/3; WFBE_DeathCamera = "camera" camCreate WFBE_DeathLocation; WFBE_DeathCamera camSetDir 0; WFBE_DeathCamera camSetFov 0.7; WFBE_DeathCamera cameraEffect["Internal","TOP"]; WFBE_DeathCamera camSetTarget WFBE_DeathLocation; WFBE_DeathCamera camSetPos [WFBE_DeathLocation select 0,(WFBE_DeathLocation select 1) + 2,5]; WFBE_DeathCamera camCommit 0; waitUntil {camCommitted WFBE_DeathCamera}; WFBE_DeathCamera camSetPos [WFBE_DeathLocation select 0,(WFBE_DeathLocation select 1) + 2,30]; WFBE_DeathCamera camCommit _delay+2; }; sleep random 1; //--- Create a respawn menu. createDialog "WFBE_RespawnMenu";Private ["_allowCustom","_buildings","_charge","_funds","_get","_loadDefault","_listbp","_mode","_price","_skip","_spawn","_spawnInside","_typeof","_unit","_weaps"]; _unit = _this select 0; _spawn = _this select 1; _loadDefault = true; _typeof = typeOf _spawn; WFBE_Client_IsRespawning = false; _allowCustom = true; //--- Default gear enforcement on mobile respawn. if ((missionNamespace getVariable "WFBE_C_RESPAWN_MOBILE") == 2) then { if (_typeof in (missionNamespace getVariable Format ["WFBE_%1AMBULANCES",sideJoinedText])) then {_allowCustom = false}; }; //--- Default gear enforcement on mash respawn. if ((missionNamespace getVariable "WFBE_C_RESPAWN_MASH") == 2) then { if (_typeof == (missionNamespace getVariable Format ["WFBE_%1FARP",sideJoinedText])) then {_allowCustom = false}; }; //--- Default gear enforcement on leader respawn. if ((missionNamespace getVariable "WFBE_C_RESPAWN_LEADER") == 2) then { if (_spawn == leader group _unit) then {_allowCustom = false}; }; //--- Respawn. if (_spawn isKindOf "Man") then {_spawn = vehicle _spawn}; _spawnInside = false; if (_typeof in (missionNamespace getVariable Format ["WFBE_%1AMBULANCES",sideJoinedText]) && alive _spawn) then { if (_spawn emptyPositions "cargo" > 0 && !(locked _spawn)) then {_unit moveInCargo _spawn;_spawnInside = true}; }; if !(_spawnInside) then {_unit setPos ([getPos _spawn,10,20] Call GetRandomPosition)}; //--- Loadout. if (!isNil {_unit getVariable "wfbe_custom_gear"} && !WFBE_RespawnDefaultGear && _allowCustom) then { _mode = missionNamespace getVariable "WFBE_C_RESPAWN_PENALTY"; if (_mode in [0,2,3,4,5]) then { //--- Calculate the price/funds. _skip = false; _gear_cost = _unit getVariable "wfbe_custom_gear_cost"; if (_mode != 0) then { _price = 0; //--- Get the mode pricing. switch (_mode) do { case 2: {_price = _gear_cost}; case 3: {_price = round(_gear_cost/2)}; case 4: {_price = round(_gear_cost/4)}; case 5: {_price = _gear_cost}; }; //--- Are we charging only on mobile respawn? _charge = true; if (_mode == 5) then { _buildings = (sideJoined) Call WFBE_CO_FNC_GetSideStructures; if (_spawn in _buildings || _spawn == ((sideJoined) Call WFBE_CO_FNC_GetSideHQ)) then {_charge = false}; }; //--- Charge if possible. _funds = Call GetPlayerFunds; if (_funds >= _price && _charge) then { -(_price) Call ChangePlayerFunds; (Format[localize 'STR_WF_CHAT_Gear_RespawnCharge',_price]) Call GroupChatMessage; }; //--- Check that the player has enough funds. if (_funds < _price) then {_skip = true}; }; //--- Use the respawn loadout. if !(_skip) then { _get = _unit getVariable "wfbe_custom_gear"; [_unit, _get select 0, _get select 1, _get select 4, _get select 2, _get select 3] Call WFBE_CO_FNC_EquipUnit; _loadDefault = false; }; }; }; //--- Load the default loadout. if (_loadDefault) then { Private ["_default"]; _default = missionNamespace getVariable Format["WFBE_%1_DefaultGear", WFBE_Client_SideJoinedText]; if (count _default <= 3) then { [_unit, _default select 0, _default select 1, _default select 2] Call WFBE_CO_FNC_EquipUnit; } else { [_unit, _default select 0, _default select 1, _default select 2, _default select 3, _default select 4] Call WFBE_CO_FNC_EquipUnit; }; };/* Add or substract items from a cargo gear. Parameters: - Items & Count - Operation - Item */ Private ["_array","_index","_item","_itemcount","_operate"]; _array = _this select 0; _operate = _this select 1; _item = _this select 2; _index = (_array select 0) find _item; _itemcount = if (_index != -1) then {(_array select 1) select _index} else {-1}; switch (_operate) do { case "add": { if (_itemcount == -1) then { [(_array select 0), _item] Call WFBE_CO_FNC_ArrayPush; [(_array select 1), 1] Call WFBE_CO_FNC_ArrayPush; } else { (_array select 1) set [_index, ((_array select 1) select _index) + 1]; }; }; case "substract": { if (_itemcount < 2) then { (_array select 0) set [_index, false]; (_array select 1) set [_index, false]; _array set [0, (_array select 0) - [false]]; _array set [1, (_array select 1) - [false]]; } else { (_array select 1) set [_index, ((_array select 1) select _index) - 1]; }; }; }; _arrayPrivate ["_hq","_unit"]; _unit = _this; (_unit) Call WFBE_SK_FNC_Apply; [] ExecFSM "Client\FSM\updateactions.fsm"; Options = _unit addAction ["" + (localize "STR_WF_Options") + "","Client\Action\Action_Menu.sqf", "", 1, false, true, "", "_target == player"]; if (!isNull commanderTeam) then { _hq = (sideJoined) Call WFBE_CO_FNC_GetSideHQ; if (commanderTeam == group _unit) then {HQAction = _unit addAction [localize "STR_WF_BuildMenu","Client\Action\Action_Build.sqf", [_hq], 100, false, true, "", "hqInRange && canBuildWHQ && (_target == player)"]}; }; [sideJoinedText,'UnitsCreated',1] Call UpdateStatistics;/* Remove a magazine from the gear menu. Parameters: - Magazines - Index */ Private ["_get","_size"]; _magazines = _this select 0; _index = _this select 1; _i = 0; _size = 0; _exit = false; { _get = missionNamespace getVariable Format["Mag_%1",_x]; if !(isNil '_x') then { _size = _size + (_get select 5); if (_index <= _size) then {_exit = true;_index = _i}; _i = _i + 1; }; if (_exit) exitWith {}; } forEach _magazines; _magazines set [_index, false]; _magazines = _magazines - [false]; _magazinesPrivate ['_array','_indexExcluded','_newArray','_z']; _array = _this select 0; _indexExcluded = _this select 1; _newArray = []; for [{_z = 0},{_z < count(_array)},{_z = _z + 1}] do { if (_z != _indexExcluded) then { _newArray = _newArray + [_array select _z]; }; }; _newArray/* Replace a weapon's magazines with a new weapon's magazines. Parameters: - Old weapon - New weapon - Current Magazines */ Private ["_old","_new"]; _old = _this select 0; _new = _this select 1; _mags = _this select 2; _get = missionNamespace getVariable _old; _old_mags = _get select 6; _old_belong = _get select 4; _pool_max = if ((_get select 4) == 2) then {8} else {12}; _get = missionNamespace getVariable _new; _new_mags = if (isNil '_get') then {[]} else {_get select 6}; if (count _new_mags == 0) exitWith {_mags - _old_mags}; _skip = false; if (_old_belong in [0,3]) then { _get = missionNamespace getVariable Format ["Mag_%1",(_new_mags select 0)]; if ((_get select 4) == 100) then {_skip = true}; }; if (_skip) exitWith {_mags - _old_mags}; _replaced = []; { _get = missionNamespace getVariable Format ["Mag_%1",_x]; if ({_x == (_get select 6)} count _old_mags > 0) then {_replaced = _replaced + [_x]}; } forEach _mags; if (count _replaced > 0) then { _replace_with = ""; _replace_size = 0; { _get = missionNamespace getVariable Format ["Mag_%1",_x]; if (true) exitWith {_replace_with = _get select 6;_replace_size = _get select 5}; } forEach _new_mags; if (_replace_with == "") exitWith {}; //--- Case sensitive fix. _outter = []; {_mag = _x; if ({_x == _mag} count _replaced == 0) then {[_outter, _mag] Call WFBE_CO_FNC_ArrayPush}} forEach _mags; _currentSize = (_mags) Call WFBE_CL_FNC_GetMagazinesSize;// _size = (_outter) Call WFBE_CL_FNC_GetMagazinesSize; for '_i' from 0 to count(_mags)-1 do { if ((_mags select _i) in _replaced && _size < _pool_max) then {_mags set [_i, _replace_with];_size = _size + _replace_size;}; }; _mags = _mags - (_old_mags - [_replace_with]); }; _magsPrivate ["_count","_destination","_index","_type","_units"]; _destination = _this select 0; _index = _this select 1; _units = [group player, false, _index, WFBE_Client_SideJoinedText] Call GetTeamArtillery; _type = ((missionNamespace getVariable Format ['WFBE_%1_ARTILLERY_CLASSNAMES', WFBE_Client_SideJoinedText]) select _index) find (typeOf (_units select 0)); if (count _units < 1 || _type < 0) exitWith {}; {[_x, _destination, WFBE_Client_SideJoined, artyRange] Spawn WFBE_CO_FNC_FireArtillery} forEach _units; //Keep weapons reloaded. // _units = [Group player,true,_index,sideJoinedText] Call GetTeamArtillery; // {if (!someAmmo _x) then {[_x, sideJoined] Call RearmVehicle}} forEach _units;Private ["_color","_control","_duration","_text","_textcontent"]; _control = _this select 0; _text = _this select 1; _duration = _this select 2; _color = _this select 3; //--- Animate. _textcontent = parsetext (Format["%2",_color,_text]); with uinamespace do { (currentBEDialog displayCtrl _control) ctrlSetStructuredText _textcontent; (currentBEDialog displayCtrl _control) ctrlShow true; }; _i = 0; while {_i < _duration} do { with uinamespace do { (currentBEDialog displayCtrl _control) ctrlSetFade (_i % 2); (currentBEDialog displayCtrl _control) ctrlCommit 1; }; _i = _i + 1; sleep 1; }; with uinamespace do { (currentBEDialog displayCtrl _control) ctrlSetStructuredText parseText (""); (currentBEDialog displayCtrl _control) ctrlShow false; };Private ["_control","_duration","_text","_textcontent"]; _control = _this select 0; with uinamespace do { if !(ctrlShown (currentBEDialog displayCtrl _control)) exitWith {}; (currentBEDialog displayCtrl _control) ctrlSetStructuredText parseText (""); (currentBEDialog displayCtrl _control) ctrlShow false; };Private ["_m","_milalpha","_u"]; _milalpha = ["Alpha","Bravo","Charlie","Delta","Echo","Foxtrot","Golf","Hotel","India","Juliet","Kilo","Lima","Mike", "November","Oscar","Papa","Quebec","Romeo","Sierra","Tango","Uniform","Victor","Whiskey","X-Ray","Yankee","Zulu", "Razor","Fatman","StarForce","Frostbite","Battlemage","Manhattan","Firefly","Swordsman","Sabre","Hammer","Reaper", "Anvil","Fortune"]; _u = 0; _m = count _milalpha; { if !(isNil '_x' && _u < _m) then {_x setGroupID [_milalpha select _u]}; _u = _u + 1; } forEach clientTeamsPrivate ['_airCoef','_artCoef','_cts','_distanceMin','_heaCoef','_healTime','_i','_ligCoef','_name','_nearIsDP','_nearIsRT','_nearIsSP','_repairRange','_spType','_supportRange','_supports','_typeRepair','_veh']; _veh = _this select 0; _supports = _this select 1; _typeRepair = _this select 2; _spType = _this select 3; _supportRange = missionNamespace getVariable "WFBE_C_UNITS_SUPPORT_RANGE"; _repairRange = missionNamespace getVariable "WFBE_C_UNITS_REPAIR_TRUCK_RANGE"; //--- Retrieve Informations. _name = [typeOf _veh, 'displayName'] Call GetConfigInfo; _healTime = missionNamespace getVariable "WFBE_C_UNITS_SUPPORT_HEAL_TIME"; //--- SP? _nearIsSP = false; _nearIsDP = false; _nearIsRT = false; { if ((typeOf _x) == _spType) then {_nearIsSP = true}; if ((typeOf _x) == WFBE_Logic_Depot) then {_nearIsDP = true}; if ((typeOf _x) in _typeRepair) then {_nearIsRT = true}; } forEach _supports; //--- Coefficient Vary depending on the support type. _airCoef = 1; _artCoef = 1; _heaCoef = 1; _ligCoef = 1; if (_nearIsRT) then { _airCoef = 2.8; _artCoef = 2.4; _heaCoef = 2.2; _ligCoef = 2.0; }; if (_nearIsDP) then { _airCoef = 2.3; _artCoef = 2.1; _heaCoef = 1.9; _ligCoef = 1.7; }; if (_nearIsSP) then { _airCoef = 1.8; _artCoef = 1.6; _heaCoef = 1.4; _ligCoef = 1.2; }; //--- Class Malus. if (_veh isKindOf 'Air') then {_healTime = round(_healTime * (_airCoef + getDammage _veh))}; if (_veh isKindOf 'StaticWeapon') then {_healTime = round(_healTime * (_artCoef + getDammage _veh))}; if (_veh isKindOf 'Tank') then {_healTime = round(_healTime * (_heaCoef + getDammage _veh))}; if (_veh isKindOf 'Car' || _veh isKindOf 'Motorcycle') then {_healTime = round(_healTime * (_ligCoef + getDammage _veh))}; //--- Inform the player. hint parseText(Format[localize "STR_WF_INFO_Healing",_name,_healTime]); //--- Make sure that we still have something as a support. _cts = 0; _i = 0; while {true} do { sleep 1; //--- Check the distance & alive. _cts = 0; { _distanceMin = if ((typeOf _x) in _typeRepair) then {_repairRange} else {_supportRange}; if ((alive _x) && ((_veh distance _x) < _distanceMin)) then {_cts = _cts + 1}; } forEach _supports; _i = _i + 1; if (_cts == 0 || !(alive _veh) || (getPos _veh) select 2 > 2) exitWith {_cts = 0;hint parseText(Format[localize "STR_WF_INFO_Heal_Failed",_name])}; if (_i >= _healTime) exitWith {hint parseText(Format[localize "STR_WF_INFO_Heal_Success",_name])}; }; //--- Heal the damages? if (_cts != 0) then { if (_veh isKindOf "Man") then {_veh setDammage 0} else { _crews = crew _veh; if (count _crews > 0) then {{_x setDammage 0} forEach _crews}; }; };Private ['_airCoef','_artCoef','_cts','_distanceMin','_heaCoef','_i','_ligCoef','_name','_nearIsDP','_nearIsRT','_nearIsSP','_repairRange','_rearmTime','_spType','_supportRange','_supports','_typeRepair','_veh']; _veh = _this select 0; _supports = _this select 1; _typeRepair = _this select 2; _spType = _this select 3; _supportRange = missionNamespace getVariable "WFBE_C_UNITS_SUPPORT_RANGE"; _repairRange = missionNamespace getVariable "WFBE_C_UNITS_REPAIR_TRUCK_RANGE"; //--- Retrieve Informations. _name = [typeOf _veh, 'displayName'] Call GetConfigInfo; _rearmTime = missionNamespace getVariable "WFBE_C_UNITS_SUPPORT_REARM_TIME"; //--- SP? _nearIsSP = false; _nearIsDP = false; _nearIsRT = false; { if ((typeOf _x) == _spType) then {_nearIsSP = true}; if ((typeOf _x) == WFBE_Logic_Depot) then {_nearIsDP = true}; if ((typeOf _x) in _typeRepair) then {_nearIsRT = true}; } forEach _supports; //--- Coefficient Vary depending on the support type. _airCoef = 1; _artCoef = 1; _heaCoef = 1; _ligCoef = 1; if (_nearIsRT) then { _airCoef = 3.4; _artCoef = 3; _heaCoef = 2.8; _ligCoef = 2.6; }; if (_nearIsDP) then { _airCoef = 2.5; _artCoef = 2.4; _heaCoef = 2.2; _ligCoef = 2; }; if (_nearIsSP) then { _airCoef = 1.9; _artCoef = 1.7; _heaCoef = 1.5; _ligCoef = 1.2; }; //--- Class Malus. if (_veh isKindOf 'Air') then {_rearmTime = round(_rearmTime * _airCoef)}; if (_veh isKindOf 'StaticWeapon') then {_rearmTime = round(_rearmTime * _artCoef)}; if (_veh isKindOf 'Tank') then {_rearmTime = round(_rearmTime * _heaCoef)}; if (_veh isKindOf 'Car' || _veh isKindOf 'Motorcycle') then {_rearmTime = round(_rearmTime * _ligCoef)}; //--- Inform the player. hint parseText(Format[localize "STR_WF_INFO_Rearming",_name,_rearmTime]); //--- Make sure that we still have something as a support. _cts = 0; _i = 0; while {true} do { sleep 1; //--- Check the distance & alive. _cts = 0; { _distanceMin = if ((typeOf _x) in _typeRepair) then {_repairRange} else {_supportRange}; if ((alive _x) && ((_veh distance _x) < _distanceMin)) then {_cts = _cts + 1}; } forEach _supports; _i = _i + 1; if (_cts == 0 || !(alive _veh) || (getPos _veh) select 2 > 2) exitWith {_cts = 0;hint parseText(Format[localize "STR_WF_INFO_Rearm_Failed",_name])}; if (_i >= _rearmTime) exitWith {hint parseText(Format[localize "STR_WF_INFO_Rearm_Success",_name])}; }; //--- Rearm? if (_cts != 0) then { [_veh,sideJoined] Spawn RearmVehicle; };Private ['_airCoef','_artCoef','_cts','_distanceMin','_heaCoef','_i','_ligCoef','_name','_nearIsDP','_nearIsRT','_nearIsSP','_repairRange','_refTime','_spType','_supportRange','_supports','_typeRepair','_veh']; _veh = _this select 0; _supports = _this select 1; _typeRepair = _this select 2; _spType = _this select 3; _supportRange = missionNamespace getVariable "WFBE_C_UNITS_SUPPORT_RANGE"; _repairRange = missionNamespace getVariable "WFBE_C_UNITS_REPAIR_TRUCK_RANGE"; //--- Retrieve Informations. _name = [typeOf _veh, 'displayName'] Call GetConfigInfo; _refTime = missionNamespace getVariable "WFBE_C_UNITS_SUPPORT_REFUEL_TIME"; //--- SP? _nearIsSP = false; _nearIsDP = false; _nearIsRT = false; { if ((typeOf _x) == _spType) then {_nearIsSP = true}; if ((typeOf _x) == WFBE_Logic_Depot) then {_nearIsDP = true}; if ((typeOf _x) in _typeRepair) then {_nearIsRT = true}; } forEach _supports; //--- Coefficient Vary depending on the support type. _airCoef = 1; _artCoef = 1; _heaCoef = 1; _ligCoef = 1; if (_nearIsRT) then { _airCoef = 2.8; _artCoef = 2.4; _heaCoef = 2.2; _ligCoef = 2.0; }; if (_nearIsDP) then { _airCoef = 2.3; _artCoef = 2.1; _heaCoef = 1.9; _ligCoef = 1.7; }; if (_nearIsSP) then { _airCoef = 1.8; _artCoef = 1.6; _heaCoef = 1.4; _ligCoef = 1.2; }; //--- Class Malus. if (_veh isKindOf 'Air') then {_refTime = round(_refTime * (_airCoef + (1 - fuel _veh)))}; if (_veh isKindOf 'StaticWeapon') then {_refTime = round(_refTime * (_artCoef + (1 - fuel _veh)))}; if (_veh isKindOf 'Tank') then {_refTime = round(_refTime * (_heaCoef + (1 - fuel _veh)))}; if (_veh isKindOf 'Car' || _veh isKindOf 'Motorcycle') then {_refTime = round(_refTime * (_ligCoef + (1 - fuel _veh)))}; //--- Inform the player. hint parseText(Format[localize "STR_WF_INFO_Refueling",_name,_refTime]); //--- Make sure that we still have something as a support. _cts = 0; _i = 0; while {true} do { sleep 1; //--- Check the distance & alive. _cts = 0; { _distanceMin = if ((typeOf _x) in _typeRepair) then {_repairRange} else {_supportRange}; if ((alive _x) && ((_veh distance _x) < _distanceMin)) then {_cts = _cts + 1}; } forEach _supports; _i = _i + 1; if (_cts == 0 || !(alive _veh) || (getPos _veh) select 2 > 2) exitWith {_cts = 0;hint parseText(Format[localize "STR_WF_INFO_Refueling_Failed",_name])}; if (_i >= _refTime) exitWith {hint parseText(Format[localize "STR_WF_INFO_Refueling_Success",_name])}; }; //--- Refuel the vehicle? if (_cts != 0) then { _veh setFuel 1; };Private ['_airCoef','_artCoef','_cts','_distanceMin','_heaCoef','_i','_ligCoef','_name','_nearIsDP','_nearIsRT','_nearIsSP','_repairRange','_repTime','_spType','_supportRange','_supports','_typeRepair','_veh']; _veh = _this select 0; _supports = _this select 1; _typeRepair = _this select 2; _spType = _this select 3; _supportRange = missionNamespace getVariable "WFBE_C_UNITS_SUPPORT_RANGE"; _repairRange = missionNamespace getVariable "WFBE_C_UNITS_REPAIR_TRUCK_RANGE"; //--- Retrieve Informations. _name = [typeOf _veh, 'displayName'] Call GetConfigInfo; _repTime = missionNamespace getVariable "WFBE_C_UNITS_SUPPORT_REPAIR_TIME"; //--- SP? _nearIsSP = false; _nearIsDP = false; _nearIsRT = false; { if ((typeOf _x) == _spType) then {_nearIsSP = true}; if ((typeOf _x) == WFBE_Logic_Depot) then {_nearIsDP = true}; if ((typeOf _x) in _typeRepair) then {_nearIsRT = true}; } forEach _supports; //--- Coefficient Vary depending on the support type. _airCoef = 1; _artCoef = 1; _heaCoef = 1; _ligCoef = 1; if (_nearIsRT) then { _airCoef = 2.4; _artCoef = 1.8; _heaCoef = 1.6; _ligCoef = 1.4; }; if (_nearIsDP) then { _airCoef = 1.9; _artCoef = 1.5; _heaCoef = 1.3; _ligCoef = 1.1; }; if (_nearIsSP) then { _airCoef = 1.4; _artCoef = 1; _heaCoef = 0.8; _ligCoef = 0.6; }; //--- Class Malus. if (_veh isKindOf 'Air') then {_repTime = round(_repTime * (_airCoef + getDammage _veh))}; if (_veh isKindOf 'StaticWeapon') then {_repTime = round(_repTime * (_artCoef + getDammage _veh))}; if (_veh isKindOf 'Tank') then {_repTime = round(_repTime * (_heaCoef + getDammage _veh))}; if (_veh isKindOf 'Car' || _veh isKindOf 'Motorcycle') then {_repTime = round(_repTime * (_ligCoef + getDammage _veh))}; //--- Inform the player. hint parseText(Format[localize "STR_WF_INFO_Repairing",_name,_repTime]); //--- Make sure that we still have something as a support. _cts = 0; _i = 0; while {true} do { sleep 1; //--- Check the distance & alive. _cts = 0; { _distanceMin = if ((typeOf _x) in _typeRepair) then {_repairRange} else {_supportRange}; if ((alive _x) && ((_veh distance _x) < _distanceMin)) then {_cts = _cts + 1}; } forEach _supports; _i = _i + 1; if (_cts == 0 || !(alive _veh) || (getPos _veh) select 2 > 2) exitWith {_cts = 0;hint parseText(Format[localize "STR_WF_INFO_Repair_Failed",_name])}; if (_i >= _repTime) exitWith {hint parseText(Format[localize "STR_WF_INFO_Repair_Success",_name])}; }; //--- Fix the damages? if (_cts != 0) then { _veh setDammage 0; };Private ["_i","_location","_locations","_next","_sideID","_sorted","_task","_type"]; _type = _this select 0; _location = if (count _this > 1) then {_this select 1} else {objNull}; switch (_type) do { //--- Complete Towns set initialization. case "TownAddComplete": { //--- Todo: improve the sort by with other digits instead of the first one. sleep 4; Private ["_addOrder","_returned","_town","_towns","_townsLabel"]; _townsLabel = []; {_townsLabel = _townsLabel + [_x getVariable 'name']} forEach towns; _towns = ([_townsLabel,true,towns] Call CIPHER_SortArray) select 1; for '_i' from 0 to count(_towns)-1 do { _town = _towns select _i; waitUntil {_sideID = _town getVariable 'sideID';!isNil '_sideID'}; _sideID = _town getVariable "sideID"; _task = player createSimpleTask [Format["TakeTowns_%1",str _town]]; if (_sideID != sideID) then { _task setSimpleTaskDescription [Format[localize "STR_WF_TaskTown",_town getVariable "name"], Format [localize "STR_WF_CHAT_TaskTown_Display",_town getVariable "name"], Format [localize "STR_WF_CHAT_TaskTown_Display",_town getVariable "name"]]; } else { _task setSimpleTaskDescription [Format[localize "STR_WF_TaskTown_Complete",_town getVariable "name"], Format [localize "STR_WF_CHAT_TaskTown_Display",_town getVariable "name"], Format [localize "STR_WF_CHAT_TaskTown_Display",_town getVariable "name"]]; _task setTaskState "Succeeded"; }; _task setSimpleTaskDestination (getPos _town); _town setVariable ['taskLink',_task]; }; ["TownAssignClosest"] Spawn TaskSystem; }; //--- Assign the closest town to the player. case "TownAssignClosest": { sleep 4; _next = [player,sideJoined] Call GetClosestLocationBySide; if !(isNull _next) then { ["TownHintNew",_next] Spawn TaskSystem; _task = (_next getVariable 'taskLink'); /* Keep the commander order ! */ if (!isNull comTask) then { if (taskState comTask == "Succeeded") then {player setCurrentTask _task}; } else { player setCurrentTask _task; }; }; }; //--- Update a town's value. case "TownUpdate": { _task = _location getVariable 'taskLink'; _sideID = _location getVariable "sideID"; if !(isNil '_task') then { if (_sideID == sideID) then { _task setTaskState "Succeeded"; _task setSimpleTaskDescription [Format[localize "STR_WF_TaskTown_Complete",_location getVariable "name"], Format [localize "STR_WF_CHAT_TaskTown_Display",_location getVariable "name"], Format [localize "STR_WF_CHAT_TaskTown_Display",_location getVariable "name"]]; } else { _task setTaskState "Created"; _task setSimpleTaskDescription [Format[localize "STR_WF_TaskTown",_location getVariable "name"], Format [localize "STR_WF_CHAT_TaskTown_Display",_location getVariable "name"], Format [localize "STR_WF_CHAT_TaskTown_Display",_location getVariable "name"]]; }; } }; //--- Hint for a new town task. case "TownHintNew": {taskHint [format [localize "str_taskNew" + "\n%1",Format [localize "STR_WF_CHAT_TaskTown_Display",_location getVariable "name"]], [1,1,1,1], "taskNew"]}; //--- Hint for a completed town task. case "TownHintDone": {taskHint [format [localize "str_taskAccomplished" + "\n%1",Format [localize "STR_WF_CHAT_TaskTown_Display",_location getVariable "name"]], [1,1,1,1], "taskDone"]}; };Private["_message","_style"]; _message = _this Select 0; _style = "PLAIN"; if (Count _this > 1) then {_style = _this Select 1}; 12451 cutText ["\n\n\n\n\n\n\n" + _message,_style];Private['_get','_lb','_type']; _lb = _this select 0; _type = _this select 1; lbClear _lb; { lbAdd [_lb,_x]; } forEach (missionNamespace getVariable Format["WFBE_%1%2FACTIONS",sideJoinedText,_type]); _get = missionNamespace getVariable Format["WFBE_%1%2CURRENTFACTIONSELECTED",sideJoinedText,_type]; if (isNil '_get') then { lbSetCurSel [_lb,0]; } else { lbSetCurSel [_lb,_get]; };Private ['_addin','_c','_currentUpgrades','_filler','_filter','_i','_listBox','_listNames','_u','_value']; _listNames = _this select 0; _filler = _this select 1; _listBox = _this select 2; _value = _this select 3; _u = 0; _i = 0; _currentUpgrades = (sideJoined) Call WFBE_CO_FNC_GetSideUpgrades; _filter = missionNamespace getVariable Format["WFBE_%1%2CURRENTFACTIONSELECTED",sideJoinedText,_filler]; if (isNil '_filter') then {_filter = "nil"} else { if (_filter == 0) then { _filter = 'nil'; } else { _filter = ((missionNamespace getVariable Format["WFBE_%1%2FACTIONS",sideJoinedText,_filler]) select _filter); }; }; lnbClear _listBox; { _addin = true; _c = missionNamespace getVariable _x; if (_filter != "nil") then { if ((_c select QUERYUNITFACTION) != _filter) then {_addin = false}; }; if ((_c select QUERYUNITUPGRADE) <= (_currentUpgrades select _value) && _addin) then { lnbAddRow [_listBox,['$'+str (_c select QUERYUNITPRICE),(_c select QUERYUNITLABEL)]]; lnbSetData [_listBox,[_i,0],_filler]; lnbSetValue [_listBox,[_i,0],_u]; _i = _i + 1; }; _u = _u + 1; } forEach _listNames; if (_i > 0) then {lnbSetCurSelRow [_listBox,0]} else {lnbSetCurSelRow [_listBox,-1]};Private ['_color','_extra','_i','_isVehicle','_listBox','_listContent','_pic','_unit']; _listContent = _this select 0; _listBox = _this select 1; _i = 0; _pic = ""; lnbClear _listBox; { _unit = vehicle _x; _isVehicle = if (_x != _unit) then {true} else {false}; _color = []; _extra = ""; if (round(((getDammage _unit)*-100)+100) < 75) then { _color = [0.875, 0.5, 0, 1]; _extra = "[Injured] "; if (round(((getDammage _unit)*-100)+100) < 50) then { _extra = "[Injured] "; _color = [0.875, 0, 0, 1]; if !(alive _x) then {_extra = "[Dead]"}; }; }; if (count _color == 0 && _isVehicle) then { if !(canMove _unit) then { _extra = "[Immobilized] "; _color = [0.875, 0.875, 0, 1]; }; }; lnbAddRow [_listBox,[str(round(((getDammage _unit)*-100)+100)) + "%",_extra+"("+([typeOf _unit, 'displayName'] Call GetConfigInfo)+") "+name _x]]; _pic = if (_isVehicle) then {[typeOf _unit, 'picture'] Call GetConfigInfo} else {[typeOf _unit, 'portrait'] Call GetConfigInfo}; lnbSetPicture [_listBox,[_i,1],_pic]; if (count _color > 0) then { lnbSetColor [_listBox,[_i,0],_color]; lnbSetColor [_listBox,[_i,1],_color]; }; _i = _i + 1; } forEach _listContent; if (_i > 0) then {lnbSetCurSelRow [_listBox,0]} else {lnbSetCurSelRow [_listBox,-1]};Private ['_itemsCount','_listbox','_retVal','_value']; _listbox = _this select 0; _value = _this select 1; _itemsCount = lbSize _listbox; _retVal = -1; for '_i' from 0 to _itemsCount-1 do { if (lbValue[_listbox, _i] == _value) exitWith {_retVal = _i}; }; _retVal/* Add a template to the gear templates. Parameters: - Weapons - Magazines - Backpack Content */ Private ["_backpack_content","_counts","_counts_b","_emplacement","_flag_cannotadd","_get","_index","_items","_mags","_magazines","_prefix","_process","_side_equipment","_template","_upgrades","_u_backpack","_u_belong","_u_label","_u_labels","_u_picture","_u_pictures","_u_price","_u_upgrade","_weapons"]; _weapons = +(_this select 0); _magazines = +(_this select 1); _backpack_content = +(_this select 2); _u_upgrade = 0; _u_price = 0; _u_label = ""; _u_labels = ["","",""]; _u_picture = ""; _u_pictures = ["",""]; _u_backpack = ""; _set = []; _mags = []; _counts = []; _side_equipment = missionNamespace getVariable Format ["WFBE_%1_All", WFBE_Client_SideJoinedText]; _flag_cannotadd = false; //--- Weapons for '_i' from 0 to count(_weapons)-1 do { _get = missionNamespace getVariable (_weapons select _i); if !(isNil '_get') then { _process = true; if !(WFBE_Allow_HostileGearSaving) then {if !((_weapons select _i) in _side_equipment) then {_weapons set [_i, false]; _process = false; _flag_cannotadd = true; ["INFORMATION", Format["Client_UI_Gear_AddTemplate.sqf : [%1] Weapon [%2] is not known by the player's side.",WFBE_Client_SideJoinedText,(_weapons select _i)]] Call WFBE_CO_FNC_LogContent}}; if (_process) then { _u_belong = _get select 4; if ((_get select 3) > _u_upgrade) then {_u_upgrade = (_get select 3)}; _u_price = _u_price + (_get select 2); if (_u_belong in [0,3]) then {_u_labels set [0, _get select 1];_u_pictures set [0, _get select 0]}; if (_u_belong == 1) then {_u_labels set [2, _get select 1]}; if (_u_belong == 2) then {_u_labels set [1, _get select 1];_u_pictures set [1, _get select 0]}; switch (true) do { case (_u_belong < 4): { if (_u_picture == "") then {_u_picture = (_get select 0)}; }; case (_u_belong == 200): {_u_backpack = _weapons select _i}; }; }; } else { ["WARNING", Format["Client_UI_Gear_AddTemplate.sqf : [%1] Item [%2] is not a defined within any Gear files",WFBE_Client_SideJoinedText,(_weapons select _i)]] Call WFBE_CO_FNC_LogContent; _weapons set [_i, false]; }; }; //--- Attempt to set the best picture. if (_u_picture != "") then { {if (_x != "") exitWith {_u_picture = _x}} forEach _u_pictures; }; //--- Attempt to set the best desc. { if (_x != "") then { if (_u_label != "") then {_u_label = Format ["%1 | %2",_u_label, _x]} else {_u_label = _x}; }; } forEach _u_labels; _weapons = _weapons - [false]; //--- Magazines if (count _magazines > 0) then { { _get = missionNamespace getVariable Format["Mag_%1",_x]; if !(isNil '_get') then { _process = true; if !(WFBE_Allow_HostileGearSaving) then {if !(_x in _side_equipment) then {_process = false; _flag_cannotadd = true; ["INFORMATION", Format["Client_UI_Gear_AddTemplate.sqf : [%1] Magazine [%2] is not known by the player's side.",WFBE_Client_SideJoinedText,_x]] Call WFBE_CO_FNC_LogContent}}; if (_process) then { _index = _mags find _x; if (_index != -1) then { _counts set [_index, (_counts select _index)+1]; } else { [_mags, _x] Call WFBE_CO_FNC_ArrayPush; [_counts, 1] Call WFBE_CO_FNC_ArrayPush; }; if ((_get select 3) > _u_upgrade) then {_u_upgrade = (_get select 3)}; if (_u_picture == "") then {_u_picture = (_get select 0)}; if (_u_label == "") then {_u_label = (_get select 1)}; _u_price = _u_price + (_get select 2); }; } else { ["WARNING", Format["Client_UI_Gear_AddTemplate.sqf : [%1] Magazine [%2] is not a defined within any Gear files",WFBE_Client_SideJoinedText,_x]] Call WFBE_CO_FNC_LogContent; }; } forEach _magazines; }; //--- Backpacks if (_u_backpack != "" && count(_backpack_content) > 0) then { _prefix = ""; for '_i' from 0 to count(_backpack_content)-1 do { _emplacement = _backpack_content select _i; if (count _emplacement > 0) then { _items = _emplacement select 0; _counts_b = _emplacement select 1; for '_j' from 0 to count(_items)-1 do { _process = true; if !(WFBE_Allow_HostileGearSaving) then {if !((_items select _j) in _side_equipment) then {_items set [_j, false];_counts_b set [_j, false];_process = false; _flag_cannotadd = true;["INFORMATION", Format["Client_UI_Gear_AddTemplate.sqf : [%1] Backpack item [%2] is not known by the player's side.",WFBE_Client_SideJoinedText,(_items select _j)]] Call WFBE_CO_FNC_LogContent}}; if (_process) then { _get = missionNamespace getVariable Format["%1%2",_prefix,(_items select _j)]; if !(isNil '_get') then { if ((_get select 3) > _u_upgrade) then {_u_upgrade = (_get select 3)}; if (_u_picture == "") then {_u_picture = (_get select 0)}; if (_u_label == "") then {_u_label = (_get select 1)}; _u_price = _u_price + ((_get select 2)*(_counts_b select _j)); } else { ["WARNING", Format["Client_UI_Gear_AddTemplate.sqf : [%1] Backpack item [%2] is not a defined within any Gear files",WFBE_Client_SideJoinedText,(_items select _j)]] Call WFBE_CO_FNC_LogContent; _items set [_j, false]; _counts_b set [_j, false]; }; }; }; _items = _items - [false]; _counts_b = _counts_b - [false]; _backpack_content set [_i, [_items,_counts_b]]; }; _prefix = "Mag_"; }; } else { _backpack_content = []; }; if (_flag_cannotadd) exitWith {hint parseText("Information:

The template cannot be set due to some foreign equipment.")}; //--- Check the final upgrade level. _upgrades = (WFBE_Client_SideJoined) Call WFBE_CO_FNC_GetSideUpgrades; if (_u_upgrade <= (_upgrades select WFBE_UP_BARRACKS) || _u_upgrade <= (_upgrades select WFBE_UP_GEAR)) then { _set set [0,_u_picture]; _set set [1,_u_label]; _set set [2,_u_price]; _set set [3,_u_upgrade]; _set set [4,_weapons]; _set set [5,[_mags,_counts]]; _set set [6,_backpack_content]; _template = missionNamespace getVariable Format ["WFBE_%1_Template", WFBE_Client_SideJoinedText]; [_template, _set] Call WFBE_CO_FNC_ArrayPush; missionNamespace setVariable [Format ["WFBE_%1_Template", WFBE_Client_SideJoinedText], _template]; } else { hint parseText("Information:

The template upgrade level is above the current gear or barrack upgrade level."); };/* Delete a template from the gear templates. Parameters: - Index */ Private ["_template"]; _template = missionNamespace getVariable Format ["WFBE_%1_Template", WFBE_Client_SideJoinedText]; if (_this < count _template) then { _template set [_this, false]; _template = _template - [false]; missionNamespace setVariable [Format ["WFBE_%1_Template", WFBE_Client_SideJoinedText], _template]; };/* Display the gear inventory. Parameters: - Weapons - Magazines - Refresh parts */ Private ["_magazines","_weapons"]; _weapons = _this select 0; _magazines = _this select 1; _refresh = _this select 2; _update_weapons = false; _update_magazines = false; _update_magazines_sec = false; _update_items = false; _update_special = false; if ("all" in _refresh) then {_update_weapons = true;_update_magazines = true; _update_magazines_sec = true; _update_special = true;_update_items = true;}; if ("items" in _refresh) then {_update_items = true}; if ("magazines_main" in _refresh) then {_update_magazines = true}; if ("magazines_hand" in _refresh) then {_update_magazines_sec = true}; if ("weapons" in _refresh) then {_update_weapons = true}; if ("special" in _refresh) then {_update_special = true}; if (_update_weapons) then { _idc_prim = 503401; _idc_seco = 503402; _idc_side = 503403; { _get = missionNamespace getVariable _x; if !(isNil '_get') then { switch (_get select 4) do { case 0: {ctrlSetText [_idc_prim, _get select 0]; ctrlShow[_idc_seco, true]; _idc_prim = 0}; case 1: {ctrlSetText [_idc_side, _get select 0]; _idc_side = 0}; case 2: {ctrlSetText [_idc_seco, _get select 0]; ctrlShow[_idc_seco, true]; _idc_seco = 0}; case 3: {ctrlSetText [_idc_prim, _get select 0]; ctrlShow[_idc_seco, false]; _idc_prim = 0; _idc_seco = 0}; case 200: {ctrlSetText [_idc_seco, _get select 0]; ctrlShow[_idc_seco, true]; _idc_seco = 0}; case 201: {ctrlSetText [_idc_seco, _get select 0]; ctrlShow[_idc_seco, true]; _idc_seco = 0}; }; }; } forEach _weapons; if (_idc_prim != 0) then {ctrlSetText[_idc_prim, '\ca\ui\data\ui_gear_gun_gs.paa']}; if (_idc_seco != 0) then {ctrlSetText[_idc_seco, '\ca\ui\data\ui_gear_sec_gs.paa']; ctrlShow[_idc_seco, true];}; if (_idc_side != 0) then {ctrlSetText[_idc_side, '\ca\ui\data\ui_gear_hgun_gs.paa']}; }; if (_update_special) then { _idcs = [503533, 503534]; _i = 0; { _get = missionNamespace getVariable _x; if !(isNil '_get') then { if ((_get select 4) == 4) then { ctrlSetText[_idcs select _i, _get select 0]; _idcs set [_i, 0]; _i = _i + 1; }; }; if (_i >= 2) exitWith {}; } forEach _weapons; {if (_x != 0) then {ctrlSetText[_x, '\ca\ui\data\ui_gear_eq_gs.paa']}} forEach _idcs; }; if (_update_items) then { _idcs = 503521; _i = 0; { _get = missionNamespace getVariable _x; if !(isNil '_get') then { if ((_get select 4) == 5) then { ctrlSetText[_idcs + _i, _get select 0]; _i = _i + 1; }; }; if (_i >= 12) exitWith {}; } forEach _weapons; for '_j' from 11 to _i step -1 do {ctrlSetText[_idcs + _j, '\ca\ui\data\ui_gear_eq_gs.paa'];}; }; if (_update_magazines) then { _idcs = 503501; _i = 0; { _get = missionNamespace getVariable Format["Mag_%1",_x]; if !(isNil '_get') then { if ((_get select 4) == 101) then { _size = _get select 5; ctrlSetText[_idcs + _i, _get select 0]; _i = _i + 1; for '_j' from _size-2 to 0 step -1 do { ctrlSetText[_idcs + _i, ""]; _i = _i + 1; }; }; }; if (_i >= 12) exitWith {}; } forEach _magazines; for '_j' from 11 to _i step -1 do {ctrlSetText[_idcs + _j, '\ca\ui\data\ui_gear_mag_gs.paa'];}; }; if (_update_magazines_sec) then { _idcs = 503513; _i = 0; { _get = missionNamespace getVariable Format["Mag_%1",_x]; if !(isNil '_get') then { if ((_get select 4) == 100) then { _size = _get select 5; ctrlSetText[_idcs + _i, _get select 0]; _i = _i + 1; for '_j' from _size-2 to 0 step -1 do { ctrlSetText[_idcs + _i, ""]; _i = _i + 1; }; }; }; if (_i >= 8) exitWith {}; } forEach _magazines; for '_j' from 7 to _i step -1 do {ctrlSetText[_idcs + _j, '\ca\ui\data\ui_gear_hgunmag_gs.paa'];}; };/* Fill a listbox with a cargo style loadout Parameters: - IDC Listbox - Gear */ Private ["_clear","_gear","_lb"]; _lb = _this select 0; _gear = _this select 1; _clear = _this select 2; if (_clear) then {lnbClear _lb}; _k = 0; for '_i' from 0 to count(_gear)-1 do { if (count(_gear select _i) > 0) then { _items = (_gear select _i) select 0; _count = (_gear select _i) select 1; _prefix = if (_i == 1) then {"Mag_"} else {""}; for '_j' from 0 to count(_items)-1 do { _get = missionNamespace getVariable Format ["%1%2",_prefix,_items select _j]; lnbAddRow[_lb, [Format ["x%1", _count select _j], _get select 1]]; lnbSetPicture[_lb,[_k,0],_get select 0]; lnbSetData[_lb,[_k,0],Format ["%1%2",_prefix,_items select _j]]; _k = _k + 1; }; }; };/* Fill a special ListBox with the gear. Parameters: - IDC Listbox - Gear */ Private ["_gear","_get","_j","_lb","_prefix","_upgrade_level","_values"]; _lb = _this select 0; _gear = _this select 1; _upgrade_level = ((sideJoined) Call WFBE_CO_FNC_GetSideUpgrades) select WFBE_UP_GEAR; _j = 0; for '_i' from 0 to count(_gear)-1 do { _values = (_gear select _i) select 0; _prefix = if (count (_gear select _i) > 1) then {(_gear select _i) select 1} else {""}; { _get = missionNamespace getVariable Format ["%1%2",_prefix,_x]; if !(isNil '_get') then { if ((_get select 3) <= _upgrade_level) then { lnbAddRow[_lb, [Format ["$%1.", _get select 2], _get select 1]]; lnbSetPicture[_lb,[_j,0],_get select 0]; lnbSetData[_lb,[_j,0],Format ["%1%2",_prefix,_x]]; _j = _j + 1; }; } else { ["ERROR", Format["Client_UI_Gear_FillList.sqf : Weapon/Magazine [%1] is not a valid class (defined in Team_x.sqf files)",_x]] Call WFBE_CO_FNC_LogContent; }; } forEach _values; };/* Fill a special ListBox with the gear templates. Parameters: - IDC Listbox - Templates */ Private ["_ct","_lb","_template","_u","_upgrade_level"]; _lb = _this select 0; _template = _this select 1; _upgrade_level = (sideJoined) Call WFBE_CO_FNC_GetSideUpgrades; _u = 0; for '_i' from 0 to count(_template)-1 do { _ct = _template select _i; if ((_ct select 3) <= (_upgrade_level select WFBE_UP_BARRACKS) || (_ct select 3) <= (_upgrade_level select WFBE_UP_GEAR)) then { lnbAddRow[_lb, [Format ["$%1.", _ct select 2], _ct select 1]]; if ((_ct select 0) != "") then {lnbSetPicture[_lb,[_u,0],(_ct select 0)]}; lnbSetValue[_lb,[_u,0],_i]; _u = _u + 1; }; };/* Parse the content of a template into a pre-parsed system. Parameters: - Magazines */ Private ["_counts","_item","_items","_magazines"]; _magazines = _this; if (count _magazines > 0) then { _items = _magazines select 0; _counts = _magazines select 1; _magazines = []; for '_j' from 0 to count(_items)-1 do { _item = _items select _j; for '_k' from 0 to (_counts select _j)-1 do {[_magazines, _item] Call WFBE_CO_FNC_ArrayPush}; }; } else { _magazines = []; }; _magazines/* Sanitize the gear by removing undefined stuff. Parameters: - Content - Type */ Private ["_content", "_type"]; _content = _this select 0; _type = _this select 1; _sanitized = +_content; switch (_type) do { case "magazines": { {if (isNil {missionNamespace getVariable Format["Mag_%1", _x]}) then {_sanitized = _sanitized - [_x]}} forEach _content; }; case "weapons": { {if (isNil {missionNamespace getVariable _x}) then {_sanitized = _sanitized - [_x]}} forEach _content; }; }; _sanitized/* Update the gear price */ Private ["_count_old","_count_new","_counts","_difference","_div","_find","_gear","_gear_bp","_gear_mags","_gear_new","_gear_old","_gear_veh","_get","_iprice","_mags","_prefix","_price"]; _gear = +(_this select 0); _gear_mags = +(_this select 1); _gear_bp = +(_this select 2); _gear_veh = +(_this select 3); _price = 0; _div = missionNamespace getVariable "WFBE_C_PLAYERS_GEAR_SELL_COEF"; _prefix = ""; { _gear_old = _x select 0; _gear_new = _x select 1; _iprice = 0; { _find = _gear_new find _x; _get = missionNamespace getVariable Format["%1%2",_prefix,_x]; if !(isNil '_get') then {if (_find != -1) then {_gear_new set [_find, false]} else {_iprice = _iprice - (_get select 2)}}; } forEach _gear_old; _price = _price + round(_iprice*_div); { if (typeName _x == "STRING") then { _get = missionNamespace getVariable Format["%1%2",_prefix,_x]; if !(isNil '_get') then {_price = _price + (_get select 2)}; }; } forEach _gear_new; _prefix = "Mag_"; } forEach [_gear,_gear_mags]; if !(WF_A2_Vanilla) then { { _gear_new = _x select 1; _gear_old = _x select 0; _prefix = ""; for '_k' from 0 to count(_gear_old)-1 do { _mags = (_gear_old select _k) select 0; _counts = (_gear_old select _k) select 1; _iprice = 0; for '_i' from 0 to count(_mags)-1 do { _find = ((_gear_new select _k) select 0) find (_mags select _i); _get = missionNamespace getVariable Format["%1%2",_prefix,(_mags select _i)]; if !(isNil '_get') then { _count_old = _counts select _i; if (_find != -1) then { _count_new = ((_gear_new select _k) select 1) select _find; _difference = (_count_new - _count_old); if (_difference < 0) then { ((_gear_new select _k) select 0) set [_find, false]; _iprice = _iprice - ((_get select 2)*(_difference)); } else { ((_gear_new select _k) select 1) set [_find, _difference]; }; } else { _iprice = _iprice - ((_get select 2)*(_count_old)); }; }; }; _price = _price - abs(round(_iprice*_div)); _prefix = if (_k == 0) then {"Mag_"} else {""}; }; _prefix = ""; for '_k' from 0 to count(_gear_new)-1 do { _mags = (_gear_new select _k) select 0; _counts = (_gear_new select _k) select 1; for '_i' from 0 to count(_mags)-1 do { if (typeName(_mags select _i) == "STRING") then { _get = missionNamespace getVariable Format["%1%2",_prefix,(_mags select _i)]; if !(isNil '_get') then { _price = _price + ((_get select 2)*(_counts select _i)); }; }; }; _prefix = if (_k == 0) then {"Mag_"} else {""}; } forEach _gear_new; } forEach [_gear_bp, _gear_veh]; }; [_price]/* Update the target combobox of the gear menu according to the players unit. */ Private ["_add","_camp_gear_enabled","_gear_mode","_near","_range","_structures","_target","_temp","_unit","_units","_vehicles"]; _target = _this; lbClear 503004; _temp = if (player == leader WFBE_Client_Team) then {(units player) Call WFBE_CO_FNC_GetLiveUnits} else {[player]}; _units = []; _vehicles = []; _structures = (WFBE_Client_SideJoined) Call WFBE_CO_FNC_GetSideStructures; // _near = ([_structures, objNull, ["Barracks"]] Call WFBE_CO_FNC_GetStructuresByKind) select 0; // _near = if (isNull (['BARRACKSTYPE',_buildings,_purchaseRange,sideJoined,player] Call BuildingInRange)) then {false} else {true}; _near = [sideJoined, missionNamespace getVariable Format["WFBE_%1%2",sideJoinedText,'BARRACKSTYPE'], _structures] Call GetFactories; _gear_mode = missionNamespace getVariable "WFBE_C_TOWNS_GEAR"; _camp_gear_enabled = if (_gear_mode in [1,2,3]) then {true} else {false}; { _unit = _x; _add = false; if (count _near > 0) then { {if (_x distance (vehicle _unit) < (missionNamespace getVariable "WFBE_C_UNITS_PURCHASE_GEAR_RANGE")) exitWith {_add = true}} forEach _near; }; if (_camp_gear_enabled && !_add) then { _range = if (_unit == player) then {missionNamespace getVariable "WFBE_C_UNITS_PURCHASE_GEAR_MOBILE_RANGE"} else {missionNamespace getVariable "WFBE_C_UNITS_PURCHASE_GEAR_MOBILE_AI_RANGE"}; _nObject = objNull; switch (_gear_mode) do { case 1:{_nObject = [vehicle _unit, _range] Call WFBE_CL_FNC_GetClosestCamp}; case 2:{_nObject = [vehicle _unit, _range] Call WFBE_CL_FNC_GetClosestDepot}; case 3:{{if !(isNull _x) exitWith {_nObject = _x}} forEach [[vehicle _unit, _range] Call WFBE_CL_FNC_GetClosestCamp, [vehicle _unit, _range] Call WFBE_CL_FNC_GetClosestDepot]}; }; if !(isNull _nObject) then {_add = true}; }; if (_add) then {[_units, _unit] Call WFBE_CO_FNC_ArrayPush}; } forEach _temp; if !(WF_A2_Vanilla) then { {if (local _x) then {[_vehicles, _x] Call WFBE_CO_FNC_ArrayPush}} forEach ((vehicle player) nearEntities [["Car","Motorcycle","Tank","Ship","Air"], missionNamespace getVariable "WFBE_C_PLAYERS_GEAR_VEHICLE_RANGE"]); }; _temp = _units + _vehicles; if (count _temp == 0) then {_temp = [player]}; for '_i' from 0 to count(_temp)-1 do { _unit = _temp select _i; _label = if (_unit isKindOf "Man") then {Format["[%1] %2",(_unit) Call WFBE_CL_FNC_GetAIID, name _unit]} else {getText(configFile >> "CfgVehicles" >> typeOf _unit >> "displayName")}; lbAdd[503004, _label]; if (_unit == _target) then {lbSetCurSel [503004, _i]}; }; if (lbCurSel(503004) == -1) then {lbSetCurSel[503004, 0]}; _temp/* Update the gear view Parameters: - Backpack type - Selected object */ Private ["_backpack","_i","_selected","_target","_view"]; _backpack = _this select 0; _target = _this select 1; lbClear 503003; _selected = "gear"; _view = []; if (_target isKindOf "Man") then { if (_backpack != "") then {_get = missionNamespace getVariable _backpack; if !(isNil '_get') then {if ((_get select 4) == 200) then {_view = [["Backpack","backpack"]]}}}; _view = _view + [["Gear","gear"]]; if !(WF_A2_Vanilla) then {if (vehicle _target != _target) then {_view = _view + [["Vehicle","vehicle"]]}}; } else { _view = [["Vehicle","vehicle"]]; _selected = "vehicle"; }; _i = 0; {lbAdd[503003, _x select 0];lbSetData[503003,_i,_x select 1];if (_selected == (_x select 1)) then {lbSetCurSel[503003, _i]};_i = _i + 1} forEach _view; /* Marker selector for a selected respawn location. */ Private ["_erase","_marker","_marker_difference","_marker_expand","_marker_dir","_marker_min_size","_marker_max_size","_marker_size","_target"]; _marker_size = 1.4; _marker_min_size = 1.4; _marker_max_size = 1.8; _marker_dir = 0; _marker_difference = (_marker_max_size - _marker_min_size)/10; _marker_expand = true; _marker = createMarkerLocal ["wfbe_respawn_selector", [0,0,0]]; _marker setMarkerTypeLocal "Select"; _marker setMarkerColorLocal WFBE_Client_Color; _marker setMarkerSizeLocal [_marker_size, _marker_size]; while {!isNil 'WFBE_MarkerTracking'} do { sleep .03; _marker_dir = (_marker_dir + 1) % 360; _marker setMarkerDirLocal _marker_dir; _marker setMarkerSizeLocal [_marker_size, _marker_size]; if (_marker_size > _marker_max_size) then {_marker_expand = false}; if (_marker_size < _marker_min_size) then {_marker_expand = true}; if (_marker_expand) then {_marker_size = _marker_size + _marker_difference} else {_marker_size = _marker_size - _marker_difference}; if !(isNull WFBE_MarkerTracking) then { if (getMarkerPos _marker distance WFBE_MarkerTracking > 1) then {_marker setMarkerPosLocal getPos WFBE_MarkerTracking}; }; }; deleteMarkerLocal "wfbe_respawn_selector";scriptName "Client\GUI\GUI_BuyGearMenu.sqf"; //--- Register the UI. uiNamespace setVariable ["wfbe_display_buygear", _this select 0]; if (isNil {uiNamespace getVariable 'wfbe_display_buygear_tab'}) then {uiNamespace setVariable ['wfbe_display_buygear_tab', 2]}; uiNamespace setVariable ['wfbe_display_buygear_misc', -1];uiNamespace setVariable ['wfbe_display_buygear_pool_main', -1];uiNamespace setVariable ['wfbe_display_buygear_pool_gun', -1]; _color_tab = [0.258823529, 0.713725490, 1, 1]; _idc_tabs = [503301,503302,503303,503304,503305,503306]; _lb_main = 503001;_lb_secondary = 503002;_lb_cargo = 503005; _tabs = ["Template","All","Primary","Secondary","Pistols","Equipment"]; _funds_cli = 0;_price = 0;_tab_current_last = -1; _target = player; //--- Todo secure vanilla, remove not used. _target_weapons = weapons player; _target_magazines = magazines player; _backpack = (_target) Call WFBE_CL_FNC_GetUnitBackpack; if (_backpack != "") then {_target_weapons = _target_weapons + [_backpack]}; _quick_clear = false;_quick_reload = false;_template_create = false;_template_delete = false;_has_inv_changed = false;_has_veh_changed = false;_purchase = false;_remove_backpack_item = false;_target_cancarrybp = false;_update_backpack = false;_update_display = true;_update_inventory = true;_update_item = false;_update_item_mag = false;_update_magazines = true;_update_tab = true;_update_target = true;_update_vehicle = false;_update_view = false; _gear_primary = "";_gear_secondary = "";_gear_pistol = "";_gear_backpack = ""; _gear_sel_weapons = [];_gear_sel_magazines = [];_gear_sel_backpack = [];_gear_sel_vehicle = [];_gear_backpack_content = [];_gear_items = [];_gear_refresh = [];_gear_special = [];_gear_mag_main = [];_gear_mag_pool = [];_gear_vehicle_content = []; _view = "gear"; ctrlShow[_lb_cargo, false]; _targets = (_target) Call WFBE_CL_FNC_UI_Gear_UpdateTarget; WFBE_MenuAction = -1; while {true} do { if (!alive player || !dialog) exitWith {closeDialog 0}; _funds = Call WFBE_CL_FNC_GetClientFunds; if (_funds_cli != _funds) then { _funds_cli = _funds; ((uiNamespace getVariable "wfbe_display_buygear") displayCtrl 503011) ctrlSetStructuredText (parseText Format ["My Funds: $%1.", _funds]); }; _tab_current = uiNamespace getVariable 'wfbe_display_buygear_tab'; _click_misc = uiNamespace getVariable 'wfbe_display_buygear_misc'; _click_pool_main = uiNamespace getVariable 'wfbe_display_buygear_pool_main'; _click_pool_gun = uiNamespace getVariable 'wfbe_display_buygear_pool_gun'; if (_tab_current != _tab_current_last) then {_tab_current_last = _tab_current; _update_tab = true}; if (_click_misc != -1) then {uiNamespace setVariable ['wfbe_display_buygear_misc', -1]; if (_click_misc < count _gear_items && count _gear_items > 0) then {_gear_sel_weapons = _gear_sel_weapons - [_gear_items select _click_misc];_gear_items = _gear_items - [_gear_items select _click_misc]; _gear_refresh = ["items"]; _update_inventory = true;_has_inv_changed = true;}}; if (_click_pool_main != -1) then {uiNamespace setVariable ['wfbe_display_buygear_pool_main', -1]; _size = (_gear_mag_main) Call WFBE_CL_FNC_GetMagazinesSize; if (_click_pool_main <= _size && _size > 0) then {_gear_mag_main = [_gear_mag_main, _click_pool_main] Call WFBE_CL_FNC_RemoveMagazineGear; _gear_sel_magazines = _gear_mag_main + _gear_mag_pool; _gear_refresh = ["magazines_main"];_update_inventory = true;_has_inv_changed = true;}}; if (_click_pool_gun != -1) then {uiNamespace setVariable ['wfbe_display_buygear_pool_gun', -1]; _size = (_gear_mag_pool) Call WFBE_CL_FNC_GetMagazinesSize; if (_click_pool_gun <= _size && _size > 0) then {_gear_mag_pool = [_gear_mag_pool, _click_pool_gun] Call WFBE_CL_FNC_RemoveMagazineGear; _gear_sel_magazines = _gear_mag_main + _gear_mag_pool; _gear_refresh = ["magazines_hand"];_update_inventory = true;_has_inv_changed = true;}}; if (WFBE_MenuAction == 1) then {WFBE_MenuAction = -1; _update_item = true}; if (WFBE_MenuAction == 2) then {WFBE_MenuAction = -1; if (_tab_current != 0) then {_update_magazines = true}}; if (WFBE_MenuAction == 3) then {WFBE_MenuAction = -1; _update_item_mag = true;}; if (WFBE_MenuAction == 301) then {WFBE_MenuAction = -1; _update_view = true;}; if (WFBE_MenuAction == 302) then {WFBE_MenuAction = -1; _update_target = true;}; if (WFBE_MenuAction == 501) then {WFBE_MenuAction = -1; _purchase = true;}; if (WFBE_MenuAction == 601) then {WFBE_MenuAction = -1; _template_create = true;}; if (WFBE_MenuAction == 602) then {WFBE_MenuAction = -1; _template_delete = true;}; if (WFBE_MenuAction == 701) then {WFBE_MenuAction = -1; _quick_reload = true;}; if (WFBE_MenuAction == 702) then {WFBE_MenuAction = -1; _quick_clear = true;}; if (WFBE_MenuAction == 901) then {WFBE_MenuAction = -1;if (_gear_primary != "") then {_gear_mag_main = [_gear_primary, "", _gear_mag_main] Call WFBE_CL_FNC_ReplaceMagazinesGear; _gear_sel_magazines = _gear_mag_main + _gear_mag_pool; _gear_sel_weapons = _gear_sel_weapons - [_gear_primary];_gear_primary = ""; _gear_refresh = ["weapons","magazines_main"]; _update_inventory = true;_has_inv_changed = true;}}; if (WFBE_MenuAction == 902) then {WFBE_MenuAction = -1;if (_gear_backpack != "") then {_gear_sel_weapons = _gear_sel_weapons - [_gear_backpack];_gear_backpack = "";_gear_backpack_content=[[[],[]],[[],[]]];_gear_refresh = ["weapons"];[_gear_backpack,_target] Call WFBE_CL_FNC_UI_Gear_UpdateView;_update_inventory = true;_has_inv_changed = true;};if (_gear_secondary != "") then {_gear_mag_main = [_gear_secondary, "", _gear_mag_main] Call WFBE_CL_FNC_ReplaceMagazinesGear; _gear_sel_magazines = _gear_mag_main + _gear_mag_pool;_gear_sel_weapons = _gear_sel_weapons - [_gear_secondary];_gear_secondary = ""; _gear_refresh = ["weapons","magazines_main"]; _update_inventory = true;_has_inv_changed = true;}}; if (WFBE_MenuAction == 903) then {WFBE_MenuAction = -1;if (_gear_pistol != "") then {_gear_mag_pool = [_gear_pistol, "", _gear_mag_pool] Call WFBE_CL_FNC_ReplaceMagazinesGear; _gear_sel_magazines = _gear_mag_main + _gear_mag_pool;_gear_sel_weapons = _gear_sel_weapons - [_gear_pistol];_gear_pistol = ""; _gear_refresh = ["weapons","magazines_hand"]; _update_inventory = true;_has_inv_changed = true;}}; if (WFBE_MenuAction == 904) then {WFBE_MenuAction = -1;if (count _gear_special > 0) then {_gear_sel_weapons = _gear_sel_weapons - [_gear_special select 0];if (count _gear_special == 1) then {_gear_special = []} else {_gear_special = [_gear_special select 1]}; _gear_refresh = ["special"]; _update_inventory = true;_has_inv_changed = true;}}; if (WFBE_MenuAction == 905) then {WFBE_MenuAction = -1;if (count _gear_special > 1) then {_gear_sel_weapons = _gear_sel_weapons - [_gear_special select 1];_gear_special = [_gear_special select 0]; _gear_refresh = ["special"]; _update_inventory = true;_has_inv_changed = true;}}; if (WFBE_MenuAction == 906) then {WFBE_MenuAction = -1;_remove_backpack_item = true}; //--- Update the available target list. if (_update_target) then { _update_target = false; _target = _targets select (lbCurSel 503004); //todo refresh targets on click if !(alive _target) then { hint "the target is dead, refreshing"; _update_target = true; _target = player; _targets = (_target) Call WFBE_CL_FNC_UI_Gear_UpdateTarget; }; if (_target isKindOf "Man") then { //--- todo, remove unknown content. _target_weapons = [weapons _target, "weapons"] Call WFBE_CL_FNC_UI_Gear_Sanitize; _target_magazines = [magazines _target, "magazines"] Call WFBE_CL_FNC_UI_Gear_Sanitize; _target_cancarrybp = if (getNumber(configFile >> 'CfgVehicles' >> typeOf _target >> 'canCarryBackPack') == 1) then {true} else {false}; _backpack = (_target) Call WFBE_CL_FNC_GetUnitBackpack; if (_backpack != "") then {_target_weapons = _target_weapons + [_backpack]}; _returned = [_target_weapons, _target_magazines, _target] Call WFBE_CL_FNC_GetParsedGear; _gear_primary = _returned select 0; _gear_secondary = _returned select 1; _gear_pistol = _returned select 2; _gear_backpack = _returned select 3; _gear_special = _returned select 4; _gear_items = _returned select 5; _gear_mag_main = _returned select 6; _gear_mag_pool = _returned select 7; _gear_sel_backpack = _returned select 8; _gear_sel_vehicle = if (vehicle _target != _target) then {(vehicle _target) Call WFBE_CL_FNC_GetVehicleContent} else {[[[],[]],[[],[]],[[],[]]]}; _gear_refresh = ["all"]; } else { _target_weapons = []; _target_magazines = []; _target_cancarrybp = false; _gear_primary = "";_gear_secondary = "";_gear_pistol = "";_gear_backpack = ""; _gear_sel_backpack = [[[],[]],[[],[]]];_gear_items = [];_gear_special = [];_gear_mag_main = [];_gear_mag_pool = []; _gear_sel_vehicle = (_target) Call WFBE_CL_FNC_GetVehicleContent; }; [_gear_backpack,_target] Call WFBE_CL_FNC_UI_Gear_UpdateView; _gear_sel_weapons = +_target_weapons; _gear_sel_magazines = +_target_magazines; _gear_backpack_content = +_gear_sel_backpack; _gear_vehicle_content = +_gear_sel_vehicle; _has_veh_changed = false; _has_inv_changed = false; _update_inventory = true; }; //--- Update the gear tab. if (_update_tab) then { _update_tab = false; {((uiNamespace getVariable "wfbe_display_buygear") displayCtrl _x) ctrlSetTextColor [0.7490, 0.7490, 0.7490, 0.7]} forEach _idc_tabs; ((uiNamespace getVariable "wfbe_display_buygear") displayCtrl (_idc_tabs select _tab_current)) ctrlSetTextColor _color_tab; lnbClear _lb_main; lnbClear _lb_secondary; //todo - remember the previously chosen gun/mag etc switch (_tab_current) do { case 0: {[_lb_main, missionNamespace getVariable Format ["WFBE_%1_Template", WFBE_Client_SideJoinedText]] Call WFBE_CL_FNC_UI_Gear_FillTemplates}; case 1: {[_lb_main, [[(missionNamespace getVariable Format ["WFBE_%1_Primary", WFBE_Client_SideJoinedText]) + (missionNamespace getVariable Format ["WFBE_%1_Secondary", WFBE_Client_SideJoinedText]) + (missionNamespace getVariable Format ["WFBE_%1_Pistols", WFBE_Client_SideJoinedText]) + (missionNamespace getVariable Format ["WFBE_%1_Equipment", WFBE_Client_SideJoinedText])],[missionNamespace getVariable Format ["WFBE_%1_Magazines", WFBE_Client_SideJoinedText], "Mag_"]]] Call WFBE_CL_FNC_UI_Gear_FillList}; case 2: {[_lb_main, [[missionNamespace getVariable Format ["WFBE_%1_Primary", WFBE_Client_SideJoinedText]]]] Call WFBE_CL_FNC_UI_Gear_FillList}; case 3: {[_lb_main, [[missionNamespace getVariable Format ["WFBE_%1_Secondary", WFBE_Client_SideJoinedText]]]] Call WFBE_CL_FNC_UI_Gear_FillList}; case 4: {[_lb_main, [[missionNamespace getVariable Format ["WFBE_%1_Pistols", WFBE_Client_SideJoinedText]]]] Call WFBE_CL_FNC_UI_Gear_FillList}; case 5: {[_lb_main, [[(missionNamespace getVariable Format ["WFBE_%1_Equipment", WFBE_Client_SideJoinedText])],[missionNamespace getVariable Format ["WFBE_%1_Magazines", WFBE_Client_SideJoinedText], "Mag_"]]] Call WFBE_CL_FNC_UI_Gear_FillList}; }; //--- Smart Update, tbd improve per tab. _ui_lnb_currow = lnbCurSelRow _lb_main; if (_ui_lnb_currow != -1 && ((lnbSize _lb_main) select 0) > 0) then { lnbSetCurSelRow [_lb_main, 0]; }; }; //--- Update the view tab. if (_update_view) then { _update_view = false; _view = lbData[503003, lbCurSel 503003]; switch (_view) do { case "backpack": {{ctrlShow[_x, false]} forEach [503401, 503402, 503403]; for '_i' from 503501 to 503534 do {ctrlShow [_i, false]};{ctrlShow[_x, true]} forEach[_lb_cargo,503006,503007];[_lb_cargo, _gear_backpack_content, true] Call WFBE_CL_FNC_UI_Gear_FillCargoList;_update_backpack = true}; case "gear": {{ctrlShow[_x, true]} forEach [503401, 503402, 503403]; for '_i' from 503501 to 503534 do {ctrlShow [_i, true]};{ctrlShow[_x, false]} forEach[_lb_cargo,503006,503007];_update_display = true;}; case "vehicle": {{ctrlShow[_x, false]} forEach [503401, 503402, 503403]; for '_i' from 503501 to 503534 do {ctrlShow [_i, false]};{ctrlShow[_x, true]} forEach[_lb_cargo,503006,503007]; [_lb_cargo, _gear_vehicle_content, true] Call WFBE_CL_FNC_UI_Gear_FillCargoList; _update_vehicle = true;/*todo update target content*/}; }; }; //--- Quick gear reload. if (_quick_reload) then { _quick_reload = false; switch (_view) do { case "gear": { _get = _target getVariable "wfbe_custom_gear"; if (isNil '_get') then { //--- The player may not reload it's loadout from the config. if (_target != player) then { _gear_config = (typeOf _target) Call WFBE_CO_FNC_GetUnitConfigGear; _gear_sel_weapons = _gear_config select 0; _gear_sel_magazines = _gear_config select 1; _gear_backpack = _gear_config select 2; _gear_backpack_content = _gear_config select 3; if (_gear_backpack != "") then {_gear_sel_weapons = _gear_sel_weapons + [_gear_backpack]; [_gear_backpack,_target] Call WFBE_CL_FNC_UI_Gear_UpdateView}; } else { hint localize "STR_WF_GEAR_ProhibPlayerDefault"; }; } else { _gear_sel_weapons = _get select 0; _gear_sel_magazines = _get select 1; _gear_backpack = _get select 2; _gear_backpack_content = _get select 3; }; _has_inv_changed = true; _update_inventory = true; _gear_refresh = ["all"]; }; }; }; //--- Quick gear removal. if (_quick_clear) then { _quick_clear = false; switch (_view) do { case "backpack": {_gear_refresh = ["all"];_gear_backpack_content = [[[],[]],[[],[]]]; _update_backpack = true; _has_inv_changed = true; [_lb_cargo, _gear_backpack_content, true] Call WFBE_CL_FNC_UI_Gear_FillCargoList;}; case "gear": {_gear_refresh = ["all"];_gear_backpack = "";_gear_sel_weapons = []; _gear_sel_magazines = []; _gear_mag_main = []; _gear_mag_pool = []; _gear_backpack_content = [[[],[]],[[],[]]]; _has_inv_changed = true}; case "vehicle": {_gear_vehicle_content = [[[],[]],[[],[]],[[],[]]]; _update_vehicle = true; _has_veh_changed = true;[_lb_cargo, _gear_vehicle_content, true] Call WFBE_CL_FNC_UI_Gear_FillCargoList;}; }; _update_inventory = true; }; //--- Remove an item from the backpack. if (_remove_backpack_item) then { _remove_backpack_item = false; _ui_lnb_currow = lnbCurSelRow _lb_cargo; if (_ui_lnb_currow > -1) then { _item_selected = lnbData[_lb_cargo,[_ui_lnb_currow, 0]]; _get = missionNamespace getVariable _item_selected; switch (_view) do { case "backpack": { _kind = switch (true) do { case ((_get select 4) < 6): {0}; case ((_get select 4) in [100,101]): {1}; default {-1}}; _gear_backpack_content set [_kind, [_gear_backpack_content select _kind, "substract", if (_kind == 0) then {_item_selected} else {_get select 6}] Call WFBE_CL_FNC_OperateCargoGear]; [_lb_cargo, _gear_backpack_content, true] Call WFBE_CL_FNC_UI_Gear_FillCargoList; _has_inv_changed = true; _update_backpack = true; }; case "vehicle": { _kind = switch (true) do { case ((_get select 4) < 6): {0}; case ((_get select 4) in [100,101]): {1}; case ((_get select 4) in [200,201]): {2}; default {-1}}; _gear_vehicle_content set [_kind, [_gear_vehicle_content select _kind, "substract", if (_kind == 1) then {_get select 6} else {_item_selected}] Call WFBE_CL_FNC_OperateCargoGear]; [_lb_cargo, _gear_vehicle_content, true] Call WFBE_CL_FNC_UI_Gear_FillCargoList; _has_veh_changed = true; _update_vehicle = true; }; }; _update_inventory = true; }; }; //--- Add an item if (_update_item) then { _update_item = false; _ui_lnb_currow = lnbCurSelRow _lb_main; if (_ui_lnb_currow > -1) then { if (_tab_current != 0) then { _item_selected = lnbData[_lb_main,[_ui_lnb_currow, 0]]; _get = missionNamespace getVariable _item_selected; _belong = _get select 4; if !(isNil '_get') then { switch (_view) do { case "gear": { switch (_belong) do { case 0: {_gear_refresh = [];if (_gear_primary != "") then {_gear_mag_main = [_gear_primary, _item_selected, _gear_mag_main] Call WFBE_CL_FNC_ReplaceMagazinesGear; _gear_sel_magazines = _gear_mag_main + _gear_mag_pool; _gear_refresh = ["magazines_main"]}; _gear_sel_weapons = _gear_sel_weapons - [_gear_primary];_gear_primary = _item_selected; _gear_sel_weapons = _gear_sel_weapons + [_gear_primary]; _gear_refresh = _gear_refresh + ["weapons"];_update_inventory = true;_has_inv_changed = true;};// todo update mags case 1: {_gear_refresh = [];if (_gear_pistol != "") then {_gear_mag_pool = [_gear_pistol, _item_selected, _gear_mag_pool] Call WFBE_CL_FNC_ReplaceMagazinesGear; _gear_sel_magazines = _gear_mag_main + _gear_mag_pool; _gear_refresh = ["magazines_hand"]};_gear_sel_weapons = _gear_sel_weapons - [_gear_pistol];_gear_pistol = _item_selected; _gear_sel_weapons = _gear_sel_weapons + [_gear_pistol]; _gear_refresh = _gear_refresh + ["weapons"];_update_inventory = true;_has_inv_changed = true;}; case 2: {_add = true;if (_gear_primary != "") then {if ((missionNamespace getVariable _gear_primary) select 4 == 3) then {_add = false}};if (_add) then {_gear_refresh = [];if (_gear_backpack != "") then {_gear_sel_weapons = _gear_sel_weapons - [_gear_backpack];_gear_backpack_content = [[[],[]],[[],[]]];_gear_backpack = "";[_gear_backpack,_target] Call WFBE_CL_FNC_UI_Gear_UpdateView;};if (_gear_secondary != "") then {_gear_mag_main = [_gear_secondary, _item_selected, _gear_mag_main] Call WFBE_CL_FNC_ReplaceMagazinesGear; _gear_sel_magazines = _gear_mag_main + _gear_mag_pool; _gear_refresh = ["magazines_main"]};_gear_sel_weapons = _gear_sel_weapons - [_gear_secondary];_gear_secondary = _item_selected; _gear_sel_weapons = _gear_sel_weapons + [_gear_secondary]; _gear_refresh = _gear_refresh + ["weapons"];_update_inventory = true;_has_inv_changed = true;}}; case 3: {_gear_refresh = [];if (_gear_backpack != "") then {_gear_sel_weapons = _gear_sel_weapons - [_gear_backpack];_gear_backpack_content = [[[],[]],[[],[]]];_gear_backpack = "";[_gear_backpack,_target] Call WFBE_CL_FNC_UI_Gear_UpdateView;};if (_gear_primary != "") then {if (_gear_secondary != "") then {_gear_mag_main = [_gear_secondary, "", _gear_mag_main] Call WFBE_CL_FNC_ReplaceMagazinesGear};_gear_mag_main = [_gear_primary, _item_selected, _gear_mag_main] Call WFBE_CL_FNC_ReplaceMagazinesGear; _gear_sel_magazines = _gear_mag_main + _gear_mag_pool; _gear_refresh = ["magazines_main"]};_gear_sel_weapons = _gear_sel_weapons - [_gear_primary, _gear_secondary];_gear_primary = _item_selected; _gear_sel_weapons = _gear_sel_weapons + [_gear_primary]; _gear_secondary = ""; _gear_refresh = _gear_refresh + ["weapons"];_update_inventory = true;_has_inv_changed = true;}; case 4: {if (!(_item_selected in _gear_special) && count _gear_special < 2) then {_gear_special = _gear_special + [_item_selected]; _gear_sel_weapons = _gear_sel_weapons + [_item_selected]; _gear_refresh = ["special"];_update_inventory = true;_has_inv_changed = true;}}; case 5: {if !(_item_selected in _gear_items) then {_gear_items = _gear_items + [_item_selected]; _gear_sel_weapons = _gear_sel_weapons + [_item_selected]; _gear_refresh = ["items"];_update_inventory = true;_has_inv_changed = true;}}; case 100: {_mag_size = _get select 5; _size = (_gear_mag_pool) Call WFBE_CL_FNC_GetMagazinesSize; if (_mag_size + _size <= 8) then {_gear_mag_pool = _gear_mag_pool + [_get select 6];_gear_sel_magazines = _gear_mag_main + _gear_mag_pool; _gear_refresh = ["magazines_hand"]; _has_inv_changed = true; _update_inventory = true;}}; case 101: {_mag_size = _get select 5; _size = (_gear_mag_main) Call WFBE_CL_FNC_GetMagazinesSize; if (_mag_size + _size <= 12) then {_gear_mag_main = _gear_mag_main + [_get select 6];_gear_sel_magazines = _gear_mag_main + _gear_mag_pool; _gear_refresh = ["magazines_main"]; _has_inv_changed = true; _update_inventory = true;}}; case 200: {_add = true;if !(_target_cancarrybp) then {_add = false; hint "The target cannot carry a backpack!"};if (_gear_primary != "") then {if ((missionNamespace getVariable _gear_primary) select 4 == 3) then {_add = false}};if (_add) then {_gear_refresh = [];_gear_backpack_content = _get select 5;if (_gear_secondary != "") then {_gear_mag_main = [_gear_secondary, "", _gear_mag_main] Call WFBE_CL_FNC_ReplaceMagazinesGear; _gear_sel_magazines = _gear_mag_main + _gear_mag_pool; _gear_refresh = ["magazines_main"]; _gear_sel_weapons = _gear_sel_weapons - [_gear_secondary]};_gear_sel_weapons = _gear_sel_weapons - [_gear_backpack];_gear_backpack = _item_selected; _gear_sel_weapons = _gear_sel_weapons + [_gear_backpack]; _gear_refresh = _gear_refresh + ["weapons"];[_gear_backpack,_target] Call WFBE_CL_FNC_UI_Gear_UpdateView;_update_inventory = true;_has_inv_changed = true;}}; case 201: {_add = true;if !(_target_cancarrybp) then {_add = false; hint "The target cannot carry a backpack!"};if (_gear_primary != "") then {if ((missionNamespace getVariable _gear_primary) select 4 == 3) then {_add = false}};if (_add) then {_gear_refresh = [];_gear_backpack_content = [[[],[]],[[],[]]];if (_gear_secondary != "") then {_gear_mag_main = [_gear_secondary, "", _gear_mag_main] Call WFBE_CL_FNC_ReplaceMagazinesGear; _gear_sel_magazines = _gear_mag_main + _gear_mag_pool; _gear_refresh = ["magazines_main"]; _gear_sel_weapons = _gear_sel_weapons - [_gear_secondary]};_gear_sel_weapons = _gear_sel_weapons - [_gear_backpack];_gear_backpack = _item_selected; _gear_sel_weapons = _gear_sel_weapons + [_gear_backpack]; _gear_refresh = _gear_refresh + ["weapons"];[_gear_backpack,_target] Call WFBE_CL_FNC_UI_Gear_UpdateView;_update_inventory = true;_has_inv_changed = true;}}; }; }; case "backpack": { _kind = switch (true) do { case (_belong < 6): {0}; case (_belong in [100,101]): {1}; default {-1}}; if (_kind == -1) exitWith {}; _returned = [_gear_backpack, _gear_backpack_content] Call WFBE_CL_FNC_GetGearCargoSize; _add = false; if (_belong < 4 && _returned select 2 && ((_returned select 0) >= (_get select 5))) then {_add = true}; if (_belong > 3 && _returned select 1 && ((_returned select 0) >= (_get select 5))) then {_add = true}; if (_add) then { _gear_backpack_content set [_kind, [_gear_backpack_content select _kind, "add", if (_kind == 0) then {_item_selected} else {_get select 6}] Call WFBE_CL_FNC_OperateCargoGear]; [_lb_cargo, _gear_backpack_content, true] Call WFBE_CL_FNC_UI_Gear_FillCargoList; _has_inv_changed = true; _update_inventory = true; _update_backpack = true; }; }; case "vehicle": { _kind = switch (true) do { case (_belong < 6): {0}; case (_belong in [100,101]): {1}; case (_belong in [200,201]): {2}; default {-1}}; if (_kind == -1) exitWith {}; _returned = [typeOf (vehicle _target), _gear_vehicle_content] Call WFBE_CL_FNC_GetVehicleCargoSize; _add = false; switch (true) do { case (_belong < 4 && (_returned select 0) > 0): {_add = true}; case (_belong in [4,5,100,101] && (_returned select 1) > 0): {_add = true}; case (_belong in [200,201] && (_returned select 2) > 0): {_add = true}; }; if (_add) then { _gear_vehicle_content set [_kind, [_gear_vehicle_content select _kind, "add", if (_kind == 1) then {_get select 6} else {_item_selected}] Call WFBE_CL_FNC_OperateCargoGear]; [_lb_cargo, _gear_vehicle_content, true] Call WFBE_CL_FNC_UI_Gear_FillCargoList; _has_veh_changed = true; _update_inventory = true; _update_vehicle = true; }; }; }; }; } else { //--- Templates if (_view == "gear") then { _item_selected = lnbValue[_lb_main,[_ui_lnb_currow, 0]]; _template = (missionNamespace getVariable Format ["WFBE_%1_Template", WFBE_Client_SideJoinedText]) select _item_selected; _weapons = _template select 4; _magazines = _template select 5; _backpack_content = _template select 6; if (count _backpack_content == 0) then {_backpack_content = [[[],[]],[[],[]]]}; _magazines = (_magazines) Call WFBE_CL_FNC_UI_Gear_ParseTemplateContent; _returned = [_weapons, _magazines] Call WFBE_CL_FNC_GetParsedGear; _gear_primary = _returned select 0; _gear_secondary = _returned select 1; _gear_pistol = _returned select 2; _gear_backpack = _returned select 3; _gear_special = _returned select 4; _gear_items = _returned select 5; _gear_mag_main = _returned select 6; _gear_mag_pool = _returned select 7; _gear_refresh = ["all"]; //--- If the target is unable to carry a backpack or a tripod, we remove it from the template. if !(_target_cancarrybp) then { if (_gear_backpack != "") then {_gear_secondary = ""; _weapons = _weapons - [_gear_backpack]}; _gear_backpack = ""; _gear_sel_backpack = [[[],[]],[[],[]]]; }; [_gear_backpack,_target] Call WFBE_CL_FNC_UI_Gear_UpdateView; _gear_sel_weapons = +_weapons; _gear_sel_magazines = +_magazines; _gear_backpack_content = +_backpack_content; _has_inv_changed = true; _update_inventory = true; }; }; }; }; //--- Add a magazine if (_update_item_mag) then { _update_item_mag = false; _ui_lnb_currow = lnbCurSelRow _lb_secondary; if (_ui_lnb_currow > -1) then { _item_selected = lnbData[_lb_secondary,[_ui_lnb_currow, 0]]; _get = missionNamespace getVariable _item_selected; if !(isNil '_get') then { switch (_view) do { case "gear": { switch (_get select 4) do { case 100: {_mag_size = _get select 5; _size = (_gear_mag_pool) Call WFBE_CL_FNC_GetMagazinesSize; if (_mag_size + _size <= 8) then {_gear_mag_pool = _gear_mag_pool + [_get select 6];_gear_sel_magazines = _gear_mag_main + _gear_mag_pool; _gear_refresh = ["magazines_hand"]; _update_inventory = true;_has_inv_changed = true;}}; case 101: {_mag_size = _get select 5; _size = (_gear_mag_main) Call WFBE_CL_FNC_GetMagazinesSize; if (_mag_size + _size <= 12) then {_gear_mag_main = _gear_mag_main + [_get select 6];_gear_sel_magazines = _gear_mag_main + _gear_mag_pool; _gear_refresh = ["magazines_main"]; _update_inventory = true;_has_inv_changed = true;}}; }; }; case "backpack": { _returned = [_gear_backpack, _gear_backpack_content] Call WFBE_CL_FNC_GetGearCargoSize; if (_returned select 1 && ((_returned select 0) >= (_get select 5))) then { _gear_backpack_content set [1, [_gear_backpack_content select 1, "add", _get select 6] Call WFBE_CL_FNC_OperateCargoGear]; [_lb_cargo, _gear_backpack_content, true] Call WFBE_CL_FNC_UI_Gear_FillCargoList; _has_inv_changed = true; _update_inventory = true; _update_backpack = true; }; }; case "vehicle": { _returned = [typeOf (vehicle _target), _gear_vehicle_content] Call WFBE_CL_FNC_GetVehicleCargoSize; if ((_returned select 1) > 0) then { _gear_vehicle_content set [1, [_gear_vehicle_content select 1, "add", _get select 6] Call WFBE_CL_FNC_OperateCargoGear]; [_lb_cargo, _gear_vehicle_content, true] Call WFBE_CL_FNC_UI_Gear_FillCargoList; _has_veh_changed = true; _update_inventory = true; _update_vehicle = true; }; }; }; }; }; }; //--- Update the backpack view if (_update_backpack) then { _update_backpack = false; _returned = [_gear_backpack, _gear_backpack_content] Call WFBE_CL_FNC_GetGearCargoSize; _html = Format["Capacity:

Weapons: %1/%2 (Size: %3)
Magazines: %4/%5
Overall: %6/%7",_returned select 5, getNumber(configFile >> 'CfgVehicles' >> _gear_backpack >> 'transportMaxWeapons'),_returned select 3,_returned select 4,getNumber(configFile >> 'CfgVehicles' >> _gear_backpack >> 'transportMaxMagazines'),(_returned select 3)+(_returned select 4),getNumber(configFile >> 'CfgVehicles' >> _gear_backpack >> 'transportMaxMagazines')]; ((uiNamespace getVariable "wfbe_display_buygear") displayCtrl 503006) ctrlSetStructuredText (parseText _html); ((uiNamespace getVariable "wfbe_display_buygear") displayCtrl 503007) ctrlSetStructuredText (parseText Format["",(missionNamespace getVariable _gear_backpack) select 0]); }; //--- Update the vehicles view if (_update_vehicle) then { _update_vehicle = false; _returned = [typeOf (vehicle _target), _gear_vehicle_content] Call WFBE_CL_FNC_GetVehicleCargoSize; _html = Format["Capacity:

Weapons: %1/%2
Magazines: %3/%4
Backpacks: %5/%6
",_returned select 3,getNumber(configFile >> 'CfgVehicles' >> typeOf (vehicle _target) >> 'transportMaxWeapons'),_returned select 4,getNumber(configFile >> 'CfgVehicles' >> typeOf (vehicle _target) >> 'transportMaxMagazines'),_returned select 5,getNumber(configFile >> 'CfgVehicles' >> typeOf (vehicle _target) >> 'transportMaxBackpacks')]; ((uiNamespace getVariable "wfbe_display_buygear") displayCtrl 503006) ctrlSetStructuredText (parseText _html); ((uiNamespace getVariable "wfbe_display_buygear") displayCtrl 503007) ctrlSetStructuredText (parseText Format["",getText(configFile >> 'CfgVehicles' >> typeOf (vehicle _target) >> 'picture')]); }; //--- Update the magazines view if (_update_magazines) then { _update_magazines = false; _ui_lnb_currow = lnbCurSelRow _lb_main; if (_ui_lnb_currow > -1) then { _item_selected = lnbData[_lb_main,[_ui_lnb_currow, 0]]; _get = missionNamespace getVariable _item_selected; if ((_get select 4) in [0,1,2,3,4]) then { lnbClear _lb_secondary; [_lb_secondary, [[_get select 6, "Mag_"]]] Call WFBE_CL_FNC_UI_Gear_FillList; }; }; }; //--- Purchase if (_purchase) then { _purchase = false; if ((Call WFBE_CL_FNC_GetClientFunds) >= _price) then { _target_weapons = +_gear_sel_weapons; _target_magazines = +_gear_sel_magazines; _gear_sel_backpack = +_gear_backpack_content; _gear_sel_vehicle = +_gear_vehicle_content; _msg = ""; if (_target isKindOf "Man" && _has_inv_changed) then { _msg = _msg + Format["%1",[configFile >> 'CfgVehicles' >> typeOf _target, "displayName"] Call WFBE_CO_FNC_GetConfigEntry]; [_target, _target_weapons - [_gear_backpack], _target_magazines, [_gear_primary,_gear_pistol,_gear_secondary], _gear_backpack, _gear_sel_backpack] Call WFBE_CO_FNC_EquipUnit; //--- Store the gear over the unit for rearms. _target setVariable ["wfbe_custom_gear", [_target_weapons - [_gear_backpack], _target_magazines, _gear_backpack, _gear_sel_backpack, [_gear_primary,_gear_pistol,_gear_secondary]]]; //--- Set the gear cost on the unit. _gear_cost = [[[],_target_weapons],[[],_target_magazines],[[], _gear_sel_backpack],[[], []]] Call WFBE_CL_FNC_UI_Gear_UpdatePrice; _target setVariable ["wfbe_custom_gear_cost", _gear_cost select 0]; }; if (_has_veh_changed) then { if (_msg != "") then {_msg = _msg + " ,"}; _msg = _msg + Format["%1", [configFile >> 'CfgVehicles' >> typeOf _target, "displayName"] Call WFBE_CO_FNC_GetConfigEntry]; [vehicle _target, _gear_sel_vehicle] Call WFBE_CO_FNC_EquipVehicle; }; -(_price) Call WFBE_CL_FNC_ChangeClientFunds; if (_has_inv_changed || _has_veh_changed) then {hint parseText Format["Information:

Purchased Equipement to %1 for $%2.",_msg,_price];_price = 0;} else {hint parseText("Information:

The gear was not purchased since nothing has changed.");}; _has_inv_changed = false; _has_veh_changed = false; _update_inventory = true; } else { hint parseText Format["Information:

Cannot purchase equipment, missing $%1.",_price - (Call WFBE_CL_FNC_GetClientFunds)]; }; }; //--- Create a template if (_template_create) then { _template_create = false; [_gear_sel_weapons, _gear_sel_magazines, _gear_backpack_content] Call WFBE_CL_FNC_UI_Gear_AddTemplate; if (_tab_current == 0) then {_update_tab = true}; }; //--- Delete a template if (_template_delete) then { _template_delete = false; _ui_lnb_currow = lnbCurSelRow _lb_main; if (_ui_lnb_currow > -1 && _tab_current == 0 && _view == "gear") then { _item_selected = lnbValue[_lb_main,[_ui_lnb_currow, 0]]; (_item_selected) Call WFBE_CL_FNC_UI_Gear_DeleteTemplate; if (_tab_current == 0) then {_update_tab = true}; } else { hint "A template may only be removed from the template tab in the gear view."; }; }; //--- Update the target eta if !(alive _target) then { //--- Get a living target hint "the target is dead, refreshing"; _update_target = true; _target = player; _targets = (_target) Call WFBE_CL_FNC_UI_Gear_UpdateTarget; }; //--- Update the gear view if (_update_inventory) then { //todo later, template for veh / bp _update_inventory = false; _update_display = true; _prices = [[_target_weapons,_gear_sel_weapons],[_target_magazines,_gear_sel_magazines],[_gear_sel_backpack, _gear_backpack_content],[_gear_sel_vehicle, _gear_vehicle_content]] Call WFBE_CL_FNC_UI_Gear_UpdatePrice; _price = _prices select 0; ((uiNamespace getVariable "wfbe_display_buygear") displayCtrl 503008) ctrlSetStructuredText (parseText Format["Gear Cost: $%2.",if (_price > 0) then {'#F56363'} else {'#76F563'},_price]); }; //--- Update the inventory if (_update_display) then { _update_display = false; if (_view == "gear") then {[_gear_sel_weapons, _gear_sel_magazines, _gear_refresh] Call WFBE_CL_FNC_UI_Gear_DisplayInventory}; }; //--- Go back to the main menu. if (WFBE_MenuAction == 1000) exitWith { WFBE_MenuAction = -1; closeDialog 0; createDialog "WF_Menu"; }; sleep .01; }; //--- Release the UI. {uiNamespace setVariable [_x, nil]} forEach ["wfbe_display_buygear","wfbe_display_buygear_misc","wfbe_display_buygear_pool_main","wfbe_display_buygear_pool_gun"];["currentCutDisplay", displayNull] call BIS_FNC_GUIset;/* Ingame parameters dump. */ for [{_i = 0},{_i < (count (missionConfigFile/"Params"))},{_i = _i + 1}] do { _paramName = (configName ((missionConfigFile >> "Params") select _i)); _text = getText (missionConfigFile >> "Params" >> _paramName >> "title"); _values = getArray (missionConfigFile >> "Params" >> _paramName >> "values"); _texts = getArray (missionConfigFile >> "Params" >> _paramName >> "texts"); _value = if (isMultiplayer) then {paramsArray select _i} else {getNumber (missionConfigFile >> "Params" >> _paramName >> "default")}; _status = _texts select (_values find _value); lnbAddRow [22003,[_text,_status]]; }; while {alive player && dialog} do { /*---it is in the Main Menu now //MrNiceGuy _uptime = Call GetTime; ctrlSetText [22005,Format[localize 'STR_WF_MAIN_Uptime',_uptime select 0,_uptime select 1,_uptime select 2, _uptime select 3]]; */ sleep 0.1; if (side player != sideJoined) exitWith {closeDialog 0}; if (!dialog) exitWith {}; //--- Back Button. if (MenuAction == 1) exitWith { //---added-MrNiceGuy MenuAction = -1; closeDialog 0; createDialog "WF_Menu"; }; };disableSerialization; 12450 cutText ["","PLAIN",0]; _side = _this Select 0; _sideText = Localize "STR_WF_PARAMETER_Side_East"; if (_side == West) then {_sideText = Localize "STR_WF_PARAMETER_Side_West"}; _sideName = Format[Localize "STR_WF_END_Victory",_sideText]; _width = 0.4; TitleText["","PLAIN"]; sleep 0.5; CutRsc["EndOfGameStats","PLAIN",0]; _eastUnitsCreated = WF_Logic getVariable "eastUnitsCreated"; _eastCasualties = WF_Logic getVariable "eastCasualties"; _eastVehiclesCreated = WF_Logic getVariable "eastVehiclesCreated"; _eastVehiclesLost = WF_Logic getVariable "eastVehiclesLost"; _westUnitsCreated = WF_Logic getVariable "westUnitsCreated"; _westCasualties = WF_Logic getVariable "westCasualties"; _westVehiclesCreated = WF_Logic getVariable "westVehiclesCreated"; _westVehiclesLost = WF_Logic getVariable "westVehiclesLost"; _eastCreatedRate = _eastVehiclesCreated / 5 * .1; _eastLostRate = _eastVehiclesLost / 5 * .1; _eastRecruitedRate = _eastUnitsCreated / 5 * .1; _eastCasualtiesRate = _eastCasualties / 5 * .1; _westCreatedRate = _westVehiclesCreated / 5 * .1; _westLostRate = _westVehiclesLost / 5 * .1; _westRecruitedRate = _westUnitsCreated / 5 * .1; _westCasualtiesRate = _westCasualties / 5 * .1; waitUntil {!isNull (["currentCutDisplay"] call BIS_FNC_GUIget)}; ((["currentCutDisplay"] call BIS_FNC_GUIget) DisplayCtrl 90001) CtrlSetText _sideName; _westRecruitedCounter = (["currentCutDisplay"] call BIS_FNC_GUIget) DisplayCtrl 90200; _westRecruitedBar = (["currentCutDisplay"] call BIS_FNC_GUIget) DisplayCtrl 90201; _westCasualtyCounter = (["currentCutDisplay"] call BIS_FNC_GUIget) DisplayCtrl 90202; _westCasualtyBar = (["currentCutDisplay"] call BIS_FNC_GUIget) DisplayCtrl 90203; _westCreatedCounter = (["currentCutDisplay"] call BIS_FNC_GUIget) DisplayCtrl 90204; _westCreatedBar = (["currentCutDisplay"] call BIS_FNC_GUIget) DisplayCtrl 90205; _westLostCounter = (["currentCutDisplay"] call BIS_FNC_GUIget) DisplayCtrl 90206; _westLostBar = (["currentCutDisplay"] call BIS_FNC_GUIget) DisplayCtrl 90207; _position = CtrlPosition _westRecruitedBar; _recruited = _width * (_westUnitsCreated / 500); if (_recruited > _width) then {_recruited = _width}; _position Set[2,0]; _westRecruitedBar CtrlSetPosition _position; _westRecruitedBar CtrlCommit 0; _position Set[2,_recruited]; _westRecruitedBar CtrlSetPosition _position; _westRecruitedBar CtrlCommit 8; _position = CtrlPosition _westCasualtyBar; _casualties = _width * (_westCasualties / 500); if (_casualties > _width) then {_casualties = _width}; _position Set[2,0]; _westCasualtyBar CtrlSetPosition _position; _westCasualtyBar CtrlCommit 0; _position Set[2,_casualties]; _westCasualtyBar CtrlSetPosition _position; _westCasualtyBar CtrlCommit 8; _position = CtrlPosition _westCreatedBar; _created = _width * (_westVehiclesCreated / 150); if (_created > _width) then {_created = _width}; _position Set[2,0]; _westCreatedBar CtrlSetPosition _position; _westCreatedBar CtrlCommit 0; _position Set[2,_created]; _westCreatedBar CtrlSetPosition _position; _westCreatedBar CtrlCommit 8; _position = CtrlPosition _westLostBar; _lost = _width * (_westVehiclesLost / 150); if (_lost > _width) then {_lost = _width}; _position Set[2,0]; _westLostBar CtrlSetPosition _position; _westLostBar CtrlCommit 0; _position Set[2,_lost]; _westLostBar CtrlSetPosition _position; _westLostBar CtrlCommit 8; _eastRecruitedCounter = (["currentCutDisplay"] call BIS_FNC_GUIget) DisplayCtrl 90101; _eastRecruitedBar = (["currentCutDisplay"] call BIS_FNC_GUIget) DisplayCtrl 90102; _eastCasualtyCounter = (["currentCutDisplay"] call BIS_FNC_GUIget) DisplayCtrl 90103; _eastCasualtyBar = (["currentCutDisplay"] call BIS_FNC_GUIget) DisplayCtrl 90104; _eastCreatedCounter = (["currentCutDisplay"] call BIS_FNC_GUIget) DisplayCtrl 90105; _eastCreatedBar = (["currentCutDisplay"] call BIS_FNC_GUIget) DisplayCtrl 90106; _eastLostCounter = (["currentCutDisplay"] call BIS_FNC_GUIget) DisplayCtrl 90107; _eastLostBar = (["currentCutDisplay"] call BIS_FNC_GUIget) DisplayCtrl 90108; _position = CtrlPosition _eastRecruitedBar; _recruited = _width * (_eastUnitsCreated / 500); if (_recruited > _width) then {_recruited = _width}; _position Set[2,0]; _eastRecruitedBar CtrlSetPosition _position; _eastRecruitedBar CtrlCommit 0; _position Set[2,_recruited]; _eastRecruitedBar CtrlSetPosition _position; _eastRecruitedBar CtrlCommit 8; _position = CtrlPosition _eastCasualtyBar; _casualties = _width * (_eastCasualties / 500); if (_casualties > _width) then {_casualties = _width}; _position Set[2,0]; _eastCasualtyBar CtrlSetPosition _position; _eastCasualtyBar CtrlCommit 0; _position Set[2,_casualties]; _eastCasualtyBar CtrlSetPosition _position; _eastCasualtyBar CtrlCommit 8; _position = CtrlPosition _eastCreatedBar; _created = _width * (_eastVehiclesCreated / 150); if (_created > _width) then {_created = _width}; _position Set[2,0]; _eastCreatedBar CtrlSetPosition _position; _eastCreatedBar CtrlCommit 0; _position Set[2,_created]; _eastCreatedBar CtrlSetPosition _position; _eastCreatedBar CtrlCommit 8; _position = CtrlPosition _eastLostBar; _lost = _width * (_eastVehiclesLost / 150); if (_lost > _width) then {_lost = _width}; _position Set[2,0]; _eastLostBar CtrlSetPosition _position; _eastLostBar CtrlCommit 0; _position Set[2,_lost]; _eastLostBar CtrlSetPosition _position; _eastLostBar CtrlCommit 8; _timePassed = 0; _eastCasualtyCount = 0; _eastRecruitedCount = 0; _eastCreatedCount = 0; _eastLostCount = 0; _westCasualtyCount = 0; _westRecruitedCount = 0; _westCreatedCount = 0; _westLostCount = 0; while {_timePassed < 8} do { sleep 0.1; _eastRecruitedCount = _eastRecruitedCount + _eastRecruitedRate; if (_eastRecruitedCount > _eastUnitsCreated) then {_eastRecruitedCount = _eastUnitsCreated}; _eastRecruitedCounter CtrlSetText Format["%1",_eastRecruitedCount - (_eastRecruitedCount % 1)]; _eastCasualtyCount = _eastCasualtyCount + _eastCasualtiesRate; if (_eastCasualtyCount > _eastCasualties) then {_eastCasualtyCount = _eastCasualties}; _eastCasualtyCounter CtrlSetText Format["%1",_eastCasualtyCount - (_eastCasualtyCount % 1)]; _eastCreatedCount = _eastCreatedCount + _eastCreatedRate; if (_eastCreatedCount > _eastVehiclesCreated) then {_eastCreatedCount = _eastVehiclesCreated}; _eastCreatedCounter CtrlSetText Format["%1",_eastCreatedCount - (_eastCreatedCount % 1)]; _eastLostCount = _eastLostCount + _eastLostRate; if (_eastLostCount > _eastVehiclesLost) then {_eastLostCount = _eastVehiclesLost}; _eastLostCounter CtrlSetText Format["%1",_eastLostCount - (_eastLostCount % 1)]; _westRecruitedCount = _westRecruitedCount + _westRecruitedRate; if (_westRecruitedCount > _westUnitsCreated) then {_westRecruitedCount = _westUnitsCreated}; _westRecruitedCounter CtrlSetText Format["%1",_westRecruitedCount - (_westRecruitedCount % 1)]; _westCasualtyCount = _westCasualtyCount + _westCasualtiesRate; if (_westCasualtyCount > _westCasualties) then {_westCasualtyCount = _westCasualties}; _westCasualtyCounter CtrlSetText Format["%1",_westCasualtyCount - (_westCasualtyCount % 1)]; _westCreatedCount = _westCreatedCount + _westCreatedRate; if (_westCreatedCount > _westVehiclesCreated) then {_westCreatedCount = _westVehiclesCreated}; _westCreatedCounter CtrlSetText Format["%1",_westCreatedCount - (_westCreatedCount % 1)]; _westLostCount = _westLostCount + _westLostRate; if (_westLostCount > _westVehiclesLost) then {_westLostCount = _westVehiclesLost}; _westLostCounter CtrlSetText Format["%1",_westLostCount - (_westLostCount % 1)]; _timePassed = _timePassed + 0.1; };scriptName "Client\GUI\GUI_GroupsMenu.sqf"; //--- Register the UI. uiNamespace setVariable ["wfbe_display_groups", _this select 0]; {_leader = if !(isNull leader _x) then {name leader _x} else {"No leader"}; lnbAddRow[508001, [Format["%1",_x],_leader]];} forEach WFBE_Client_Teams; lnbSetCurSelRow[508001, 0]; ((uiNamespace getVariable "wfbe_display_groups") displayCtrl 508004) ctrlSetStructuredText (parseText "Group Members:"); ((uiNamespace getVariable "wfbe_display_groups") displayCtrl 508005) ctrlSetStructuredText (parseText "Groups:"); ((uiNamespace getVariable "wfbe_display_groups") displayCtrl 508006) ctrlSetStructuredText (parseText "Requests:"); _join_group = false;_update_group = true;_accept_request = false;_deny_request = false;_kick_member = false; _update_list = time; _update_requests = -500; _group_units = []; WFBE_MenuAction = -1; while {alive player && dialog} do { if (WFBE_MenuAction == 1) then {WFBE_MenuAction = -1; _join_group = true}; if (WFBE_MenuAction == 2) then {WFBE_MenuAction = -1; _update_group = true}; if (WFBE_MenuAction == 3) then {WFBE_MenuAction = -1; _accept_request = true}; if (WFBE_MenuAction == 4) then {WFBE_MenuAction = -1; _deny_request = true}; if (WFBE_MenuAction == 5) then {WFBE_MenuAction = -1; _kick_member = true}; if (time - _update_list > 2) then { _update_list = time; for '_i' from 0 to WFBE_Client_Teams_Count do { _leader = if !(isNull leader (WFBE_Client_Teams select _i)) then {name leader (WFBE_Client_Teams select _i)} else {"No leader"}; if ((((uiNamespace getVariable "wfbe_display_groups") displayCtrl 508001) lnbText [_i, 1]) != _leader) then {lnbSetText [508001, [_i, 1], _leader]}; }; }; if (_accept_request) then { _accept_request = false; _ui_lnb_sel = lnbCurSelRow(508007); if (_ui_lnb_sel != -1) then {Call WFBE_CL_FNC_UI_Groups_RequestAccept}; }; if (_deny_request) then { _deny_request = false; _ui_lnb_sel = lnbCurSelRow(508007); if (_ui_lnb_sel != -1) then {Call WFBE_CL_FNC_UI_Groups_RequestDeny}; }; if (_kick_member) then { _kick_member = false; _ui_lnb_sel = lnbCurSelRow(508007); if (group player == WFBE_Client_Team && _ui_lnb_sel != -1) then {Call WFBE_CL_FNC_UI_Groups_Kick}; }; if (time - _update_requests > 2) then { _update_requests = time; //--- Current request present in the client variable. _uids_clients = []; {[_uids_clients, _x select 0] Call WFBE_CO_FNC_ArrayPush} forEach WFBE_Client_PendingRequests; //--- Remove the request that are no long there or timed out. _uids_presents = []; for '_i' from 0 to ((lnbSize 508007) select 0)-1 do { _data = lnbData[508007,[_i, 1]]; if !(_data in _uids_clients) then { lnbDeleteRow [508007, _i]; } else { if (_data in _uids_presents) then { lnbDeleteRow [508007, _i]; } else { [_uids_presents, _data] Call WFBE_CO_FNC_ArrayPush; }; }; }; //--- Add potential skipped requests. { if !((_x select 0) in _uids_presents) then { lnbAddRow[508007, ["Join", _x select 1]]; lnbSetData[508007, [((lnbSize 508007) select 0)-1, 0], "Join"]; lnbSetData[508007, [((lnbSize 508007) select 0)-1, 1], _x select 0]; }; } forEach WFBE_Client_PendingRequests; }; if (_update_group) then { _update_group = false; _ui_lnb_sel = lnbCurSelRow(508001); if (_ui_lnb_sel != -1) then { _group = WFBE_Client_Teams select _ui_lnb_sel; _units = (units _group) Call WFBE_CO_FNC_GetLiveUnits; _players = {isPlayer _x} count _units; _ai = (count _units) - _players; _group_units = _units; ((uiNamespace getVariable "wfbe_display_groups") displayCtrl 508002) ctrlSetStructuredText (parseText Format["Group Properties:

Players: %1/%2
AI Units: %3",_players,missionNamespace getVariable "WFBE_C_PLAYERS_SQUADS_MAX_PLAYERS",_ai]); //--- Update the units aswell. lnbClear 508003; [_units, 508003] Call WFBE_CL_FNC_UI_Groups_FillUnits; }; }; if (_join_group) then { _join_group = false; _ui_lnb_sel = lnbCurSelRow(508001); if (_ui_lnb_sel != -1) then {(WFBE_Client_Teams select _ui_lnb_sel) Call WFBE_CL_FNC_UI_Groups_Join}; }; //--- Go back to the main menu. if (WFBE_MenuAction == 1000) exitWith { WFBE_MenuAction = -1; closeDialog 0; createDialog "WF_Menu"; }; sleep .01; }; //--- Release the UI. uiNamespace setVariable ["wfbe_display_groups", nil];{ctrlEnable [_x, false]} forEach [11002, 11005, 11006, 11007, 11008]; _enable = false; if ((barracksInRange || lightInRange || heavyInRange || aircraftInRange || hangarInRange || depotInRange) && (player == leader WFBE_Client_Team)) then {_enable = true}; ctrlEnable [11001,_enable]; ctrlEnable [11006,commandInRange && (player == leader WFBE_Client_Team)]; //--- Special Menu MenuAction = -1; WFBE_ForceUpdate = true; while {alive player && dialog} do { if (side player != sideJoined) exitWith {closeDialog 0}; if (!dialog) exitWith {}; //--- Build Units. _enable = false; if ((barracksInRange || lightInRange || heavyInRange || aircraftInRange || hangarInRange || depotInRange) && (player == leader WFBE_Client_Team)) then {_enable = true}; ctrlEnable [11001,_enable]; ctrlEnable [11002,gearInRange]; _enable = false; //added-MrNiceGuy if (!isNull(commanderTeam)) then {if (commanderTeam == group player) then {_enable = true}}; ctrlEnable [11005,_enable]; //--- Team Orders ctrlEnable [11008,_enable]; //--- Commander Menu ctrlEnable [11006,commandInRange && (player == leader WFBE_Client_Team)]; //--- Special Menu ctrlEnable [11007,commandInRange]; //--- Upgrade Menu //--- Uptime. _uptime = Call GetTime; //added-MrNiceGuy ctrlSetText [11015,Format[localize 'STR_WF_MAIN_Uptime',_uptime select 0,_uptime select 1,_uptime select 2, _uptime select 3]]; //--- Buy Units. if (MenuAction == 1) exitWith { MenuAction = -1; closeDialog 0; createDialog "RscMenu_BuyUnits"; }; //--- Buy Gear. if (MenuAction == 2) exitWith { MenuAction = -1; closeDialog 0; createDialog "WFBE_BuyGearMenu"; }; //--- Team Menu. if (MenuAction == 3) exitWith { MenuAction = -1; closeDialog 0; createDialog "RscMenu_Team"; }; //--- Voting Menu. if (MenuAction == 4) exitWith { MenuAction = -1; _skip = false; if ((WFBE_Client_Logic getVariable "wfbe_votetime") <= 0) then {_skip = true}; if (!_skip) then { closeDialog 0; createDialog "WFBE_VoteMenu"; if !(_skip) exitWith {}; }; ["RequestCommanderVote", [sideJoined, name player]] Call WFBE_CO_FNC_SendToServer; voted = true; waitUntil {(WFBE_Client_Logic getVariable "wfbe_votetime") > 0 || !dialog || !alive player}; if (!alive player || !dialog) exitWith {}; closeDialog 0; createDialog "WFBE_VoteMenu"; }; //--- Unflip Vehicle. if (MenuAction == 10) then { //added-MrNiceGuy MenuAction = -1; _vehicle = vehicle player; if (player != _vehicle) then { if (getPos _vehicle select 2 > 3 && !surfaceIsWater (getPos _x)) then { [_vehicle, getPos _vehicle, 15] Call PlaceSafe; } else { _vehicle setPos [getPos _vehicle select 0, getPos _vehicle select 1, 0.5]; _vehicle setVelocity [0,0,-0.5]; }; }; if (player == _vehicle) then { _objects = player nearEntities[["Car","Motorcycle","Tank"],10]; if (count _objects > 0) then { { if (getPos _x select 2 > 3 && !surfaceIsWater (getPos _x)) then { [_x, getPos _x, 15] Call PlaceSafe; } else { _x setPos [getPos _x select 0, getPos _x select 1, 0.5]; _x setVelocity [0,0,-0.5]; }; } forEach _objects; }; }; }; //--- Headbug Fix. if (MenuAction == 11) then { //added-MrNiceGuy MenuAction = -1; closeDialog 0; titleCut["","BLACK FADED",0]; _pos = position player; _vehi = "Lada1" createVehicle [0,0,0]; player moveInCargo _vehi; deleteVehicle _vehi; player setPos _pos; titleCut["","BLACK IN",5]; }; //--- Display Parameters. if (MenuAction == 12) exitWith { //added-MrNiceGuy MenuAction = -1; closeDialog 0; createDialog "RscDisplay_Parameters"; }; //--- Command Menu. if (MenuAction == 5) exitWith { //added-MrNiceGuy MenuAction = -1; closeDialog 0; createDialog "RscMenu_Command"; }; //--- Tactical Menu. if (MenuAction == 6) exitWith { //added-MrNiceGuy MenuAction = -1; closeDialog 0; createDialog "RscMenu_Tactical"; }; //--- Upgrade Menu. if (MenuAction == 7) exitWith { //added-MrNiceGuy MenuAction = -1; closeDialog 0; createDialog "WFBE_UpgradeMenu"; }; //--- Economy Menu. if (MenuAction == 8) exitWith { //added-MrNiceGuy MenuAction = -1; closeDialog 0; createDialog "RscMenu_Economy"; }; //--- Service Menu. if (MenuAction == 9) exitWith { //added-MrNiceGuy MenuAction = -1; closeDialog 0; createDialog "RscMenu_Service"; }; //--- Groups Menu. if (MenuAction == 13) exitWith { MenuAction = -1; closeDialog 0; createDialog "WFBE_GroupsMenu"; }; sleep 0.1; };disableSerialization; //--- Init. MenuAction = -1; _listUnits = []; _closest = objNull; _commander = false; _extracrew = false; _countAlive = 0; _currentCost = 0; _currentIDC = 0; _disabledColor = [0.7961, 0.8000, 0.7961, 1]; _display = _this select 0; _driver = false; _enabledColor = [0, 1, 0, 1]; _enabledColor2 = [1, 0, 0, 1]; //---NEW (LOCK) _gunner = false; _IDCLock = 12023; _IDCS = [12005,12006,12007,12008,12020,12021]; _IDCSVehi = [12012,12013,12014,12041]; _isInfantry = false; _isLocked = true; _lastCheck = 0; _lastSel = -1; _lastType = 'nil'; _listBox = 12001; _comboFaction = 12026; _map = _display displayCtrl 12015; _sorted = []; _type = 'nil'; _update = true; _updateDetails = true; _updateList = true; _updateMap = true; _val = 0; _mbu = missionNamespace getVariable 'WFBE_C_PLAYERS_AI_MAX'; ctrlSetText[12025,localize 'STR_WF_UNITS_FactionChoiceLabel' + ":"]; // changed-MrNiceGuy //--- Get the closest Factory Type in range. _break = false; _status = [barracksInRange,lightInRange,heavyInRange,aircraftInRange,depotInRange,hangarInRange]; _statusLabel = ['Barracks','Light','Heavy','Aircraft','Depot','Airport']; _statusVals = [0,1,2,3,4,3]; for [{_i = 0},{(_i < 6) && !_break},{_i = _i + 1}] do { if (_status select _i) then { _break = true; _currentIDC = _IDCS select _i; _type = _statusLabel select _i; _val = _statusVals select _i; }; }; if (_type == 'nil') exitWith {closeDialog 0}; //--- Destroy local variables. _break = nil; _status = nil; _statusLabel = nil; _statusVals = nil; //--- Enable the current IDC. _IDCS = _IDCS - [_currentIDC]; { _con = _display DisplayCtrl _x; _con ctrlSetTextColor [0.4, 0.4, 0.4, 1]; } forEach _IDCS; //--- Loop. while {alive player && dialog} do { //--- Nothing in range? exit!. if (!barracksInRange && !lightInRange && !heavyInRange && !aircraftInRange && !hangarInRange && !depotInRange) exitWith {closeDialog 0}; if (side player != sideJoined || !dialog) exitWith {closeDialog 0}; //--- Purchase. if (MenuAction == 1) then { MenuAction = -1; _currentRow = lnbCurSelRow _listBox; _currentValue = lnbValue[_listBox,[_currentRow,0]]; _unit = _listUnits select _currentValue; _currentUnit = missionNamespace getVariable _unit; _currentCost = _currentUnit select QUERYUNITPRICE; _cpt = 1; _isInfantry = if (_unit isKindOf 'Man') then {true} else {false}; if !(_isInfantry) then { _extra = 0; if (_driver) then {_extra = _extra + 1}; if (_gunner) then {_extra = _extra + 1}; if (_commander) then {_extra = _extra + 1}; if (_extracrew) then {_extra = _extra + ((_currentUnit select QUERYUNITCREW) select 3)}; _currentCost = _currentCost + ((missionNamespace getVariable "WFBE_C_UNITS_CREW_COST") * _extra); }; if ((_currentRow) != -1) then { _funds = Call GetPlayerFunds; _skip = false; if (_funds < _currentCost) then {_skip = true;hint parseText(Format[localize 'STR_WF_INFO_Funds_Missing',_currentCost - _funds,_currentUnit select QUERYUNITLABEL])}; //--- Make sure that we own all camps before being able to purchase infantry. if (_type == "Depot" && _isInfantry) then { _totalCamps = _closest Call GetTotalCamps; _campsSide = [_closest,sideJoined] Call GetTotalCampsOnSide; if (_totalCamps != _campsSide) then {_skip = true; hint parseText(localize 'STR_WF_INFO_Camps_Purchase')}; }; if !(_skip) then { _size = Count ((Units (group player)) Call GetLiveUnits); //--- Get the infantry limit based off the infantry upgrade. _realSize = ((sideJoined) Call WFBE_CO_FNC_GetSideUpgrades) select WFBE_UP_BARRACKS; switch (_realSize) do { case 0: {_realSize = round(_mbu / 4)}; case 1: {_realSize = round(_mbu / 4)*2}; case 2: {_realSize = round(_mbu / 4)*3}; case 3: {_realSize = _mbu}; default {_realSize = _mbu}; }; if (_isInfantry) then {if ((unitQueu + _size + 1) > _realSize) then {_skip = true;hint parseText(Format [localize 'STR_WF_INFO_MaxGroup',_realSize])}}; if (!_isInfantry && !_skip) then { _cpt = 0; if (_driver) then {_cpt = _cpt + 1}; if (_gunner) then {_cpt = _cpt + 1}; if (_commander) then {_cpt = _cpt + 1}; if (_extracrew) then {_cpt = _cpt + ((_currentUnit select QUERYUNITCREW) select 3)}; if ((unitQueu + _size + _cpt) > _realSize && _cpt != 0) then {_skip = true;hint parseText(Format [localize 'STR_WF_INFO_MaxGroup',_realSize])}; }; }; if !(_skip) then { //--- Check the max queu. if ((missionNamespace getVariable Format["WFBE_C_QUEUE_%1",_type]) < (missionNamespace getVariable Format["WFBE_C_QUEUE_%1_MAX",_type])) then { missionNamespace setVariable [Format["WFBE_C_QUEUE_%1",_type],(missionNamespace getVariable Format["WFBE_C_QUEUE_%1",_type])+1]; _queu = _closest getVariable 'queu'; _txt = parseText(Format [localize 'STR_WF_INFO_BuyEffective',_currentUnit select QUERYUNITLABEL]); if (!isNil '_queu') then {if (count _queu > 0) then {_txt = parseText(Format [localize 'STR_WF_INFO_Queu',_currentUnit select QUERYUNITLABEL])}}; hint _txt; _params = if (_isInfantry) then {[_closest,_unit,[],_type,_cpt]} else {[_closest,_unit,[_driver,_gunner,_commander,_extracrew,_isLocked],_type,_cpt]}; _params Spawn BuildUnit; -(_currentCost) Call ChangePlayerFunds; } else { hint parseText(Format [localize 'STR_WF_INFO_Queu_Max',missionNamespace getVariable Format["WFBE_C_QUEUE_%1_MAX",_type]]); }; }; }; }; //--- Tabs selection. if (MenuAction == 101) then {MenuAction = -1;if (barracksInRange) then {_currentIDC = 12005;_type = 'Barracks';_val = 0;_update = true}}; if (MenuAction == 102) then {MenuAction = -1;if (lightInRange) then {_currentIDC = 12006;_type = 'Light';_val = 1;_update = true}}; if (MenuAction == 103) then {MenuAction = -1;if (heavyInRange) then {_currentIDC = 12007;_type = 'Heavy';_val = 2;_update = true}}; if (MenuAction == 104) then {MenuAction = -1;if (aircraftInRange) then {_currentIDC = 12008;_type = 'Aircraft';_val = 3;_update = true}}; if (MenuAction == 105) then {MenuAction = -1;if (depotInRange) then {_currentIDC = 12020;_type = 'Depot';_val = 4;_update = true}}; if (MenuAction == 106) then {MenuAction = -1;if (hangarInRange) then {_currentIDC = 12021;_type = 'Airport';_val = 3;_update = true}}; //--- driver-gunner-commander icons. if (MenuAction == 201) then {MenuAction = -1;_driver = if (_driver) then {false} else {true};_updateDetails = true}; if (MenuAction == 202) then {MenuAction = -1;_gunner = if (_gunner) then {false} else {true};_updateDetails = true}; if (MenuAction == 203) then {MenuAction = -1;_commander = if (_commander) then {false} else {true};_updateDetails = true}; if (MenuAction == 204) then {MenuAction = -1;_extracrew = if (_extracrew) then {false} else {true};_updateDetails = true}; //--- Factory DropDown list value has changed. if (MenuAction == 301) then {MenuAction = -1;_factSel = lbCurSel 12018;_closest = _sorted select _factSel;_updateMap = true}; //--- Selection change, we update the details. if (MenuAction == 302) then {MenuAction = -1;_updateDetails = true}; //--- Faction Filter changed. if (MenuAction == 303) then {MenuAction = -1;_update = true;missionNamespace setVariable [Format["WFBE_%1%2CURRENTFACTIONSELECTED",sideJoinedText,_type],(lbCurSel _comboFaction)]}; //--- Lock icon. if (MenuAction == 401) then {MenuAction = -1;_isLocked = if (_isLocked) then {false} else {true};_updateDetails = true}; //--- Player funds. ctrlSetText [12019,Format [localize 'STR_WF_UNITS_Cash',Call GetPlayerFunds]]; //--- Update tabs. if (_update) then { _listUnits = missionNamespace getVariable Format ['WFBE_%1%2UNITS',sideJoinedText,_type]; [_comboFaction,_type] Call UIChangeComboBuyUnits; [_listUnits,_type,_listBox,_val] Call UIFillListBuyUnits; //--- Update tabs icons. _IDCS = [12005,12006,12007,12008,12020,12021]; _IDCS = _IDCS - [_currentIDC]; _con = _display DisplayCtrl _currentIDC; _con ctrlSetTextColor [1, 1, 1, 1]; {_con = _display DisplayCtrl _x;_con ctrlSetTextColor [0.4, 0.4, 0.4, 1]} forEach _IDCS; _update = false; _updateList = true; _updateDetails = true; }; //--- Update factories. if (_updateList) then { switch (_type) do { //--- Specials. case 'Depot': { _sorted = [[vehicle player, missionNamespace getVariable "WFBE_C_TOWNS_PURCHASE_RANGE"] Call WFBE_CL_FNC_GetClosestDepot]; }; case 'Airport': { _sorted = [[vehicle player, missionNamespace getVariable "WFBE_C_UNITS_PURCHASE_HANGAR_RANGE"] Call WFBE_CL_FNC_GetClosestAirport]; }; //--- Factories default { _buildings = (sideJoined) Call WFBE_CO_FNC_GetSideStructures; _factories = [sideJoined,missionNamespace getVariable Format ['WFBE_%1%2TYPE',sideJoinedText,_type],_buildings] Call GetFactories; _sorted = [vehicle player,_factories] Call SortByDistance; _closest = _sorted select 0; _countAlive = count _factories; }; }; //--- Refresh the Factory DropDown list. lbClear 12018; { _nearTown = ([_x, towns] Call WFBE_CO_FNC_GetClosestEntity) getVariable 'name'; _txt = _type + ' ' + _nearTown + ' ' + str (round((vehicle player) distance _x)) + 'M'; lbAdd[12018,_txt]; } forEach _sorted; lbSetCurSel [12018,0]; _updateList = false; _updateMap = true; }; //--- Display Factory Queu. _queu = _closest getVariable "queu"; _value = if (isNil '_queu') then {0} else {count (_closest getVariable "queu")}; ctrlSetText[12024,Format[localize 'STR_WF_UNITS_QueuedLabel',str _value]]; //--- List selection changed. if (_updateDetails) then { _currentRow = lnbCurSelRow _listBox; //--- Our list is not empty. if (_currentRow != -1) then { _currentValue = lnbValue[_listBox,[_currentRow,0]]; _unit = _listUnits select _currentValue; _currentUnit = missionNamespace getVariable _unit; ctrlSetText [12009,_currentUnit select QUERYUNITPICTURE]; ctrlSetText [12033,_currentUnit select QUERYUNITFACTION]; ctrlSetText [12035,str (_currentUnit select QUERYUNITTIME)]; _currentCost = _currentUnit select QUERYUNITPRICE; _isInfantry = if (_unit isKindOf 'Man') then {true} else {false}; //--- Update driver-gunner-commander icons. if !(_isInfantry) then { ctrlSetText [12036,"N/A"]; ctrlSetText [12037,str (getNumber (configFile >> 'CfgVehicles' >> _unit >> 'transportSoldier'))]; ctrlSetText [12038,str (getNumber (configFile >> 'CfgVehicles' >> _unit >> 'maxSpeed'))]; ctrlSetText [12039,str (getNumber (configFile >> 'CfgVehicles' >> _unit >> 'armor'))]; if (_type != 'Depot') then { _slots = _currentUnit select QUERYUNITCREW; if (typeName _slots == "ARRAY") then { _hasCommander = _slots select 0; _hasGunner = _slots select 1; _turretsCount = _slots select 3; _extra = 0; _maxOut = false; if (_lastType != _type || _lastSel != _currentRow) then {_maxOut = true}; if (_maxOut) then { _driver = true; _gunner = true; _commander = true; _extracrew = false; }; if !(_hasGunner) then {_gunner = false}; if !(_hasCommander) then {_commander = false}; if (_turretsCount == 0) then {_extracrew = false}; ctrlShow[_IDCSVehi select 0, true]; ctrlShow[_IDCSVehi select 1, _hasGunner]; ctrlShow[_IDCSVehi select 2, _hasCommander]; ctrlShow[_IDCSVehi select 3, if (_turretsCount == 0) then {false} else {true}]; _c = 0; { _color = if (_x) then {_enabledColor} else {_disabledColor}; _con = _display displayCtrl (_IDCSVehi select _c); _con ctrlSetTextColor _color; _c = _c + 1; } forEach [_driver,_gunner,_commander,_extracrew]; if (_driver) then {_extra = _extra + 1}; if (_gunner) then {_extra = _extra + 1}; if (_commander) then {_extra = _extra + 1}; if (_extracrew) then {_extra = _extra + _turretsCount}; //--- Set the 'extra' price. _currentCost = _currentCost + ((missionNamespace getVariable "WFBE_C_UNITS_CREW_COST") * _extra); } else {//--- Backward compability. _c = 0; _extra = 0; //--- Enabled AI by default. _extracrew = false; _maxOut = false; if (_lastType != _type || _lastSel != _currentRow) then {_maxOut = true}; switch (_slots) do { case 1: { if (_maxOut) then {_driver = true}; if (_driver) then {_extra = _extra + 1}; _gunner = false; _commander = false; }; case 2: { if (_maxOut) then {_driver = true;_gunner = true}; if (_driver) then {_extra = _extra + 1}; if (_gunner) then {_extra = _extra + 1}; _commander = false; }; case 3: { if (_maxOut) then {_driver = true;_gunner = true;_commander = true}; if (_driver) then {_extra = _extra + 1}; if (_gunner) then {_extra = _extra + 1}; if (_commander) then {_extra = _extra + 1}; }; }; //--- Show the icons. { _show = false; if (_c < _slots) then {_show = true}; ctrlShow [_x,_show]; _c = _c + 1; } forEach _IDCSVehi; //--- Mask extra crew. ctrlShow[_IDCSVehi select 3, false]; _i = 0; //--- Set the icons. { _color = if (_x) then {_enabledColor} else {_disabledColor}; _con = _display displayCtrl (_IDCSVehi select _i); _con ctrlSetTextColor _color; _i = _i + 1; } forEach [_driver,_gunner,_commander,_extracrew]; //--- Set the 'extra' price. _currentCost = _currentCost + ((missionNamespace getVariable "WFBE_C_UNITS_CREW_COST") * _extra); }; } else { {ctrlShow [_x,false]} forEach (_IDCSVehi); _driver = false; _gunner = false; _commander = false; _extracrew = false; }; } else { ctrlSetText [12036,Format ["%1/100",(_currentUnit select QUERYUNITSKILL) * 100]]; ctrlSetText [12037,"N/A"]; ctrlSetText [12038,"N/A"]; ctrlSetText [12039,"N/A"]; {ctrlShow [_x,false]} forEach (_IDCSVehi); _driver = false; _gunner = false; _commander = false; _extracrew = false; //--- Display a unit's loadout. _weapons = (getArray (configFile >> 'CfgVehicles' >> _unit >> 'weapons')) - ['Put','Throw']; _magazines = getArray (configFile >> 'CfgVehicles' >> _unit >> 'magazines'); _classMags = []; _classMagsAmount = []; _MagsLabel = []; { _findAt = _classMags find _x; if (_findAt == -1) then { _classMags = _classMags + [_x]; _classMagsAmount = _classMagsAmount + [1]; _MagsLabel = _MagsLabel + [[_x,'displayName','CfgMagazines'] Call GetConfigInfo]; } else { _classMagsAmount set [_findAt, (_classMagsAmount select _findAt) + 1]; }; } forEach _magazines; _txt = "" + (localize 'STR_WF_UNITS_Weapons') + ":
"; for [{_i = 0},{_i < count _weapons},{_i = _i + 1}] do { _txt = _txt + "" + ([(_weapons select _i),'displayName','CfgWeapons'] Call GetConfigInfo) + ""; if ((_i+1) < count _weapons) then {_txt = _txt + ", "}; }; _txt = _txt + "

"; _txt = _txt + "" + (localize 'STR_WF_UNITS_Magazines') + ":
"; for [{_i = 0},{_i < count _MagsLabel},{_i = _i + 1}] do { _txt = _txt + "" + ((_MagsLabel select _i) + " x" + str (_classMagsAmount select _i)) + ""; if ((_i+1) < count _MagsLabel) then {_txt = _txt + ", "}; }; _txt = _txt + ""; (_display displayCtrl 12022) ctrlSetStructuredText (parseText _txt); }; //--- Lock Icon. if !(_isInfantry) then { ctrlShow[_IDCLock,true]; _color = if (_isLocked) then {_enabledColor2} else {_disabledColor}; _con = _display displayCtrl _IDCLock; _con ctrlSetTextColor _color; } else { ctrlShow[_IDCLock,false]; }; //--- Long description. if !(_isInfantry) then { if (isClass (configFile >> 'CfgVehicles' >> _unit >> 'Library')) then { _txt = getText (configFile >> 'CfgVehicles' >> _unit >> 'Library' >> 'libTextDesc'); (_display displayCtrl 12022) ctrlSetStructuredText (parseText _txt); } else { (_display displayCtrl 12022) ctrlSetStructuredText (parseText ''); }; }; ctrlSetText [12034,Format ["$ %1",_currentCost]]; _updateDetails = false; } else { {ctrlSetText [_x , ""]} forEach [12009,12010,12027,12028,12029,12030,12031,12032,12033,12034,12035,12036,12037,12038,12039]; (_display displayCtrl 12022) ctrlSetStructuredText (parseText ''); }; }; //--- Update the Factory Minimap position. if (_updateMap) then { ctrlMapAnimClear _map; _map ctrlMapAnimAdd [2,.075,getPos _closest]; ctrlMapAnimCommit _map; _updateMap = false; }; //--- Check that the factories of the current type are still alive. _lastCheck = _lastCheck + 0.1; if (_lastCheck > 2 && _type != 'Depot' && _type != 'Airport') then { _lastCheck = 0; _buildings = (sideJoined) Call WFBE_CO_FNC_GetSideStructures; _factories = [sideJoined,missionNamespace getVariable Format ['WFBE_%1%2TYPE',sideJoinedText,_type],_buildings] Call GetFactories; if (count _factories != _countAlive) then {_updateList = true}; }; _lastSel = lnbCurSelRow _listBox; _lastType = _type; sleep 0.1; //--- Back Button. if (MenuAction == 2) exitWith { //---added-MrNiceGuy MenuAction = -1; closeDialog 0; createDialog "WF_Menu"; }; };disableSerialization; MenuAction = -1; mouseButtonUp = -1; _display = _this select 0; //--- Alt. _mode = 0; //--- Team properties. _updateProperties = true; _updateRespawn = true; _updateTab = true; _IDCTeam = [14009,14010,14016,14017,14018,14019,14020,14021,14022,14023,14024,14025,14026,14027,14030,14031,14901,14902]; _IDCTasks = [14017,14018,14021,14022,14030,14032]; _IDCDetails = [14030,14041,14042,14043]; {ctrlShow[_x,false]} forEach (_IDCTasks + _IDCDetails); {ctrlShow[_x,true]} forEach _IDCTeam; _TaskTypes = ["Assist","Attack","Defend","Destroy","Guard","Hold","Patrol","Move","Search and Destroy","Seize","Support"]; _TaskDuration = [1,2,3,4,5,6,7,8,9,10,15,20,25,30,35,40,45,50,55,60]; _TaskDurationLabel = ["1 Min","2 Min","3 Min","4 Min","5 Min","6 Min","7 Min","8 Min","9 Min","10 Min","15 Min","20 Min","25 Min","30 Min","35 Min","40 Min","45 Min","50 Min","55 Min","60 Min"]; _detailGroup = []; ctrlSetText [14026,localize "STR_WF_COMMAND_Respawn" + ":"]; _listbox_teams = _display displayCtrl 14012; _u = 1; lbAdd[14012,localize "STR_WF_COMMAND_All"]; {lbAdd [14012,Format["[%1] %2",_u,name (leader _x)]];_u = _u + 1} forEach clientTeams; lbSetCurSel [14012,1]; _radioLabel = ["All","Alpha","Bravo","Charlie","Delta","Echo","Foxtrot","Golf","Hotel","India","Juliet","Kilo","Lima","Mike","November","Oscar","Papa","Quebec","Romeo","Sierra","Tango","Uniform","Victor","Whiskey","X-Ray","Yankee","Zulu","Razor","Fatman","StarForce","Frostbite","Battlemage","Manhattan","Firefly","Swordsman","Sabre","Hammer","Reaper","Anvil","Fortune"]; _templates = missionNamespace getVariable Format["WFBE_%1AITEAMTEMPLATEDESCRIPTIONS",sideJoinedText]; _templates_upgrades = missionNamespace getVariable Format["WFBE_%1AITEAMUPGRADES",sideJoinedText]; _upgrades = (sideJoined) Call WFBE_CO_FNC_GetSideUpgrades; _u = 0; _i = 0; { _temp_upgr = _templates_upgrades select _i; _canAdd = true; for '_k' from 0 to 3 do { if ((_temp_upgr select _k) > (_upgrades select _k)) exitWith {_canAdd = false}; }; if (_canAdd) then { lbAdd [14010,_x]; lbSetValue [14010, _u, _i]; _u = _u + 1; }; _i = _i + 1; } forEach _templates; lbSort (_display displayCtrl 14010); _curSel = lbCurSel 14012; _teams = []; _team = if (_curSel != 0) then {clientTeams select (_curSel - 1)} else {clientTeams select (_curSel + 1)}; _team_old = _team; _index = (_team) Call GetTeamType; if (_index == -1) then {_index = 1}; lbSetCurSel [14010,[14010,_index] Call UIFindLBValue]; _txt = (_team) Call GetTeamMoveMode; if (_txt == "" || _txt == "towns") then {_txt = localize "STR_WF_COMMAND_Mission" + ": " + localize "STR_WF_COMMAND_TakeTowns"}; if (_txt == "move") then {_txt = localize "STR_WF_COMMAND_Mission" + ": " + localize "STR_WF_COMMAND_Move"}; if (_txt == "patrol") then {_txt = localize "STR_WF_COMMAND_Mission" + ": " + localize "STR_WF_COMMAND_Patrol"}; if (_txt == "defense") then {_txt = localize "STR_WF_COMMAND_Mission" + ": " + localize "STR_WF_COMMAND_Defense"}; ctrlSetText [14013,_txt]; _map = _display displayCtrl 14002; //_map ctrlMapAnimAdd [1,.075,getPos (leader(clientTeams select 0))]; //ctrlMapAnimCommit _map; ctrlEnable [14015,false]; ctrlEnable [14014,false]; //--- Set the combo properties. _behaviors = ["AWARE","CARELESS","COMBAT","SAFE","STEALTH"]; _combatModes = ["BLUE","GREEN","RED","WHITE","YELLOW"]; _formations = ["COLUMN","DIAMOND","ECH LEFT","ECH RIGHT","FILE","LINE","STAG COLUMN","VEE","WEDGE"]; _speeds = ["LIMITED","FULL","NORMAL"]; {lbAdd [14017, _x]} forEach _behaviors; {lbAdd [14018, _x]} forEach _combatModes; {lbAdd [14019, _x]} forEach _formations; {lbAdd [14020, _x]} forEach _speeds; _structures = [""]; _hq = (sideJoined) Call WFBE_CO_FNC_GetSideHQ; if (alive _hq) then {_structures = _structures + [_hq]}; _structures = _structures + ((sideJoined) Call WFBE_CO_FNC_GetSideStructures); _structuresLbl = ["Default"]; lbAdd[14025,"Default"]; { if (typeName _x == "OBJECT") then { _nearTown = ([_x,towns] Call WFBE_CO_FNC_GetClosestEntity) getVariable 'name'; _type = [typeOf _x, 'displayName'] Call GetConfigInfo; _lbl = _type + ' ' + _nearTown + ' ' + str (round(player distance _x)) + 'M'; _structuresLbl = _structuresLbl + [_lbl]; lbAdd[14025,_lbl]; }; } forEach _structures; while {alive player && dialog} do { if (side player != sideJoined) exitWith {activeAnimMarker = false;closeDialog 0}; if (!dialog) exitWith {activeAnimMarker = false}; if (MenuAction == 601) then {if (_mode != 0) then {_updateTab = true};_mode = 0};//--- Team properties. if (MenuAction == 602) then {if (_mode != 1) then {_updateTab = true};_mode = 1};//--- Task. if (MenuAction == 603) then {if (_mode != 2) then {_updateTab = true};_mode = 2};//--- Task. _curSel = lbCurSel 14012; _isAll = if (_curSel == 0 || (0 in _teams)) then {true} else {false}; _team = if !(_isAll) then {clientTeams select (_curSel - 1)} else {clientTeams select (_curSel + 1)}; _teams = lbSelection _listbox_teams; if (_team_old != _team) then {MenuAction = 1}; if (_updateTab) then { _currentIDC = 0; switch (_mode) do { case 0: { {ctrlShow[_x,false]} forEach (_IDCDetails + _IDCTasks); {ctrlShow[_x,true]} forEach _IDCTeam; ctrlSetText[14021,localize "STR_WF_COMMAND_Behavior"]; ctrlSetText[14022,localize "STR_WF_COMMAND_CombatMode"]; ctrlSetText[14030,localize "STR_WF_COMMAND_SquadSettingsLabel"]; lbClear 14017; lbClear 14018; {lbAdd [14017, _x]} forEach _behaviors; {lbAdd [14018, _x]} forEach _combatModes; _updateProperties = true; _currentIDC = 14500; }; case 1: { {ctrlShow[_x,false]} forEach (_IDCDetails + _IDCTeam); {ctrlShow[_x,true]} forEach _IDCTasks; lbClear 14017; lbClear 14018; {lbAdd [14017, _x]} forEach _TaskTypes; {lbAdd [14018, _x]} forEach _TaskDurationLabel; ctrlSetText[14021,localize "STR_WF_COMMAND_TaskTO_Do" + ":"]; ctrlSetText[14022,localize "STR_WF_COMMAND_TaskTO_Time" + ":"]; ctrlSetText[14030,localize "STR_WF_COMMAND_Tasks"]; lbSetCurSel[14017,0]; lbSetCurSel[14018,0]; _currentIDC = 14501; }; case 2: { {ctrlShow[_x,false]} forEach (_IDCTasks + _IDCTeam); {ctrlShow[_x,true]} forEach _IDCDetails; ctrlSetText[14030,localize "STR_WF_COMMAND_SquadManagmentLabel"]; _detailGroup = if (!_isAll) then {(units(clientTeams select (_curSel - 1))) Call GetLiveUnits} else {[]}; [_detailGroup,14041] Call UIFillListTeamOrders; _enable = if !(isPlayer leader _team) then {true} else {false}; ctrlEnable [14043,_enable]; _enable = if !(isPlayer (vehicle leader _team) && vehicle leader _team != leader _team) then {true} else {false}; ctrlEnable [14042,_enable]; _currentIDC = 14502; }; }; _hidc = [14500,14502,14501]; _hidc = _hidc - [_currentIDC]; _con = _display DisplayCtrl _currentIDC; _con ctrlSetTextColor [1, 1, 1, 1]; {_con = _display DisplayCtrl _x;_con ctrlSetTextColor [0.4, 0.4, 0.4, 1]} forEach _hidc; _updateTab = false; }; _txt = (_team) Call GetTeamMoveMode; if (_txt == "" || _txt == "towns") then {_txt = localize "STR_WF_COMMAND_Mission" + ": " + localize "STR_WF_COMMAND_TakeTowns"}; if (_txt == "move") then {_txt = localize "STR_WF_COMMAND_Mission" + ": " + localize "STR_WF_COMMAND_Move"}; if (_txt == "patrol") then {_txt = localize "STR_WF_COMMAND_Mission" + ": " + localize "STR_WF_COMMAND_Patrol"}; if (_txt == "defense") then {_txt = localize "STR_WF_COMMAND_Mission" + ": " + localize "STR_WF_COMMAND_Defense"}; ctrlSetText [14013,_txt]; //--- Team Funds. ctrlSetText [14028,Format [localize 'STR_WF_COMMAND_Cash',str ((_team) Call GetTeamFunds)]]; if (MenuAction == 1) then { MenuAction = -1; activeAnimMarker = false; _index = (_team) Call GetTeamType; _currentCoord = (_team) Call GetTeamMovePos; _currentMission = (_team) Call GetTeamMoveMode; if (typeName _currentCoord == "ARRAY") then { if (count _currentCoord > 0) then { _position = _currentCoord; if (_currentMission == "move") then {["TempAnim",_position,"selector_selectedMission",1,"ColorOrange",1,1.2] Spawn MarkerAnim}; if (_currentMission == "patrol") then {["TempAnim",_position,"selector_selectedMission",1,"ColorYellow",1,1.2,"areaPatrol"] Spawn MarkerAnim}; if (_currentMission == "defense") then {["TempAnim",_position,"selector_selectedMission",1,"ColorRed",1,1.2] Spawn MarkerAnim}; }; }; if (typeName _currentCoord == "OBJECT") then { if (_currentMission == "towns") then {["TempAnim",getPos _currentCoord,"selector_selectedMission",1,"ColorBlue",1,1.2] Spawn MarkerAnim}; }; _enable = if (isPlayer(leader _team)) then {false} else {true}; _special = if (_isAll) then {false} else {if !(isPlayer(leader _team)) then {true} else {false}}; ctrlEnable [14011,_special]; ctrlEnable [14014,_enable]; ctrlEnable [14015,_enable]; if (_enable) then { _isDisabled = (_team) Call GetTeamAutonomous; if (_isDisabled) then { ctrlEnable [14014,true]; ctrlEnable [14015,false]; } else { ctrlEnable [14015,true]; ctrlEnable [14014,false]; }; }; if (_index == -1) then {_index = 1}; lbSetCurSel [14010,[14010,_index] Call UIFindLBValue]; if (_mode == 0) then { _updateProperties = true; _updateRespawn = true; }; if (_mode == 2) then { _detailGroup = if !(_isAll) then {(units(clientTeams select (_curSel - 1))) Call GetLiveUnits} else {[]}; [_detailGroup,14041] Call UIFillListTeamOrders; _enable = if !(isPlayer leader _team) then {true} else {false}; ctrlEnable [14043,_enable]; }; }; //--- Focus. if (MenuAction == 2) then { MenuAction = -1; ctrlMapAnimClear _map; _map ctrlMapAnimAdd [2,.075,getPos(leader _team)]; ctrlMapAnimCommit _map; }; //--- Focus (AI Sub). if (MenuAction == 3) then { MenuAction = -1; _iddx = lnbCurSelRow 14041; if (_iddx != -1) then { _map ctrlMapAnimAdd [1,.095,getPos (_detailGroup select _iddx)]; ctrlMapAnimCommit _map; }; }; //--- Take Towns. if (MenuAction == 101) then { MenuAction = -1; if (!_isAll) then { [_team,'towns'] Call SetTeamMoveMode; } else { {[_x,'towns'] Call SetTeamMoveMode} forEach clientTeams; }; activeAnimMarker = false; }; if (mouseButtonUp == 0) then { mouseButtonUp = -1; //--- Move | Patrol | Defend. if (MenuAction == 102 || MenuAction == 103 || MenuAction == 104) then { _color = ""; _order = ""; _isAdded = ""; switch (MenuAction) do { case 102: {_color = "ColorOrange";_order = "MOVE"}; case 103: {_color = "ColorYellow";_order = "PATROL";_isAdded = "areaPatrol"}; case 104: {_color = "ColorRed";_order = "DEFENSE"}; }; MenuAction = -1; _position = _map posScreenToWorld[mouseX,mouseY]; [_curSel,_position,_order,_isAll,_teams] Spawn { Private ["_curSel","_isAll","_order","_position","_radio","_radioLabel","_sideTeam","_teams"]; _curSel = _this select 0; _position = _this select 1; _order = _this select 2; _isAll = _this select 3; _teams = _this select 4; //_radio = ["all","alpha","bravo","charlie","delta","echo","foxtrot","golf","hotel","india","juliet","kilo","lima","mike","november","oscar","papa","quebec","romeo","sierra","tango","uniform","victor","whiskey","xray","yankee","zulu"]; _radioLabel = ["All","Alpha","Bravo","Charlie","Delta","Echo","Foxtrot","Golf","Hotel","India","Juliet","Kilo","Lima","Mike","November","Oscar","Papa","Quebec","Romeo","Sierra","Tango","Uniform","Victor","Whiskey","X-Ray","Yankee","Zulu","Razor","Fatman","StarForce","Frostbite","Battlemage","Manhattan","Firefly","Swordsman","Sabre","Hammer","Reaper","Anvil","Fortune"]; if (!_isAll) then { _sideTeam = "Team "; for '_i' from 0 to count _teams-1 do { _selected = clientTeams select ((_teams select _i) - 1); _sideTeam = _sideTeam + (_radioLabel select (_teams select _i)); if (_i != count _teams -1) then {_sideTeam = _sideTeam + ", "} else {_sideTeam = _sideTeam + " "}; }; player kbTell [sideHQ, WFBE_V_HQTopicSide, "OrderSent",["1","",_sideTeam,[if (sideJoined == west) then {"blueTeam"} else {"redTeam"}]],["2","","moving to position",["HC_MovingToPosition"]],["3","","over.",["Over1"]],true]; { _selected = clientTeams select (_x - 1); [_selected,_position] Call SetTeamMovePos; [_selected,_order] Call SetTeamMoveMode; } forEach _teams; } else { player kbTell [sideHQ, WFBE_V_HQTopicSide, "OrderSentAll",["1","","All",["all"]],["2","","moving to position",["HC_MovingToPosition"]],["3","","over.",["Over1"]],true]; { [_x,_position] Call SetTeamMovePos; [_x,_order] Call SetTeamMoveMode; } forEach clientTeams; }; }; activeAnimMarker = false; _array = if (_isAdded == "") then {["TempAnim",_position,"selector_selectedMission",1,_color,1,1.2]} else {["TempAnim",_position,"selector_selectedMission",1,_color,1,1.2,_isAdded]}; _array Spawn MarkerAnim; }; //--- Set a Task. if (MenuAction == 306) then { MenuAction = -1; _taskType = _TaskTypes select (lbCurSel 14017); _taskTime = _TaskDuration select (lbCurSel 14018); _taskTimeLabel = _TaskDurationLabel select (lbCurSel 14018); _position = _map posScreenToWorld[mouseX,mouseY]; if (!_isAll) then { _sideTeam = "Team "; for '_i' from 0 to count _teams-1 do { _selected = clientTeams select ((_teams select _i) - 1); _sideTeam = _sideTeam + (_radioLabel select (_teams select _i)); if (_i != count _teams -1) then {_sideTeam = _sideTeam + ", "} else {_sideTeam = _sideTeam + " "}; }; player kbTell [sideHQ, WFBE_V_HQTopicSide, "OrderSent",["1","",_sideTeam,[if (sideJoined == west) then {"blueTeam"} else {"redTeam"}]],["2","","moving to position",["HC_MovingToPosition"]],["3","","over.",["Over1"]],true]; { _selected = clientTeams select (_x - 1); if (alive (leader _selected) && isPlayer(leader _selected)) then { // if (WF_A2_Vanilla) then { [getPlayerUID(leader _selected), "SetTask", [_taskType,_taskTime,_taskTimeLabel,_position]] Call WFBE_CO_FNC_SendToClients; // } else { // [leader _selected, "SetTask", [_taskType,_taskTime,_taskTimeLabel,_position]] Call WFBE_CO_FNC_SendToClient; // }; }; } forEach _teams; } else { player kbTell [sideHQ, WFBE_V_HQTopicSide, "OrderSentAll",["1","","All",["all"]],["2","","moving to position",["HC_MovingToPosition"]],["3","","over.",["Over1"]],true]; [sideJoined, "SetTask", [_taskType,_taskTime,_taskTimeLabel,_position]] Call WFBE_CO_FNC_SendToClients; }; }; }; //--- Respawn. if (MenuAction == 201) then { MenuAction = -1; [_team] Spawn { Private ["_team"]; _team = _this select 0; _units = Units _team; if ((missionNamespace getVariable "WFBE_C_RESPAWN_MOBILE") > 0 || ((missionNamespace getVariable "WFBE_C_RESPAWN_CAMPS_MODE") > 0)) then {//--- Make sure that the unit won't spawn back at a camp/ambu. [_team,"forceRespawn"] Call SetTeamRespawn; sleep 2; }; _units = _units + ([_team,false] Call GetTeamVehicles); {_x setDammage 1} forEach _units; }; }; //--- Auto AI. if (MenuAction == 301) then { MenuAction = -1; _isDisabled = (_team) Call GetTeamAutonomous; if (_isDisabled) then { ctrlEnable [14015,true]; ctrlEnable [14014,false]; if (!_isAll) then { { _selected = clientTeams select (_x - 1); [_selected,false] Call SetTeamAutonomous; } forEach _teams; } else { {[_x,false] Call SetTeamAutonomous} forEach clientTeams; }; } else { ctrlEnable [14014,true]; ctrlEnable [14015,false]; if (!_isAll) then { { _selected = clientTeams select (_x - 1); [_selected,true] Call SetTeamAutonomous; } forEach _teams; } else { {[_x,true] Call SetTeamAutonomous} forEach clientTeams; }; }; }; //--- Set buy Type if (MenuAction == 302) then { MenuAction = -1; _curType = lbValue [14010, lbCurSel(14010)]; if (!_isAll) then { { _selected = clientTeams select (_x - 1); [_selected,_curType] Call SetTeamType; } forEach _teams; } else { {[_x,_curType] Call SetTeamType} forEach clientTeams; }; }; //--- Set property to team. if (MenuAction == 303) then { MenuAction = -1; _behavior = _behaviors select (lbCurSel(14017)); _combat = _combatModes select (lbCurSel(14018)); _formation = _formations select (lbCurSel(14019)); _speed = _speeds select (lbCurSel(14020)); //--- Locality, process on server. _to = sideJoined; if (!_isAll) then { _to = []; { _selected = clientTeams select (_x - 1); _to = _to + [_selected]; } foreach _teams; }; // WFBE_RequestTeamUpdate = ['SRVFNCREQUESTTEAMUPDATE',[_to,_behavior,_combat,_formation,_speed]]; // publicVariable 'WFBE_RequestTeamUpdate'; // if (isHostedServer) then {['SRVFNCREQUESTTEAMUPDATE',[_to,_behavior,_combat,_formation,_speed]] Spawn HandleSPVF}; ["RequestTeamUpdate", [_to,_behavior,_combat,_formation,_speed]] Call WFBE_CO_FNC_SendToServer; }; //--- Set respawn. if (MenuAction == 304) then { MenuAction = -1; _curSel = lbCurSel 14025; if (_curSel == -1) then {_curSel = 0}; if (!_isAll) then { { _selected = clientTeams select (_x - 1); [_selected,(_structures select _curSel)] Call SetTeamRespawn; } forEach _teams; } else { {[_x,(_structures select _curSel)] Call SetTeamRespawn} forEach clientTeams; }; }; //--- Update the respawn info. if (_updateRespawn) then { _updateRespawn = false; _respawn = (_team) Call GetTeamRespawn; _id = _structures find _respawn; if (_id != -1) then {lbSetCurSel [14025,_id]} else {lbSetCurSel[14025,0]}; }; //--- Minimap update (Only refresh when the combo is selected). if (MenuAction == 305 && _updateProperties) then {MenuAction = -1}; if (MenuAction == 305) then { MenuAction = -1; _curSel = lbCurSel 14025; if (_curSel == -1) then {_curSel = 0}; if (typeName (_structures select _curSel) == "OBJECT") then { _map ctrlMapAnimAdd [1,.095,getPos (_structures select _curSel)]; ctrlMapAnimCommit _map; }; }; //--- Units Details. if (MenuAction == 401) then { MenuAction = -1; _iddx = lnbCurSelRow 14041; if (_iddx != -1) then { _unit = _detailGroup select _iddx; _enable = if (!(isPlayer (vehicle _unit)) && vehicle _unit != _unit) then {true} else {false}; ctrlEnable [14042,_enable]; }; }; //--- Units Details (Unflip) if (MenuAction == 402) then { MenuAction = -1; _iddx = lnbCurSelRow 14041; if (_iddx != -1) then { _unit = _detailGroup select _iddx; if ((getPos _unit select 2) < 5) then { _unit setPos [getPos _unit select 0,getpos _unit select 1,0.5]; _unit setVelocity [0,0,-1]; _detailGroup = if (!_isAll) then {(units(clientTeams select (_curSel - 1))) Call GetLiveUnits} else {[]}; [_detailGroup,14041] Call UIFillListTeamOrders; }; }; }; //--- Units Details (Disband) if (MenuAction == 403) then { MenuAction = -1; _iddx = lnbCurSelRow 14041; if (_iddx != -1) then { _unit = _detailGroup select _iddx; _unit setDamage 1; _detailGroup = if (!_isAll) then {(units(clientTeams select (_curSel - 1))) Call GetLiveUnits} else {[]}; [_detailGroup,14041] Call UIFillListTeamOrders; }; }; //--- Update team properties. if (_updateProperties) then { _updateProperties = false; _behavior = behaviour (leader _team); _combat = combatMode (leader _team); _formation = formation (leader _team); _speed = speedMode (leader _team); //--- Behavior. _id =_behaviors find _behavior; if (_id != -1) then {lbSetCurSel [14017,_id]}; //--- Combat Mode. _id =_combatModes find _combat; if (_id != -1) then {lbSetCurSel [14018,_id]}; //--- Formation. _id =_formations find _formation; if (_id != -1) then {lbSetCurSel [14019,_id]}; //--- Speed. _id =_speeds find _speed; if (_id != -1) then {lbSetCurSel [14020,_id]}; }; //--- Back Button. if (MenuAction == 4) exitWith { //---added-MrNiceGuy MenuAction = -1; closeDialog 0; createDialog "WF_Menu"; }; _team_old = _team; sleep 0.1; }; activeAnimMarker = false; MenuAction = -1; _type = (missionNamespace getVariable 'WFBE_EASA_Vehicles') find (typeOf (vehicle player)); if (_type == -1) exitWith {["ERROR", Format ["GUI_Menu_EASA.sqf: Player vehicle [%1] was not found within the list.", vehicle player]] Call WFBE_CO_FNC_LogContent}; _data = ((missionNamespace getVariable 'WFBE_EASA_Loadouts') select _type); _listPrice = []; _listDesc = []; _listBox = 23003; for [{_i = 0},{_i < count(_data)},{_i = _i + 1}] do { _cdata = _data select _i; for [{_j = 0},{_j < count(_cdata)},{_j = _j + 1}] do { if (_j == 0) then {_listPrice = _listPrice + [(_cdata select 0) select 0]}; if (_j == 1) then { _listDesc = _listDesc + [(_cdata select 1) select 0]; lnbAddRow [_listBox,["$"+str((_cdata select 0) select 0)+".",(_cdata select 1) select 0]]}; if (_j > 1) then { }; }; }; if (count _listPrice > 0) then {lnbSetCurSelRow [_listBox,0]} else {lnbSetCurSelRow [_listBox,-1]}; while {alive player && dialog} do { sleep 0.1; if (side player != sideJoined) exitWith {closeDialog 0}; if !(dialog) exitWith {}; //--- Command AI. if (MenuAction == 101) then { MenuAction = -1; _funds = Call GetPlayerFunds; _iddx = lnbCurSelRow _listBox; if (_iddx != -1) then { if (_funds > (_listPrice select _iddx)) then { [vehicle player, _iddx, true] Call EASA_Equip; -(_listPrice select _iddx) Call ChangePlayerFunds; hint parseText(Format[localize 'STR_WF_INFO_EASA_Purchase',(_listDesc select _iddx)]); closeDialog 0; } else { hint parseText(Format[localize 'STR_WF_INFO_Funds_Missing',(_listPrice select _iddx) - _funds,_listDesc select _iddx]); }; }; }; };disableSerialization; _display = _this select 0; _map = _display DisplayCtrl 23002; _hqDeployed = (sideJoined) Call WFBE_CO_FNC_GetSideHQDeployStatus; if (!_hqDeployed || (missionNamespace getVariable "WFBE_C_STRUCTURES_CONSTRUCTION_MODE") == 0) then {ctrlEnable [23004, false];ctrlEnable [23006, false]}; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_CONSTRUCTION_MODE") == 0) then {ctrlSetText[23005, localize 'STR_WF_Disabled']}; MenuAction = -1; _maxWorkers = missionNamespace getVariable "WFBE_C_STRUCTURES_WORKERS_MAX"; _workerPrice = missionNamespace getVariable "WFBE_C_STRUCTURES_WORKERS_PRICE"; _incomeSystem = missionNamespace getVariable "WFBE_C_ECONOMY_INCOME_SYSTEM"; _incomeDividision = missionNamespace getVariable "WFBE_C_ECONOMY_INCOME_DIVIDED"; _supplySystem = missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM"; _aliveWorkers = []; _workers = []; _lastWorkersUpdate = -10; _lastComboUpdate = -30; _lastPurchase = -5; _income = 0; _updateComboWorker = true; _hasStarted = true; _lastUse = 0; ctrlEnable [23016,false]; if (_supplySystem != 0) then {ctrlShow [23016, false]}; if (_incomeSystem in [3,4]) then { sliderSetRange[23010,0,missionNamespace getVariable "WFBE_C_ECONOMY_INCOME_PERCENT_MAX"]; _income = WFBE_Client_Logic getVariable "wfbe_commander_percent"; sliderSetPosition[23010, _income]; } else { ctrlEnable [23012, false]; }; //--- Disable the selling function if the HQ is dead. if !(alive ((sideJoined) Call WFBE_CO_FNC_GetSideHQ)) then { ctrlEnable [23015, false]; }; while {alive player && dialog} do { if (side player != sideJoined) exitWith {closeDialog 0}; if !(dialog) exitWith {}; _funds = Call GetPlayerFunds; //--- Income System. if (_incomeSystem in [3,4]) then { ctrlSetText[23011, Format["%1%2",_income,"%"]]; _currentPercent = WFBE_Client_Logic getVariable "wfbe_commander_percent"; _income = floor(sliderPosition 23010); sliderSetPosition[23010, _income]; _calInc = (sideJoined) Call GetTownsIncome; if (_currentPercent != _income || _hasStarted) then { if (_hasStarted) then {_hasStarted = false}; _income_players = 0; _income_commander = 0; switch (_incomeSystem) do { case 3: { _income_players = round(_calInc * (((100 - _income)/100)/WFBE_Client_Teams_Count)); _income_commander = round((_calInc * (_income/100)) / _incomeDividision) + _income_players; }; case 4: { _income_players = round(_calInc * (100 - _income) / 100); _income_commander = round((_calInc - _income_players)*WFBE_Client_Teams_Count) + _income_players; }; }; ctrlSetText [23013, localize 'STR_WF_ECONOMY_Income_Sys_Com' + ": $" + str(_income_commander)]; ctrlSetText [23014, localize 'STR_WF_ECONOMY_Income_Sys_Ply' + ": $" + str(_income_players)]; }; if (MenuAction == 3) then { MenuAction = -1; if (_currentPercent != _income) then { WFBE_Client_Logic setVariable ["wfbe_commander_percent", _income, true]; }; }; }; //--- Workers System. if ((missionNamespace getVariable "WFBE_C_STRUCTURES_CONSTRUCTION_MODE") == 1) then { if (time - _lastComboUpdate > 5) then { _updateComboWorker = true; _lastComboUpdate = time; }; _workers = WFBE_Client_Logic getVariable "wfbe_workers"; if (time - _lastWorkersUpdate > 5) then {_aliveWorkers = (_workers) Call GetLiveUnits;_lastWorkersUpdate = time}; _hqDeployed = (sideJoined) Call WFBE_CO_FNC_GetSideHQDeployStatus; if (!_hqDeployed || time - _lastPurchase < 3 || count _aliveWorkers >= _maxWorkers || _funds < _workerPrice) then {ctrlEnable [23004, false]} else {ctrlEnable [23004, true]}; //--- Workers tracker. if (_updateComboWorker) then { _updateComboWorker = false; lbClear 23007; for '_i' from 0 to count(_aliveWorkers)-1 do { lbAdd [23007, localize "STR_WF_ECONOMY_Workers" + " " + str(_i+1)]; }; }; ctrlSetText [23005, Format ["$%1 (%2/%3)",_workerPrice,count _aliveWorkers,_maxWorkers]]; }; //--- Hire Workers. if (MenuAction == 1) then { MenuAction = -1; //--- Which index. _index = 0; for '_i' from 0 to count(_workers)-1 do { if (isNull (_workers select _i)) exitWith {_index = _i}; }; if (_index == 0 && count(_workers) > 0) then {_index = count _workers}; if (count _aliveWorkers <= _maxWorkers && _hqDeployed) then { -(_workerPrice) Call ChangePlayerFunds; // WFBE_RequestWorker = ['SRVFNCREQUESTWORKER',[sideJoined,(sideJoined) Call GetSideHQ,_index]]; // publicVariable 'WFBE_RequestWorker'; // if (isHostedServer) then {['SRVFNCREQUESTWORKER',[sideJoined,(sideJoined) Call GetSideHQ,_index]] Spawn HandleSPVF}; ["RequestWorker", [sideJoined,(sideJoined) Call WFBE_CO_FNC_GetSideHQ, _index]] Call WFBE_CO_FNC_SendToServer; _workers set [_index, WF_Logic]; WFBE_Client_Logic setVariable ["wfbe_workers", _workers, true]; _lastPurchase = time; _lastWorkersUpdate = -10; _updateComboWorker = true; }; }; //--- Disband Worker. if (MenuAction == 2) then { MenuAction = -1; _value = lbCurSel 23007; if (_value != -1) then { (_aliveWorkers select _value) setDammage 1; _lastWorkersUpdate = -10; _updateComboWorker = true; }; }; //--- ST Handler. if (_supplySystem == 0) then { _isCommander = false; if (!isNull(commanderTeam)) then {if (commanderTeam == group player) then {_isCommander = true}}; ctrlEnable [23016,if (time - _lastUse > 5 && _isCommander) then {true} else {false}]; }; //--- Respawn Supply Trucks. if (MenuAction == 4) then { MenuAction = -1; // WFBE_RequestSpecial = ['SRVFNCREQUESTSPECIAL',["RespawnST",sideJoined]]; // publicVariable 'WFBE_RequestSpecial'; // if (isHostedServer) then {['SRVFNCREQUESTSPECIAL',["RespawnST",sideJoined]] Spawn HandleSPVF}; ["RequestSpecial", ["RespawnST",sideJoined]] Call WFBE_CO_FNC_SendToServer; _lastUse = time; }; //--- Minimap update. if (MenuAction == 100) then { MenuAction = -1; _value = lbCurSel 23007; if (_value != -1) then { ctrlMapAnimClear _map; _map ctrlMapAnimAdd [1,.175,getPos(_aliveWorkers select _value)]; ctrlMapAnimCommit _map; }; }; //added-MrNiceGuy if (mouseButtonUp == 0) then { mouseButtonUp = -1; //--- Sell Building. if (MenuAction == 105) then { MenuAction = -1; _isCommander = false; if (!isNull(commanderTeam)) then {if (commanderTeam == group player) then {_isCommander = true}}; if !(_isCommander) exitWith {}; _position = _map posScreenToWorld[mouseX,mouseY]; _structures = (sideJoined) Call WFBE_CO_FNC_GetSideStructures; _closest = [_position,_structures] Call WFBE_CO_FNC_GetClosestEntity; if (!isNull _closest) then { //--- 100 meters close only. if (_closest distance _position < 100 && isNil {_closest getVariable "WFBE_SOLD"}) then { //--- Spawn a sell thread. (_closest) Spawn { Private ["_closest","_delay","_id","_supplyB","_type"]; _closest = _this; _closest setVariable ["WFBE_SOLD", true]; _delay = missionNamespace getVariable "WFBE_C_STRUCTURES_SALE_DELAY"; _type = typeOf _closest; //--- Inform the side (before). // WFBE_LocalizeMessage = [sideJoined,'CLTFNCLOCALIZEMESSAGE',['StructureSell',_type,_delay]]; // publicVariable 'WFBE_LocalizeMessage'; [sideJoined, "LocalizeMessage", ['StructureSell',_type,_delay]] Call WFBE_CO_FNC_SendToClients; ['StructureSell',_type,_delay] Spawn CLTFNCLocalizeMessage; sleep _delay; if !(alive _closest) exitWith {}; _id = (missionNamespace getVariable Format ["WFBE_%1STRUCTURENAMES",sideJoinedText]) find _type; //--- TODO: Change the find system with a getvar system. if (_id > 0) then { _supplyB = (missionNamespace getVariable Format ["WFBE_%1STRUCTURECOSTS",sideJoinedText]) select _id; _supplyB = round((_supplyB * (missionNamespace getVariable "WFBE_C_STRUCTURES_SALE_PERCENT")) / 100); if ((missionNamespace getVariable "WFBE_C_ECONOMY_CURRENCY_SYSTEM") == 0) then {[sideJoined, _supplyB] Call ChangeSideSupply} else {(_supplyB) Call ChangePlayerFunds}; }; //--- Inform the side. // WFBE_LocalizeMessage = [sideJoined,'CLTFNCLOCALIZEMESSAGE',['StructureSold',_type]]; // publicVariable 'WFBE_LocalizeMessage'; [sideJoined, "LocalizeMessage",['StructureSold',_type]] Call WFBE_CO_FNC_SendToClients; ['StructureSold',_type] Spawn CLTFNCLocalizeMessage; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_CONSTRUCTION_MODE") == 1) then {_closest setVariable ["sold",true,true]}; _closest setDammage 1; }; }; }; }; }; sleep 0.1; //--- Back Button. if (MenuAction == 5) exitWith { //---added-MrNiceGuy MenuAction = -1; closeDialog 0; createDialog "WF_Menu"; }; };MenuAction = -1; _vehi = [group player,false] Call GetTeamVehicles; _alives = (units group player) Call GetLiveUnits; {if (vehicle _x == _x) then {_vehi = _vehi + [_x]}} forEach _alives; _lastUse = 0; _typeRepair = missionNamespace getVariable Format['WFBE_%1REPAIRTRUCKS',sideJoinedText]; _sheal = missionNamespace getVariable 'WFBE_C_UNITS_SUPPORT_HEAL_TIME'; _srearm = missionNamespace getVariable 'WFBE_C_UNITS_SUPPORT_REARM_TIME'; _srefuel = missionNamespace getVariable 'WFBE_C_UNITS_SUPPORT_REFUEL_TIME'; _srepair = missionNamespace getVariable 'WFBE_C_UNITS_SUPPORT_REPAIR_TIME'; _healPrice = 0; _repairPrice = 0; _refuelPrice = 0; _rearmPrice = 0; _lastVeh = objNull; _lastDmg = 0; _lastFue = 0; _buildings = (sideJoined) Call WFBE_CO_FNC_GetSideStructures; //--- Service Point. _csp = objNull; _sp = [sideJoined, missionNamespace getVariable Format ["WFBE_%1SERVICEPOINTTYPE",sideJoinedText],_buildings] Call GetFactories; if (count _sp > 0) then { _csp = [vehicle player,_sp] Call WFBE_CO_FNC_GetClosestEntity; }; if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_EASA") > 0) then { _enable = false; _currentUpgrades = (sideJoined) Call WFBE_CO_FNC_GetSideUpgrades; _easaLevel = _currentUpgrades select WFBE_UP_EASA; if (!(isNull _csp) && _easaLevel > 0) then { if (player distance _csp < (missionNamespace getVariable "WFBE_C_UNITS_SUPPORT_RANGE")) then { if (typeOf(vehicle player) in (missionNamespace getVariable 'WFBE_EASA_Vehicles')) then { if (driver (vehicle player) == player) then {_enable = true}; }; }; }; ctrlEnable [20010,_enable]; } else { ctrlEnable [20010,false]; }; _effective = []; _nearSupport = []; _spType = missionNamespace getVariable Format ["%1SP",sideJoinedText]; _i = 0; { _closestSP = objNull; _add = false; _nearSupport set [_i, []]; //--- Service Point. if (count _sp > 0) then { _closestSP = [_x,_sp] Call WFBE_CO_FNC_GetClosestEntity; if !(isNull _closestSP) then { if (_x distance _closestSP < (missionNamespace getVariable "WFBE_C_UNITS_SUPPORT_RANGE")) then { _add = true; _nearSupport set [_i,(_nearSupport select _i) + [_closestSP]]; }; }; }; //--- Depots. _nObject = [_x, (missionNamespace getVariable "WFBE_C_UNITS_SUPPORT_RANGE")] Call WFBE_CL_FNC_GetClosestDepot; if !(isNull _nObject) then { _add = true; _nearSupport set [_i,(_nearSupport select _i) + [_nObject]]; }; //--- Repairs Trucks. _checks = (getPos _x) nearEntities[_typeRepair, missionNamespace getVariable "WFBE_C_UNITS_REPAIR_TRUCK_RANGE"]; if (count _checks > 0) then { _add = true; _nearSupport set [_i,(_nearSupport select _i) + _checks]; }; //--- Add the vehicle ? if (_add) then { _effective = _effective + [_x]; _desc = [typeOf _x, 'displayName'] Call GetConfigInfo; _finalNumber = (_x) Call GetAIDigit; _isInVehicle = ""; if (_x != vehicle _x) then { _descVehi = [typeOf (vehicle _x), 'displayName'] Call GetConfigInfo; _isInVehicle = " [" + _descVehi + "] "; }; _txt = "["+_finalNumber+"] "+ _desc + _isInVehicle; lbAdd[20002,_txt]; _i = _i + 1; }; } forEach _vehi; _checks = (getPos player) nearEntities[_typeRepair, missionNamespace getVariable "WFBE_C_UNITS_REPAIR_TRUCK_RANGE"]; if (count _checks > 0) then { _repair = _checks select 0; _vehi = ((getPos _repair) nearEntities[["Car","Motorcycle","Tank","Air","Ship","StaticWeapon"],100]) - [_repair]; { if !(_x in _effective) then { _effective = _effective + [_x]; _nearSupport set [_i,[_repair]]; _descVehi = [typeOf (vehicle _x), 'displayName'] Call GetConfigInfo; lbAdd[20002,_descVehi]; _i = _i + 1; }; } forEach _vehi; }; if (count _effective > 0) then {lbSetCurSel[20002,0]}; while {true} do { sleep 0.1; if (Side player != sideJoined) exitWith {closeDialog 0}; if (!dialog) exitWith {}; _curSel = lbCurSel(20002); if (_curSel != -1) then { _veh = (vehicle (_effective select _curSel)); _funds = Call GetPlayerFunds; if (_veh isKindOf "Man") then { {ctrlEnable [_x,false]} forEach [20003,20004,20005]; _enabled = if (_funds >= _healPrice) then {true} else {false}; ctrlEnable [20008,_enabled]; //--- Healing. _healPrice = round((getDammage _veh)*(missionNamespace getVariable "WFBE_C_UNITS_SUPPORT_HEAL_PRICE")); ctrlSetText [20011,"$0"]; ctrlSetText [20012,"$0"]; ctrlSetText [20013,"$0"]; ctrlSetText [20014,"$"+str(_healPrice)]; } else { //--- Prevent on the air re-supply. _canBeUsed = if ((getPos _veh) select 2 <= 2 && speed _veh <= 20) then {true} else {false}; _enabled = if (_canBeUsed && _funds >= _rearmPrice) then {true} else {false}; ctrlEnable [20003,_enabled]; _enabled = if (_canBeUsed && _funds >= _repairPrice) then {true} else {false}; ctrlEnable [20004,_enabled]; _enabled = if (_canBeUsed && _funds >= _refuelPrice) then {true} else {false}; ctrlEnable [20005,_enabled]; _enabled = if (_canBeUsed && _funds >= _healPrice) then {true} else {false}; ctrlEnable [20008,_enabled]; //--- Healing. _healPrice = 0; { if (alive _x) then {_healPrice = _healPrice + round((getDammage _x)*(missionNamespace getVariable "WFBE_C_UNITS_SUPPORT_HEAL_PRICE"))}; } forEach (crew _veh); ctrlSetText [20014,"$"+str(_healPrice)]; //--- Repair. if (_veh != _lastVeh || getDammage _veh != _lastDmg) then { _type = typeOf _veh; _lastDmg = getDammage _veh; _get = missionNamespace getVariable _type; if !(isNil '_get') then { _repairPrice = round((getDammage _veh)*((_get select QUERYUNITPRICE)/(missionNamespace getVariable "WFBE_C_UNITS_SUPPORT_REPAIR_PRICE"))); } else { _repairPrice = 500; }; }; ctrlSetText [20012,"$"+str(_repairPrice)]; //--- Rearm. if (_veh != _lastVeh) then { _type = typeOf _veh; _get = missionNamespace getVariable _type; if !(isNil '_get') then { _rearmPrice = round((_get select QUERYUNITPRICE)/(missionNamespace getVariable "WFBE_C_UNITS_SUPPORT_REARM_PRICE")); } else { _rearmPrice = 500; }; }; ctrlSetText [20011,"$"+str(_rearmPrice)]; //--- Refuel. if (_veh != _lastVeh || fuel _veh != _lastFue) then { _type = typeOf _veh; _lastFue = fuel _veh; _get = missionNamespace getVariable _type; if !(isNil '_get') then { _fuel = ((fuel _veh) -1) * -1; _refuelPrice = round(_fuel*((_get select QUERYUNITPRICE)/(missionNamespace getVariable "WFBE_C_UNITS_SUPPORT_REFUEL_PRICE"))); } else { _refuelPrice = 200; }; }; ctrlSetText [20013,"$"+str(_refuelPrice)]; }; _lastVeh = _veh; //--- Rearm. if (MenuAction == 1) then { MenuAction = -1; -_rearmPrice Call ChangePlayerFunds; //--- Spawn a Rearm thread. [_veh,_nearSupport select _curSel,_typeRepair,_spType] Spawn SupportRearm; }; //--- Repair. if (MenuAction == 2) then { MenuAction = -1; -_repairPrice Call ChangePlayerFunds; //--- Spawn a Repair thread. [_veh,_nearSupport select _curSel,_typeRepair,_spType] Spawn SupportRepair; }; //--- Refuel. if (MenuAction == 3) then { MenuAction = -1; -_refuelPrice Call ChangePlayerFunds; //--- Spawn a Refuel thread. [_veh,_nearSupport select _curSel,_typeRepair,_spType] Spawn SupportRefuel; }; //--- Heal. if (MenuAction == 5) then { MenuAction = -1; -_healPrice Call ChangePlayerFunds; //--- Spawn a Healing thread. [_veh,_nearSupport select _curSel,_typeRepair,_spType] Spawn SupportHeal; }; } else { {ctrlEnable[_x,false]} forEach [20003,20004,20005,20008]; }; //--- EASA. TBD: Add dialog; if (MenuAction == 7) then { MenuAction = -1; closeDialog 0; createDialog "RscMenu_EASA"; }; //--- Back Button. if (MenuAction == 8) exitWith { //---added-MrNiceGuy MenuAction = -1; closeDialog 0; createDialog "WF_Menu"; }; }; disableSerialization; _display = _this select 0; _lastRange = artyRange; _lastUpdate = 0; _listBox = 17019; sliderSetRange[17005, 10, missionNamespace getVariable "WFBE_C_ARTILLERY_AREA_MAX"]; sliderSetPosition[17005, artyRange]; ctrlSetText [17025,localize "STR_WF_TACTICAL_ArtilleryOverview" + ":"]; _markers = []; _FTLocations = []; _checks = []; _fireTime = 0; _status = 0; _canFT = false; _forceReload = true; _ft = missionNamespace getVariable "WFBE_C_GAMEPLAY_FAST_TRAVEL"; _ftr = missionNamespace getVariable "WFBE_C_GAMEPLAY_FAST_TRAVEL_RANGE"; _startPoint = objNull; _marker = "artilleryMarker"; createMarkerLocal [_marker,artyPos]; _marker setMarkerTypeLocal "mil_destroy"; _marker setMarkerColorLocal "ColorRed"; _marker setMarkerSizeLocal [1,1]; _area = "artilleryAreaMarker"; createMarkerLocal [_area,artyPos]; _area setMarkerShapeLocal "Ellipse"; _area setMarkerColorLocal "ColorRed"; _area setMarkerSizeLocal [artyRange,artyRange]; _map = _display DisplayCtrl 17002; _listboxControl = _display DisplayCtrl _listBox; _pard = missionNamespace getVariable "WFBE_C_PLAYERS_SUPPORT_PARATROOPERS_DELAY"; {lbAdd[17008,_x]} forEach (missionNamespace getVariable Format ["WFBE_%1_ARTILLERY_DISPLAY_NAME",sideJoinedText]); lbSetCurSel[17008,0]; _IDCS = [17005,17006,17007,17008]; if ((missionNamespace getVariable "WFBE_C_ARTILLERY") == 0) then {{ctrlEnable [_x,false]} forEach _IDCS}; {ctrlEnable [_x, false]} forEach [17010,17011,17012,17013,17014,17015,17017,17018,17020]; _currentValue = -1; _currentFee = -1; _currentSpecial = ""; _currentFee = -1; //--- Support List. _lastSel = -1; _addToList = [localize 'STR_WF_TACTICAL_FastTravel',localize 'STR_WF_ICBM',localize 'STR_WF_TACTICAL_ParadropAmmo',localize 'STR_WF_TACTICAL_ParadropVehicle',localize 'STR_WF_TACTICAL_Paratroop',localize 'STR_WF_TACTICAL_UnitCam',localize 'STR_WF_TACTICAL_UAV',localize 'STR_WF_TACTICAL_UAVDestroy',localize 'STR_WF_TACTICAL_UAVRemoteControl']; _addToListID = ["Fast_Travel","ICBM","Paradrop_Ammo","Paradrop_Vehicle","Paratroopers","Units_Camera","UAV","UAV_Destroy","UAV_Remote_Control"]; _addToListFee = [0,150000,9500,3500,8500,0,12500,0,0]; _addToListInterval = [0,1000,800,600,900,0,0,0,0]; for '_i' from 0 to count(_addToList)-1 do { lbAdd [_listBox,_addToList select _i]; lbSetValue [_listBox, _i, _i]; }; lbSort _listboxControl; //--- Artillery Mode. _mode = missionNamespace getVariable 'WFBE_V_ARTILLERYMINMAP'; if (isNil '_mode') then {_mode = 2;missionNamespace setVariable ['WFBE_V_ARTILLERYMINMAP',_mode]}; _trackingArray = []; _trackingArrayID = []; _lastArtyUpdate = -60; _minRange = 100; _maxRange = 200; _requestMarkerTransition = false; _requestRangedList = true; _startLoad = true; //--- Startup coloration. with uinamespace do { currentBEDialog = _display; switch (_mode) do { case 0: {(currentBEDialog displayCtrl 17023) ctrlSetTextColor [1,1,1,1]}; case 1: {(currentBEDialog displayCtrl 17023) ctrlSetTextColor [0,0.635294,0.909803,1]}; case 2: {(currentBEDialog displayCtrl 17023) ctrlSetTextColor [0.6,0.850980,0.917647,1]}; }; }; lbSetCurSel[_listbox, 0]; if ((missionNamespace getVariable "WFBE_C_ARTILLERY") == 0) then { (_display displayCtrl 17016) ctrlSetStructuredText (parseText Format['%1',localize 'STR_WF_Disabled']); }; _textAnimHandler = [] spawn {}; MenuAction = -1; mouseButtonUp = -1; while {alive player && dialog} do { if (side player != sideJoined) exitWith {deleteMarkerLocal _marker;deleteMarkerLocal _area;{deleteMarkerLocal _x} forEach _markers;closeDialog 0}; if (!dialog) exitWith {deleteMarkerLocal _marker;deleteMarkerLocal _area;{deleteMarkerLocal _x} forEach _markers}; _currentUpgrades = (sideJoined) Call WFBE_CO_FNC_GetSideUpgrades; if (_ft > 0) then { //--- TODO: Travel fee, mod parameter > FT free or pay, do a clt fct. _currentLevel = _currentUpgrades select WFBE_UP_FASTTRAVEL; if (time - _lastUpdate > 15 && _currentLevel > 0) then { {deleteMarkerLocal _x} forEach _markers; _markers = []; _FTLocations = []; _canFT = false; _startPoint = objNull; _lastUpdate = time; _base = (sideJoined) Call WFBE_CO_FNC_GetSideHQ; _isDeployed = (sideJoined) Call WFBE_CO_FNC_GetSideHQDeployStatus; if (player distance _base < _ftr && alive _base && vehicle player != _base && _isDeployed) then { _canFT = true; _startPoint = _base; } else { _closest = [player,towns] Call WFBE_CO_FNC_GetClosestEntity; _sideID = _closest getVariable "sideID"; _camps = [_closest,sideJoined] Call GetFriendlyCamps; _allCamps = _closest getVariable "camps"; if (_sideID == sideID && player distance _closest < _ftr && (count _camps == count _allCamps)) then {_canFT = true;_startPoint = _closest} else { _buildings = (sideJoined) Call WFBE_CO_FNC_GetSideStructures; _checks = [sideJoined,missionNamespace getVariable Format ["WFBE_%1COMMANDCENTERTYPE",sideJoinedText],_buildings] Call GetFactories; if (count _checks > 0) then { _closest = [player,_checks] Call WFBE_CO_FNC_GetClosestEntity; if (player distance _closest < _ftr) then { _canFT = true; _startPoint = _closest; }; }; }; }; if (!canMove (vehicle player)) then {_canFT = false}; if (_canFT) then { _buildings = (sideJoined) Call WFBE_CO_FNC_GetSideStructures; _checks = [sideJoined,missionNamespace getVariable Format ["WFBE_%1COMMANDCENTERTYPE",sideJoinedText],_buildings] Call GetFactories; _locations = towns + _checks; if (alive _base && _isDeployed) then {_locations = _locations + [_base]}; _i = 0; _fee = 0; _funds = if (_ft == 2) then {Call GetPlayerFunds} else {0}; { if (_x distance player <= (missionNamespace getVariable "WFBE_C_GAMEPLAY_FAST_TRAVEL_RANGE_MAX") && _x distance player > _ftr) then { _skip = false; if (_x in towns) then { _sideID = _x getVariable "sideID"; _camps = [_x,sideJoined] Call GetFriendlyCamps; _allCamps = _x getVariable "camps"; if (_sideID != sideID || (count _camps != count _allCamps)) then {_skip = true}; if (_ft == 2) then { _fee = round(((_x distance player)/1000) * (missionNamespace getVariable "WFBE_C_GAMEPLAY_FAST_TRAVEL_PRICE_KM")); if (_funds < _fee) then {_skip = true}; }; }; if !(_skip) then { _FTLocations = _FTLocations + [_x]; _markerName = Format ["FTMarker%1",_i]; _markers = _markers + [_markerName]; createMarkerLocal [_markerName,getPos _x]; _markerName setMarkerTypeLocal "mil_circle"; _markerName setMarkerColorLocal "ColorYellow"; _markerName setMarkerSizeLocal [1,1]; //--- Fee, Cheap marker stuff, TBD: Add prompt or something. if (_ft == 2) then { _markerName = Format ["FTMarker%1%1",_i]; _markers = _markers + [_markerName]; createMarkerLocal [_markerName,[(getPos _x select 0)-5,(getPos _x select 1)+75]]; _markerName setMarkerTypeLocal "mil_circle"; _markerName setMarkerColorLocal "ColorYellow"; _markerName setMarkerSizeLocal [0,0]; _markerName setMarkerTextLocal Format ["$%1",_fee]; }; _i = _i + 1; }; }; } forEach _locations; }; }; }; _currentSel = lbCurSel(_listBox); //--- Special changed or a reload is requested. if (_currentSel != _lastSel || _forceReload) then { _currentValue = lbValue[_listBox, _currentSel]; _currentSpecial = _addToListID select _currentValue; _currentFee = _addToListFee select _currentValue; _currentInterval = _addToListInterval select _currentValue; _forceReload = false; _controlEnable = false; _funds = Call GetPlayerFunds; //ctrlSetText[17021,Format ["%1: $%2",localize 'STR_WF_Price',_currentFee]]; //---old ctrlSetText[17021,Format ["$%1",_currentFee]]; //---added-MrNiceGuy //--- Enabled or disabled? switch (_currentSpecial) do { case "Fast_Travel": { if (_ft > 0) then { _currentLevel = _currentUpgrades select WFBE_UP_FASTTRAVEL; _controlEnable = if (count _FTLocations > 0 && _currentLevel > 0) then {true} else {false}; }; }; case "ICBM": { if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_ICBM") > 0) then { _commander = false; if (!isNull(commanderTeam)) then { if (commanderTeam == group player) then {_commander = true}; }; _currentLevel = _currentUpgrades select WFBE_UP_ICBM; _controlEnable = if (_currentLevel > 0 && _commander && _funds >= _currentFee) then {true} else {false}; }; }; case "Paratroopers": { _currentLevel = _currentUpgrades select WFBE_UP_PARATROOPERS; _controlEnable = if (_funds >= _currentFee && _currentLevel > 0 && time - lastParaCall > _currentInterval) then {true} else {false}; }; case "Paradrop_Ammo": { _currentLevel = _currentUpgrades select WFBE_UP_SUPPLYPARADROP; _controlEnable = if (_funds >= _currentFee && _currentLevel > 0 && time - lastSupplyCall > _currentInterval) then {true} else {false}; }; case "Paradrop_Vehicle": { _currentLevel = _currentUpgrades select WFBE_UP_SUPPLYPARADROP; _controlEnable = if (_funds >= _currentFee && _currentLevel > 0 && time - lastSupplyCall > _currentInterval) then {true} else {false}; }; case "UAV": { _currentLevel = _currentUpgrades select WFBE_UP_UAV; _controlEnable = if (_funds >= _currentFee && _currentLevel > 0 && !(alive playerUAV)) then {true} else {false}; }; case "UAV_Destroy": { _controlEnable = if (alive playerUAV) then {true} else {false}; }; case "UAV_Remote_Control": { _controlEnable = if (alive playerUAV) then {true} else {false}; }; case "Units_Camera": { _controlEnable = commandInRange; }; }; ctrlEnable[17020, _controlEnable]; MenuAction = -1; }; //--- Request Asset. if (MenuAction == 20) then { MenuAction = -1; //--- Output. switch (_currentSpecial) do { case "Fast_Travel": { MenuAction = 7; if !(scriptDone _textAnimHandler) then {terminate _textAnimHandler}; _textAnimHandler = [17022,localize 'STR_WF_TACTICAL_ClickOnMap',10,"ff9900"] spawn SetControlFadeAnim; }; case "ICBM": { MenuAction = 8; if !(scriptDone _textAnimHandler) then {terminate _textAnimHandler}; _textAnimHandler = [17022,localize 'STR_WF_TACTICAL_ClickOnMap',10,"ff9900"] spawn SetControlFadeAnim; }; case "Paratroopers": { MenuAction = 3; if !(scriptDone _textAnimHandler) then {terminate _textAnimHandler}; _textAnimHandler = [17022,localize 'STR_WF_TACTICAL_ClickOnMap',10,"ff9900"] spawn SetControlFadeAnim; }; case "Paradrop_Ammo": { MenuAction = 10; if !(scriptDone _textAnimHandler) then {terminate _textAnimHandler}; _textAnimHandler = [17022,localize 'STR_WF_TACTICAL_ClickOnMap',10,"ff9900"] spawn SetControlFadeAnim; }; case "Paradrop_Vehicle": { MenuAction = 9; if !(scriptDone _textAnimHandler) then {terminate _textAnimHandler}; _textAnimHandler = [17022,localize 'STR_WF_TACTICAL_ClickOnMap',10,"ff9900"] spawn SetControlFadeAnim; }; case "UAV": { closeDialog 0; ExecVM "Client\Module\UAV\uav.sqf"; }; case "UAV_Destroy": { if !(isNull playerUAV) then { {_x setDammage 1} forEach (crew playerUAV); playerUAV setDammage 1; playerUAV = objNull; }; }; case "UAV_Remote_Control": { closeDialog 0; ExecVM "Client\Module\UAV\uav.sqf"; }; case "Units_Camera": { closeDialog 0; createDialog "RscMenu_UnitCamera"; }; }; // _forceReload = true; }; artyRange = floor (sliderPosition 17005); if (_lastRange != artyRange) then {_area setMarkerSizeLocal [artyRange,artyRange];}; if (mouseButtonUp == 0) then { mouseButtonUp = -1; //--- Set Artillery Marker on map. if (MenuAction == 1) then { MenuAction = -1; artyPos = _map posScreenToWorld[mouseX,mouseY]; _marker setMarkerPosLocal artyPos; _area setMarkerPosLocal artyPos; _requestRangedList = true; }; //--- Paratroops. if (MenuAction == 3) then { MenuAction = -1; _forceReload = true; if !(scriptDone _textAnimHandler) then {terminate _textAnimHandler}; [17022] Call SetControlFadeAnimStop; _callPos = _map posScreenToWorld[mouseX,mouseY]; if (!surfaceIsWater _callPos) then { lastParaCall = time; -(_currentFee) Call ChangePlayerFunds; ["RequestSpecial", ["Paratroops",sideJoined,_callPos,clientTeam]] Call WFBE_CO_FNC_SendToServer; hint (localize "STR_WF_INFO_Paratroop_Info"); }; }; //--- Fast Travel. if (MenuAction == 7) then { MenuAction = -1; _forceReload = true; if !(scriptDone _textAnimHandler) then {terminate _textAnimHandler}; [17022] Call SetControlFadeAnimStop; _callPos = _map PosScreenToWorld[mouseX,mouseY]; _destination = [_callPos,_FTLocations] Call WFBE_CO_FNC_GetClosestEntity; if (_callPos distance _destination < 500) then { closeDialog 0; deleteMarkerLocal _marker; deleteMarkerLocal _area; //--- Remove Markers. { _track = (_x select 0); _vehicle = (_x select 1); _vehicle setVariable ['WFBE_A_Tracked', nil]; deleteMarkerLocal Format ["WFBE_A_Large%1",_track]; deleteMarkerLocal Format ["WFBE_A_Small%1",_track]; } forEach _trackingArrayID; _mode = -1; if (_ft == 2) then { _fee = round(((player distance _destination)/1000) * (missionNamespace getVariable "WFBE_C_GAMEPLAY_FAST_TRAVEL_PRICE_KM")); -(_fee) Call ChangePlayerFunds; }; _travelingWith = []; {if (_x distance _startPoint < _ftr && !(_x in _travelingWith) && canMove _x && !(vehicle _x isKindOf "StaticWeapon") && !stopped _x && !((currentCommand _x) in ["WAIT","STOP"])) then {_travelingWith = _travelingWith + [vehicle _x]}} forEach units (group player); ForceMap true; _compass = shownCompass; _GPS = shownGPS; _pad = shownPad; _radio = shownRadio; _watch = shownWatch; showCompass false; showGPS false; showPad false; showRadio false; showWatch false; mapAnimClear; mapAnimCommit; _locationPosition = getPos _destination; _camera = "camera" camCreate _locationPosition; _camera camSetDir 0; _camera camSetFov 1; _camera cameraEffect["Internal","TOP"]; _camera camSetTarget _locationPosition; _camera camSetPos [_locationPosition select 0,(_locationPosition select 1) + 2,100]; _camera camCommit 0; mapAnimAdd [0,0.05,GetPos _startPoint]; mapAnimCommit; _delay = ((_startPoint distance _destination) / 50) * (missionNamespace getVariable "WFBE_C_GAMEPLAY_FAST_TRAVEL_TIME_COEF"); mapAnimAdd [_delay,.18,getPos _destination]; mapAnimCommit; waitUntil {mapAnimDone || !alive player}; _skip = false; if (!alive player) then {_skip = true}; if (!_skip) then { {[_x,_locationPosition,120] Call PlaceSafe} forEach _travelingWith; }; sleep 1; ForceMap false; showCompass _compass; showGPS _GPS; showPad _pad; showRadio _radio; showWatch _watch; _camera cameraEffect["TERMINATE","BACK"]; camDestroy _camera; }; }; //--- ICBM Strike. if (MenuAction == 8) then { _forceReload = true; if !(scriptDone _textAnimHandler) then {terminate _textAnimHandler}; [17022] Call SetControlFadeAnimStop; MenuAction = -1; -_currentFee Call ChangePlayerFunds; _callPos = _map PosScreenToWorld[mouseX,mouseY]; _obj = "HeliHEmpty" createVehicle _callPos; _nukeMarker = createMarkerLocal ["icbmstrike", position _obj]; _nukeMarker setMarkerTypeLocal "mil_warning"; _nukeMarker setMarkerTextLocal "ICBM"; _nukeMarker setMarkerColorLocal "ColorRed"; [_obj,_nukeMarker] Spawn NukeIncomming; }; //--- Vehicle Paradrop. if (MenuAction == 9) then { _forceReload = true; if !(scriptDone _textAnimHandler) then {terminate _textAnimHandler}; [17022] Call SetControlFadeAnimStop; MenuAction = -1; lastSupplyCall = time; -_currentFee Call ChangePlayerFunds; _callPos = _map PosScreenToWorld[mouseX,mouseY]; ["RequestSpecial", ["ParaVehi",sideJoined,_callPos,clientTeam]] Call WFBE_CO_FNC_SendToServer; }; //--- Ammo Paradrop. if (MenuAction == 10) then { _forceReload = true; if !(scriptDone _textAnimHandler) then {terminate _textAnimHandler}; [17022] Call SetControlFadeAnimStop; MenuAction = -1; lastSupplyCall = time; -_currentFee Call ChangePlayerFunds; _callPos = _map PosScreenToWorld[mouseX,mouseY]; ["RequestSpecial", ["ParaAmmo",sideJoined,_callPos,clientTeam]] Call WFBE_CO_FNC_SendToServer; }; }; //--- Update the Artillery Status. if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then { _fireTime = (missionNamespace getVariable "WFBE_C_ARTILLERY_INTERVALS") select (_currentUpgrades select WFBE_UP_ARTYTIMEOUT); _status = round(_fireTime - (time - fireMissionTime)); _txt = if (time - fireMissionTime > _fireTime) then {Format['%1',localize 'STR_WF_TACTICAL_Available']} else {Format ['%1 %2',_status,localize 'STR_WF_Seconds']}; (_display displayCtrl 17016) ctrlSetStructuredText (parseText _txt); _enable = if (_status > 0) then {false} else {true}; ctrlEnable [17007,_enable]; }; //--- Request Fire Mission. if (MenuAction == 2) then { MenuAction = -1; _units = [Group player,false,lbCurSel(17008),sideJoinedText] Call GetTeamArtillery; if (Count _units > 0) then { fireMissionTime = time; [GetMarkerPos "artilleryMarker",lbCurSel(17008)] Spawn RequestFireMission; } else { hint (localize "STR_WF_INFO_NoArty"); }; }; //--- Arty Combo Change or Script init. if (MenuAction == 200 || _startLoad) then { MenuAction = -1; _index = lbCurSel(17008); _minRange = (missionNamespace getVariable Format ["WFBE_%1_ARTILLERY_RANGES_MIN",sideJoined]) select _index; _maxRange = round(((missionNamespace getVariable Format ["WFBE_%1_ARTILLERY_RANGES_MAX",sideJoined]) select _index) / (missionNamespace getVariable "WFBE_C_ARTILLERY")); _trackingArray = [group player,true,lbCurSel(17008),sideJoined] Call GetTeamArtillery; _requestMarkerTransition = true; _requestRangedList = true; _startLoad = false; }; //--- Focus on an artillery cannon. if (MenuAction == 60) then { MenuAction = -1; ctrlMapAnimClear _map; _map ctrlMapAnimAdd [1,.475,getPos(_trackingArray select (lnbCurSelRow 17024))]; ctrlMapAnimCommit _map; }; //--- Flush on change. if (_requestMarkerTransition) then { _requestMarkerTransition = false; { _track = (_x select 0); _vehicle = (_x select 1); _vehicle setVariable ['WFBE_A_Tracked', nil]; deleteMarkerLocal Format ["WFBE_A_Large%1",_track]; deleteMarkerLocal Format ["WFBE_A_Small%1",_track]; } forEach _trackingArrayID; _trackingArrayID = []; }; //--- Artillery List. if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0 && (_requestRangedList || time - _lastArtyUpdate > 3)) then { _requestRangedList = false; //--- No need to update the list all the time. if (time - _lastArtyUpdate > 5) then { _lastArtyUpdate = time; _trackingArray = [group player,true,lbCurSel(17008),sideJoined] Call GetTeamArtillery; }; //--- Clear & Fill; lnbClear 17024; _i = 0; { _distance = _x distance (getMarkerPos _marker); _color = [0, 0.875, 0, 0.8]; _text = localize 'STR_WF_TACTICAL_ArtilleryInRange'; //---changed-MrNiceGuy //"In Range"; if (_distance > _maxRange) then {_color = [0.875, 0, 0, 0.8];_text = localize 'STR_WF_TACTICAL_ArtilleryOutOfRange'}; //---changed-MrNiceGuy //"Out of Range"}; if (_distance <= _minRange) then {_color = [0.875, 0.5, 0, 0.8];_text = localize 'STR_WF_TACTICAL_ArtilleryRangeTooClose'}; //---changed-MrNiceGuy //"Too close"}; lnbAddRow [17024,[[typeOf _x, 'displayName'] Call GetConfigInfo,_text]]; lnbSetPicture [17024,[_i,0],[typeOf _x, 'picture'] Call GetConfigInfo]; lnbSetColor [17024,[_i,0],_color]; lnbSetColor [17024,[_i,1],_color]; _i = _i + 1; } forEach _trackingArray; }; //--- Artillery map toggle. if (MenuAction == 40) then { MenuAction = -1; if (_mode == -1) then {_mode = 0}; _mode = if (_mode == 2) then {0} else {_mode + 1}; with uinamespace do { switch (_mode) do { case 0: {(currentBEDialog displayCtrl 17023) ctrlSetTextColor [1,1,1,1]}; case 1: {(currentBEDialog displayCtrl 17023) ctrlSetTextColor [0,0.635294,0.909803,1]}; case 2: {(currentBEDialog displayCtrl 17023) ctrlSetTextColor [0.6,0.850980,0.917647,1]}; }; }; if !(scriptDone _textAnimHandler) then {terminate _textAnimHandler}; _textAnimHandler = [17022,localize 'STR_WF_TACTICAL_ArtilleryMinimapInfo',7,"ff9900"] spawn SetControlFadeAnim; missionNamespace setVariable ['WFBE_V_ARTILLERYMINMAP',_mode]; _requestMarkerTransition = true; }; //--- Update artillery display. if (_mode != -1) then { //--- Nothing. if (_mode == 0) then { _requestMarkerTransition = true; _mode = -1; }; //--- Filled Content. if (_mode == 1 || _mode == 2) then { //--- Remove if dead or null or sel changed. { _track = (_x select 0); _vehicle = (_x select 1); if !(alive _vehicle) then { deleteMarkerLocal Format ["WFBE_A_Large%1",_track]; deleteMarkerLocal Format ["WFBE_A_Small%1",_track]; }; } forEach _trackingArrayID; //--- No need to update the marker all the time. if (time - _lastArtyUpdate > 5) then { _lastArtyUpdate = time; _trackingArray = [group player,true,lbCurSel(17008),sideJoined] Call GetTeamArtillery; }; //--- Live Feed. _trackingArrayID = []; { _track = _x getVariable 'WFBE_A_Tracked'; if (isNil '_track') then { _track = buildingMarker; buildingMarker = buildingMarker + 1; _x setVariable ['WFBE_A_Tracked', _track]; _dmarker = Format ["WFBE_A_Large%1",_track]; createMarkerLocal [_dmarker, getPos _x]; _dmarker setMarkerColorLocal "ColorBlue"; _dmarker setMarkerShapeLocal "ELLIPSE"; _brush = "SOLID"; if (_mode == 1) then {_brush = "SOLID"}; if (_mode == 2) then {_brush = "BORDER"}; _dmarker setMarkerBrushLocal _brush; _dmarker setMarkerAlphaLocal 0.4; _dmarker setMarkerSizeLocal [_maxRange,_maxRange]; _dmarker = Format ["WFBE_A_Small%1",_track]; createMarkerLocal [_dmarker, getPos _x]; _dmarker setMarkerColorLocal "ColorBlack"; _dmarker setMarkerShapeLocal "ELLIPSE"; _dmarker setMarkerBrushLocal "SOLID"; _dmarker setMarkerAlphaLocal 0.4; _dmarker setMarkerSizeLocal [_minRange,_minRange]; } else { _dmarker = Format ["WFBE_A_Large%1",_track]; _dmarker setMarkerPosLocal (getPos _x); _dmarker = Format ["WFBE_A_Small%1",_track]; _dmarker setMarkerPosLocal (getPos _x); }; _trackingArrayID = _trackingArrayID + [[_track,_x]]; } forEach _trackingArray; }; }; _lastRange = artyRange; _lastSel = lbCurSel(_listbox); sleep 0.1; //--- Back Button. if (MenuAction == 30) exitWith { //---added-MrNiceGuy MenuAction = -1; closeDialog 0; createDialog "WF_Menu"; }; }; deleteMarkerLocal _marker; deleteMarkerLocal _area; {deleteMarkerLocal _x} forEach _markers; if !(scriptDone _textAnimHandler) then {terminate _textAnimHandler}; //--- Remove Markers. { _track = (_x select 0); _vehicle = (_x select 1); _vehicle setVariable ['WFBE_A_Tracked', nil]; deleteMarkerLocal Format ["WFBE_A_Large%1",_track]; deleteMarkerLocal Format ["WFBE_A_Small%1",_track]; } forEach _trackingArrayID;disableSerialization; _display = _this select 0; MenuAction = -1; _currentVD = viewDistance; _funds = Call GetPlayerFunds; if (votePopUp) then { ctrlSetText[13019, localize "STR_WF_VOTING_PopUpOffButton"]; } else { ctrlSetText[13019, localize "STR_WF_VOTING_PopUpOnButton"]; }; ctrlSetText [13002, Format [localize "STR_WF_TEAM_ViewDistanceLabel",_currentVD]]; ctrlSetText [13004, Format [localize "STR_WF_TEAM_TerrainGridLabel",currentTG]]; ctrlSetText [13006, Format [localize "STR_WF_TEAM_MoneyTransfer",0]]; ctrlSetText [13010, Format [localize "STR_WF_Income",Call GetPlayerFunds,(sideJoined) Call GetIncome]]; SliderSetRange[13003, 1, missionNamespace getVariable "WFBE_C_ENVIRONMENT_MAX_VIEW"]; SliderSetRange[13005, 1, missionNamespace getVariable "WFBE_C_ENVIRONMENT_MAX_CLUTTER"]; SliderSetRange[13007,0,_funds]; SliderSetPosition[13003,_currentVD]; SliderSetPosition[13005,currentTG]; _lastvd = _currentVD; _lasttg = currentTG; _timer = 0; _i = 1; { _xtra = if (isPlayer (leader _x)) then {name (leader _x)} else {"AI"}; lbAdd[13008,Format ["[%1] %2",_i,_xtra]]; _i = _i + 1; } forEach clientTeams; lbSetCurSel[13008,0]; _units = ((units group player) Call GetLiveUnits); _units = _units - [player]; { _desc = [typeOf _x, 'displayName'] Call GetConfigInfo; _finalNumber = (_x) Call GetAIDigit; _isInVehicle = ""; if (_x != vehicle _x) then { _descVehi = [typeOf (vehicle _x), 'displayName'] Call GetConfigInfo; _isInVehicle = " [" + _descVehi + "] "; }; _txt = "["+_finalNumber+"] "+ _desc + _isInVehicle; lbAdd[13013,_txt]; } forEach _units; lbSetCurSel[13013,0]; {lbAdd[13018,_x]} forEach ["None","FX 1","FX 2","FX 3","FX 4","FX 5"]; lbSetCurSel[13018,currentFX]; while {alive player && dialog} do { sleep 0.05; if (Side player != sideJoined) exitWith {closeDialog 0}; if (!dialog) exitWith {}; _curSel = lbCurSel 13008; _currentVD = Floor (SliderPosition 13003); currentTG = Floor (SliderPosition 13005); _transferAmount = Floor (SliderPosition 13007); ctrlSetText [13002, Format [localize "STR_WF_TEAM_ViewDistanceLabel",_currentVD]]; ctrlSetText [13004, Format [localize "STR_WF_TEAM_TerrainGridLabel",currentTG]]; ctrlSetText [13006, Format [localize "STR_WF_TEAM_MoneyTransfer",_transferAmount]]; if (MenuAction == 1) then { MenuAction = -1; if ((_transferAmount != 0)&&((clientTeams select _curSel) != group player)) then { [(clientTeams select _curSel),_transferAmount] Call ChangeTeamFunds; -_transferAmount Call ChangePlayerFunds; _funds = Call GetPlayerFunds; if (isPlayer leader (clientTeams select _curSel)) then { // if (WF_A2_Vanilla) then { [getPlayerUID(leader (clientTeams select _curSel)), "LocalizeMessage",['FundsTransfer',_transferAmount,name player]] Call WFBE_CO_FNC_SendToClients; // } else { // [leader (clientTeams select _curSel), "LocalizeMessage",['FundsTransfer',_transferAmount,name player]] Call WFBE_CO_FNC_SendToClient; // }; }; sliderSetRange[13007,0,_funds]; }; }; if (MenuAction == 3) then { MenuAction = -1; _curUnitSel = lbCurSel 13013; if (_curUnitSel != -1) then { _vehicle = vehicle (_units select _curUnitSel); _destroy = [(_units select _curUnitSel)]; if (_vehicle != (_units select _curUnitSel)) then {_destroy = _destroy + [_vehicle]}; { if !(isPlayer _x) then { if (_x isKindOf 'Man') then {removeAllWeapons _x}; _x setDammage 1; }; } forEach _destroy; _units = ((units group player) Call GetLiveUnits); _units = _units - [leader group player]; lbClear 13013; { _desc = [typeOf _x, 'displayName'] Call GetConfigInfo; _finalNumber = (_x) Call GetAIDigit; _isInVehicle = ""; if (_x != vehicle _x) then { _descVehi = [typeOf (vehicle _x), 'displayName'] Call GetConfigInfo; _isInVehicle = " [" + _descVehi + "] "; }; _txt = "["+_finalNumber+"] "+ _desc + _isInVehicle; lbAdd[13013,_txt]; } forEach _units; lbSetCurSel[13013,0]; }; }; if (MenuAction == 6) then { MenuAction = -1; currentFX = lbCurSel 13018; [currentFX] Spawn FX; }; //--- Vote Pop-Up //added-MrNiceGuy if (MenuAction == 13) then { MenuAction = -1; if (votePopUp) then { votePopUp = false; ctrlSetText[13019, localize "STR_WF_VOTING_PopUpOnButton"]; } else { votePopUp = true; ctrlSetText[13019, localize "STR_WF_VOTING_PopUpOffButton"]; }; }; //--- WF3 Adv Funds transfers. if (MenuAction == 101) exitWith { MenuAction = -1; closeDialog 0; createDialog "WFBE_TransferMenu"; }; if (_currentVD != _lastvd) then {setViewDistance _currentVD}; if (currentTG != _lasttg) then {setTerrainGrid currentTG}; _lastvd = _currentVD; _lasttg = currentTG; if (_timer > 2) then {ctrlSetText [13010, Format [localize "STR_WF_Income",Call GetPlayerFunds,(sideJoined) Call GetIncome]];_timer = 0}; _timer = _timer + 0.05; //--- Back Button. if (MenuAction == 8) exitWith { //---added-MrNiceGuy MenuAction = -1; closeDialog 0; createDialog "WF_Menu"; }; }; disableSerialization; _display = _this select 0; MenuAction = -1; mouseButtonUp = -1; _cameraModes = ["Internal","External","Gunner","Group"]; _n = 1; {lbAdd[21002,Format["[%1] %2",_n,name (leader _x)]];_n = _n + 1} forEach clientTeams; _id = clientTeams find playerTeam; lbSetCurSel[21002,_id]; _currentUnit = (player) Call GetUnitVehicle; _currentMode = "Internal"; _currentUnit switchCamera _currentMode; _units = (Units (group player) - [player]) Call GetLiveUnits; {lbAdd[21004,Format["(%1) %2",getText (configFile >> "CfgVehicles" >> (typeOf (vehicle _x)) >> "displayName"),name _x]];_n = _n + 1} forEach _units; _type = if (!(difficultyEnabled "3rdPersonView")) then {["Internal"]} else {["Internal","External","Ironsight","Group"]}; {lbAdd[21006,_x]} forEach _type; lbSetCurSel[21006,0]; _map = _display displayCtrl 21007; _map ctrlMapAnimAdd [0,.25,getPos _currentUnit]; ctrlMapAnimCommit _map; while {true} do { sleep 0.1; _cameraSwap = false; if (Side player != sideJoined || !dialog) exitWith {}; //--- Map click. if (mouseButtonUp == 0) then { mouseButtonUp = -1; _near = _map PosScreenToWorld[mouseX,mouseY]; _list = _near nearEntities [["Man","Car","Motorcycle","Ship","Tank","Air"],200]; if (count _list > 0) then { _objects = []; {if (!(_x isKindOf "Man") && side _x != sideJoined) then {if (count (crew _x) == 0) then {_objects = _objects - [_x]}};if (side _x == sideJoined) then {_objects = _objects + [_x]}} forEach _list; if (count _objects > 0) then { _currentUnit = ([_near,_objects] Call WFBE_CO_FNC_GetClosestEntity) Call GetUnitVehicle; _cameraSwap = true; }; }; }; //--- Leader Selection. if (MenuAction == 101) then { MenuAction = -1; _selected = leader (clientTeams select (lbCurSel 21002)); _currentUnit = (_selected) Call GetUnitVehicle; _n = 0; _units = (Units (group _selected) - [_selected]) Call GetLiveUnits; lbClear 21004; {lbAdd[21004,Format["(%1) %2",GetText (configFile >> "CfgVehicles" >> (typeOf (vehicle _x)) >> "displayName"),name _x]];_n = _n + 1} forEach _units; _cameraSwap = true; }; //--- Leader commands AIs. if (MenuAction == 102) then { MenuAction = -1; _currentUnit = (_units select (lbCurSel 21004)) Call GetUnitVehicle; _cameraSwap = true; }; //--- Camera Modes if (MenuAction == 103) then { MenuAction = -1; _currentMode = (_cameraModes select (lbCurSel 21006)); _cameraSwap = true; }; if !(alive _currentUnit) then { _currentUnit = (player) Call GetUnitVehicle; _cameraSwap = true; }; //--- Update the Camera. if (_cameraSwap) then { ctrlMapAnimClear _map; _map ctrlMapAnimAdd [1,.25,getPos _currentUnit]; ctrlMapAnimCommit _map; _currentUnit switchCamera _currentMode; }; }; closeDialog 0; ((player) Call GetUnitVehicle) switchCamera _currentMode;scriptName "Client\GUI\GUI_RespawnMenu.sqf"; uiNamespace setVariable ["wfbe_display_respawn", _this select 0]; //--- Focus on the player death location. ((uiNamespace getVariable "wfbe_display_respawn") displayCtrl 511001) ctrlMapAnimAdd [0, .095, WFBE_DeathLocation]; ctrlMapAnimCommit ((uiNamespace getVariable "wfbe_display_respawn") displayCtrl 511001); //--- Recall the last gear mode. ctrlSetText [511004, if (WFBE_RespawnDefaultGear) then {localize "STR_WF_RESPAWN_GearDefault"} else {localize "STR_WF_RESPAWN_GearCurrent"}]; //--- Register the UI (if needed). if (isNil 'WFBE_RespawnTime') then { WFBE_RespawnTime = missionNamespace getVariable "WFBE_C_RESPAWN_DELAY"; [] Spawn { while {WFBE_RespawnTime > 0} do { sleep 1; WFBE_RespawnTime = WFBE_RespawnTime - 1; }; }; }; _spawn_time = -1;_spawn_last_get = 0; _spawn_at = objNull;_spawn_at_current = objNull; _spawn_locations = [];_spawn_locations_last = [];_spawn_markers = []; WFBE_MenuAction = -1;mouseButtonDown = -1;mouseButtonUp = -1; //--- Start the tracker. WFBE_MarkerTracking = objNull; [] Spawn WFBE_CL_FNC_UI_Respawn_Selector; while {WFBE_RespawnTime > 0 && dialog && alive player} do { //--- Toggle default gear. if (WFBE_MenuAction == 1) then { WFBE_MenuAction = -1; WFBE_RespawnDefaultGear = if (WFBE_RespawnDefaultGear) then {false} else {true}; ctrlSetText [511004, if (WFBE_RespawnDefaultGear) then {localize "STR_WF_RESPAWN_GearDefault"} else {localize "STR_WF_RESPAWN_GearCurrent"}]; }; //--- Refresh all if (time - _spawn_last_get > 1) then { _spawn_last_get = time; //--- Return the available spawn locations _spawn_locations = [sideJoined, WFBE_DeathLocation] Call GetRespawnAvailable; //---No spawn available at frist? get one! if (isNull _spawn_at_current) then { _spawn_at_current = [WFBE_DeathLocation, _spawn_locations] Call WFBE_CO_FNC_GetClosestEntity; }; //--- Remove some old spawn location if needed. _found = false; { if !(_x in _spawn_locations) then { _marker_id = _x getVariable 'wfbe_respawn_marker'; _spawn_markers = _spawn_markers - [_marker_id]; deleteMarkerLocal _marker_id; _x setVariable ['wfbe_respawn_marker', nil]; if (_x == _spawn_at_current && !_found) then { _found = true; _spawn_at_current = [WFBE_DeathLocation, _spawn_locations] Call WFBE_CO_FNC_GetClosestEntity; }; }; } forEach _spawn_locations_last; //--- Add markers to the spawn if needed. { if !(_x in _spawn_locations_last) then { _marker = createMarkerLocal [Format ["wfbe_cli_respawn_m%1", unitMarker], getPos _x]; unitMarker = unitMarker + 1; [_spawn_markers, _marker] Call WFBE_CO_FNC_ArrayPush; _marker setMarkerTypeLocal "Select"; _marker setMarkerColorLocal "ColorYellow"; _marker setMarkerSizeLocal [1,1]; _x setVariable ['wfbe_respawn_marker', _marker]; } else { _marker_id = _x getVariable 'wfbe_respawn_marker'; if (getMarkerPos _marker_id distance _x > 1) then {_marker_id setMarkerPosLocal (getPos _x)}; }; } forEach _spawn_locations; _spawn_locations_last = _spawn_locations; }; //--- Update timer. if (_spawn_time != WFBE_RespawnTime) then { _spawn_time = WFBE_RespawnTime; ((uiNamespace getVariable "wfbe_display_respawn") displayCtrl 511002) ctrlSetStructuredText parseText Format[localize "STR_WF_RESPAWN_Status", WFBE_RespawnTime]; }; //--- Update spawn location. if (_spawn_at != _spawn_at_current) then { _spawn_at = _spawn_at_current; _spawn_label = getText(configFile >> 'CfgVehicles' >> typeOf _spawn_at >> 'displayname'); ((uiNamespace getVariable "wfbe_display_respawn") displayCtrl 511003) ctrlSetStructuredText parseText Format[localize "STR_WF_RESPAWN_Status_AT", _spawn_label]; WFBE_MarkerTracking = _spawn_at; }; //--- A Minimap click has been performed. if (mouseButtonDown == 0 && mouseButtonUp == 0) then { mouseButtonDown = -1; mouseButtonUp = -1; //--- Attempt to get the nearest respawn of the click. _clicked_at = ((uiNamespace getVariable "wfbe_display_respawn") displayCtrl 511001) ctrlMapScreenToWorld [mouseX, mouseY]; _nearest = [_clicked_at, _spawn_locations] Call WFBE_CO_FNC_GetClosestEntity; if (_nearest distance _clicked_at < 500) then {_spawn_at_current = _nearest}; }; sleep .01; }; //--- Process if alive. if (alive player) then { //--- Exit mode. if (WFBE_RespawnTime > 0) then { //--- Premature exit. (_spawn_at_current) Spawn { sleep 1; if (WFBE_RespawnTime > 0) then { createDialog "WFBE_RespawnMenu"; } else { //--- Normal exit. WFBE_DeathLocation = nil; WFBE_RespawnTime = nil; //--- Execute actions on respawn. [player,_this] Call OnRespawnHandler; //--- Destroy the camera. if !(isNil 'WFBE_DeathCamera') then { WFBE_DeathCamera cameraEffect ["TERMINATE", "BACK"]; camDestroy WFBE_DeathCamera; }; //--- Remove PP FX. "dynamicBlur" ppEffectEnable false; "colorCorrections" ppEffectEnable false; //--- Fade out. titleCut["","BLACK IN",1]; //--- Reload the overlay if enabled. [currentFX] Spawn FX; }; }; } else { //--- Normal exit. WFBE_DeathLocation = nil; WFBE_RespawnTime = nil; //--- Execute actions on respawn. [player,_spawn_at_current] Call OnRespawnHandler; //--- Destroy the camera. if !(isNil 'WFBE_DeathCamera') then { WFBE_DeathCamera cameraEffect ["TERMINATE", "BACK"]; camDestroy WFBE_DeathCamera; }; //--- Remove PP FX. "dynamicBlur" ppEffectEnable false; "colorCorrections" ppEffectEnable false; //--- Fade out. titleCut["","BLACK IN",1]; //--- Reload the overlay if enabled. [currentFX] Spawn FX; }; } else { //--- Died while respawning. WFBE_DeathLocation = nil; WFBE_RespawnTime = nil; //--- Destroy the camera. if !(isNil 'WFBE_DeathCamera') then { WFBE_DeathCamera cameraEffect ["TERMINATE", "BACK"]; camDestroy WFBE_DeathCamera; }; //--- Remove PP FX. "dynamicBlur" ppEffectEnable false; "colorCorrections" ppEffectEnable false; //--- Reload the overlay if enabled. [currentFX] Spawn FX; }; WFBE_MarkerTracking = nil; {deleteMarkerLocal _x} forEach _spawn_markers; //--- Close dialog if opened. if (dialog) then {closeDialog 0}; //--- Release the UI. uiNamespace setVariable ["wfbe_display_respawn", nil];["currentCutDisplay", _this Select 0] call BIS_FNC_GUIset;scriptName "Client\GUI\GUI_TransferMenu.sqf"; //--- Register the UI. uiNamespace setVariable ["wfbe_display_transfer", _this select 0]; { _name_leader = if (isNull leader _x) then {"No leader"} else {name leader _x}; lnbAddRow[505001, [Format ["$%1.",_x Call WFBE_CO_FNC_GetTeamFunds], _name_leader]]; } forEach WFBE_Client_Teams; _funds_last = -1; _last_update = time; _update_slider = true; WFBE_MenuAction = -1; while {alive player && dialog} do { if (WFBE_MenuAction == 2) then {WFBE_MenuAction = -1; _update_slider = true}; _funds = Call WFBE_CL_FNC_GetClientFunds; if (time - _last_update > 1) then { _last_update = time; for '_i' from 0 to WFBE_Client_Teams_Count-1 do { _funds_team = (WFBE_Client_Teams select _i) Call WFBE_CO_FNC_GetTeamFunds; _name_leader = if (isNull(leader(WFBE_Client_Teams select _i))) then {"No leader"} else {name(leader(WFBE_Client_Teams select _i))}; if ((((uiNamespace getVariable "wfbe_display_transfer") displayCtrl 505001) lnbText [_i, 0]) != Format["$%1.",_funds_team]) then {lnbSetText [505001, [_i, 0], Format ["$%1.",_funds_team]]}; if ((((uiNamespace getVariable "wfbe_display_transfer") displayCtrl 505001) lnbText [_i, 1]) != _name_leader) then {lnbSetText [505001, [_i, 1], _name_leader]}; }; //reload if everyone funds is different, reload on timer or fund transfer. }; if (_update_slider) then { _update_slider = false; ctrlSetText[505003, str (floor (sliderPosition 505002))]; }; if (WFBE_MenuAction == 1) then { WFBE_MenuAction = -1; _ui_lnb_currow = lnbCurSelRow 505001; _funds_transfering = floor parseNumber(ctrlText 505003); _cando = if (_funds_transfering > 0 && _funds_transfering <= _funds) then {true} else {false}; if (_cando) then { if (_ui_lnb_currow != -1) then { _selected = WFBE_Client_Teams select _ui_lnb_currow; if !(isNull leader _selected) then { if (_selected != group player) then { hint parseText format [localize "STR_WF_INFO_Funds_Sent", _funds_transfering, name leader _selected]; -(_funds_transfering) Call WFBE_CL_FNC_ChangeClientFunds; [_selected, _funds_transfering] Call WFBE_CO_FNC_ChangeTeamFunds; if (isPlayer leader _selected) then { // if (WF_A2_Vanilla) then { [getPlayerUID(leader _selected), "LocalizeMessage",['FundsTransfer',_funds_transfering,name player]] Call WFBE_CO_FNC_SendToClients; // } else { // [leader _selected, "LocalizeMessage", ['FundsTransfer', _funds_transfering, name player]] Call WFBE_CO_FNC_SendToClient; // }; }; _funds = Call WFBE_CL_FNC_GetClientFunds; _last_update = -1; } else { hint parseText localize "STR_WF_INFO_Funds_Self"; }; }; }; } else { _update_slider = true; }; }; if (_funds != _funds_last) then { sliderSetRange[505002, 0, _funds]; ((uiNamespace getVariable "wfbe_display_transfer") displayCtrl 505004) ctrlSetStructuredText (parseText Format [localize "STR_WF_INFO_Funds",_funds]); }; _funds_last = _funds; sleep .01; }; //--- Release the UI. uiNamespace setVariable ["wfbe_display_transfer", nil];scriptName "Client\GUI\GUI_UpgradeMenu.sqf"; //--- Register the UI. uiNamespace setVariable ["wfbe_display_upgrades", _this select 0]; _upgrade_lastsel = uiNamespace getVariable "wfbe_display_upgrades_sel"; if (isNil '_upgrade_lastsel') then {_upgrade_lastsel = 0; uiNamespace setVariable ["wfbe_display_upgrades_sel", 0]}; _currency_system = missionNamespace getVariable "WFBE_C_ECONOMY_CURRENCY_SYSTEM"; _upgrade_enabled = missionNamespace getVariable Format["WFBE_C_UPGRADES_%1_ENABLED",WFBE_Client_SideJoinedText]; _upgrade_costs = missionNamespace getVariable Format["WFBE_C_UPGRADES_%1_COSTS",WFBE_Client_SideJoinedText]; _upgrade_descriptions = missionNamespace getVariable "WFBE_C_UPGRADES_DESCRIPTIONS"; _upgrade_images = missionNamespace getVariable "WFBE_C_UPGRADES_IMAGES"; _upgrade_labels = missionNamespace getVariable "WFBE_C_UPGRADES_LABELS"; _upgrade_levels = missionNamespace getVariable Format["WFBE_C_UPGRADES_%1_LEVELS",WFBE_Client_SideJoinedText]; _upgrade_links = missionNamespace getVariable Format["WFBE_C_UPGRADES_%1_LINKS",WFBE_Client_SideJoinedText]; _upgrade_sorted = missionNamespace getVariable "WFBE_C_UPGRADES_SORTED"; _upgrade_times = missionNamespace getVariable Format["WFBE_C_UPGRADES_%1_TIMES",WFBE_Client_SideJoinedText]; _upgrade_isupgrading = false; _upgrades = (WFBE_Client_SideJoined) call WFBE_CO_FNC_GetSideUpgrades; _i = 0; { if (_upgrade_enabled select _x) then { lnbAddRow [504001, [Format ["%1/%2",_upgrades select _x,_upgrade_levels select _x],_upgrade_labels select _x]]; lnbSetValue [504001, [_i, 0], _x]; _i = _i + 1; }; } forEach _upgrade_sorted; lnbSetCurSelRow[504001, _upgrade_lastsel]; _upgrades_old = _upgrades; _purchase = false; _update_upgrade = true; _update_upgrade_details = true; _update_list = false; _update_upgrade_lastcheck = -1; _player_commander = false; //added-MrNiceGuy if (!isNull(commanderTeam)) then {if (commanderTeam == group player) then {_player_commander = true}}; if !(_player_commander) then {ctrlEnable [504007, false]}; WFBE_MenuAction = -1; while {alive player && dialog} do { if (WFBE_MenuAction == 1) then {WFBE_MenuAction = -1; if (_player_commander) then {_purchase = true}}; if (WFBE_MenuAction == 2) then {WFBE_MenuAction = -1;_update_upgrade = true}; _upgrades = (WFBE_Client_SideJoined) call WFBE_CO_FNC_GetSideUpgrades; if (time - _update_upgrade_lastcheck > 0.5) then { _update_list = false; _update_upgrade_lastcheck = time; for '_i' from 0 to count(_upgrades_old)-1 do {if ((_upgrades_old select _i) != (_upgrades select _i)) exitWith {_update_list = true}}; if (_update_list) then { _update_list = false; for '_i' from 0 to count(_upgrades_old)-1 do {lnbSetText[504001, [_i, 0], Format ["%1/%2",_upgrades select _i,_upgrade_levels select _i]]}; _i = 0; { if (_upgrade_enabled select _x) then { lnbSetText[504001, [_i, 0], Format ["%1/%2",_upgrades select _x,_upgrade_levels select _x]]; _i = _i + 1; }; } forEach _upgrade_sorted; _ui_lnb_sel = lnbCurSelRow(504001); if (_ui_lnb_sel != -1) then {lnbSetCurSelRow[504001, _ui_lnb_sel]}; }; _upgrades_old = _upgrades; }; if (_update_upgrade) then { _update_upgrade = false; _ui_lnb_sel = lnbCurSelRow(504001); if (_ui_lnb_sel != -1) then { _id = lnbValue[504001, [_ui_lnb_sel, 0]]; uiNamespace setVariable ["wfbe_display_upgrades_sel", _ui_lnb_sel]; ctrlSetText[504002, if ((_upgrade_images select _id) != "") then {_upgrade_images select _id} else {""}]; ((uiNamespace getVariable "wfbe_display_upgrades") displayCtrl 504005) ctrlSetStructuredText (parseText (_upgrade_descriptions select _id)); }; _update_upgrade_details = true; }; if (_update_upgrade_details) then { _update_upgrade_details = false; _ui_lnb_sel = lnbCurSelRow(504001); if (_ui_lnb_sel != -1) then { _id = lnbValue[504001, [_ui_lnb_sel, 0]]; _upgrade_current = _upgrades select _id; _funds = call WFBE_CL_FNC_GetClientFunds; _supply = if (_currency_system == 0) then {(WFBE_Client_SideJoined) call WFBE_CO_FNC_GetSideSupply} else {9000000}; _html = ""; _html2 = "Dependencies:

"; if (_upgrade_current < (_upgrade_levels select _id)) then { _upgrade_supply = ((_upgrade_costs select _id) select _upgrade_current) select 0; _upgrade_price = ((_upgrade_costs select _id) select _upgrade_current) select 1; if (_currency_system == 0) then { _html = Format["%1:

Upgrade Level :%2/%3
Needed Funds :%4/%6 $
Needed Supply :%7/%9 S
Needed Time :%10 Seconds
",_upgrade_labels select _id,_upgrade_current, _upgrade_levels select _id,_upgrade_price,if(_funds >= _upgrade_price) then {'#76F563'} else {'#F56363'},_funds,_upgrade_supply,if(_supply >= _upgrade_supply) then {'#76F563'} else {'#F56363'},_supply,(_upgrade_times select _id) select _upgrade_current]; } else { _html = Format["%1:

Upgrade Level :%2/%3
Needed Funds :%4/%6 $

Needed Time :%7 Seconds
",_upgrade_labels select _id,_upgrade_current, _upgrade_levels select _id,_upgrade_price,if(_funds >= _upgrade_price) then {'#76F563'} else {'#F56363'},_funds,(_upgrade_times select _id) select _upgrade_current]; }; _links = (_upgrade_links select _id) select _upgrade_current; if (count _links > 0) then { if (typeName (_links select 0) == "ARRAY") then { _count = count(_links); for '_i' from 0 to _count-1 do { _coma = if (_i+1 < _count) then {", "} else {""}; _clink = _links select _i; _linkto = _upgrades select (_clink select 0); _html2 = _html2 + Format ["%2 %3%4",if (_linkto >= (_clink select 1)) then {'#76F563'} else {'#F56363'},_upgrade_labels select (_clink select 0), _clink select 1,_coma]; }; } else { _linkto = _upgrades select (_links select 0); if (_linkto >= (_links select 1)) then {_html2 = _html2 + "All dependencies are met"} else {_html2 = _html2 + Format ["%1 %2",_upgrade_labels select (_links select 0), _links select 1]}; }; } else { _html2 = _html2 + "None"; }; } else { _html = Format["%1:

The maximum upgrade level has been reached.",_upgrade_labels select _id]; _html2 = _html2 + "None"; }; ((uiNamespace getVariable "wfbe_display_upgrades") displayCtrl 504003) ctrlSetStructuredText (parseText _html); ((uiNamespace getVariable "wfbe_display_upgrades") displayCtrl 504004) ctrlSetStructuredText (parseText _html2); }; }; if (_purchase) then { _purchase = false; _ui_lnb_sel = lnbCurSelRow(504001); if (_ui_lnb_sel != -1) then { _id = lnbValue[504001, [_ui_lnb_sel, 0]]; _upgrade_current = _upgrades select _id; _funds = call WFBE_CL_FNC_GetClientFunds; _supply = if (_currency_system == 0) then {(WFBE_Client_SideJoined) call WFBE_CO_FNC_GetSideSupply} else {9000000}; if !(WFBE_Client_Logic getVariable "wfbe_upgrading") then { if (_upgrade_current < (_upgrade_levels select _id)) then { _upgrade_supply = ((_upgrade_costs select _id) select _upgrade_current) select 0; _upgrade_price = ((_upgrade_costs select _id) select _upgrade_current) select 1; if(_funds >= _upgrade_price && _supply >= _upgrade_supply) then { _links = (_upgrade_links select _id) select _upgrade_current; _link_needed = false; if (count _links > 0) then { if (typeName (_links select 0) == "ARRAY") then { _count = count(_links); for '_i' from 0 to _count-1 do { _clink = _links select _i; _linkto = _upgrades select (_clink select 0); if (_linkto < (_clink select 1)) exitWith {_link_needed = true}; }; } else { _linkto = _upgrades select (_links select 0); if (_linkto < (_links select 1)) exitWith {_link_needed = true}; }; }; if !(_link_needed) then { -(_upgrade_price) Call WFBE_CL_FNC_ChangeClientFunds; [WFBE_Client_SideJoined, -(_upgrade_supply)] Call ChangeSideSupply; //--- todo check conditions., deduce cash etc ["RequestUpgrade", [WFBE_Client_SideJoined, _id, _upgrade_current, true]] call WFBE_CO_FNC_SendToServer; WFBE_Client_Logic setVariable ["wfbe_upgrading", true, true]; //todo spawn local upgrade thread & timer & hint //--- Pure client, spawn an upgrade thread, which is local to the client in case the client tickrate is above the server tickrate. if !(isServer) then { _upgrade_time = (_upgrade_times select _id) select _upgrade_current; [_id, _upgrade_current, _upgrade_time] spawn { sleep (_this select 2); ["RequestSpecial", ["upgrade-sync", WFBE_Client_SideJoined, _this select 0, _this select 1]] Call WFBE_CO_FNC_SendToServer; }; }; hint parseText(Format["Information:

Upgrading %1 to level %2",_upgrade_labels select _id,_upgrade_current + 1]); } else { hint parseText("Information:

One or more dependencies are needed in order to process this upgrade."); }; } else { hint parseText(Format["Information:

There is not enough resources to process this upgrade (Funds or Supply)",_upgrade_labels select _id,_upgrade_current]); }; } else { hint parseText("Information:

The upgrade has reached it's maximum level"); }; } else { hint parseText("Information:

An upgrade is already running"); }; }; }; if ((_upgrade_isupgrading && !(WFBE_Client_Logic getVariable "wfbe_upgrading")) || (!_upgrade_isupgrading && (WFBE_Client_Logic getVariable "wfbe_upgrading"))) then { _upgrade_isupgrading = (WFBE_Client_Logic getVariable "wfbe_upgrading"); _html = if (_upgrade_isupgrading) then {"An upgrade is currently running"} else {""}; ((uiNamespace getVariable "wfbe_display_upgrades") displayCtrl 504006) ctrlSetStructuredText (parseText _html); }; //--- Go back to the main menu. if (WFBE_MenuAction == 1000) exitWith { WFBE_MenuAction = -1; closeDialog 0; createDialog "WF_Menu"; }; sleep .01; }; uiNamespace setVariable ["wfbe_display_upgrades", nil];scriptName "Client\GUI\GUI_VoteMenu.sqf"; //--- Register the UI. uiNamespace setVariable ["wfbe_display_vote", _this select 0]; _u = 1; lnbClear 500100; lnbAddRow[500100, ["AI Commander", "0"]]; lnbSetValue[500100, [0, 0], -1]; for '_i' from 0 to count(WFBE_Client_Teams)-1 do { if (isPlayer leader (WFBE_Client_Teams select _i)) then { lnbAddRow[500100, [name leader (WFBE_Client_Teams select _i), "0"]]; lnbSetValue[500100, [_u, 0], _i]; _u = _u + 1; }; }; WFBE_MenuAction = -1; _update_list = -5; _voteArray = []; while {alive player && dialog} do { _voteTime = WFBE_Client_Logic getVariable "wfbe_votetime"; //--- Exit when the timeout is reached. if (_voteTime < 0) exitWith {closeDialog 0}; for '_i' from 0 to WFBE_Client_Teams_Count do {_voteArray set [_i , 0]}; //--- The client has voted for x. if (WFBE_MenuAction == 1) then { WFBE_MenuAction = -1; _index = lnbValue [500100,[lnbCurSelRow 500100, 0]]; if ((WFBE_Client_Team getVariable "wfbe_vote") != _index) then {WFBE_Client_Team setVariable ["wfbe_vote", _index, true]}; }; //--- Update the votes. _playerCount = 0; { if (isPlayer leader _x) then { _vote = (_x getVariable "wfbe_vote") + 1; _voteArray set [_vote, (_voteArray select _vote) + 1]; _playerCount = _playerCount + 1; }; } forEach WFBE_Client_Teams; _highestId = 0; for '_i' from 0 to WFBE_Client_Teams_Count do {if ((_voteArray select _i) > (_voteArray select _highestId)) then {_highestId = _i}}; //--- Get the most voted person. if (time - _update_list > 1) then { //--- Refresh the list. _update_list = time; _list_present = []; for '_i' from 1 to ((lnbSize 500100) select 0)-1 do { //--- Remove potential non-player controlled slots. _value = lnbValue [500100,[_i, 0]]; _team = WFBE_Client_Teams select _value; if !(isPlayer leader _team) then {lnbDeleteRow [500100, _i]} else {[_list_present, _value] Call WFBE_CO_FNC_ArrayPush}; }; for '_i' from 0 to WFBE_Client_Teams_Count do { //--- Add potential new player controlled slots. _team = WFBE_Client_Teams select _i; if (isPlayer leader _team && !(_i in _list_present)) then { lnbAddRow[500100, [name leader _team, "0"]]; lnbSetValue[500100, [((lnbSize 500100) select 0)-1, 0], _i]; }; }; }; if ((((uiNamespace getVariable "wfbe_display_vote") displayCtrl 500100) lnbText [0, 1]) != str(_voteArray select 0)) then {lnbSetText [500100, [0, 1], str(_voteArray select 0)]}; //--- AI Commander for '_i' from 1 to ((lnbSize 500100) select 0)-1 do { //--- Update the UI list properties (name / votes) for players. _value = lnbValue [500100,[_i, 0]]; _team = WFBE_Client_Teams select _value; if ((((uiNamespace getVariable "wfbe_display_vote") displayCtrl 500100) lnbText [_i, 0]) != name leader _team) then {lnbSetText [500100, [_i, 0], name leader _team]}; if ((((uiNamespace getVariable "wfbe_display_vote") displayCtrl 500100) lnbText [_i, 1]) != str(_voteArray select _value+1)) then {lnbSetText [500100, [_i, 1], str(_voteArray select _value+1)]}; }; //--- Update the text _voted_commander = if ((_voteArray select _highestId) <= (_playerCount/2) || _highestId == 0) then {localize "STR_WF_AI"} else {name leader (WFBE_Client_Teams select _highestId-1)}; ctrlSetText [500101, _voted_commander]; ctrlSetText [500102, Format ["%1",_voteTime]]; sleep 0.05; }; //--- Release the UI. uiNamespace setVariable ["wfbe_display_vote", nil];GGATCGVAGGATGALFGGATSFFO@pw~@@ J9`X:@I$1UU:@I$1UU:@I$1UU:@I$1UU:@I$1UU:@I$1UU:@I$1UU:@I$1UU:@I$1UU:@I$1UU:@I$1UU:@I$1UU:@I$1UU:@I$1UUC)J ;h&h&9X\\\@?$I$B9@?$I$B9@?$I$B9@?$I$B9@?$I$B9@?$I$B9@?$I$B9@?$I$B9@?$I$B9@?$I$B9@?$I$B9@?$I$B9@?$I$B9@?$I$B9:@4@49%%%%;h&h&9\\\\?@B9?@B9?@B9?@B9?@B9?=8B9?@A9?@B9?@B9?@B9?@B9?@B9?@B9?@B9;ɐ ɐ 9%%%%;h&h&9\\\\?@B9?@B9?@B9?@B94?I$IB9nIIAUՌȟq1`9jR`P;`! A %2яGiJX`>`AUUU<˟9% @Wd;RII$YAUUU8I$j uZVp4 0Z.  8@<@&L$9pXVU?5y B9ժ?@B9?@B9?@B9;ɐ ɐ 9%%%%;h&h&9\\\\?@B9?@B9?@B9?=@ A9?@B9?4 B9j:ɗ)`A%  ?7>B`p v6ns9UUUT?@B9?@B9?@B9?@B9;ɐ ɐ 9%%%%;h&h&9\\\\?@B9?@B9?@B9?> A9>I$I9UU-8I\151a9֏ȟ:r=`f1\pO3m۶oR9?@B9?@B9?@B9;ɐ ɐ 9%%%%;h&h&9\\\\?@B9?@B9?@B9=II 9TWUU?@B9?@B96a* $IZ1;x-$9c]U?;9B9?@B9?@B9;ɐ ɐ 9%%%%;h&h&9\\\\?@B9?@B9?@B9?@B9?=B9ꪪ?6/B9?@B9?@B9?@B9?@B9?@B9?@B9?@B9?@B9;ɐ ɐ 9%%%%;h&h&9\\\X?@B9?@B9?@B9?@B9?@B9?@B9?@B9?@B9?@B9?@B9?@B9?@B9?@B9?@B9:@4@49%%%%P`j9X`:I$$ 1UU:I$$ 1UU:I$$ 1UU:I$$ 1UU:I$$ 1UU:I$$ 1UU:I$$ 1UU:I$$ 1UU:I$$ 1UU:I$$ 1UU:I$$ 1UU:I$$ 1UU:I$$ 1UU:I$$ 1UUD@L)J DH}B\VVBI׽BUUUBI׽BUUUBI׽BUUUBI׽BUUUBI׽BUUUBI׽BUUU=Wɑ(B 5AH$H$BTTTT?@B9N?I$I|IJAUUU5AI$_@BUU}x?I$O${AUUUTk?I$IrMkAUUUA?@A9=ɑɑ8BAH$H$BTTTT?@A:@əS<9% G0#:IJ`Xx?`0AWՕ?U#8@@}IJspp@I$}'89UU^\=ɑɑ8BAH$H$BTTTTw?II$sAUG$U')Jr]BlAx\A D0@jR' A 9^W>x$I$ATWUU=ɑɑ8BAH$H$BTTTT?@B9?I$IӜAUUU5EI@(B5 u@(>I${=BUUVX?@B9=ɑɑ8BAH$H$BTTTT?@B9Aj$B%}UK(b0R@cc@OI$<B5UULR` ?I$H$AUUTT=ɑɑ8BAH$H$BTTTT?@B9S?II$RAUU?CC'I$Ar^UU?@B9?9I$UBUUUI?H$I$IJATUUU=ɑɑ8B:z'}BVV\B$׽BUUUB$׽BUUUB$׽BUUUB$׽BUUUB$׽BUUUB$׽BUUU=ɑ((B5 ?i[P׽AWWW?$$I AUUw?$IخsAUU?DIDB?r?H$HsATTTI!hZC/|c$}Rer?IDKD{Ar?H$H$sATTTTBI}R5IX21)@>9U% = `$A XW=X$I$AUUUG6S$IIJ9\G6A$IIJ95=I$A/UUU=PSA Ap%> 9UWX`@;B9@AA:@AA:<ɐ ɐ 9%%%%yBbXVU@7B9>I$IB%U<P'9UVXp@AA:@AA:<ɐ ɐ 9%%%%GI$IiJ9F??)J9=I$95UU=I$B)AUTPA@8 B9j<9C51Ӝ9UUWT@AA:<ɐ ɐ 9%%%%I}95@99\^UU5q9UU>$I$9pWUU@= B9j;`=AU5 =D%z$9bXTW@AA:@AA:<ɐ ɐ 9%%%%Y95UUU=I$B-UU; $9U;v $9U=I$BxUU>Y9\UUU@AA:@AA:@AA:@AA:<ɐ ɐ 9%%%%Wɑ(B 5BH$H$BTTTTA@I$IB9@IıP׽BU-cA=$׽(B^U>`$׽(BWU@I$׽BUWxA@I$I$B9>ɑɑ8BBH$H$BTTTT?I▵B5M@h$IB\Wյ@  r9UkxWAQ@qAU%յAINB'B5W^?M'Sr4BW\Rq>ɑɑ8BBH$H$BTTTT?s8c<ֵBiqSSA91$Bi]U@?A:@AA:@.y$0AsImU?9ֵBiMŹ>ɑɑ8BBH$H$BTTTT>c<1BSSqa@I>0AUya@AA:@AA:@I3r81BUeIq>91*BMI>ɑɑ8BBH$H$BTTTT?)BM5@IN'׽BW\@O>$QBUXcU@I$BU5U@l$IB^W5?GCɑɑ8BBH$H$BTTTTC@I$I$ J9ADKɛ$Bb UBI'uBU^BIT?uBU_>'4|$BpWUC@H$I$ J9>ɑɑ8BEJ$r}BVV\CI$I׽BUUUCI$I׽BUUUC$׽BUUUC$׽BUUUCI$I׽BUUUCI$I׽BUUU>ɑ((B5 @$K$BWWW@$0{AU-@$cb{AUx@DIDB?Շ?KX˺0B6y?f'sBti[Ur?q sBiU@KG]dDA|? JD{AĄ4p?R&׎sBU[ip?ɟsBUi@FTEpD{A?K$KIBWWW@B I"I{A U@/5I"I{A pU?ODI$ BՕ?@eD <8Mk(B'rhC#kMkB*gCrns(Bz맼hCZ8nsB>\RJPZRYXZZYZbJGGATCGVA+GGATCXAMGGATGALFGGATSFFO@@@mcUU Xc{}?/QR@@# ۱m$!UVTUoo ǁ؁]8TTTTI$I$ UUUGٶmP[UU9Oc;kRTR@@@b^nHm} UU-ضmTWUUI$I$ UUUy`۶mbUUU  I$I!UUUI$I$AUUUT m۞9 UUQ 6a{%Օ ۱]E)VTTD I$I!UUUI$"UUuB oU_U ]/&'I>hiJ*&CI j_IbUc -9?}@@@@I$I$UUU!=k n6b%%5U*p۰m۶TTVU z $I$QEUUU mFf۶m<UUU  I$I4!UUUq ն=IK}UX  yҴ}YRmUUmHf}Ub#e]%5U lmۚAaUU I$I$QUUU @I$#AUUfʶm۶pUU `ضmQUUI$I$QUUUpݴm}UUGGATCGVA,GGATCXAMGGATGALFGGATSFFO@@@06D! $uWmI$UmI$UmI$Uf~ U6lXmk-x`@Ho ?@ -ۧ!UU\`Avo#m۾%UU$UU$UU mUU?Fo-p$ӜU5 @T`VU?c[euՁ۴XVVV϶c{eU9?e)@@$I$I$$!UUUT I$I$UUUfmm]UUf$mӜUUf-a<?*UBB{ۇھ VT\Poo p`@vnn%%4@K۵mۊRUTVU vnn#%55U<W̰m@xUU  .(3I,cU39,cUc1Yι*}ڏXPP Fb۶mUUUb۶mUUU&>mȞImN6a۞ ؝`PP v`۶m۷UUUb۶m8*UU 0R@I `@ xo@?4X ۶mjRTVUU  'vb6h۞%U:m[n}%o K'h$}TPPT B6b۶mUUUO@nn#  ?ٞPPpP @I$}UU|m9˾UU@@I$I$UUU)I$BUUDٶ d۞U UGGATCGVAGGATCXAMGGATGALFGGATSFFO@@@em۶aUU%ֶmUUbkm6d'mkUU#mۀUU*@IUUumUUu.(/7<%*0@ mۓ!UUW`;Fb۶mֵ UUUmbmUUAΜc %Kyk! Pt@s@ I$K$AUUVT6bmۺUUU2a _UU ?@$]١U^XX ˇ؏XXXX# ?Y@@@1@$I$1PUUWRmi;=UՕM`?0J$O$e)TVUT.6ovn55?? ppp`D x=۱}<VVTXnn#!55' `ppX_vnn%5%548Pppp.I$If1UUͶcȟl% zُA\XPZci}U5Ӿ PPp`Fn۶m=UUUQ!l۶m]xUUU  zI$IyUUUm۶ؚUUUP FII$ cUUUZ bU UB6J %.?API$I$AUUUT AFf۶mYUUUMT]۱\VTTT fm۶a;yUU1?5{(H$K$1TWVT g{c'Gb %MہVT\\ жa3m UUɱ6hU }كmT\^U  I$IyUUU^I$I$UUUT I$I$ cUUUnu ɝ$UI9˞PP@@ Imc;]U;Խ L]pp@@ 6b۶mۚ5UUU Dlm۞HaUU @I$IU  ۵پUTTP$a;cۙU+ޱM؀m<\PPUm6lFlACAAGGATCGVAGGATCXAMGGATGALFGGATSFFO@@@115m6h01e)s$I$11!21e) 11UZZY 6`11UU`KҶ1E)`Xe11UYee $ 11UUY0`B*1e)  11UUZ11UUe m۴1E)0Mv1E)͐1e)̦11UVVZ5m6h01e)5`$I$11Hl1E)"1յ5%ؗI$L$1UWVT0`2`11ieiD@E9e)ޘJD1E) "[1E)+0l@,1f1j l1e)B 9e)lm1f1 $ Ddž1E)*T11eY(=ͼҧ9e)rF&N$11a 9e) m9e) 1 p1TTT\ۖ- $11iV B1E) *a2,1f1ꘕͶ-1e)6,Æ51e)@löa11ZVYe",dHR1f1ʪ$P@9e)﫞o$!*29e)~4@!(Q1f1AټŦ11ffVem11U%UY$K,11QeϗII1UՕq_?1p@[md1e)0<$A 9e)o`0`1e) @$A11YYH@9e)ꘕذml1e)Xl 11VZ$ D9e)ۘ 9e)檘 @1E) <[Ħ11ZeeiF$11eiܿB1UUUI 1% @I$X1UVX@ pH9e)$$@9D!Ym9e) D$J1E)0- 9e)e`11iUja1f1j@Wl9e)j-(2,1e)H֭ֆ1E) ,-11U1 1U\p@H9e)K똔(@1E) ٶ1e)  @9D! !H9D!ꪪ 1e)@۶e1e)006 m1e)dІ1e) &ah1e) 1-UIJ >iJ\f1@@^Uضٶm1e)fm1e)8@11jZI$11UYزlۖa11VUUeI1E)(Xm1e)0a 1e)@11VZeYem11eYU$(1UU9 /21(ח1 5P1P@IH1E) ȏ1U% _1UX`@$9e)kHI11YdAm11YI$11UZjI$I{1UUUI$I`ֆ1UUUL$MƆ1e) 0&i$1e)I$I$s1UUU1UUU$I"A1f1jI$I$-k1UUU1UUUCa]m1e) 2P@1 %U@??`1x ח@f1U^Pf1UUWTRH9D!:I15% Z@[X̦11eYeYh2m11)eU`$@$9e)ޫڟ)Ч9D!☔$1E) E @9e)޺똔`$D9e)Ö 611Ye 11|1bC1\s5I$I$YΦ15UUVI$1-UU`e)x ՗@^1%1@`pP H 11VUiUN`N11ieY K1f1@ 11Zij6d0 1e)0b`H @1E)80)9D!㪪R$@D31E)0ꘔ$B$H1E)01%I$M$YΦ1UWT1\s5ȗI$I$1UUUT`1UՕ5?u! f1X\VW MH҆1e)N11UiiYRPmۦ11QUU a1e) $(1E) #ņ`ض!1e)  @ 11eiZj $1E)6t 1e) ɑI1U1T\XPȘI$I$1UUU1\s51 Gpe)pX6`1f1˼ Ħ11YYZiF6n궆1E) 11ejB $9e)뿘2l9e){ 69e)jﻘ$#@1E) ۶11U A9e)vX6ll1e)0 C,f1pbC1UU-)% ?iJ`XۗH$I$ֵ1TUUU$@H1E)  IH 11jVYU^d^11eiUðmm1e)" 2(Y1f1hAD;1E)< X 1f1ꪘۆaX1e) : `9e)潗I$I{1UUU1UU1 ?U@1xWۘx$I$ֵ1TUUUlm1e)P9e)sII11i6ni1e)**$11Fejg 7m9E)ðl61e) mR11UVXI 9e) $J(1f1 ֦10:Zz?1xU E1^UU$A)9e)~(A9e)ٶ!0 11Ue5I$I116!Lذmۆ11ne1f1o@fۦ11UUY bۦ11fVUI2Hhۦ1f1mEcۆ1E)( K.mkۆ1E)#IIbۦ11fUUHbۦ11YVUUaD cۆ1e) a$hۦ11fVUUH&Hkۆ1E)#fۦ11iUUi"Ibۆ1E)0rI$I`ۆ115!Lذmۆ1111  a&1f1KIm۰ ֆ1UULI{1UUWTKI1e) LI1f1LI1f1KI1e)(& 1f1App11I1 P'1VVXX` 1f1 X1f1$ 11_,ö 11uL  11Kii }1UUȟ1 ??1p1UUVXl[ 11U[טIA 11u_} $11UL  1f1L)iv1Ups0 1XW%I$M&1UUVXI$11Wɓ<R1UUUL۲-,1UUUPLiJ1UUUėX$I$v1PUUU˘9$I$Ά1UUUII$1%UURfblO1$1W-WIda18 L@5X61PXXTL11^6,1f1ۆl۰a1f1ﮪې 6 1f1磌G8!#1qiMxr<9f1\s5@(B @Lomކ1TWUUL1f1aX-1f1HH$11W^yR1UUU1ť5 B5 `1p\WUA 1e)&`ۦ11UL$1f1L$1f1L۰ ۖ$1UULm$1hUUKO۶m ކ1\UUUB?11UWU „ ۆ11!6l1UՕrP!y<1UWVTrI11]Vm 11wrPh1% p4P31X``ȗI$I$Ɔ1UUUTr۲-۲!1UUUErq1EUUUȗi$I$Ɔ1UUUO!Rfr.2-E9<1I@cPVP11q۶mې$1UUUr^UaX$<11`U!!Gr$<1TUUU@4iۍH`f1]i‚IB2${1UUUԝtPI{1)UU4:69Ά1`\{/Ԯv/1^p GGATCGVA~~~GGATCXAMGGATGALFGGATSFFO@@@115m6h011r$I$11͐d1e) EQ1e)le11UYVf̈́A09e)溕M1e) 1e) $m&9D!)69D!M$a21e) aD1e)0M$Q1e)M2 D1e)L¦11UUVZ5m6h0115`$I$110` 1f1$1E)2 m9e)kkIH9D!I @ 11jj  9e) $I11eZUmHRU11U`m9e) 9e)- 9e){&I%'9e)?^ڪP511He*Y( ҆1E)! "rF&N$11dm1f1껪m[0l11iVYB$HR1f1k￘C 1f1۰aa1e)$PDR1f1H@ 11i PPd9e)ީH 9e)نm011UVÖm-1e)j+M[11VRUi4a,E1f1.ꚙF V1f1Aټ̦11fVVYnF`$1E)a6 1f1jU%IAJ1f1㪘Ŷl0 1e) aض-1e)"%!I 9D!*mB11VRf"@ 1E)"`m11ijfV `1f1ja 11ZfR$J$A1E)00 l9e)gC9e)$ 1E)HLdL†1e)0&〆1e)0@ P`A9e)혔 !H1E).6d11iYغ`9e)ꘕma1e)ö m1e)lm1f16I1f1*$A$9D!* H,9D!ꪘI H1E)JV11VbUI 11ض 1e)d$ ʆ1e)#NN41E)I$n)@1UUI$ zֆ1UUI$P1UU$It1UU_I$$ֆ1UUUߗI$h$1UUVHe)UU6e)UUI$TNކ1UU+-1UUI$N$ֆ1UUWT$H$K1E)AI1E), `11ejAĤЧ9e) F 11۶0l11UY (dI1E)ض Æ!11VYfI$Is1UUUk1UU 01WW!1UU^`D9e)ژ"(@@dC1E)0 $E1f1ƪ , 1e) m1f1꺗`1U՗ p1UUVT 11ZUUYfiᴆ1e)mۀ1e) 1U JU `s={@mkU1W`@ A1E)I1E)K1E)  R1UU#,,1R```l]!MҦ1f1&ih21e)0в1?Mk@I"1U(BURU?P@ h$1ȆUmEֆ1E) VhFfb 1e)`N 1-U.,c} &iJ\I9U@9%{Z 1\UI$1UUr1UU$I$<1UUU,I$1.UUU1`_UUK6 Æa11UYfmMԧ9e)` Nb11YU1f1 I$YΦ1e%UU15 UUOI$ֆ1UUUII$ކ1UUUII$ֆ1UUUdI$1ZUUHH 11Vi @I1E)0 $11ijfY Ȳm11VUI 1E)U*R+411YfZRXla9e)khMƆ1E)$11UUeI$A11UUX9e)ޯ6l11fYm6`11VUi H 11V躭9e)%) 1E) Æmۂ11YVUI J1E) m1e)ӆ1E) 0l1f10Cl11Zlm1e)dL MĆ1e) N^ⴆ1E)ذe11eU2 l11YZI$ 11YeP H, 9e)jj%Ԡ11ZE 9e)kRۨR11ZeZdIB I1E)0 U[I11f%YT$YV1E),"@,I1E) $R1E)((0$9e)r@9e)ꕘL MĆ1e)NPfb 1e)0l1e) [4#9e)m1e)m1e)6lÆl11jYYV9e)ۆ.X7`1e) 4EQC9D!ꢘ`ۆl11VjUVÆ-u1e)#-*UUU11EZ 6`1e)IH)EQ9e) 11jeerII11i5nkA1f1*ڙZ)j%11hijI7m1E) H$I11YRHє9e)&I11iEU11YUÖ ۆ 11YU 11fij(IP1E),01e)[mð 1e)0 -0l11iUYCm1f15I$I115!Lذmۆ11baۦ11UUUDiۦ11UUUa,iۆ1E) bۦ11fUUaa`ۆ1e) `ۦ11VYZU[mfۦ11UVU [fۦ11UjUU $`ۦ11UUhvmcۆ1E)dD$cۆ1e)c6r`ۦ11IiUU@$`ۦ11UUrI$I`ۆ116!Lذmۆ1111  a&11B1e)0LI1f1LI1f1꺪KI1f1LI1f1LI1e) & 11Uu_App11uuu@11_@11}ט I$11wVH@ 11ߵ瘖۶a2`11U_H A 11}uL  11y]L!!yΆ1UUUI$IHYΆ1UUUЗI$IЙΆ1UUUӗI$IB 8Ɔ1UUUI$I" yΆ1UUU yΆ1UUU` ۰e1f1K  1f1L11]}՗1UUI 1UGe)WI?1UUꀘC [a1f1II]1ULm6b61UV\XK) )=1%8VeI$I:1V% c$1U@$1 UL1$C2ֆ1P]UUL11߿_a$I$<1)UUU—$I$1UUU$$I$ކ1UUU ض 11טmCm1f1똖`a11m}L  11WU]L11}U ذl1f1$11ua`11]}ذl11W˰m1f16 1f1B 11}__]&`ۦ11UL$11UL$11eL$11WL$11__UL$11WUB?11w[U „ ۆ11f011u}rI11}wurI11Um 11Uw_riIi<1UU%I)-1UII%ކ1UUPq۰ #1ֆ1UU}Ir ۞1 U61URN}1UUr:c;]1`[UUVP11Wr$11]r$11_Wט`911]_W@I&1UU Ib;׽1UU^u$km1UU4H$6ֆ1UUUu_z;ֵ1UUGGATCGVA~~~GGATCXAMGGATGALFGGATSFFO@@@116m6h011r$I$11ʹȒ1E)#$!1e)0I 11UU$$1e)M!01e)ݵQ1E) $11UUYU1E)𖘶dl11UUV"1e)2 1e)-m11UUUVA11UUVV5m6h0115`$I$11FeEJ9e)X 9e)޾1UUe@1%UUɗp$I$1\WUUPӜf15 M  f1p\WȗI$I1UU5PM HB%bXȘp$I$1\WUU 11fH ħ9e)/י*P41f1*ⓘhIԆ1E)sF&N$11U"9e)ﭘX2%1E)#(1UUU L$Le)1VXVӘIDI$1UM f1p\UǗI$I1UU5PM HB%bXǗp$I$1\WUU6lݰm1e)l01f1J !R1f1>ꪙDU-DF9e)ͦ11TVVVn61E),09e)z&1U%  u@1TTVU@1%   1VX`XJVP11V&iPM HB%bXȗp$I$1\WUU@$11ViBHR[11Zi$$11UiZ !1E)Øa69e)딘mI-Ć1E).iVfk9D!ꪎIɕ<1U55 u@ 1`XV@1%  1`PPX @1V% f1VX`D1$Q9e){"Ib!9e)>P$ 2@1E)0H 1E)&JHI9e)竘6m9e) D!9e)o[ͦ11VYUU,`11UYY@,15UUO1@1`_U՗&L$1% I f1`X&1V% 1%@@1`YUU611Ym 9e)I 11ii` 1f1Haۀm1e),6 Æ-11VYVBY1E)"H@11YZUVNkN笆1E), ۆmX 11UVII$Mkf1U$1_U&1V%  u@ 1`XVU2lɶ$11jVH$@11VYZEH)1f1j0 [1f1@mm1e)0$9e)R%E1f1:[ ٶm1e)I Ħ11ZUZUF&i21e) mX0`1f1)$@9e)~똖,m11ZYUh$J mk U1`XVUH 11jjȏ1U% _1UX`@"@ 9e)z똗H 11Vej 1f1je$1E)#I$I1UUUֆ1UUUH Ħ11YUVY&c&c1e)0Cm؆b1e)0 1f1$IFR9e)@$11ZfU`e1f1"@,1E)P@1 %UӜ@?O`e)x ֗P1UVI$O1UUU`A$(1E) 15% c@J Ɔ1e),e11Ue 1f1j 11jf$%(1E)  1f1ꪘA1E)"۲%K11jZ2HH 1f1*|1bC1\s5 $I$8Ɔ1%UUV1-UU1X ՗@^1%1@`pPD Ć1e) i)Vh1e) 0P @9e)C9e)lٶ11UZU ˶e1f1ꮺd@RDI1E) 01f1j 6,1f1j @f1 %I$M$yΦ1UWT1\s5ȗI$I$1UUUT`1UՕ5U0f1X\VWYŦ11VVUUic11UUea9e)Ȁ9e)w؀am11ffUI 11e1)Q" I1f1˶!m1e) A(9e)? @f15H'X$1T\XPȗI$I$1UUU1\s5Pe) p1`p\ [a1f1`T]ֆ1e)$F$11Ue $11jV" "H1E)d011ZH9e)z` 1f1jI11UIRM(1E) >`1e)C,1pbC1UU- 9% ?iJ`XۗH$I$ֵ1TUUUm9e)d@1e)ifb1e)m`11UYjd61f1꾪 m˒e11fI$@11UVI$11fUU˰,ö11UYI$I{1UUUI$)1UU1 ?U@1xWۗx$I$ֵ1TUUUhʤ(Ƨ9e)ޙ%L29e)sII11ZZVUn&Nba1E)Z) 11di&RA% 9e)H11iA$ 9e)k؀me1f1D9e){ yΆ1 c~?1xU Ef1^UUŐA9D!*@ 1E) `Ȁa11Vjf5I$I115!Lذmۆ11&nd1f1oiۦ11%UUYYfۦ11ffUU,Xbۦ11UU[%`ۦ11eUUڦjۆ1e)0Ö-Ifۦ11UUUHbۦ11iUi6fۆ1E)mӢmkۆ1E)0]tKjۆ1E)02gۦ11V)fUAbۦ11jUrI$I`ۆ115!Lذmۆ1111  a&11B11UUumLIB$1Ɔ1UUSLIB#GU1UU5LIB9r51UU\LIBÈ41UUs\LI11Uw]& 11Uu_App1f1Pʕ)e)@<Lu1oX20 1f1ꫪI11WߘA 11}L  11UuK1f19`` 1E)A 1E)AI1E)IId]e)UE)UXppI$I$,ce)UUUIe)1 ge)XPxДI$Ie)UUUI$I`N`1E)@$I1E)I$1E)о~E)Օ=?B`v؈$1E)I$$1E)@ e)%5?@@@I$I$se)UUU%}e)E4&= ?E)p``ΔP$I$e)PUUU@Ć1E)?>/.b ` 1E)I$Ie)UUU:&Y D! z e)@@I$H$e)UVTT I 1E)IIde)Օ?iJXX 1E)믘;I81E)?ʏe) ?iJ`$A1E)A Ć1E)./?+` 1E)Ԕ1UE) -”O$KB$0e)UUVR@e)55%U@ٔH$I$e)TUUWHI 1E)@E)5% /E)XPpPA 1E)諭 $ $1E) )e)% e)```I$$1E)I 1E)*:??F$F`$1E)쬖 $[m1E)A$N81E)1Ave) ɯe) %@p}E)WVT\@$I1E)D! _^DOe),&'' ?E)Pp``IA1E)I$1E)9e)brby}E)``B•A 1E)Ć1E)?+;.F` 1E)켕  I 1E)A$1E)꿕ȃ>e)͕  e)5`%P%e)XPPPA@$1E)iJ @e)7VWB@1e)UUWTۖId1E)",Cɿe)ɃĔH$I$Qe)TWUU? $1H$I$-ke)TTUVə I$e)%UU e)pzUU@e)5Ue)VTVU@A Ć1E)/*./bb1E)암H I1E)H  1E)I$1E)A A1E)H$H$1E)%e)% UUߦE)UU')Je)WWUؿy e) U˔K$L$Ӝe)VTVU A1E)껿1E)I$I1E) $ 1E)ﮔ A1E):..>` 1E)蕔 @ 1E)ꕔA$ 1E)I$A1E)  1E)ᅰI1E)뾕HH$1E)AA1E)I A1E)﻾@ A1E)ﻯA$1E)I 1E)ﯕH$1E)$$1E)6,&1)mII1E)??bb 1E)켼 1E)꾮땔IA1E)1E)뫕HA$1E) I$1E)H  1E)ꕔH$H 1E)H@1E)$1E)꺕A$$1E)$1E)IH 1E)2 ذ F1!.I$I1E)?.!Lذmۆ11Fb$`ۆ1E) bۆ1E)`ۆ1E) `ۆ1E) Hbۆ1E)A`ۆ1E)A`ۆ1E)bۆ1E) $`ۆ1E)A`ۆ1E) `ۆ1E) H`ۆ1E)A`ۆ1E)nI$I`ۆ1e)?.!Lذmۆ1111  a&1E)@f1e)JIf1D!JI1E)JI1E)JI1E)JI1E)% 1E)@ppf1e)Hf1D! $1E)e)UU%-I$K$}e)UUVT@A$1E)  $1E)J  1E)Jf1D!ɐIUe)UV M'e) V\ "q"( 9ge)x@@%e)UUU I$o21UUYJ$A$e)UUUTJI Re)UUUITE)% :`$4e)XPp`@e)@(B@ޕI$Ye)=UU͕?IJBJز-۲-{e)TUUUJr!e)5UUIPf15e)pPrae)%%k^9@@BÕI$I$f1D!h#,e)ȌJ  1E)J1E)ITE)%% "7e)IIEme)%%%%;Be) 5̔I$N$ue)UWUhx]E)(<Jڢ-آ-e)WWTWJ1E) $Hf1D!$@f1D!$I$e)UUU@e)%UUH$I$nse)TWUU@ f1D!@ 1E).%`ۦ1E)J$f1D!J$1E)J$f1D!J$1E)J$f1D!A?1E) „ ۆ1E) $L$1E)oжmE)UUU5oIue)UUUTTm f1D!oʻE) $@ 1ו$` ֵ@ӖH$K$v1TVVW  MҦ11ZVYU0f`1e)IdI}1U c@ޖII$1UV?E)p`@ $1%UU1VXr]@@1%%%%M$L$b1WVVT9`Cs'1r]OI1UՕ% (%1@pX 15%_R@`pH~IJ1TUUU,LҦ11VUVV^fࡆ1E) ضe11VZe) 1V\P`! ɕE) 5z=,1TP@%!d9e)oɐ 1%%Pq1VVVTƆ1UUȟ1 px$I1TWUՖ؏1 %x$1PXTVeɶX9e)ی؜ͦ11VUUUh V` 1f1AD(9e){ 15UUiJP/G1UVX`ֵ1aUUUd Bɧ9e)f{ 91ԗJ$H$1TTTTCm]1f1:jh$IƆ1\UUɕ 1@&1pX{׾o;(B1VUUU(DB9e) ,LɆ11f f1E)0TZE11iÚmۮ1f1P(@9$&I=؋~1 Kآ-۲-1TVUUK11uu=_9b %'9cw\II1MJ$q1WVTp9bX"4P'1C`P\K  11u]UYK1f1ɑ$I$ކ1UUUX'I$1X^UUɑɕ$<155UJ$J$1TTTU)I$1 eUUH$Imk1TUUUA 1f1 &`ۦ11UՕUK$1f1L$1f1K$1f1K$1f1K$1f1K$11_wU „ ۆ1f1"#92ކ1UUUq$I$ކ1UUWTqIb۶k1UU5Um U1UUUTq<1%ʼn_;S1Sh` ۗHB;/q9c41\RSqq±<1ͅ5җSsDG׽e) (vZ?\iJ/9qC9#;<1qRXTUPQ1UUUqٲyΆ1UUqܲmކ17WUU!II@IJ1TUUU@4!Ii6@׽1UiʄI5B Ɔ1UyCЄq$XƆ1U48H21BC[Uzi/i64A}GGATCGVAGGATCXAMGGATGALFGGATSFFO@@@115m6h01e)r$I$11lYd11UUfiM %1e) $1e)& 1E)0mK`11UUUZMD P11UUUZeȲ 11Iv11M*DB11ee11M!I 11͒ 11L†115m6h01e)5`$I$11[$C%11URZ$)FR)9e):um1e) À 9e)﹙CJ$E1f1j* l11UZ2H!9e)ꙕ" (1f1)$! 1E)#-m1e)  11eji( %Ǧ1f1.ޙT) 11i&R( ҧ9D!rF&N$11D9e)` 1E) Vl9e)jIA 11Ye$II1e) 0 9e)귘 a6,11efiY,!A1E) ERD9e)Aml1e)# I$11UVa6`11ifjil%JG9E)ꞙDR!P9e)AH11VVYV`$b 11Uhm9e)ꯙ$!)I9D!*69e)˲lI 11f)À V 9e)@1U%%%1U1U1UXXXC6a1f1`I@$@1E)80[a1f1ۆ˰1e) %B$1E)"0LѦ11UVXVc$c11U)@9e)~ Â9e){I$IZ1UUUy1UUbȗI$I'1UUUT@@1%%%%1XXXXȗI$I1UUU1UUI$I$Z1UUUT0``9e)阕 ˰9e)11YVYYFh&c11UUDQ@1f1) 6 9e)Џf1% ?(Bp 1%'X1X؟IJ p1TXp`ؐ  11۰al1e)A@Ħ11VZUY^%Fl11JZ 1f1IIs1UUZ Z`I$H$s1UVTU6l@u1e)0 IA 11ZVVUF`F`$11el11VeZ 011옉$I$ކ15UUU1 UZ Z`g1^Up$I$ֆ1\UUUdl11iZZCm 1e) L Ҧ11VUZVf熆1e)[1e)R$J1E)0 I$Iֆ1UUU5,1U Z Z`1U^I$I'ֆ1UUU\ 2l1f1jÖlٖ$11UihƆ1E)b`11UUUH$1f1II$s1UUk Z`O$K$s1UTVU۰aC1e) PL!MƆ1e) b Nb11UM bD1f1.ۖ 11Ui 1 %iJp͐ 1'%X%1X(B  '1`pXT $11eUiV9e)體iEƦ11VVUVi2Fh11UUUe9e)oߙШJ11&eZ1UUU1bUUȘH$I$1TUUU@@1%%%%1XXXXȗɑ$I$1UUU<1UUH$I$Z1TUUUö0d11YY  H 11iVjKĦ11UVUVme11UUeP@@@9e)똖0lۆ11YU @9e)똔" $H1E)ِ`9e)꾽@@1%%%U$1U1U1XXXUrd@1E)8 l6l11ZZUY ؂m11ejVV$!9e)I2H9D!:˼؜̦11UUUVfh&i1e) `11jۆ,d1f1 X9e)޷  I1E)0@6l9e)I)9e) `1f1![t1e) ,@9e)kkꘕ`C: 1e)@$ H9e)ګ$11fY4 9e)뮘@1E)" rII11&e6niA1e),˰%11De&Zim1E) n۰ 1e) @Æm1e)011f 01f1lkm1e)`11f$@H1E) ($X9e)!9e)n 0l01f1HP9e)ˮ5I$I116!Lذmۆ1e)Fn`ۦ11IUUaXhۦ11&UUUA Ifۦ11fVUUD"& hۆ1e) 2!bۆ1e) ! cۆ1e)-4Ybۆ1E)0`iۆ1e)IMjۧ9D!ꪪ˖-fۦ11YUU ÐDbۦ11YUUA2Thۆ1e) R4 bۆ1E)0rI$I`ۦ11jjU5!Lذmۆ1111  a&1f1B11ULI11UݗLI11UuLI11UWLI1e)LI11UU& 11UU_nApp11uu]`m11uwW-0l11ۘ1UU1UUj@۶`11uwH$I1f1ꪺL  1f1K1f1꺪(1UU5I=1Uxȏ)(e)@@1U-1UUV\L  1e)L11uI$1U1 1pP=N$1PPWUK  11wwW}L11UUI~1UX1 ?1pI$%1UWPPL  11{_]}L11}U 15UU?1xUȏe)Ge)@@@$1-U1\VUUL  11}}L11} $11_a1f11UU@1@jUU 6lm11e}}؀mX1f1A 1e)&`ۦ11UL$11וUL$11]UL$1e)L$11UK$11uUC?1f1 „ ۆ1e) !$L$11wrIb۶m]1UUU%rIb۶ ]1UUUXUm 11Ur{۾1U՛B&Br3;c;1UVTWr۾1UO?B&oaBr;c;1WTVUVP11}]_r6a۶$]1%UUUrm۶$]1XUUU`91e)@4i[r]1U tCP]1UVp`X5]1 U4 #6]1`pVUuo|;}1}}GGATCGVAsssGGATCXAMGGATGALFGGATSFFO@@@115m6h011r$I$11-Xe11Uef"U61E)0$11UVVH01e)!Ym11UUVJ1e)M& 1e)0M*I@1e)=4i511UUJ(11UUiUD$1e)ȕ01e)11UUVY5m6h01e)5`$I$11$H9D!$IH1E),@1e) &1e)I11UiaC9e)ۺ,H1E) mEԶ11U 11eeLFH1e)0 DA9e)ź9e)?ߙ(Z) 11Di&j(M ҆1E) "sF&N$11 11fii 11jijCa`11ejZEX9e)`69e)@a1f1@@$ 1E)0*DZ11eiY&-9e) @9e)DȊ%J9e)I A11Uf"ALI1f1*骙-V)Ԩ11eYKͦ11ffiUV4n41E) @ 11ZfȲ%˶$11dZVd)@1E) 1f1نmÀ 11UVH$A$11VVYZI 9e)$11fVٲdI11i9e)昔"J9e)~l 1f1  11e]6l1e)2!MLĆ1e),b 11eHD1f1J6jU11VUQ0 ؂m1e)0 [0`1f1(`X 1f1jlm11ZfVDJdDP1f1%S(I1f1$ሢD9D!*$RH9D!H H11VfV$D@1E) - 1E)ea11UefI Ԧ11ZUZYNd&e011eeU @9e)ꘖ`۶l11ZjUU6d`11jYYjϘI$I$1UUUT I"!@1E)(0[3 9e)l0 11ZU1UUc1UU+31UU$I R1UUWTm(m1e)"E) Q9e)k@Q 9e)ꝯٜ̦11UZVZb F` 11e@I$f1U1UU$1UUf1Xce)UI1U?1UI$f1Q$f1U@B&I$f1 $1W1UN9UW1UUˌ˼̦11YUYY&a1e)2(9e)矺$&9e)_I$I${1UUU1 UUl1UU$1UU1J1V?@@[@1/U@Mhֆ1E)fFh211eUeXmˀd11X& d1E) 8 ma1e)ضXV 9e)޻ A9e)j2Ȓ$(1E)15% }@1UUU9 p1UTXpؗ$I$15UUUI51-UUy1@@bU)Dҧ9D!N6꠆1E) 0H 11VfH @ 11fe 1e)0 H11j$@9e)瘔 H9e)k릘@1% 1@` K9e)@1%U 1@PWU6X0 11j  1f1 $@1E)ȼ<̦11YUUUb11UUi11j@ @11Ze[Ql a1e) I9e)I$1E)0mm11fUfV15UU#1pP]UXm9e)뮞 $ $9e)( @9e)ꘕ[6 1e)0˖a0`1e)  R( YJ9e)Ɍ[Ħ11ZUei&i2.h9D!*"i$I1f1C1I9e){{; [m9e)[ 611Ujm,9e)zm۰ 1e)  ka9e)线6@ 11ZZHr 1f1.(D9e)BI$ 1E)I1E)Ȇa11jVf$R1E)( Ħ11UeUj&㐆1e) 0`ۀ11i 1E)ʀHRA1E)0 h2H1E)* R 9e)@n۰%1e) 𙕌D(1f16 9e)$A9e)HB1f1j"ۀm11V"H H1E)ZE*)11fiQjK ˲,11V%ffMĆ1E)8Nd11iiUŶml1e)[ 01f1RI1f19e)nnlY$11JYV6ma9e) ۶1e)0lC9e)]( 9e)nÐm611UU0C09e)ۘ 11 $H9e)_-61f1ꫪrII11fi6ni9D!*Z)$51f1ꙓGaFm1E)!2V$1e)ȀQHR9e)z鿘+ Æ9e)f ER1E) *À 1f1jضb9e)fH@H1E)  A$1E) ضae1e)0($@1f1 I@9e)5I$I115!Lذmۆ11FN`ۦ11EUUaPbۦ11YUUQ2 aۦ11UUjڶbۆ1e)eIiۦ11feUUdIhۧ9D!Lhۆ1e) YMjۆ1E)@ bۦ11eU"Ckۦ1f1+ `hۆ1e)A6$Kbۦ11fUU)mjۆ1E)0rI$I`ۆ116!Lذmۆ1111  a&1e)B11wٗLI1f1LI11WLI11UgLI11U_LI1e) & 11U_kApp111f1ꪘI$@11w[$$11gטH 11wߘ6`ز1f1ꪘ @11߿L  11UL11]嘗  11u~<',c1UUUT A11}ݘI$IbYΆ1UUUI$I2$1UUURے!a1f1몪L  11}}uL)i1UU1UUU!1UI180Vp:`R9_Lm4@51UPPPL1f1A 1f111ߗ1%?p1PPX_ f1`u1-UUULX6m61X^UUL11}dȀm1f1ꘗA I 11}񗉑$I$}1%UUU1TUUUAA 11]_[ m11L  11vL11^ˆma1f1ꘖ6 a1f1۰` 11w՘0dÀm11wÆ 0 1f1ꘖa`1f1ꪘA 1f1j&`ۦ11UK$1f1꺪L$11V}UL$1f1L$1f1L$1e)B?11WU „ ۆ11f011}rI11u}rI11]}Um 11uriֆ1UUUI$Tr]1UU m<1Ujr۰ I1UUj@r11_}]ԗII$ކ1U_h1VUr6m61CUUUVP11_]r$11Wr$11_`911}]U@I$&ކ1UUU tc}1UU_t&ar&Ӝ1UU4H28Ɔ1WUUu_az;1UUGGATCGVAqqqGGATCXAMGGATGALFGGATSFFO@@@116m6h011r$I$11 Y$11Uf H11UUU0$)1e)&I59e)  I1e)"#11UUU$H41E)=.#11UUM!a11UUV(01e) eۖ 11UUUVm11UUYjL¦11UUVZ6m6h01e)5`$I$11mÀ9e) $9e)Æm6 11YVY6`1e)I 1E)0l9e)ꘗ  11ff0l2 1e) !11ZeHmI$11TUh9e)4IR%ǧ9e)ޘ6 ,1f1ꓘHIֆ1E)rF$N$11`ðl1f1 m9e)0 a11e0l29e)ka 9e)j￷ I11ffUݐm-1e)")JdH 1f1* eE1E)"2D9e)ژ@9e)ꘕ+m[: 1e)M"R1f1.ꪙ`RP1f1*!Ma¦11VUVVV@^b1E)0  11ifm۶l11UUUA$$11ViZ2l[l1e)0 [69e)۶X11UlC69e)۫ŀ Q1E) Â`9e){ꘖdö-11ZYU(& 9e)^蘔$HBA9D!DK1E) Iȧ9e)zvm\͆1e) .i.鐆1e)0DE)R9e)򾘕Ͷ 1e)0$ H9e)9e)R H 1E)0(I1E) )9e)~H H$11eVZ$ # 1E)0`9e)뙖T)Զ11iU6`ؖ9e)4P$EB1f1U%TQ[U11Y H11ZZYZNl$11U(9e):{혗H 11Vfۖm 1e) ٶl11jUUd$A1f1!]n9e)o B"1E),(1E)( 6`1f1R@(9e)ڇ@1UU%I_1UU` 9e)$$H1E) [<˜ͦ11UUYVNN1E)2 ,1f1몪ꙕdH 1e)0( 9e)f $HP Ɇ1E) 0 B(9e)ۻö 1e)]9e)꿘[aÀa1e)0Xm1e)II$11UX&J$1 @I$M$1UUWT2e11feVTƈL҆1e)VbNF1e)A$H9e)ɓ$I c1UUU(1U hZ1WI'1UWi1UUIe)UU)1UUUII1U?1\XPp")J9D!KÜĦ11YUUZF`F$11eeI t9U   @IJ~?)1`UۘIѵ$ֵ1UUImȦ11ZYUZF6n⦦11eI) J1f1j$I${1-UUU嗜$I$yΆ1 UUU% 1UUfP1uy$e)UU$)UU$e)UU^e)ˉ$I$1UUW1xUUUA$A 11YVi$I1@1E)+%h 9e)-a,$†1e)00fle11H@11V(1L1f1jꪙ11TeV@  11ZfjiEc9I$1ssUUHH$11VZ$P$I1E)0$H 11ZVfkI$1 UUH$I$ c1TUUUmú 1e)0 11fE9e)ﮛ0 9e)ꭿm\IƧ9D!n$N61E)IB @9D!؂lXn1e) 06 ða11Uen09e)o 11f  1E)6 À11Y۰`9e)! B 9e)똖-11ZUD 1E)0$I11fV P1f1m1f1)MԆ1E)0 l 11UUUԶ*11UaZ@1E) 06d1f1E7dH1E)0l(HR9D![6`K 1f1A6 1f1 11 "J1f1j@11ZDIDF1f16l 1e)A$I 11Yf$H$11iUVhmƆ1E)^m^ 11eUUbHV9D!Xl9e)nXdI$11UU E I1E)0$P9e) 11ZH$B9D!ʪ$I 1E)ð1f1$JBJ9e)d $11Z 9e)ۀm2`11Vii؆a݆l1e) rII11VVVVe2kA1e)T11iYIm1E) 0 m11fV B$H9D!$(9e)zRJ11idZ0d11Y@$H 11ZUfmUH611V6``11UijfÀ !1f1jI$H1E) +ņ1E)5I$I115!Lذmۆ1e)Fn`ۦ11UUU[!Xbۦ11UUUA-[fۦ11UUUi`ۦ11VUUU"C"ddۦ11UUU ,iۦ11UUUK$ fۦ11iUUUi֦Hcۦ11feUULLhۆ1e)dLbۆ1e)!Lhۆ1e)H6jۆ1E)%fۦ11UUrI$I`ۆ115!Lذmۆ1111 a&11UUյB11u]LI11ߗKI1f1LI11UKI11UחLI11U}u& 11Uw_Bpp11 111f1@m`11}%ˆ1f1aزa11~gða؆e11wחK  11Y}UL11]ِm61f1H$1f1꫘aؐ-1e)C-ˆ 1f1ꮮI$I}1UUUI$I&1UUUXL  11n_uL11e]u1UU%M1UU߆1UUWחI$IHΆ1UUU 915% P89Pp`@L  11_W}L !ކ15%UUf1UmH1I1UI$d ,1 % 9~Ur1UUK"-۲-Q1\_UUL11yuH$I11ڗ $I$XƆ1UUU- 1f1ꫪ$I$}15UUUH$$(B1TUUUA$H11߿L  1e) L11}} $11uW˲6 1e)I$11w}`ـm11m 11 a1f1A 11_u&`ۦ11UL$11}UL$11wUK$11UL$11wUL$11UB?1e) „ ۆ1f1 "$L$11qI11wwrI11}Um 11w}Wrii1UUUI$I}1UUU`<1U*qC;:1UV\Xr!1 UUy$1]U9q$1rYUrPc;c;ֆ1pUUUVP11Wr$11r$11U!II@¦11UW@4!mFAƆ1UUUt͒MDyΆ1UU}BjIކ1uUU4J$6\1`WUUu4L ֵ1UUGGATCGVAGGATCXAMGGATGALFGGATSFFO@@@115m6h011r$I$11$%1e)<̈́!1e)0]-٥9e)"b[1e) $h41E)M$11UU21e) =l -11UUZ0 11UUUZ-ې 11UUUZL 1e)-11UUUf11UUUV5m6h01e)5`$I$11UC`9e)阔PQ9e)mۆ!1e)bEI9D!ú 1e)0 Hl 1f1۶ 1e) [ 11U$)B1f1j ! @9e)똗@ @11iH D'9e)/_(Z 511DY)Z< 9e)rF$N$11H11VI(1E)̘`$9e)H9e)a01f11e)3 9e) $9e)[۶-1e)R*R[I1f1說@@ 9e)-m11YV&J9e)i+u9e)AۼĦ11fVUi b11iUE()1f1b$+ @9e)wjꘔ D9e)$(9e)ﻶz l 11eZad11eVZC-۰1e)a[6`1e)0mUTUZ11YYm 9e)o 9e)kH9e)n1f1L29e)}KmƆ1E)NaFl11iUeYņm 1e) HI1E) !1e)-۶1e)<I"9e)zA(9e)E+m۶11QZUUI H 11Uee`m11iU$)GHH1f1Àm6l1e) (9e)zD@$1E)l1f1 IĦ11VUjj.&d1E)0 :l6 9e)k0ȶm11VUl`11Zif"D*9e)oT$ 11Y*I$@11ZZI$Is1UUUI$I1UUUI$I1UUUI$I41UUUp@,A1E) -1f1*ꪘ$$G1E)8P9e)ޞ IL҆1e) #Ng4^*1E) I1UUI1UUd1UU 1UU$1UU9UP c5O1TI=8e)UXpp!$†1E) )9e)~11YVUZNn`1E)$I$Mk1UUU$I$s1UUU6$I 1UU%1UUe)UU61P(@1U?1UMĦ11UUYZN4Fꦧ9D!H@9e)ꘗH I 11iUi1<?1`H H Ħ11YUYU^4N9e)ﻫ{6  11UiYC 9e)՗I$I$u1UUU@`15Y1`@=M$1pPWUC 11YYVUFfh1e) ða1f1ۺ9e)癖m*DJ1f1ꪘ V1E)2X1 UUUO&dF1UUU!01UUU߶Md1UUU6R1UUU-Yl1UUU%Md1UUUM&1UUUp$I$8Ɔ1\UUU@H$9e)MĤL҆1e) `N`11UeiU $ 11eVIH1E)  @ 1E) @ 9e)jn" H 1E) Cu9e){%@ 9e)멾H 9e)ۆ Xm11UVV1e) )9e)E$ 1E)0$11iZM)H9e)kYIĦ11VUZYn㥆1E)0 Q+Tm1f1꺘RR$ 1E)(0Q9e){6 C 1e) ,1f1$ 11Z 1 )1E) A"9e)n6l 11ZYfla11UffUmV11fUE@ 1E) 0BI81E)0 %Y$11YYV dІ1e)`&cI1e)m9e)eۆe11fVUV  9e)j۾6 9e)~Tj11i$49D!* [`1f1am1e)TV@Y9e)'0˶9e)P e9e)ߘA A$11YfYZ$ $1E).a1e)rII111ka1f1.Ꙗ**RQ(11FeaYPEQ9e)ﺻP H9e)n!eH9e)m 11fjj$I$11YUV A11ii0 9e)kma11VZe A$11eZ9e)`؀e11UjVX%[-11Yi5I$I115!Lذmۆ1e)N`ۆ11Xhۦ11UUUA%Yfۦ11UUI"icۆ1E)3 H$iۆ1e)0ɂmfۦ11UUUE"$cۆ1e)0I `ۦ11jUU `ۦ11ZVUUنmbۦ11VUUUۖe@fۦ11UfUU[dbۦ11eiUUöeKfۆ1e)rI$I`ۆ115!Lذmۆ1111  a&11UUեB1f1꺗LI11_]gLI11UWLI11U}LI11UwטLI11Uw& 11UwoBpp11}ېlˆa1f1箪IA11տ՘۶ 11w}טȀ!a1f1ꘗ 11f՘Cmۀ11]L  11V՗L11wuwۖm 11W]! 11u$OiJ1UUUɗI$IXƆ1UUUXƆ1UUU\ۆd؀-1e)(L  1f1Khhֆ1UUe)UIIMֆ1UU`po9VTLm6[41UUZPL1f1җɑDI$Ά1Uf1 @L@5`6f1PX\WL116 ˶1f1ǀƆ15UUU˗$I$Ά1UUU˗$I$Ά1UUU˗$I$Ά1UUU˗@$I$ֆ1pUUUL  11VUuK1f1뮫 $11uuwW $116lÐa1f1$I11}ߘI$A$11],؆m1f1A 11_wU]&`ۦ11UL$11}[UL$11UL$11UL$11WUL$11UB?11UU „ ۆ1f1 !$L$11U}]ߗrI11_W}rI11WߗVm 11U]rirf1UUI$1UU Ib?1Uzrc;(}1UUV@r!!1UU1UIe)Ur4c;f1@`^UUP11]}}r$11ݘr$11u`911uW_U@4 ɶl1UUU+t˒Mg1UUWt˿6km1 UU4I1UUuߡv;ֆ1UUGGATCGVAGGATCXAMGGATGALFGGATSFFO@@@115m6h011r$I$114H&9D!ͶMA1f1j&d1e)ÕMa1e)0M&P1e)M$1e)0MQ21e)(q.11UULȈ11UUiYa7n11UUfYd[ 11UUU=n n11UUXۜ11UUUV5m6h01e)5`$I$11ma1e)A$1E)+EHI1E)"( @9e)ꘖC1f10`ن11iUCҵ9e){aۆm11fUVX` t9e)A$@ 11YUZj"CJ9D!ꪪ*"J9e)ޙ5RQ11dYY = =҆1E)rF&N$1$!@ A9e)R$ `Ɇ1E)0K$I1f1A" 9e)o $ 11eUf(J1f1PI 9e) )1E)$$11jVU9e)몭۰`1f1ba9e)A’1f1>ꦙFZI1f1*YYĦ11VVVZNal11iUUY HI9e)Ȇ زa11VVe$I1E) Ő,!R9D!* D 9e)okJ۶11iTVU 1f1꺘H  11Vei@!I1E) "A9D!ꪘH 11Vf@@S@H1E)0*2 11e2`1f1jYiĆ1E) Nd!11iiYmI1e)3?aȲa1e)P 1E)09e)Y%ɲe11Ye 9e)纛H*1f1h2l6l1e)Am11iU11iilK 9e)JH9e)oˆm`1f1)F"EV9e)ӞdLΦ11ZVUZmFe11Ue")F(9e)♗ e[%11EYlٶ 11ZU H11eVI$!p1UU 1UUH$1UU 1UU$21UU?1UU٘I$I>1UUU\ذl2 1e) $IIh1f1`9e)ꗙ ̦11YYTefh&&P1e)02 A9e)ۆ0`1e)`m9e)" 1E) {@}1W 1UUxI$I&<1UUU\ !MІ1e)# dN-11i$ 1UU41U/XRИ$I$?1PPPPټ<11VUYU&b1e) 0II15U@e)P?1PPXU˜̦11YfUY&i&$1e) II1.'p1\TR1UUi1UUH1UU 1UU?1UU?1pU}p1PPPXA$I11YUmmĆ1E) nj1E), HI 11Ui1 UZ$1xUԗH$I$U1TUUUB$9e)ۯ H(A9e)$PH9D!lۂ9e)[öe1e) 0 Æ 1f1j1 U? 1UII1TUUU")P1f1 11ZZZV` 11iU,H1E) 0؆1f1$(9e){mۀ11eV0 X11V[+b1e) 0ۀ  9e)`[0d1f1$"4E19D!ʪꙕR($IS9e)>BI1E)d 1f1ۂ  11UU$I(1E)× 11ViVUbF`11eeeömؐm11YUUH@9e)ꘕ `9e)櫦 9e)@1)19D!+ꘖm11VV6,C`1f1꺮$HIA1f1$ B$9e)ۯ[e˲`11Zf,I(1E) À ض`1e) A%@9e)똕l1e) D,Ҥ҆1e)  11UeUUŰml1e)m*11UTeZTT11aiö  9e)$9e)ޘI"9e)jm9e)P EI1E)00% Q(K9e)*ٮ$A1E)""Ɉ9D! 6 1e)ö 11Y-˶ 11fVUrII11^1.A9D!**jU11iiEaDm9E)(@Q1E)0#!I1E)(D 9e)骘A I11Yj0$9e)I 11fF1E) 8 $I1E)/EI )1f1 @9e)뙕eĐ1f1+5I$I116!Lذmۆ1e)b&aۦ11eeUaXhۦ11&UUUAfۦ11dUU0`@fۦ11VUUQ iۆ1e)MHkۦ11jUUdDhۦ11ZUU 6Icۆ1E)-Ifۦ11UUUiҶ bۦ11UUUa hۆ1e)  `ۦ11XjUUm!eۆ1E)rI$I`ۆ115!Lذmۆ1111  a&1e)B11e_wLI11UWLI11WߗKI1f1LI11UwLI1f1& 11UwWApp1E)۰m۶-11w@  11}H 11~uA$11_ 1f10l˶11}L  11}}YWL1f1꫘ز m1e)I$I1UUU%@H1UUU@1UUUI$I91UUUxII11UטL  1f1L!!Ά1UUUI$/1UU@1@?A^Km6h61UVTTLh6h6}1Օ_1V$1U1U11@@Kh6m61TVUUL1f1I$1UUH$I$mk1TUUUI I11՘H$@$11uW@`1%UU1`^UUL  11n}uL11U[  11՟ט6 a1f1몪$I 11w_wl m11] ۰m1f1ꪺ@ A11}B 1e) &`ۦ11]L$11]_UL$11UL$11_UL$1e) L$11_UB?11]U „ ۆ1f1 !$L$1f1rI11UrI11uUm 11u}r۱ ]1UUU ȟ1UT1Ujqc;,1UUx`rXm1 U1UU 1:Ur:c;1`X^UVP11}r$11w_}r$11}ݘ`911W_U@I]1UU G1UU^zI}1YUU4J$61}UUu_x;Ά1UUGGATCGVAGGATCXAMGGATGALFGGATSFFO@@@115m6h011r$I$11`۰-11&i411̀J111UUUMa011UUU% e11UUf $@11UUUYdِe11UUUf6-11UUUV$Hm11a„11 11͒11͆115m6h0115`$I$11nm9e)!D$1E) 0 ذa11eeD1f16 29e)o@1UU5I$L&1UUV\6l 9e)꿙%Y$21f1j$9e)j$HԪ11e4M $Ǧ1f1*ޙ5U%(1f1ⓘH Ԇ11rF&N$11` D9e)I @$11UfZZ a11fYeI11i I 11UetbAe)^?PJ% ?JXp@e)Ae)}X [m1e)006 1f1ð`11ie$A!L 1f1*J*-TE$U1f1 Ħ11UUUVF11UUU dH$1E) ö!ېm11YeU 9e)jP @9e)뙔@ %J9e)*I9p15IJ@(BGe)V\pP"HE1E)0$ +1E)Ș 11e+Ȁ 9e)oHA11EMզ11UUUVF`112֡1e)ð鄔҆1E)> $11ejU $11ieUI|`1U%Y?01pXTW`1 %y@O'1UVXJH9e)H I$11VjVن  11UfE1f1 ֆ1e) nNb11mZ11UFeY$@A1E) ۗI$I׽1UUU51= }G1`XV<1Օ5@p1UUU\a6d1e)0%I1E) Ħ11UUYjNh&11UUUYY9e)?:l`9e)ȏ1 Ӝ`  lE)p^I$I2 ׽1UUUП1% '?1\XpI$Ii׽1UUUA1 _f1`@@@[lٶa1e) 0 ð 11iL 9e)ږ^-11UUI1E) #Z`9e)~f1yU0f1xWUU@15UU,1 5?1`\@1\WUUX`f1-UU~f1@BmU2l 1e):09e)땙MѤ҆1e) Nn1E)ݶ@0`9e)뙕"#)B9e)~I$y4\1UUUqH$ 11VVf-Ҫm%11Eejކ1Օ5@pކ1WVT\0l1e)bٰ 9e)ソ]1UUuMض0 1f1jIH11V`Ҧ1f1n6Fv11UUU 61f1 @@$ħ9e)[1 1WXI$N<1UUWP 15%U1\WU1 5UUp&ܓ?1\XZUI$Il <1UU 1%f1B@@@ð2l1e)[m۰1e)0M$І1e)0n^61E)0-9e)ﯙRI,9e)1-U c x9WB10-Z` 1@xWUlm11iZiU`,1e)miֆ1E)&1e)0$A"H1E)@$ 1E) 0Ȁ1U]q0u15UUW51-UUI$ 1U1U1UI$f1U1xUU`u1\UU՗X1UuMB !H1E)  ؀ll11VZ[ͦ11VfeVNh0c11ee $1E)EۦT11QUY1e)xI$ f1UWr1UUU贗I$I:Mk1UUUxO~Mk1UUU-061UUU+IĦf1U $I$e)-?1@@@@m0 11YVK0 ða11eEH1E) d^ 11UeeUdHVV9e)߿蘔RH1E)(Xކ1 UU,e) } }@??Ee)^'I$<1p^UU$@"1E)Ȁ Ce9e)rII11ZZVUn&NA1e)(*j!11DeRFm1E) Æ ٰ11YÀa 11f$I$1-UUUI1UU1UU?1UUIRN1UUX$I$1xUUUaC11ieY$0$9e)r%"")R1f1J5I$I115!Lذmۆ11f`ۆ11[mXhۆ119`ۦ11UUUafۦ11UUU˲$ fۦ11UUUۂdfۦ11UUU@ bۦ11UUUM bۦ11iUUUM&Ijۆ1E)bۦ11eUUaB2T`ۦ11UU$ i1f1jKaAbۦ11iVUUrI$I`ۆ115!Lذmۆ1e)11  a&11B1e)LI11U_L@$I21UUUL@$1UUUTLI11UWLI11UU& 11UUU^App1f1 $ 11wA$11ח࿿15 ?1\P`˜ -1f1ꘗA@11ߘL  11__K1e)I$I{1UUU1% y'Df1`ؖʃOe) '??1WX`I$I'{1UUUTK  11_WL11UU1%%%u M$1U1+pnG1Tp M$1Up!1XXX]K  1e)L11]uL@1Uu%%P1UUVh9 ]K 9p`cu(1UU 1UYXXK  1f1L1e) @$1%U1-U ZlOZ*z`$1xU/01XWUZL  11L11]@1%%Uj`(BX  9U^11Uy5(B%/1XXVUC 1f1&`ۦ11UUL$11UL I$15UUULжm$1UUULԶm$1UUUK$I$1\UUUB?11WU „ ۆ1f1f011UurIbe1U%rIR۲ ھ1UWTXUm 11Ur{<1U)L1|%1b.rS;3;<1UWTVq 2<1Nmy]15 S]1\:`r%q!<1WTVVVK$Km}1UUrb-.$1xUr.@d$1-zU!!Gr$}1TWUU@4! @yΆ1 t͒MɔVYΆ1WTP`ug 'ߺe)) 4 6ֆ1hp`VuشdKYΆ1iGGATCGVAGGATCXAMGGATGALFGGATSFFO@@@115m6h011r$I$11ݤI49e)뺶11UYZH$1e)0249e) $11UYV]$Ғ9D!:$Y1E)01e) 11UUjm&1E)e[11UfV-(1e)L¦11UUVZ5m6h0115`$I$11H$I$11VYU 11ef)*$%1f1j*I$I1UUȟB l 11eUimC 1e) ?9`I$M'1UUWTEB9e)K@9e)癕4) D'9e)._,,11e&ah Ԇ1E)rF&N$11"H A9D!ꪪ"$D )1E)0  1E) m9e)15%`@H1UUU\ 1UUU50'?1\XPP$ 9e)l1e) "A!lZ1f1*J»,D&*9e)mY<˼Ħ11VUYiD&萆1e)0 11iB,I I1E)"H I1E) Cm1e)0@4(1%%5@ !1PXX\]Ql`9e)oꘕ6`9e)릮 9e)溘[l 1e)0Ĝͦ11VTUVn"Nc1E)0 Ha9e)떙RIQ 29e)| E$D1E)00!K`1f1꾪җII$41UUU iJ %@=J`XҗH$I$41TUUU2l11eYZȰذm11U 11iie m11eUdD֦1f1N.41E)0@9e)/(eۆl1e)0 HR1E)0%H(29e)~Zm+11iIUJėI$I$Q1UUU߀$8ƠPPP?X ×H$I$Q1TUUUض9e)jYml1e)$ 9e)kH$$11VVjZm!1e)+"҆1E)&c 1e)0 A"9e)ka6 1f1jHȦ1f1昗A  11YijjZIMJ11IUP$H9e)?g?YPPPPy$ŐH9D! Ɇ1E) ۲ m1e) 11fm 11eV$@I9e)˼ͦ11UfYU^11eUe6tȶ1e)  -11ZU( )Q1f14IH11f1*jI 1E)4HRl(1f1c@$@$YPPPPY$% !%Q1f1.@$9e) $ 9e)j￘ۀa1e) H@9D!۶!6 11UeU 11ZVUV$F11Ueaۖe1e)3 11je6l۶l11iYUU(H9e)%)@1E) Cl,9e)z?7YPPPPğX)`$9e)(9e)뷘Cmð1e)0IE21E) m 11eVeٖ$Ɇ-11Uhɼ̦11UZZYlFm11UeUۖm %11YA$H1E)Hd1E) öm1e)0AI11YK-I-11VhUjYPPPPȟX@I"1E)Șۺe9e)ꮘۀ`f1e) 8 %(I1E)b I1E)"$E21E)0Ħ11UfUjb&Nh9e)瘔 @d9e)mm11fUV膥 9e)ޫ6`l1e)11iI$I1UUUC?'XPPP? X —I$I$01UUUTH"9e)z")ӊ9e)ܘ $11eV` 1f1j H11eHmԆ1E) eB&c1e)da1f1%*A9e)Êa[ 9e)ߺH41f1!ЗI$I1UUUPJ% iJX`ИI$O$1UUUT$9e)Rڦ-*I11ZUE۰ 0 11@ A11iY(Ć1E) 3b$b$11$DL(1E)0˜@lذ11ZZA 9e)`@-9e)0@$15%% p/e)\XXP CD(9D!겪`$A$A1E)8ۆ- 11UVeٶm 11UUeQ ħ9e)딘NV1E),6tAa1e) #TV11fe$ E9e)ޙIQd(9e)ڗ@1%5 @Ə1\UUUR15UUU?p1PPX\H,ɂe11Tfem˰m11VUȰa9e)鮘ـl@a1f1rII1$!fe2.iA1e)*T11eia6q9D!1f1 me1e) 2ɑI$}1UU9 $1E) H$11feVB`x$I$1TWUU5 9e)öl1e)  11ejj5I$I115!Lذmۆ11bFNa1f1oo[ Xbۦ11UUA%`ۦ11UUMicۆ1E)$ Ihۆ1e)0Kefۦ11eUU%Wiaۆ1E)Ikۆ1E) &$hۆ1e)0mפHjۆ1E)ijۆ1E)# Jhۆ1e)0$Ibۆ1e)rI$I`ۆ115!Lذmۆ1111  a&11B11LI41UUUKIҶC 1UURPKIҶ-1UULI41UUUTLI1f1& 11Uw[{App11u[ 6l1f1IId<1?G1P`1 J$H$<1TTTT 11ٗL  11]w}L11Uݕ,۶m1e)I$I$Mk1UUU`9`1 3$1pRH$I$Mk1TUUU 11wL  11WL11u}՘H$11$A11]ט<<1991RRRRH 11WumߘAI 1f1L  11}uL11]6l11_uט 1f1ꪪ<<1991RRRR6ll1f1ꫮض Ȳm1e)L  11K1f1 `1f1ꪮI$IMk1UUU C1 C"< 1RpO$'Mk1UUUT H11ۘK  1f1L1f16d0 1f1IID<11`P1 K$H$1TTTTI@11uݗA 1E)&`ۦ11UL$11yUL$41UUUK@;m$1PRUUK-bm$1UUL$41TUUUB?11]Z „ ۆ11!$L$11U]r0~˹1UM rs|g1Uqc`Um 11ur11U]@  }1}1PTTTr  11_q11]ݘ }1}1TTTPr  11UP11wuur˿1 MUrg;1`cqU`911_W@4iY%QR1%t?1VXTVtw[71%4" 61VTXVu\j)1AAAAGGATCGVAGGATCXAMGGATGALFGGATSFFO@@@115m6h011r$I$11-2l11UUBYӴ1E)Vm1E)0 11UYV,[m11UUM$ɒ11UUUYi611UU11UUViM2 "1e)0 2 1e)0M C 1e)M(11UUUhü̆115m6h01e)59$I2Ue)UUUI1-18e),TN9X1WxԘI$I$U1UUUTY$d11VjDJ 9e) غa9e)A9e)J$I1E)  9e)ٲ Ð`1f1몪ؒ-˖%11hiYHIԆ1E)rF&N$11 d1% س$O$1XVUUMi1O4O1TTTTP 1%UU'1\p`ØA  11fif+: -9e)ﻮö-Xa1e) l11YZAZ11eeY H$11eZ ,r1UU5SP`1}A 11fVUU^$$9e)|1BbpIжI1UUU 1UUoSm1TUU۶lC1UUU >1 ˀa1f1)D 1E) HJI1E)<6l@ 1e)0ۀ5 1f1zI$I{1UUU@&KD9 &M$Ʀ1A\WUKŦ11ieYfc2iF1e) 4C 1p`B21UUU_eI1UUlAl1UUT$H21UUU1 2611VV6 1f1ز9e)~m1f1ƗI$Iq1UUUI(15 @1XVUU ض 11UVY<˼Ŧ11fUYefk9D!A11 %I$K=1UUVXY>ێ1pp 1TTTTII1UU%,,&1`p\@ 1E)#C$[d11VZll11ZYYI$IYΆ1UUU1% @1PTUUE!9e)o@BH1E) 0IhԆ1E) N$N` 9e)kWԗI$I$U1UUUZ1-՗18 11T,01xWԘH$I$U1TUUU۶a 1e) mӮk91Uu׵ O1 / 1@{l BPC˃J I<1 UqܰQ$1**Ur1`U`911}_W@4( @`BA((Atϒq#LyΆ1UiP''9%#^4 +;6ކ1\\P\uͩ\"ކ1aJGGATCGVAwwwGGATCXAMGGATGALFGGATSFFO@@@115m6h011r$I$11PC1e) M%C&9e)!D1e)͂X9D!-˲m11UUU]M&11UUU]M&11UUU DB&11UUUPa11UUf Kd11UUiiM I1e)=m11UUTL¦11UUUZ6m6h01159$I24E)UUUe)-1 8s1,TN9X1WxԗI$I$U1UUUT 9e)2`Æ!11ViYf öm11fjYUR@$Q1f10,1f1j`!9e)oRH11e1XPA)x5 @1  u@r$1`\UH$I$s1TUUUM M҆1e) bfh21e)0e0l1e)2 >1X牕<1p5X1  U@$1`\UE)-< >1X'I$<1p^UUC0d`11Yij؆a1f1ɜ11ViZV5V1E) Ș @ 11iZf u@r$1`\Ux$I$s1TUUU1 >1X'I$<1p^UUm؆d1e)< u@S e)\Wx$I$s1TUUU e11ZUd1f10 V,9e){EMֆ1E) 8f.`9e)[D dA1E)'O$89 a]qS;c;1XWUUVP11}ur$11Wr$11w_!II@¦11]]U@I'}1UUtc]1UU^`xn}1UU4:$6]1`^UUu?z;8Ɔ1UUGGATCGVAyyyGGATCXAMGGATGALFGGATSFFO@@@115m6h01e)r$I$11[$11Ufeaے-11UUݴmV1E) ͠b+R1e)0A(01e) aK%11UU,Ȇ 11UUYUa %11UUZ,ɰ%11UUZe@m11UUUVeK 11UUUV͒R11UUUXMΦ11UUUZ5m6h01e)59$I24E)UUUI1-1 8s1,T 1WxҗI$I$41UUUT!$@9e)n똕6 ۶!1e)@9e)ںX11ZX0`1f19e)뾙$k Ŧ1E)Ȓ-[6$11diRH ֆ1E)rF$N$11I`15 س$O$1XVUUaIN1_$O{1TTTTP 1%UUh8R1\p`ØIA11YH$11iY"ArԒ9e)>6 1e)0$9e)hVR[)11Zi!)ҧ9e)?jea11Ue< Φ11TeYYFi趦11eU|1Bbp0!1UUUN s1UUO6,1TUUDB 1UUUB)1  a9e)i [11Uضmòa11VUYe(<1UUU5 1Uyېm۰ 11U0d6`11YZi I @9e)ꔙ]$Ч9D!nN!1E)0=1pbBO A1UUUO-ٶ1UU_$ d1UUTO2"C01UUUI%`1 m9e)I!9e)˶l2l11eD!5 _1HpP$I1E)  0 011i@$Iц1E)0MiĆ1E)  11UUeeA11 % 1UUVX(Od1Op2Ox$1TTTTII1UU%p1`p\61f1ӗI$IU1UUU1U5,9`'1\WUUˆ 1f1%@B"H1E)"Cl 9e) Ȍ11ZUQYic1e)0ӘI$I$U1UUUHf1-՘18 11T,01xWӗH$I$U1TUUUنa6l1e)II1< e)p\VWٶ$I11VU؀m1e)00 Ȇ 11V m 11UaM(1f1NbVΩ11UeCaYm1e)0#$@ 9e)曻@ P1f1[m[ 1e)0 (۶9e)H9e)Z1UUU@1% C:Зp1UWT\ $A11eYY1f1 1E) 6 0d11ZY1p@AQGGATCGVAGGATCXAMGGATGALFGGATSFFO@@@115m6h011r$I$11l˂m11UUU -[211UU e[1f1M  1e) $A 11UlY!11UZ1dH1e),!I1e)-&1e) MdH11UUeeeX 11UUUMP1e)Ü11UUUV5m6h0115`$I$11ʧ9e)혖0ؖm11VUėI$IQ1UUU1U M1ӜU?e)&1U^1UUU\$!H9e)o6e9e)ޙ"J$9e)֙jQ11jiaHIֆ1E)rF&N$11"K9e)dm1e)3I$Iކ1UUUPJ%1VxJRA7I$`,1UWX`A$H 11YZVj$!„9e)kיJ1f1*A 11VVYUN`F11H"$9e)硫 11ijI!p15 Q@@1UWTXD 1E) >A$A11YYYیٜͦ11UiVVafh1e)$(99e)_A 11e0@41Pp@@A$11Y$$P9e)Ħ11UYUfnN 1E)"%e9e)o9-b9e)o):?{@O@@1%PWO`PG1(%b1rVUh91wUݘ$$@9e)똔Y%1E) Q]Ҧ1f1nV봆1E) $GB1E)80ؖm۲%11jZ-k1UU?޳s0B\h e)iqȕk1%IH\!)T749c\ pP1%bWUޗx$I$1TUUUhY(1E)"0@" 9e)o`A 9e)꽘$ 11VeAĦ11UZVV$b$11ْeYd11iYH@11VOIJ1UUU}1 z?R$Wχ J$x[ 1pWU—H$I$01TUUU@ 9e) 11fi$A1E)!ö`11jeYeR`ۀ9e)o뿮,9e)zI ͦ11ZYYV`$11UeI"$Y1E) ٗI$I1UU*O?1/u U1X^zHZ1TUUU 0,9e){I`1E)2 11febA1E)"  1f1ÀaX`1f1؆òm1e)9e)-MhLֆ1e) nnV1E)$IR ҆1e)#@..1?\؉/p1ZZXTt9e)k0a1f1j! 9e)n@D H9e) a0 1e) ۀV`9e)똗I $11iYR%Y9e);[2dYd11ZYrII11Vi2Nk11UUUP511He)Yq}iJ1]U1%UU9u 1TWUUð11Vlٶ11YUM+UBV11UR 11ijC 1f1 le9e)ߘ@ll1f1%I1E) 5I$I115!Lذmۆ1e)jFnaۆ11YmXfۦ11UUU!Adi1f1~Y)jۦ11VUUI%fۦ11jUUKlI`ۦ11ZUUòm`ۦ11UUUdfۦ11UjVU"I1 iۆ1e)KMkۆ1E)dLhۆ1e)K6lbۦ11iUU!0I`ۧ9e)jrI$I`ۆ115!Lذmۆ1e)11  a&11B11Uտ]KIҶm 1UUU-KIҶ1UULIҶ l1UUzKIU1UUUTLI11UW& 11Uu_App11յII1U%T??B`_B)J[ؗI$O$ֆ1UUUTL  11}yL1e)@1p1\XPPL  1e)L11}UmЗ IΆ1EŵI%DK1 fuֿ ?1PPPXL  1f1L11}u} `8Ɔ1˲3s9FDl'K~1!^}16I 1z1TVUUL  11__wwL11UUǷmIJ1UU`9Y9򗙽>f1pY8Ɔ1pWUH$I${1TUUU@H11_ݘL  11}vL11]u1 PO9bh`u[(B1VUUU6l1f1ꘖ 0l1f1@$A 11woA 11W]^_&`ۦ11ULжm$1%UUUL$ 1pZUUL$11}uL$1f1뫗L$11o_B?11VWV „ ۆ1f1 9m ֆ1UUrIbJ1U qno}f1UxUm Q1UUUTq[1q r;;1TTTTq!R!1UUĸ q!9ZUr  1TUUUr؂ 1%Ur ڲ$<1XX\Ur$11`911WWW@48?61 - ?1Vp`` h֦1Am4;$6ֆ1pVUUuHğK6)Jai_GGATCGVAGGATCXAMGGATGALFGGATSFFO@@@115m6h011r$I$11A 11UU!I1e) ]5I$9e)M(1E)#T1e)lI$11UUjdS11UU%-[$11UUem41E) ݵM1E)0fhV1E)M1e) #ü11UVUU5m6h0115`$I$11 ` 11jeV4 9e){j&P9D!؀" 9e)nD9e)6l0l11fYYٲ%Ö-11iZi@9e)ꘕ밢Y7,1e)#`ض11jjV@a0 11Ze$Ƨ9e)>_(*R!11eRH Ԇ1E)rF&N$11A,1f1蚘@  11Zi- `1e)€b @A9e)@$A9e)I$11UVC` ,9e)z0d0 11YI$A11UVaزa11jfVeJH1E)  C1l@-9e)~MQ!Ҫ1f1.⪙"d!9e)A@Ħ11VVUV`F11UUe,۲-11ejjI11UH1E) ú ݀ 1e)̘C 9e)瀞+ ,1f1j@A1E)@6ò 11ZY I9e)0l݆9e)ö9e)v$ $11E)ٶ01e) eH9e)?iֆ1E)`N11UUeUl11ZUٰۀm1e)11fI$|9<1UU^p5V`1e)$ P1f1yI$ @<1UUI$I's1UUUT$T1E),B$1E) ,HK1E)ðl6`1e) (I H1E)T(RD 9e)۾+a Ć1e) N&P1e)0C9e)昖l6`11Yjiۀl0l1e) u@O"'@1U\`I$I's1UUUTؿٿ11XI$|9<1UU^p[l`1e)@$11ZYj[uضa1e)0 dIB†1E) À"$+%1E)"0ؼYĦ11UYVYN` 11eeUöX 11YV9e) $11Y1X T|915Vpf1 U@O"'@1U\`I$I's1UUUTl 11Vj!E9e)߫(BKQ9e)ihֆ1E)nhfk1f1tۖ1e) #X0l۶m11YUU!I9e)U@邚?e)^P?E)-\1X 1UUVx $11V")ICR9e)rmE\1E) NN뢆1E)00+mAa1e)#`ۆ-11ieUVa-1f1j U@r1`\1%] >1XP1xVUUR+)V1f1ꋪH$1E) $LҦ11YXZZfh&c21e)0 l1f1@ۀm11VنC 1e) >1X@A=f1p5X1  U@r$)\Ws1\UUU Q(1E) 0`1f1 E$A1E)0 A11VYVV&a6&1f1!Q$M1f1ꪘAm`9e)ꘖ @a1f1ꪺ u@S E)\Wmk1\UUU__1 >1X'I$<1p^UU۶e؀ 1e)06lm1e)@-Àm1e) Q$!1E) 6 9e)j Ħ11YYZinc%꤆1E)06 X6`11ZViHD1f1$IH1E) 'I$<1p^UU mۆ1e) l+n9e) I$<1UUs1\UUUٰ01f1öe 61e)0 H9D!$CQb*1e)0H @$11VfZYH%1E) 0,TLņ1e),Ned11eeUea 9e)箘 ݀m9e)jȶ h`9e)ꘗI$11Uv`9e)ꘖ؆aؖ 11VfV 1f1۰9e)JL*1E)ʘ`l11ijiZ-2`a9e)o C9e)晔$e"І1E)D1f1*a M҆1e) 11UeUP Ya9e)jTM+U11U۲ ٰm11UUA 11`زm1e) D @A9e)k "@D9e)oڻ2b9e)o[!۶m1e)0 0d11jY"%B)Ƨ9e)ޘhl9e)@m 1f1+9e)rII11fi1nkA1f1*ڙ6 (11jU%bZA 1E)@$H11ZVV $9e)ۘH9e)@(1E) Ea9e)혖۰ l11iV AP$I1E)0f9e)ߘ * I1E)ȌH$d1E) 2 9e)j5I$I116!Lذmۆ11b&aۦ11eUUe+`jۦ11UUHgۦ11eUҶhgۆ1E)" !adۆ1e)i6Qjۆ1E)( )kۦ1f1$11h4Qkۆ1E)H`ۦ11ijYU- iۧ9e)Y-Hfۦ11fiU[dbۦ11jUrI$I`ۆ115!Lذmۆ1111  a&11B11U_}LI1f1LI11gULI11UޗKI1f1LI11UW& 11uW_^App11e혗I A$11W_ۘI $11UlÀe11w[֘IH11}ט@$@11؀`C 1f1L  1f1L1e)( 1f1??1UVp .1U 'G1UU\`۶m11Uw`˶e1f1L  11W{UuL11}y]IH$11uWiJ`dR 1WXژI$I'YΆ1UUU\L  1f1L11mA @ 11w_?!J`'&?Jg01XWڗx$I$YΆ1\UUUL  11mou}L11}u  $11w]1`VU1Ut1`\UUl01f1ꮻm`1f1ꪮL  1f1L11՘H @$11}_ߘ[0l1f1ꘗHH 11W}6,۲m1e)-11__0$61f1A 11{]]&`ۦ11}՘K$1f1ژL$1f1L$11WY^L$11}uL$11WW֗B?11U}_W „ ۆ11f011uy}rI11U}rI11Um 11Uwur11חt9ט9>9U\` r  1UUUTr11}}g'(@9ט9 `\Ur  1TUUUVP11}r$11WUur$11ww!II@¦11_UW@I=1UUtcֆ1UUVpq1UU4;$6ֆ1pVUUuoȆ|;1UaaUGGATCGVAnnnGGATCXAMGGATGALFGGATSFFO@@@115m6h011r$I$11 iD1e) 11UUZV]4m11UUefM01e),$]1E)0 01e)͔%٢1E)0mXl11UUeZ$Im11UUjVd1e) Y 11UUV 11UUYT=Φ11UUUY6m6h0115`$I$11ð!ò11eYH$H 11VVi$ 1E)0$C%1E)/A$11Zۆ` 1e) iQl`9e)ꘗ $11eVI(1E) A 11YjÆ l1f1(Iǧ9e)>ߙZ)m!11jiZh І1E) rF&N$11R` 9e)n濘6 0l11VYHB$@1E)0ɰe $11%FUۀ-Cn1e) R9e)j[ 9e)߿@@$9e)rHDI1f1*!SHF1f1*J1E)< m1f1)!J9e)똕P--9e)~<11dVeY`F`11UUee(1U 0'1UW\`dHdP1E)00l9e)A$$11YVZö,6`11YUfiH9e)1 H%F1E)#8Æel11YVZVIP9e)DRd9e)ߘ۰9e)DJ$ 1E)   11fK̦11ieZVN0i1e) @ 1%UUe) 1UVpm[ 1e)0e1e)0R(Z1E) ((1UUU5I$I21UUU σ?(B1UUUT2`ؐ 1e)6 1f1Æa11Yf$$(9e)k{˒ Kd11f%iHԆ1E)&i&fb01e) ۖmm11UUV@ 1%UUe) 1VXT1UU Ix1UR 1\p@`$!RHE1f1*I$$11YfY l11YeV[ ےd11Z%j՗I$9Cu1UUټŦ11VUVfFN11eie6l 1e) R1UUU15 ֵ 9p)1U\ 1?՗ߏp01XTTWX u1UUȲ 1e)0՘9b!u1ɘm611Ue՗)bzu1"M$M†1e)0FF`11Uee1UU51%ns`/1UOX1 I$1`1UU^pBD؆1E)0՗I$Iu1UU-חJ@&1bpX Mk1UU՜^(C=HBIcrX c1UU՘N,B|$U1`XVU̘I$IӜ1UU5՘H@&u1BpX`C-9e)~A A Ħ11VUVU&Ni1e)0aa1f1mٶ11ZVU1%5@1\XPW 69e)j PC9e)昗 $ 11ZeЈ$h 1U՘u$u1_Uϗ$I$1xWUUחI$I1UU%՗`aŒ=u1 Xx$I$1TWUU[a9e) Ć1e) Nb11YU I$)11f1jPA(I9e)!l)1E)"˜`0`11Uii 211j,0l1f1R۶*T11ZUFVdC9e)ǗI$I1UUU-՗Ix`u1U ח$1 xWs1\UUU@ 1E)IeId11U]IՆ1E)Nh2&a1e)IA11UYD"Q1f1ju9e)ژ $11fiZ[-˶m11Zhـ l1f1ꮗ U1Uחn$1Uؗ~$1WUЗX$I$41xWUU0 6 1e)˰aa11efԈDR9e)篿0`ضf1e)8,,҆1e)Nnv1E)dDRѧ9e)bR4#Q9e)޼m1f1Vl61e)0@!1E) Ȇ611VY P 9e)@ A1E) v6 1e)(HI11VUH )1E) b(DI1E)˶[a11ZI0)1f1brII11fi6NkA11UU˖,˰-11e&jDaLM9E)꫘ 0 11e 9e)$IA1E)aXa11feeذa1e)̰$) H1E)d 1f1ꯘȀ`[m1e) 0ۆm1f1AH9e)m6d11ViY5I$I115!Lذmۆ1e)Fn`ۦ11UUUngۦ11%UUU7$iۦ11dUUUd&Dhۦ11eUUUA`ۦ11fUUUikkۦ11UUU@ `ۦ11UUUA&Ibۆ1e)]Kcۆ1e)$Dkۆ1e)H bۦ11UUU`ۦ11VUUU e`ۦ11ZUUUrI$I`ۆ116!Lذmۆ1111  a&11B11UuLI1f1(LI11ULI11UuLI11ULI11U]& 1f1Lhh1UU5I$O']1UUU\@$11{_~؆11WuÆ 1f1Âـm1f10Ca1f1L  11K  1UUU1p %1UUVI 1UU-IR'f1UZIA 11 11{L$C2$C0U1UUUQL 2׽1UUUI`9O>,cN'1X`:I1`iU˗Ib$Z1USXϗGR%cҔf1SRXK3121SRX\Li)15UH]e)%ėI$O$1UUUTl}1UUȗ/;I1 }UїO!,=1%pϗJɖⲔf17Lim1TVUUL11II$1UUH$I$ֆ1TTUU 11}ߗk hҔ1{UїM$1V `΋1r\WUK  11U]L11Uu H 11vwI 11wIDI$mk1UUԗT?I$1^UU{1\UUU 11ߵB 11_uV^&`ۦ11UL$11UL$1f1L$11_]UL$1e)L$11}UB?11}WU „ ۆ1e) lˤu1UUUArI11]rI11uVm 11wr)15 P1F9U.ʗf1VPxmr$C. "01UeDDr<1 =U"ކ1%WVUVӝ 1 qB0 C201bSTUVP11wr I$Z1UUUrH$$01pUUU`911W}_U@4i[VAކ1U_tƒMTrYΆ1UUTuFoֆ1}UU4`-mk1`\UyO,{;yΆ1WUGGATCGVA5GGATCXAMGGATGALFGGATSFFO@@@y8zy8<yƾy8jy8y8Gy8wY8yY7Y8wy8O|y8ky85wy8y8y8=?y8ƙfy8ƪ)Xy8My8kyy8^yƮy8Fijy꺪y8y8fjiy8ƚjVy8=y8nyƪY8y8Ʀ&y8qy8gzy8ƛ_y8{y8yyy8ay8u|y8ƺy87y8ƪYY8y8iViy8y8_~y8y8ƪjyƺy8Y8y8ƥey8y8y8Zy8Y8n_Y8yYy8Ʈy8{y8Z~y8fkm;8Ʈs FƦ1p 8Ƨ9UƆ1UA ^K?8%)Km(B@,Ƨ9X8Ƨ9Uf1U ƁAcY y8爵y8?y8~o6n8@0 _8Ɩ`6ذmYΖ(kY* Fn۶mY8ƾ+Kay8Ư8ƶV+8ƶKYζ m۶mY׽ ky86ny8w_p}ۿ8y8Scavn8ƶ@48Ʈs`0+8U+O%ZU+Oۿ 8 Om#o{8ZP7- >bY8Ʒߞnyƾy8ƅj& 8IJ@+8 ocy8ƪjYS0`Wcm۱}8Ƣ8u7ÿƧ90 y8@$@$8B y8ƾY8ƾ{Wk?a8MkppY8y8ey8ƩYIIyƪ8u`I$Ie)Wp878U`@$@$8%)y8t}p}؏YE) y8Om۶8Mk3vn6n8p8I$I 8Ɔ1y8Ʀiy8jjY8II8Ɩ@@@Grp8Ʀ1SH$I$Yy8ijioXƪ@$@$8Ƨ9oy8t?+ ID׽ ,0y8ƦeJ@$@8E)\8Ƃ I$I8Ƨ9Pc8(BPy8O?y8?8@׽mk_Ϗ׽py8?WI$IyJ+Y sڿۇ8Ɔ1 6n;my8[A` ʶ}ۏYY~Y,c $I$8uP 8{c89Tcm۰8$!%{I$I$y8wK8Ҕ^8Ʀ1B I$IY8nZ8Ҕ0 [? c@ (H$I$y8Ʒ{y8Ʃjsoay8t p?ƂC89U[ 9_68Mk`% 8u8!x[ڰ9xI$8Ƨ9UCm#9-Z sYΖ`Z۶m8Y8꿿y8ƪY8ok@Y8?y8ƾI$y8I$y8ﺽmYζ8Ɩ y8&i y8I$y8iI$y8ƥV?8Ɩ&kH$I$8ƶyƫy8{y8Oy8}y8fjy8y8zy8ƪY7y8ƚiy8Oy8iy8ƨ*y8_ty8ƪy8y8ƫuy8Ƙjy8]1y8}~yƺy8?sy8Ưy8<y8ƪey8jy8y8?Gyy88Y"~5m`Ymcy8]>ocy8뻿8Q`"??A7xF ۟8A 6y8ƪYY8y8iViy8y8_~ @8T@484 8Ɩ'g ۶m8׽6Y8y8ƥey8y8gFnmy8V﮿oy8`vۇ8b &y8Ʈy8{y8Z~8Ɩ@gYΕ% ??ƊR0m۶ 8uy8y8Ư~y8kyƪyƮY8c۶myjj y+)o?Apm۱}8y8?y8~oI 98ƶ0 y88Ɔ1`DAp oy8:8Ʀ1p`y8ݮyy8ƻFÿE) y8ƭmI$I$y8^ogY8ƿk{y8WY8y8U YubI³m8u>(H$I$Y8Ƶᆴy8AFooy88!@@@@Y8y84y8O+?%)y8y8y8ƘBoy8y8Ʀiy8jjB%)0 y8y8{y8fjjY+oy8k8!@@@@y8ny8|^I$K&y8ƽﭷ:E)$<y8y8ƫY8ƫ6n;mY8mMy8O?Mmk۶mYy8yƪy8?:oΏY׽$ ^II8B@@y8Ƨyy8 oFny8uA`$-۱}8yy8y8ƪeZjy8g?Ɔ1y8Ʀffy8ƙZy8u$m[c8ƶ8׽ ?| c(  y8ƶ{y8Ʃj s6n;ay8ƚjdU8U`WÏY6pGI$I$84Y8y8ȏȏy8Ʀ8f1Y8ny8ƊVGI$I8ƶ@WvYΖ$-U@ s۰m8MkY8꿿y8ƪY8oo6by8~{8Z`W׽!'m۰8A y8foy8Ʈ8Ɔ1y8m۶a,8QpW68<  84`?ځ 8Ӝ yƫy8{y8Oy8}y8fj/oiY8g84` ~ ҰPf15Ώ8Ɩ %)Ҷ!Ǝs\ ~Ʈs&g8Ɩ\/´m84.y8y8ƫuy8Ƙjy8]1y8}~yƺy8?sFn[my87by8ƮMy8?uy8jy8M y׽wl8ƶx,۶m8ƶy8~y8Pw}y8Ʀey8y8oy8ޫyƯy8yƻY8gy8^Y8y8ƾy8&&jfy8G y8}9wy8ƪ!iy8y8 YXYXƯm۶aXqgԶm`8ƎsugԶm)8Bm۰8ƊR7y8߿y8y8ƽ%ݶm#F8, ? ,my,o,mxo+8IJp%ݶYΊRy8$ȶm{cy׽jڪ8mk@!mە8Zy8y8!Ͷa۶8.8A@)Ͷ=۱}XHB 6noyp8{c[8{`8iJa*XƆ1* g',8u Qo6ny׽ؿX,c ovny8 }؟8HBYXƫ8oy8Ư8X(B@ y8 ony׽*ۏ}Xƒ۶n#gy8!п8ƪRP@I$I$X4uw6nvny8uw؏8Ɔ1I$IXƶ@!v߿84Bۗس 8 y8گ$ob8@Ձ8ƊR `2{vnA8B 2{YΆ1(6?8Ʋ$ $ˑ XӜ`y8﫪y8zy8EVnmy8my8ƿmy8Ư[;E ۶my׽y8oy8I$IXu@*5yY80*궝c8Ʈs^I$N'X cN8Ҕ 6]=iYZ ad8Q 9jl8Ɔ10 >aYE)&&&&Y7Y7Y7Y7Y7(ȏȏxūY7Y7Y7Y7Y7Y7Y7Y7Y7>YE)&&&&Y7Y7Y7Y7Y7(ȏȏY7Y7Y7Y7Y7Y7Y7Y7Y7Y7>YE)&&&&Y7Y7Y7Y7Y7&ȏȏY7Y7Y7Y7Y7Y7Y7Y7Y7Y7>YE)&&&&Y7Y7Y7Y7Y7"ȏȏY7Y7Y7Y7Y7Y7Y7Y7Y7Y7>YE)&&&&Y7Y7Y7Y7Y7ȏȏY7Y7Y7Y7Y7Y7Y7Y7Y7Y75@Y$!&&&.Y7Y7Y7Y7Y7OI$Y7$`Y7$`Y7$mY7$Y7$Y7 mY7$0`Y7$`Y7$`XU@ \ٶmXZY7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7 Y7Y7{m۶m#Xq@mXXiJ| K׶mXf19Ӷm۶XƊR Y7Y7Y7I$IY7Z6o?X - Xuna9wE89& om۰XmkY7Y7 y׽jXY7Y7&ooXU@ۇ}X9Y7Y7ck;6nX "XƮsP !X cU !X cU!vXZ ׇ}816Y7Y7@@9wY7Y7Y7Y7  YmkY7Y7vn6nY7Y7Y7Y7Y7  YmkY7Y7vn6nY7Y7Y7Y7Y7?YΎsY7Y7?6b۶mY7ImY7 `۶mY7b۶mY7ImY7 l۶mX{Y7I$IY7.m08q g4X,c`I$I$XƮs*a[e;y׽jj}'80 n;Xr]۱XƫZII9wY7Y7XƮsHƶc;aY7nv`Y7nv@bY7.؅mXƮs@ڶgFmXq |B$3,XMk2dȏY77 Xu0&VDX{hhGGATCGVA΂GGATCXAMGGATGALFGGATSFFO@ (*+@ XƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪ$mXƪHIXƪ,m$Xƪ,m$Xƪ,m$Xƪm$Xƪm$Xƪm$Xƪʶm$Xƪʶm$Xƪʶm۶XƪI$IXƪI$IXƪm۶XƪI$IXƪI$IXƪ5m۶šXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪq5Xƪ˶m۶1Xƪ mۀXƪmXƪ(mm۶ؚXƪoXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪ%r?XƪXƪXƪXƪXƪXƪXƪXƪXƪXƪȶmC6b#Xƪ oXƪXƪXƪXƪ/'Xƪ9XƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪGa_XƪXƪXƪXƪXƪXƪXƪXƪXƪXƪ6b#6bXƪ0XƪXƪXƪXƪXƪ< XƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪ1XƪXƪXƪXƪXƪI$IXƪEm۶1Xƪʶm۶%Xƪʶm$Xƪm۶ 0Xƪg{XƪXƪXƪXƪXƪXƪ XƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪךXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪ?ÚXƪXƪXƪXƪXƪoXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪ Xƪ-/\ۚXƪXƪXƪXƪXƪboXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪ?Xƪ ہ}ؚXƪXƪXƪXƪXƪKoƏXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪұM۵ ۚXƪXƪXƪXƪXƪ`@Xƪ AؚXƪFXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪÚXƪ2oHmۚXƪ: ۶mۚXƪXƪXƪXƪXƪ9{ζmۚXƪXƪ oFnXƪXƪXƪXƪXƪ= XƪIaۚXƪIXƪI`ۚXƪn;XƪXƪ$XƪXƪ~Xƪ[XƪXƪXƪXƪXƪXƪXƪXƪXƪc?ÚXƪXƪXƪXƪXƪXƪXƪXƪXƪo6oXƪXƪXƪXƪXƪp@XƪXƪXƪXƪI$I$Xƪ$I$XƪXƪXƪXƪ"o6o#XƪXƪXƪXƪ='?ؚXƪzoXƪXƪXƪ XƪmۚXƪXƪXƪXƪXƪXƪXƪXƪXƪ cmۚXƪo/XƪXƪ Xƪ_\ؚXƪH$I$XƪXƪXƪXƪXƪXƪXƪXƪXƪ`I$I$Xƪ@XƪTDXƪ.? ۚXƪ ۶mۚXƪ66bmۚXƪ XcۚXƪ I ؚXƪ²mۚXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪI$I$Xƪ]`b۶mۚXƪ)۶mۚXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪ@ XƪXƪXƪXƪXƪXƪ)m۶m#Xƪm۶XƪI$IXƪI$IXƪgm۶Xƪ_gm۶XƪSI$IXƪ@Sm۶Xƪ@DXƪXƪXƪXƪXƪnm۶a;Xƪ3mhXƪlXƪ%ڶGXƪXƪXƪXƪXƪXƪXƪXƪ?XƪXƪXƪ(:m۶m#XƪOgm۶$Xƪ5g[12XƪXƪXƪ@XƪXƪXƪXƪXƪXƪXƪXƪeXƪXƪXƪ6ȿXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪ }XƪXƪXƪ,VXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪf?ÚXƪXƪXƪg}σmۚXƪXƪXƪXƪN\Xƪ@/ XƪXƪ7XƪXƪXƪXƪXƪ6_Xƪ8 l۶mۚXƪXƪXƪXƪ8oFnXƪ XƪbïMۚXƪXƪI$I$XƪX$I$XƪXƪFncXƪXƪgۚXƪxXƪ mۚXƪXƪXƪXƪXƪI$I$Xƪ'bKa۶mۚXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪXƪ Xƪ I$IXƪ*mۆXƪ3mHXƪ@IXƪ1@ Xƪ *Xƪն ؏ؚXƪmvoXƪ-Y)XƪXƪXƪXƪXƪXƪrɏڧ}ؚXƪA6ovfÚXƪXƪXƪ%Xƪ_XƪXƪXƪK}ځmۚXƪXƪdۚXƪJ۶mۚXƪ $I$Xƪvo#mۚXƪmۚXƪ>mۚXƪXƪζmXƪ 6Xƪ%XƪךXƪ6oXƪymۚXƪnV`ۚXƪ?mۚXƪ ošXƪ*I͚XƪGGATCGVAGGATGALFGGATSFFO@pw~@@UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"I$IaUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJʏ<UU;|AWUTrm۶؂UUU\UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUvnm$!UU\b UUGUTs'mۅ!UU\NUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUI$I$!UUU6o[UaUuU0bc?UUUXI$I$1UUUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU okۆ1[Uw%U%\UT`mۄJE)UUTDI$I$UUUSUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVnmE)iUU\a-UUwTP%AUU%ݲ}?U_VPDI$I$UUUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUIɕ$!%EU ~aP6ACp˧aUwXC!UUVRUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUo+aۆ1I%UUI$Lb%ABU~ 'C] "6 @ւuXRX m۰$!UUW\UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwI$Ie)UUUI$Ie)UUUT!b4FֵaUU%u(BU "y9`d#)/|PA]TWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDݶc;c Uf4b ނ \)Jpek @0!W\pkm۰UUU\UUUUUUUUUUUUUUUU(a۶m;aUUUSVsA յ 09"() h9^\xxUUUUUUUUUUUUI$I!UUUդI%)U WIh2u U`R"mҔ!Xk\I$N"'1UUW\I$Ib$ UUU]UUUUIXs{ Օ5-4>.U$Ul$UU$qU)H{!^*v"5PUZp{UUUU$I$!UUU!l۶m!zUUUUUUUUUUUUUUU 6b۶m!UUUL`۶m UUUI$cIJ UUZI$I$!UUUWUUUUUUUU9I$iJ5UU| AWZ%I$|={UUWXUUUUI$I!UUUN{A%&h!zb`aI$O$UUUTII$9UUMRnmێsUU`I$qUULaɟ$iJUU@O&R U_m5I$I'AUUUTɗ?IJ5 U`=|!\XUNb:RAU}Ib=0E)aW?@E)GGATCGVAb+%GGATCXAMGGATGALFGGATSFFO@,3):-A.@E) <.I$I-w6b$HwPHu,>t,=s->r,>q ,>p ,>o ,>n ,>m ,>l,>j<>h,>g,=f->d,>c,>b,>`,>_,>^,>],>[,>Z,>Y,>W,>V,>U ,>T",>R#,>Q$,>O%,>N&,>M',>L(,>K*,>I+,=H.=-,>F.,>E/,=D<C1,~B2,>A3,=?'>5 )}> @O'<6&aO(~<6 '>7 Nl;8ضmi4(<@iv:9I$(|KӴa(<v];  7.-w0*,}( *< (> }'> I' ] (> '? @*( $ ' aٰl'>p(I A(?+<۰e۶mKl[ '?* '+۶  m 'ېm'|6 6')[ ۰' (|l(= A(| " Iɶ'#!ِe$";'%# S(~&%P-)? '&H+(' *~)(,*( 0'?+*@\G(|-+۲ (.,˶[(?/-?[(~0._Y'1/  3'~20[a( 31];'~42;['|53ɲ%۰64;)65A|'75ۆ'86 '˖'>87Lh)|98H*<:80`(>;9/`( ;:Id(}:QC  (x,x-P)1]])1)I|}, *I+> P)\] ( Qk(>  S[ɶ) #) $A$(<)(~ l dl l)a(ٶ'|(~,/(Ö'?7ٶ(*I (`( @ ?A(! P)\^)l6'$#+|} )>'&,|\+|] ))*~+* ( OK(.,K#Y)Sِ([ (1/(20Q( ](Y )53I^ l([{(|\\w(75{6( ( (98A^ (;(ː d( (<:w y<I|q*^U$8P9)>l 6  d `(I+|-*$)} ) \(~,!| I-'?K*d( K(+#Qg(~m- )(\)>SO˖(K}e((0`(<!i i(]/[(#!] (|(< %#\* _)/,)<]*<]xN([e -(۶H**]3(~1/?`* (~31Q(>42Q1I*Ym( 64m˲'] (<75؆ml("!' 97+(98@$@(\(9wdٰ)^-)Wٶm y,,  +<}$  /,./,*/*<]* Ra(}P=] (P)|]*0],/K%ې'?@^(_ɐ`( + (,I*,/3 )~!" (d ,*lY( *6* A)/K I(#!] ($"\a)"%$P)^$)|'&A;0+ A*/\7(!/*4/- /*30."<&(<^ )20] K(~31Q(_(!/e '54\o(65A+>76Sm(!5(>97I(\ H)_m*/m ';:_ (<:Y7)<4-/z<,#$'|(eu,,I/+/-- ,* _`)>, !?]k*, oY(> ce )/lI(~ m 6?*|1},/+,Yd۲) )~2!1A (>!0,)<4 Æa(<!?\'"! ])/}m)?!,(<;]*>'&,<3/-*tP*l)~.,P/)>/-g ې)\H@)d)C20G(??31K (!? (_ [(64w,H(|E(6O )!D))|8!? ؂)?؆(_e*? ):\!|'(~6/{,z-,|0ɟɏ',|>>e?(eH*2?.O-?-,O_wI *]a(Ö `)/-A )|$O)ٶe*OI\m(~~*?mٖ 8O )O]$+ -?_6`(K!*(;K)/P) )3\m0 )m d(!|=)<6!/!T)O\Y++OI>/,O//A+< !?-*?ې )>N/-P)|&!? ( 1/? ː)!/(<0\\(?42[(43!<3)>54]A(!/])O (|_`(%97Rɖ+$H) (>;9Q=(?;:@)~<:!q6(|=z|؃'  d-,3O;_._I9/ +!K )"Tm+?A-_*=-OQ[(_mY( h) -)>!!)W)JI+<0*~\!s#a)_d)Z\!#)/Qu(1 +a(" Yٖ*/(#",!?m) ]k<-? ;A*!4*mI*/".+[(=1/l(3H L)>R54!-(N65^H))?ITm(ːdI(> 98!@ (~:9|[(;9K sI(<;:A@)7)Wz|=؛8 <ȿؿ6c-,,\+M0 .-O,?!7(=,"*,o*O$ +_+[+[ (\*X+`!?m)IPg)|Y0_})_(?+`^)k]\(_PK)| 0`(<!?dY(#! )=$"Ö`,_)_]'A,_ 9'*|6/)0 - *]e*O\)_+%1/[`*o\7)L\\(~42 )/!MY*/Kl)#?@*_a(7|(|\\3)?P8*:8]+/])O$ (I (<\ٙ;* 3)/.c,>O\9_58I-,0!o](c-$_:o "ol+o._0O$*I,l*O!3+ 8?QI+/*!s@*/dI(>g )<  \8?H+|2_,_ )|y[ [(!!ɰ+/ ۰+$A(! Y'_eY(<"o)o!?m){%#})/"=3-9/ :0+m+O"C (]u+O*o }!)\)ɖ)|&^e)|C!O!|%(~54PA) 65!<`)>75R#0)/!1W*_!quY(E!O )6``)l(~;: )!<7)z|!/>?72o*$  /- 8_I+]-!+o/_)|7_-_˖-)-/!?)/!1˖l: ,)| !_!w+,!22ٖ-)Q*]!*_m*?K(#_+_m)Z!?!~ *O$I /|+P}+P,? Y*/˶,)|."Oe*oK!,* ]{e)a)31 ^m*Ol)>53][(<_H(75SO6`* (o7[d)<\!=*? (:9\i)!/ O+a ( !Oً=; >=> I2-8 ]} (~ +/l*O-*|\]S+\u. *+_!ol(<3_l*R۰+),|6 (\)<Y*{"Oa)!3Ð)?^*e*O!q-I*!T( %#!q(>&%H)&#= -_ )~],+!0:)<:"O,"=)oېH@)I\A(?020}/ )!6),|#o)|!d )A*876\!(|>!/])Kɐ)sA)*y,>x,=w.=,>v,>u,>t,=s->r,>q ,>p ,>o ,>n ,>m ,=l->k,=i->h,=g->f,>d,>c,>b,>a,>_,>^,>],>[,>Z,>Y,>W,>V,>U ,>S",>R#,>Q$,>O%,>N&,>M',>L),=K->J+,>H,,>G-,>F.,>D/-=0,=C)>B2,~A2,}@ *~?5_($)=6 A=6ؐi(I!Ĥ(<i&)ٖ$ȶ-*d)< 8ömm(<8@J' EEEE em6bdEEw&M$EEu$I$EEs$I$EEq $I$EEo $I$EEm$I$EEj$I$EEh$I$EEf$I$EEc$I$EE`$I$EE^$I$EE[$I$EEY$I$EEV $I$EET"$I$EEQ$$I$EEN'$I$EEL)$I$EEI+$I$EEH-$I$EEE/IEEC2$I$EEA2EE?5ɟEE=6yEE;7d6ۿEE;9HlYmEE<8vB $IEEEE fm6bdEEf&L$EE EE IEE ِ ِ EE ِ ِ EE ِ ِ EE I ٖ EEٖaِmEE IEEinEEEEɐ ɖ EEِmِEEnEEݖ EE!۰ ِEE$!mmmEE&$ɐlɖ EE(&ِ ِ EE*( EE,+ EE/,nnEE1.mmEE31ِ ٖmEE42 EE64`EE86ɐː EE976EE;9IeٖlEE<:ې ɰmEE gm6bdEEf&L$EEI$IEEI$IEEI$I,EE ِ ِ EE ِ ِ EE ِ ِ EE ٖlِmEEI$I$EE EEIɖdEEEEɐ ɐ EEِ ِ EE EE) ݐEE!ې ː EE$!nnEE&$ɖ ɖ EE(&ِ ِ EE*(EE-+ɖ ɖ EE/-I ɖ EE1/ɖmɖ EE30nvEE42۰EE64EE86ɰ ٶ EE98 I EE:9EE<:ImlEE{W&H$EEEEEEEEУ'O$EE ِ ِ EE ِ ِ EE ِ ِ EE ]mEEmٖ EE IEEIlɐ EEEEٖ ɐ EE ِEEnEEِ ٖmEE! ِEE#!ِ EE&$ɐlɐ EE(&ِ ِ EE*( EE,+ EE/-ِlɐlEE1/I ɐEE31ِ ٖ EE43I EE64 ٰEE86ɐ ˶EE97a EE;9I ِdEE<:[d˰ EE{11EEEEEEУ'O$EEI EE ِ ِ EE ِ ِ EE ِ ِ EE EE۰mې EEېEEېEE EEɐ ɐ EEِ ِmEEEEِ ِlEE"liEE$! nEE&$ɐl˖ EE(&ِ ِ EE*(EE,*EE.- EE1.mEE21 EE43 EE64ۖmEE86ِI EE970 ۰aEE;9ɐeۖmEE<:I ˶ EE{1EEEE'I$EE EEIIEE ِ ِ EE ِ ِ EE ِ ِ EE Iɖ EEٰ ۰EE EE ِEEEEɐ ɐlEEِEEIɖlEEِaɖ EE! EE$!YmEE&$ɖ ɖlEE(&ِ ِ EE*(ېEE-*nEE/,ݐEE1/ɐmYlEE30]mnEE43I EE65 IEE86ɰِmEE97EE;9YېEE<:ɰmٶlEE{11EEEEIIEE EEIIEE ِ ِ EE ِ ِ EE ٖ ِ EE ِlImEEېېmEEEEvvEEEEɐ ɖ EEِ EEnEEݖ]mEE"mnEE$!vinEE&$ɐ ɖ EE(&ِ ِ EE*(EE,+ EE/,mmEE1/ɐ ٖ EE31ɐmɖmEE420EE64 EE86ɰm۶dEE97EE:9@EE<:˰mٶmEE{11$EEzI$IEExI$IEEwI$IEEuI$IEEsI$IEEq I$IEEo I$IEEm I$IEEkI$IEEhI$IEEfI$IEEcI$IEEaI$IEE^I$IEE[I$IEEYI$IEEV I$IEES"I$IEEQ$I$IEEN'I$IEEL)I$IEEJ+I$IEEG-I$IEED0I$IEEC2I$IEEA2ɟIEE?5ɟHEE=6 @EE<7vkq QEE:9AA$EE<8 $$EE@Cm۶a#EECF EE>$I$EE= $I$EE=$I$EE<$I$EE;$I$EE;$I$EE;ɟEE:"ɟEE:'ɟEE:+ɝܿEE:/؉ؿEE:3EE:6S1eJEE<9mnnEEDFEE# I?EEI'H$EE EE EE1S1EE11EEEE! ` EE&"1S1EE*'EE.+EE3/1SKEE63EE96EE<9iEE>H$H$EE}EE  EE EE EE EE11SEE EE!  EE%" EE*'EE/+1S1SEE2/)EE63nEE96ِEE;9ٰEE>\ ۰EE>I$IEE>I$IEE= I$IEE=I$IEE<I$IEE<I$IEE;I$IEE;ɟEE;#IIEE:'ɟEE:+ɝ EE:/ EE:3 EE:7ItiEE<9n$EE 6`7EE5 $MEE%ɝܿEE*ɝܿEE/EE(3MEE70S1SEE;7  EE'( )<&(*>%&,$&*"$۰l)<!#Yd)< "*  )< **> 7*|0*<6*~,? +?+,|I*+ +|0 )<ٰm*> +,|H*? + I* , I+~ ,~ SH4'  )=p)=/?I)=\*=] @)=-#)=I l)=-@$)< _6H W< B>7-7 8`%'8 м8K 0 |->9,/<,|;۱ \0:,>/; =<+|;H$H J;-=/: -12~(_ِl'=0,~./'>,.~(}'+,|()+ m(~(]I(>&',%~'$%,}#"3(~ (_۰l(|(~}!'>^Y'='~,=(~~((,~E(,> (}?' +=(~I( $+=( (]H(~ ((, "s@(,=(|(-<چm(,=-ضm(~`(,@(| EEEEEE.m۶a#EE5Fʝ=ۿEE35`۶mۿEE13`۶mۿEE/1`۶mۿEE-/`۶mۿEE+,I`۶mۿEE)+`۶mۿEE&(`۶mۿEE$&`۶mۿEE"#I`۶mۿEE !`۶mۿEE`۶mۿEE`۶mۿEE `۶mۿEE`۶mۿEE`۶mۿEE`۶mۿEE `۶mۿEE`۶mۿEE$I$EE `۶mۿEE `۶mۿEE $I$EE$I$EE$I$EE$I$EE$I$EE$I$EEEEEE0m۶a#EE/F̙=ۿEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE0m۶a#EE0F̙=ۿEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE1m۶a#EE09x0`$EEEE3m۶a#EE<̿͜EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE<z5j$EEEE2m۶a#EE;F&M$EE< EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE;<۰ۿEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE;< ۰ ۿEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE:<۳ EE9:m۶EE79m۶ EE78m۶EE56m۶EE34m۶EE23m۶EE/1m۶ EE-/m۶ EE+-m۶ EE)+m۶EE&(m۶ EE$&m۶ EE"$m۶ EE!m۶ EEm۶ EEm۶EEm۶EEm۶ EEm۶EEm۶ EEm۶EEm۶EE m۶EE m۶EE m۶EE I$IHEEI$IHEEI$I@EEI$IHEEI$IEEI$I EE@EEI "EEHK۶mۿEE `۶mۿEE `۶mۿEE`۶mۿEE`۶mۿEE `۶mۿEE  `۶mۿEE `۶mۿEE `۶mۿEE$I$EE$I$EE$I$EEؖ$I$EE$I$EEI "EE EE:mۀؿEEEEEEEEEEEEEEEEEEEEEEEEEEEE#]$J$EE9I$EE<ضmۿEEEEEEEEEEEEEEEEEEEEEEEEEEEE- ۰EEm۶EEm۶EEm۶EEm۶EEm۶ EEm۶ EEm۶ EE m۶EE m۶ EE m۶EEI$IHEEI$IHEEI$IEEI$ImEEI$I EE I1bĿEE `۶ۿEE `۶mۿEE $I$EE$I$EE$I$EE$I$EE$I$EE0$NBۿEE &m۶ EE m۶ EE I$IHEEI$IhEEI$IIEEI$IlEEI$I EE@  EE$IiEE$IEEؒ$I-EEGGATCGVAjP*GGATCXAMGGATGALFGGATSFFO@@ E) < < < G<<;I A'|H$H ;>H$@)=A$  < < <I$I'm I'< m1 ^'> _ò-_ ^2'~_^؂']@(}}8==< '>^I'}۰`'<@+['~+? +A$+>I,= [+?,<(->^ ,>'= /+?@$+l'= ~+<) - => |(} -} >' -|-~$'=H+ )@-|'}-|3<)-|3?؆m-|3= 7 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE3m۶a#EE;̿͜EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE2m۶a#EE;pEE; EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEI$IEE 06EE m۶5EEm۶ 1EEm۶$EEI$IEEI$IEEI$IEEm۶EEm۶EEm۶EEm۶EEI$IEEm۶EE m۶EE m۶EE m۶EE m۶EE m۶EE m۶EE I$IHEEI$I@EEI$I@EEI$IEEI$IEEI$IEEI$IIEEI$I`EEI$IEEI$I%EEEEEE@EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEI$IEE9mۀؿEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE9I$EE<ضmۿEEEEEEEEEEEEEEEEEEEEEEEEEEEEI$IEE m۶1EE I$IEE I$IEE I$I@EEI$IEEI$I@EEI$IEEI$IEEI$IIEEI$IIEEI$IIEEI$IlEEI$I`EEI$I EEEE I$IEEI$I$EEEEEEEEEEEEEE06b۶mEE%H$IEEI$IIEEI$IEEI$IEEI$IEEI$ImEEI$I$EE@ m HEEI$IEEI$IlEEI$I$EEGGATCGVAjR1 GGATCXAMGGATGALFGGATSFFO@ !"@ E) G<*m6b$(x)<RI(=,=&.=.I)=$-$@)>",|.=!=> ,= - +=- ,~ ,}A)> , +-~ ,~ ,~ H)> ,}.=,<$*~S'',+>RO)<.|, )<I)~ S?)>`) ,> ~,|0= L)<{N,<+ )=X]m6+>I)@),</<sI%(?H$)| o*H 0(|~s,<Xf(< $H$)=)}IBX'<؂mm',</<$@( I O)=ASH'| d[-'= dI(>  (= ]y (>)=@A( ,|/= \;H ,|.> =? H* ,|.>=>@+>,|/=,>,~\'~,|/= H'= ,|/='>,|?=,,|/= $)~,| >I+ o* 4p$+~A)+s)= *$ )_$)~H*1 +<, _A(|$I)|\u)? ]w(|  a** H' ] @\9 ~ ] H \*1tf  +| * P+<Xl(~-@,+ )( $A*+|!)*<0<QU(<\3)$I*\w+> ) ! +@+> +*<0,| @<* +< ! /+< 2 N@}$ )A] H,,+ 8p(2 (<}*./<+*<]{*<.^,}*<|=,Q * )< ò-H,)])l )/*! k!<#(< -l '/ 'm۲m H ^/ [ O ,| :+ `'~A,-}*? @(> ۆ!7?->!-<I @)|^A)A)ۂ  ?#=/+?  */ *<1 [2,Cm)?Pd)/ I C *}/./)< $ *? Y \ /< > $ 7|0@)H (| I*< ]*= I(=M+*}@H]q*/ +O H:/;}**I+!~[*|/Q<)} */$7O,H1*>@H*|]\!O*|0+^I$ )|2^}$)$O)P)*!_@*?^H*}?+/  S*=@;? A_pH*!/e /1*? A+<\+)< ˂e(]} C)~*\\*/!4, ] .o*| #? o {$ / o} ) H'<؀ز)? (:\!{ ]sI(~!~)< //<@H*o!m@,_,OA:o*<)!\!2* H*H*?!P) 6`,)*s !!A * ?<_+<{ H *,|[ So ? / -,|V* I+)\_ @*?RQ *?(6lm O-_+H+?$7?1/<)|!_*O!?P A*e(]]?)/!)  ]iA,~*|\y\* +<`!~ )|RA+,|RA,*~@*Q,=)<1|_+<|,<]*_A*O~I(|_%X(<#^)|0!?` H(D_{$*<\+"L$+@ No=O*|l  +_ > /H !~ )زm* *_P<*>P@,P!}p*=I+|I0},2? *!A+~P *~`@=._*<#!?|y+?$ +m[e) )!?lض)"}`),3!0 9O  oH [@ 1O {?@ \0QSI(\\*/+?!Z,/* *} -0-=,=IPP*|o\, ;?,==<=* =(>=,=& ?H(,}%-}"-~",=!==.= ,> ,=.||!Dd(,|$I(,|(-~ , ,~ ,~ ,}.=,>,!*,) *~,!0)~~$ (SI(?*~ `(,~ _ `(|,|4> (~N*~,@(m6*,!(,|/<K%)I:<0 EEEEEE$m۶a#EE"FpmEE($I$EE&$I$EE$$I$EE$$I$EE"$I$EE!$I$EE $I$EE $I$EE $I$EE $I$EE $I$EE $I$EE $I$EE$I$EE$O$EE??EE$I$EEI EE ''EE $I$EE$I$EE??EE$I$EE$M&EEh$I$EE-[-EEH$I$EEEEEE$m۶a#EE$v !@EEEE@@$EEIHEEEE EEI EE  EE H$H$EE EE EE H$H$EE @$@$EE   EE EEEEH$H$EE  EEEEEE@$@$EEEEEE  EEEEH$H$EEEE@  EEEEEE%m۶a#EE%FtmEE $EEEE$@EEI$H$EEI$I$EE  EEI$I$EE ۲dˆeEE XllEE  EE EE H$H$EE @$@$EE   EE EEEEH$H$EE  EEEEEE@$@$EEEEEE  EEEE@$@$EEEE  EEEE&m۶a#EE%FtmEE@@EEI$IEEys10EE@ @$EEH H$EEEE EEA$H$EE H$ EE @$I$EE  EE EE H$H$EE @$@$EE   EE EEEEH$H$EE  EEEEEE@$@$EEEEEE  EEEE@$@$EEEE$@$EEEE&FtmEE@6dmEEI$IEEpEE00EE@$EE@$@ EEI$I$EE EEA$H EE ۂl˲-EE A$H$EE  EE EE H$H$EE @$@$EE   EE EEEEH$H$EE  EEEEEE@$@$EEEEEE  EEEEH$@$EEEE $EEEE-H$H$EE@$A$EEEE$ EEEEEEI IEEEE EEA$ EE [,ضmEE H$I$EE EE EE H$H$EE @$@$EE   EE EEEE@$H$EE  EEEEEE@$@$EEEEEE  EEEE@$@$EEEE$$EEEE-H$H$EEۂmòeEEHEE@ @ EEEEEEAHEEI$H$EE EE$A$EE H @EE A$H$EE  @EE EE H$H$EE @$@$EE   EE EEEEH$H$EE  EEEEEE@$@$EEEEEE  EEEE@$H$EEEE  EEEE-H$HEE,I$IEE,I$IEE*I$IEE*I$IEE(I$IEE&I$IEE&I$IIEE%I$IIEE"I$IEE!I$IHEE I$IEE I$IEE I$I@EE I$I@EE I$I@EE I$I@EE I$IEEI$IEE$OHEE?HEEI$I@EEI$I"AEE '@EE I$IEEI$IEE'mEEI$IEEm&mEEI$IEE[%EEI$I$EE@EE`EE ۶mۿEEs!UUUX VVVVȅR(R( !ɑI$!UU?`֫ <hiDIf1}ܺI$$!UUٶI ~UU׵$5UU¶v :iJ^UupĵksiJUUU%? !UU ЦTe)bQc!O* 9OR;&bWI$|N4X UUrԴ-8QUWpŷZUU¹BR +UUŸO"?RU W m cUUཻݲ-ۂ.F1 VVVVȅR(R( ! `!h`e) 'zE)ޜз͏s UUWT!!|ւ555q+R$I$`E$I$|b6ƘBxN2'!W^[`̒$Is UUUa!T@!  !  VVVVȅR(R( !@$!UX@ %%X `uT\^ߵIR UUU+I$=!UUϕX5 <@MZB UWVT!  !  VVVVȅR(R((Pm%)U%/&QUQ%@15`'9_p!\UT TWUU!  !  VVVVȅR(R(SP!^ @!h`ճ%~-rZ6UU UU`I$ UUPI$!U0$!Um$AUB#qa'MUۘ$U?:@<!Wp'^0F1(( ?r2h$ \W·XB۶m۪R!\WUU1! !!  !  VVVVȅR(R( !!`A XUUU!!!!!!ꪪ]%)rI!W !Vy$!UUƘI$I9s!I$ UU< XWUU! !!!!  !  VVVVȅR(R( !!!!!!!!!!!!!!!!!!!!!  !  VVVVȅR(R( !!!!!!!!!!!!!!!!!!!!!  !  VVVVȅR(R( !!!!!!!!!!!!!!!!!!!!!  !  VVVVȅR(R( !!!!!!!!!!!!!!!!!!!!!  !  VVVVȅR(R( !!!!!!!!!!!!!!!!!!!!!  !  VVVVȅR(r !!!!!!!!!!!!!!!!!!!!! !  VVVV T*  ! $!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!!0!p 0jzFn#aۂ 5U2I$Kb*II UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI" UUU2MI^ذmۂp\WU00 9$H + mI$!UmI$!UmI$!UmI$!UmI$!UmI$!UmI$!UmI$!UmI$!UmI$!U(A _zX%X%! !!!!!!!!!!ɐ ɐ !ppppX%X%! !!!!!!!!!!ɐ ɐ !ppppX%X%! !!!!!!!!!!ɐ ɐ !ppppX%X%! s!UUܻI$,Q$!UU`źI$diJ!UUͺI$mMk!UU ӺI$%{!UU+IE)UU޺I$]$!UUlR!UUI$b(B!UUI$2B!UUU ɐ 9___\X%X%! ]$!%5]&s"?U$!RX\|Ⱥp'I$Z!]UU$11UU IE)U({ c_I?R \%)U~$NE)UUW|嶆9! UUɐ ɐ E)xxzzX%X}UU5\0 %)5**1|\ Ir!U'0e) 8`,8`@:E)zͺN$K$,c!WTVUɐ ɐ !ppppX%X%E)yɓ$$!%UU$I$$!UUUI$$!UUUpI$UUMm<!UU E)௥U$<%).U E)xWUx9!TUUU!ɐ ɐ !ppppX%X%! !!!!!!!!!!ɐ ɐ !ppppX%X%! !!!!!!!!!!ɐ ɐ !ppppX%X%! !!!!!!!!!!ɐ ɐ !ppppD@S /I$!UI$!UI$!UI$!UI$!UI$!UI$!UI$!UI$!UI$!U$.> ~_@JhҶi!! ܻ$I$!Uܻ$I$!Uܻ$I$!Uܻ$I$!UJIѶm6!!zܻH$H$!!!!!ܻII!@@@@K˱ֵ!U5׻I'$!UTI UIR 9U{I?~1UUWx  1``K6˻$8!-U m$}1U$$!U$D!r$1\UܻNI9|~ܻH$H$!!!!!ܻII!@@@@Jim&!! ܻI$I!UܻI$I!UܻI$I!UܻI$I!UJm6m!!z ɯh!ɺ$I$!Uɯm!j6Ӝ$!}i oj`<9u 4A!4@$!U^XWɯhh!ɺI$I! Uɯmm !j@$vW UU/ ֺ>4{!=I$! !{E)B9GGATCGVAGGATGALFGGATSFFO@pw$~-/\000``$m6bU5 /Ƹ$O*o $bm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUmb _ꪨ ہUW\p!p0@*$O$! IB!I!I!I!I!I!I!I!I!I!I!I!I!I!I!I!I!I!I!I!9I$!p*`zjR(R( !!!!!!!!!!!!!!!!!!!!!!  ! Hfhf VVVVȅR(R( !!!!!!!!!!!!!!!!!!!!!  !  VVVVȅR(R( !!!!!!!!!!!!!!!!!!!!!  !  VVVVȅR(R( !!!!!!!!!!!!!ɸ` c!)))!! E)?!!!  !  VVVVȅR(R( !!!!!!!!!!!!!η@Mk`!))))!!ȺIɕ\Z!555!!!  !  VVVVȅR(R( !!!!!!!!!!!!!Ҷop,cA`!))!!źɑɑ c5555!!!  !  VVVVȅR(R( !!!!!!!!!@ʹOrs!U}d UU*?I$ UU*I$c< UUZpɷpZa@!޳!UUU׵q UUWTкəɑ{$!$!!!  !  VVVVȅR(R( !!!!!!*!! !r$Ib<UU I?]UA-6,ApI!жI$9UOȄK M$M\VV`'%)ڵI4UUUǸ,c UUUX!  !  VVVVȅR(R(y uUUUڴImUUUյIQUUUյIqUUUյIqUUUԒ$I$QUUU"$UUUUzɝ % b $@ ӜpԹB2$B2'!PPP\!  !  VVVVDžR(R( P Uܘ$!UI UI aUI U$U# UH0@I] @6U@?UϳQ UWTV VVVVȅR(R( !ࠠH!UֵUUU%I>  UUU*I$/\ UUژ$UU iIUI\N*ٱM4+Ӝ@|&r$]^X\UTTTTȅR(R( !Iɕ}U5%`Mk _mk@@Z!  VVVVȅR(R( ! I$ %UU/@( %54X'$!@pX\  !  VVVVȅR(R( !!ն?Ӝ!UUUP9-0Fe)`-k?u \@@P$$!`W YTWUU  !  VVVVȅR(R( !!!!J y-UU?6!+UUUN$!WUO: UU泫>UUUI$X`$! <@H?!^O$WU岘8xUUU!@! !  !  VVVVȅR(R( !!!!!!@!U!!! !b`I$ UU& Un$Ut^UX!xWUUO'$!&!!!!  !  VVVVȅR(R( !!!!!!!!!!!!!!ꪪ!!!!!!!  !  VVVVȅR(R( !!!!!!!!!!!!!!!!!!!!!  !  VVVVȅR(R( !!!!!!!!!!!!!!!!!!!!!  !  VVVVʆb( `!!!!!!!!!!!!!!!!!!!!! 0! hfh VVVVT*I$L>! $!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!II!p0jzFn#aۂ 5U/I$Kb*II UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI" 6 UUU>^ذmۂp\WU00 9$H + mI$!UmI$!UmI$!UmI$!UmI$!UmI$!UmI$!UmI$!UmI$!UmI$!U(A _zZ%X%! !!!!!!!!!!ɐ ɐ !ppppX%X%! !!!!!!ºI$ir<(B!UUYQ!%)뺻!ɐ ɐ !ppppX%X%! !!!!!!* R!QQQQ!<<9!yqqq!ɐ ɐ !ppppX%X%! !!! ! Io֧9UUI2-<9Ub y'f f1UUI?# 4!U}NU!]]]I$I'A!UUUTɐ ɐ !ppppb"!ƺU5Ib\!UIb`UIbs!U/IV` }%)*81\ I/II$`N$ @E)WWɐ IJ__^\X%X%! I9~U- I UI9U $ c- u@@ ɐ TVUUX%X%! dI$!-U'LIJ`@A<},` ,'!`p^ɐ ɐ !ppppX%X%! !Һ$I$s!5UUUI$<!UU'I$!WUUI$!UU E)+Uv?!}$!^UX$I$!xWUUH$I$!ɐ ɐ !ppppX%X%! !!!!!!I!!!!ɐ ɐ !ppppX%X%! !!!!!!!!!!ɐ ɐ !ppppD@S /I$!UI$!UI$!UI$!UI$!UI$!UI$!UI$!UI$!UI$@!U$.> ~_@JhҶi!! ܻ$I$!Uܻ$I$!Uܻ$I$!Uܻ$I$!UJIѶm6!!zܻH$H$!!!I 1!UeżI$ E)ܻII!@@@@ݻH$ UU I$) !UUI@}%)U ~‘9WMI?1U UUUWpL$55U ,c  ׽ <@Ћhʤ pXXVܻH$H$!ߺ$I$!-UUU뺬$I$4!:UUUI$}UU$X WUUܻII$!hjjjJim&!! ܻI$I!UܻI$I!UܻI$I!UܻI$I!UJm6m!!z ɯh!ɺ$Ie)U/ɯm$!NRd !U-yMf1~ـ }$!_p@`ɮ耶hZ5UUU뻶$Ib۶!UUUܮiI2Q \UUU@$ !UU ?4<ѾwMk -Uɿ(jRIPve)ZGGATCGVAGGATGALFGGATSFFO@pw$~-/\000``$m6bWyG@a.ؖ$i UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUې$m UUU azz ہ*Ֆ!p0@A*@! IB!I!I!I!I!I!I!I!I!m 0!X!պI$@$! I!I!I!I!I!I!I!I!!p*`AڪR(R( !!!!!!!!!I$I!UUU*UU& mkUI'$!UVp `!!!!!!!!  !  VVVVDžR(R( !!!!!!$!!I55`8@ˏ UWVT !!!!!!  !  VVVVDžR(R( !! !**۶!X$I-Y89b$Iv9ػ&M!f1??!UU UUp\/6LȞVI$}<%)UUn˺$! !!!!!  !  VVVVDžR(R( !ֵb UUU ޵I"TUUU1r @us)&ZzI%)U(@Af1 %l27BP U^P`(!!!!  !  VVVVDžR(R( !y$\a % R ȟ<p@ɏIJ )J@Ӷ UUWT!!!!  !  VVVVDžR(R( !R#$I UUUI$I0UUUI$IQUUUٵڐ$*UUUPI$*UZ ?Z@@˟ K'X4 V\X`!!!!  !  VVVVDžR(R( !!!!!dA$I9?1t +d?9@Ŷ۶Z UUWT!!!  !  VVVVDžR(R( !!!!!!@u'simˏ ``N$K$VVTT!!!  !  VVVVDžR(R( !!!!!!**Ҷ?W 5߱/q7~Ӝ mg(55ۀ4p} T\\p!!!  !  VVVVDžR(R( !!!!!E)ڵOb4UUU+~'/9}n }a5@| pppp!!!  !  VVVVDžR(R( !!!!I$Id UUe)5,pU\E)08<pppp!!!  !  VVVVDžR(R( !!!!  8!?`p``ɑI$55U!z?UU=D1 L&4VXpp!  !  VVVVDžR(R( !!!!!?!5UU0f1@@```@!!!Ҷ?{ UUI$K$Q݀Ap9hX ?9``@P !(  !  VVVVDžR(R( !!!**mcIJa??o UU Ir!U-?1``@@E)!!!j*jjʏ Y@Mk 'V\XP  !  VVVVDžR(R( !!!****@!550ѶWWVT!!!j***@, @!5{`@$WA `^UU ]%58@8pppp  !  VVVVȅR(r !!!@le)$ UUUI8!UUU$I$!UUUI" }UUʷ c!TUUU!!!l!@`y! UUU첀'YWUUI$I\UUU!!!A6dK(Ba`! Ѓ%r$pX\W 0!  VVVVTA*  ! $!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$! $$! ~$$! @1!p0AFn#aW2I$Kba.II UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI" UUU2MIazzذm*00 9$H!A/mI$!UmI$!UmI$!UmI$!UmI$!UmI$%)UmI$!UmI$!UmI$!UmI$!U(A!A__X%X%! !!!`Ӝ!U %) t?%)z̺I$M$,c!UUWT!!!ɔ ɐ !ppppX%X%! 6 c!UUUI1UU I$I!UUIRf1U1Mk `@}"ր9WI$N'!UUW\!!ɐ ɐ !ppppX%X%! w $+U $UD!- ((`=@Xp`!!ɐ ɐ !ppppX%X%! !!IX!%5I͏ @κI$L$mk!UWVT!ɐ ɐ !ppppX%X%! !!̺əIZ!U-IZr)J-ի@M'p'!VT\\!ɐ ɐ !ppppX%X%! ! {!U`Mk 1 p }$!ܺ0 \\\W!ɐ ɐ !ppppX%X%! !ϺIDIMk!0'e)Te) % h&{$E)\XVV!!ɐ ɐ !ppppX%X%! !?f1!UUU̿ʏjR z'p&<!T\\X꺉I$!5UUU̯`1 p'J'y$!\\TTIIw <$!UU% !UUV\ɐ ɐ !ppppX%X%! !*ߺI$IWP!UUU-09 % h'h%D!\\\X! I\} %%5 {k$I E)\Xp`ɐ ɐ !ppppX%X%! !*`&$! U$ U=$\ppZU!ɑI$!UU o$!UO$!WUI$u$!UU:B@@b}ɐ ɐL!ppppD@S!A/I$!UI$!UI$!UI$!UI$!UI$!UI$!UI$!UI$!UI$!U$.>!A__@JhҶi!a I!U$$I UU m$s=!UU^Pܻ$I$!UJIѶm6!aP@R@4U%IR<9U5I1{52 ,cpI$z&$!UWT\ܻII!@@@@ܻH$H$!ߺIIӜ!0)pmk X=0E)XPp`ܻII!@@@@ܻH$H$!9 $!% II2,c ;K$}!h~VVܻII!@@@@!@01\!%5-K$J$!TTTL$h&e) M|H9W I؄J!UWV\Jim&!a IB\UUx$IB\WUU1IB\ UU$IB!UUU/$M&<X^UU i5!UU-2(E)Ui߬$c ӜUUWTNy55Px s<!T\^W鱽= 5Ui$!'7U 6y`nU@J  !$!90B_po8(BU GGATCGVAGGATGALFGGATSFFO@pw$~-/\000``$m6bU5 yGH*i $bm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm$b _ꪨ ہUW\p!p0@*$O$! IB!I!I!I!I!I!I!I!I!I!I!I!I!I!I!I!I!I!I!I!9I$!p*`zjR(R( !!!!!!!!!!!!!!!!!!!!!!  !  VVVVȅR(R( !!!!!!!!!!!!*$!!!!!!!!!  !  VVVVȅR(R( !!!!!!!!!I$e)I$y!UU $UUI$6 U/I$ }UUr!UUU߹I$?UUUUq!UU_P!!!  !  VVVVȅR(R( !!!!!!!!!Ķao,c UU e) %0a?׺IJ`I1Ul$Um۶9Um۶1UH۶mE)!!!  !  VVVVȅR(R( !!!!!!!!!!նOrUUUt1:AZi>yybbb` !U !!!!!!!  !  VVVVȅR(R( !!!!!!!PP̒$I%UUU)O!UUUI$+ UUmk'IO?B3@`϶$qUVTWm۶9$I?1`(!!!!  !  VVVVȅR(R( !۵UUUж0UUVT!UUU5ILU IIUIU0,c O{E)X͏Z $ ,(B@Mm ! $!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!II!p0jzFn#aۂ 5U2I$Kb*II UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI" UUU2MI^ذmۂp\WU00 9$H + mI$!UmI$!UmI$!UmI$!UmI$!UmI$!UmI$!UmI$!UmI$!UmI$!U(A _zX%X%! !!!!!!!!!!ɐ ɐ !ppppX%X%! !!!!Ix \%)U%IBrpf1UI!UɺI2$,c!UUúI'N$R!UTWU!ɐ ɐ !ppppX%X%! !!$!ֺI$I{ UUU I Q }!U% ~ ,ceMƀZ UUWI$I"'9!UUU\!!ɐ ɐ !ppppX%X%! I?8U}  8\E) pI.IZUh׽ KB,66ۄp>9\xh%S2$y$!XXRR!>!ɐ ɐ !ppppXXmk`'s $,cp6h8X'Ӝz~e)_I' %)UW UUW\X%X%jR5 } @@8PPyΣ\VWVX%X%! IE)%53> `z&E)Ulh1i{ @Y @0#0YTTVWX%X%! I$I$%)?f1!XUUU!@%)Һ/$I${! UUU ɐ! %%@@@аM$<! VW\'I$!_UUɐ ɐ !ppppX%X%! !!!!!ɕI$y!5UU ܾ $ xWH$I$9!TUUU!ɐ ɐ !ppppX%X%! !!!!!!@!!!!ɐ ɐ !ppppD@S /I$!UI$!UI$!UI$!UI$!UI$!UI$!UI$!UI$!UI$!U$.> ~_@JhҶi!! ܻ$I$!UI!UI!UI!UKIѶm6!!zܻH$H$!I$I%)II~Y$!Օ=?f9[X3?I$9!pzUVܻII!@@@@MҼP}U% iZ.(`?)k2 ckL' %)VVUUWp< %5iSAjR(VNQI$I&ֵG}< žppppܻH$H$$!)H$I$1!TUUUƺ9$I$iJ!%UUU! !0%)pXWhDIDU \UUUJim&!! ܻI$I!UܻI$I!U$!UܻI$I!UJm6m!!z ɯhE)+ݺm$Ҕ UUɯl1U|~ʉI)]$! SH Ur+NՀ !Wxɯ(hE)9|Ib$!5UUFi < |VUU@Iܞ $!Ue)޽ϑ!5U߾21y0 8%)o{jSGGATCGVAGGATGALFGGATSFFO@pw$~-/\000``$IɗU5 1Ƹ$I o $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm $ UUUm$ UUU1dI$ ^ꪠI${=UW\p!p0@ +@! NB!IB!IB!IB!IB!IB!IB!IB!IB!IB!IB!IB!IB!IB!IB!IB!IB!IB!IB!IL!!p *` zjR(R( &!!!!!!!!!!!!!!!!!!!!!! 00!  VVVVƅR(R( !!!!!!!!! $(I$Ib!`:9-$I18!UUU '!UUUx۶mҖ$!\I$I'!%)꺻!!!!!!00!  VVVVƅR(R( !!!!!! I$! $I>IJ UUU-Ԩm۶~y!UU ?)!U+m] +y) ]MkFOޢ7Λr r N"h]ZZ' \!U臨}`!UU˦$I>!UUUྣ$IAػI$I$! */!!!00!  VVVVƅR(R( !!!!$ .-1!UU6I1!U {E)+@$'R1(Ճ ނҴPc;@^%N޵ ZNt2`<+^>&<-x ]^^ত>&0\^ Wܚ M@x۹)<| ܤSAz t@Q^_?6$!W۬$!UWIIs!UUWT!00!  VVVVƅR(R( !!!!  s CP8pXCAI$y-VF98ƀx X M <s<=z '\p VWC<5x Я0< ^xX]x ׵ &޾XĖ X VV `@TY X59 ( `R TTTW!00!  VVVVƅR(R( !!!!IdIAUU`UPI׳<-gW,?85x @YΠ Āl\߾9\zX!߀\l >Y5X#TY `8^%5yp X8- \Xa\p׋{B< pָ6 ɐ9```N$H$!!00!  VVVVƅR(R( !!!!II!@!b7C9 x'ހ !6 &\%XSN9<`5p< 0\%X R ¿ȏȏY\`IYAPt<-ߟ'\5\%\X%4X_Bp4@p/Pž `pppH$I$!!00!  VVVVƅR(R( !!!!?!**?  }r\7,@P`pyg \ <`,?%) %%[2U_!ߧ''< $6P`{ p\`W\ <XOC <~\p Ģ?< P _ qؔ6 (`,\e`ޚTHDH]XX\\!!00!  VVVVƅR(R( !!!!!****eg %%55˯dݍf`~@$ `Pަ0H85zAAAȏȏy %P '`d| \6'y,%M< 0;<`}B!qBdH4I1!!00!  VVVVƅR(R( !!!!!II$Z UUg?)-B<5\`"[XH<`6b`!<@ ͈CCCȏȏY)ÇK{`` .\ Bϸ }@B@BY,,@=۝!`\Wj$I$Mk TUUU!!!!!!00!  VVVVƅR(R( !!!!!!!!!!I$I$!Oao!-UU4@)x -?{5BAzDضm< `\WUp$I$!!!!!!!!00!  VVVVƅR(R( !!!!!!!!!!!! #i$I!UUU'0v \WUU (!!!!!!!!00!  VVVVDžR(r !!`!!!!!!!!!!!!!!!!!!!!!0!  VVVV T +  ! $$!$$!$$!$$!$$!$$!$$!$$!$$!$$!$$!$$!$$!$$!$$!$$!$$!$$!$$!$!@1!p0 jz|I$ 5U1I$Kb II UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI"Iж UUUI" UUU1M$I ^س'O$p\WU00 9$H / mI$!UmI$!UmI$!UmI$!UmI$!UmI$!UmI$!UmI$!UmI$!UmI$!U(A _~X%X%! !!!* !*$Ids!UUU-۶m݆ c!UUUx! !!!ɐ ɐ !ppppX%X%!  IJ!UUU5!UU@c6!UI^n}9 qM}v-i}ӜxI2֐}9WI$ H֓V\`zV,d6}$"=R%<`ppp!ɐ ɐ !ppppX%X%! !9@I]E) % w] ]*Q}QO;c)`}A8\q㎚!<#4s\puc&p$ ~_@KhҶi!! ۻ$I$!UI(BU/IBUۻ$I$!UKIѶm6!!z9==Ir4A 3) then {_this select 3} else {""}; waitUntil {clientInitComplete}; if (_side != WFBE_Client_SideJoined) exitWith {}; sleep 2; _marker = Format["BaseMarker%1",buildingMarker]; buildingMarker = buildingMarker + 1; createMarkerLocal [_marker,getPos _structure]; _type = "mil_box"; _color = "ColorOrange"; if (_hq) then {_type = "Headquarters"}; if (_allies != "") then {_type = "mil_box";_color = "ColorYellow"}; _marker setMarkerTypeLocal _type; _text = ""; if (!_hq && _allies == "") then {_text = [_structure, _side] Call GetStructureMarkerLabel;_marker setMarkerSizeLocal [0.5,0.5]}; if (_allies != "") then {_marker setMarkerSizeLocal [0.5,0.5];_text = _allies}; if (_text != "") then {_marker setMarkerTextLocal _text}; _marker setMarkerColorLocal _color; while {!isNull _structure && alive _structure} do {sleep 2}; deleteMarkerLocal _marker; };Private ['_HQRadio','_base','_buildings','_condition','_get','_idbl','_isDeployed','_oc','_weat']; ["INITIALIZATION", Format ["Init_Client.sqf: Client initialization begins at [%1]", time]] Call WFBE_CO_FNC_LogContent; sideJoined = side player; sideJoinedText = str sideJoined; //--- WF3 Compatible. WFBE_Client_SideJoined = sideJoined; WFBE_Client_SideJoinedText = sideJoinedText; WFBE_Allow_HostileGearSaving = true; //--- Position the client on the temp spawn (Common is not yet init'd so we call is straigh away). player setPos ([getMarkerPos Format["%1TempRespawnMarker",sideJoinedText],1,10] Call Compile preprocessFile "Common\Functions\Common_GetRandomPosition.sqf"); BoundariesIsOnMap = Compile preprocessFile "Client\Functions\Client_IsOnMap.sqf"; BoundariesHandleOnMap = Compile preprocessFile "Client\Functions\Client_HandleOnMap.sqf"; BuildUnit = Compile preprocessFile "Client\Functions\Client_BuildUnit.sqf"; ChangePlayerFunds = Compile preprocessFile "Client\Functions\Client_ChangePlayerFunds.sqf"; CommandChatMessage = Compile preprocessFile "Client\Functions\Client_CommandChatMessage.sqf"; FX = Compile preprocessFile "Client\Functions\Client_FX.sqf"; GetIncome = Compile preprocessFile "Client\Functions\Client_GetIncome.sqf"; GetPlayerFunds = Compile preprocessFile "Client\Functions\Client_GetPlayerFunds.sqf"; GetRespawnAvailable = Compile preprocessFile "Client\Functions\Client_GetRespawnAvailable.sqf"; GetStructureMarkerLabel = Compile preprocessFile "Client\Functions\Client_GetStructureMarkerLabel.sqf"; GetTime = Compile preprocessFile "Client\Functions\Client_GetTime.sqf"; GroupChatMessage = Compile preprocessFile "Client\Functions\Client_GroupChatMessage.sqf"; HandleHQAction = Compile preprocessFile "Client\Functions\Client_HandleHQAction.sqf"; HandlePVF = Compile preprocessFile "Client\Functions\Client_HandlePVF.sqf"; MarkerAnim = Compile preprocessFile "Client\Functions\Client_MarkerAnim.sqf"; OnRespawnHandler = Compile preprocessFile "Client\Functions\Client_OnRespawnHandler.sqf"; PreRespawnHandler = Compile preprocessFile "Client\Functions\Client_PreRespawnHandler.sqf"; ReplaceArray = Compile preprocessFile "Client\Functions\Client_ReplaceArray.sqf"; RequestFireMission = Compile preprocessFile "Client\Functions\Client_RequestFireMission.sqf"; SetControlFadeAnim = Compile preprocessFile "Client\Functions\Client_SetControlFadeAnim.sqf"; SetControlFadeAnimStop = Compile preprocessFile "Client\Functions\Client_SetControlFadeAnimStop.sqf"; SupportHeal = Compile preprocessFile "Client\Functions\Client_SupportHeal.sqf"; SupportRearm = Compile preprocessFile "Client\Functions\Client_SupportRearm.sqf"; SupportRefuel = Compile preprocessFile "Client\Functions\Client_SupportRefuel.sqf"; SupportRepair = Compile preprocessFile "Client\Functions\Client_SupportRepair.sqf"; TaskSystem = Compile preprocessFile "Client\Functions\Client_TaskSystem.sqf"; TitleTextMessage = Compile preprocessFile "Client\Functions\Client_TitleTextMessage.sqf"; UIChangeComboBuyUnits = Compile preprocessFile "Client\Functions\Client_UIChangeComboBuyUnits.sqf"; UIFillListBuyUnits = Compile preprocessFile "Client\Functions\Client_UIFillListBuyUnits.sqf"; UIFillListTeamOrders = Compile preprocessFile "Client\Functions\Client_UIFillListTeamOrders.sqf"; UIFindLBValue = Compile preprocessFile "Client\Functions\Client_UIFindLBValue.sqf"; //--- Namespace related (GUI). BIS_FNC_GUIset = {UInamespace setVariable [_this select 0, _this select 1]}; BIS_FNC_GUIget = {UInamespace getVariable (_this select 0)}; //--- New Fnc. WFBE_CL_FNC_ChangeClientFunds = Compile preprocessFileLineNumbers "Client\Functions\Client_ChangePlayerFunds.sqf"; WFBE_CL_FNC_GetAIID = Compile preprocessFileLineNumbers "Client\Functions\Client_GetAIID.sqf"; WFBE_CL_FNC_GetBackpackContent = if !(WF_A2_Vanilla) then {Compile preprocessFileLineNumbers "Client\Functions\Client_GetBackpackContent.sqf"} else {{[[],[]]}}; WFBE_CL_FNC_GetClientFunds = Compile preprocessFileLineNumbers "Client\Functions\Client_GetPlayerFunds.sqf"; WFBE_CL_FNC_GetClosestAirport = Compile preprocessFileLineNumbers "Client\Functions\Client_GetClosestAirport.sqf"; WFBE_CL_FNC_GetClosestCamp = Compile preprocessFileLineNumbers "Client\Functions\Client_GetClosestCamp.sqf"; WFBE_CL_FNC_GetClosestDepot = Compile preprocessFileLineNumbers "Client\Functions\Client_GetClosestDepot.sqf"; WFBE_CL_FNC_GetGearCargoSize = Compile preprocessFileLineNumbers "Client\Functions\Client_GetGearCargoSize.sqf"; WFBE_CL_FNC_GetMagazinesSize = Compile preprocessFileLineNumbers "Client\Functions\Client_GetMagazinesSize.sqf"; WFBE_CL_FNC_GetParsedGear = Compile preprocessFileLineNumbers "Client\Functions\Client_GetParsedGear.sqf"; WFBE_CL_FNC_GetVehicleCargoSize = Compile preprocessFileLineNumbers "Client\Functions\Client_GetVehicleCargoSize.sqf"; WFBE_CL_FNC_GetVehicleContent = if !(WF_A2_Vanilla) then {Compile preprocessFileLineNumbers "Client\Functions\Client_GetVehicleContent.sqf"} else {{[[],[],[]]}}; WFBE_CL_FNC_GetUnitBackpack = if !(WF_A2_Vanilla) then {Compile preprocessFileLineNumbers "Client\Functions\Client_GetUnitBackpack.sqf"} else {{""}}; WFBE_CL_FNC_HandlePVF = Compile preprocessFileLineNumbers "Client\Functions\Client_HandlePVF.sqf"; WFBE_CL_FNC_OnKilled = Compile preprocessFileLineNumbers "Client\Functions\Client_OnKilled.sqf"; WFBE_CL_FNC_OperateCargoGear = Compile preprocessFileLineNumbers "Client\Functions\Client_OperateCargoGear.sqf"; WFBE_CL_FNC_ReplaceMagazinesGear = Compile preprocessFileLineNumbers "Client\Functions\Client_ReplaceMagazinesGear.sqf"; WFBE_CL_FNC_RemoveMagazineGear = Compile preprocessFileLineNumbers "Client\Functions\Client_RemoveMagazineGear.sqf"; WFBE_CL_FNC_UI_Gear_AddTemplate = Compile preprocessFileLineNumbers "Client\Functions\Client_UI_Gear_AddTemplate.sqf"; WFBE_CL_FNC_UI_Gear_DeleteTemplate = Compile preprocessFileLineNumbers "Client\Functions\Client_UI_Gear_DeleteTemplate.sqf"; WFBE_CL_FNC_UI_Gear_DisplayInventory = Compile preprocessFileLineNumbers "Client\Functions\Client_UI_Gear_DisplayInventory.sqf"; WFBE_CL_FNC_UI_Gear_FillCargoList = Compile preprocessFileLineNumbers "Client\Functions\Client_UI_Gear_FillCargoList.sqf"; WFBE_CL_FNC_UI_Gear_FillList = Compile preprocessFileLineNumbers "Client\Functions\Client_UI_Gear_FillList.sqf"; WFBE_CL_FNC_UI_Gear_FillTemplates = Compile preprocessFileLineNumbers "Client\Functions\Client_UI_Gear_FillTemplates.sqf"; WFBE_CL_FNC_UI_Gear_ParseTemplateContent = Compile preprocessFileLineNumbers "Client\Functions\Client_UI_Gear_ParseTemplateContent.sqf"; WFBE_CL_FNC_UI_Gear_Sanitize = Compile preprocessFileLineNumbers "Client\Functions\Client_UI_Gear_Sanitize.sqf"; WFBE_CL_FNC_UI_Gear_UpdatePrice = Compile preprocessFileLineNumbers "Client\Functions\Client_UI_Gear_UpdatePrice.sqf"; WFBE_CL_FNC_UI_Gear_UpdateTarget = Compile preprocessFileLineNumbers "Client\Functions\Client_UI_Gear_UpdateTarget.sqf"; WFBE_CL_FNC_UI_Gear_UpdateView = Compile preprocessFileLineNumbers "Client\Functions\Client_UI_Gear_UpdateView.sqf"; WFBE_CL_FNC_UI_Respawn_Selector = Compile preprocessFileLineNumbers "Client\Functions\Client_UI_Respawn_Selector.sqf"; Call Compile preprocessFileLineNumbers 'Client\Functions\Client_FNC_Groups.sqf'; //--- FUNCTIONS: Groups. Call Compile preprocessFileLineNumbers 'Client\Functions\Client_FNC_Special.sqf'; //--- FUNCTIONS: Specials. clientInitComplete = true; //--- UI Namespace release from previous possible games (only on titles dialog!). {uiNamespace setVariable [_x, displayNull]} forEach ["wfbe_title_capture"]; //--- Waiting for the common part to be executed. waitUntil {commonInitComplete}; ["INITIALIZATION", Format ["Init_Client.sqf: Common initialization is complete at [%1]", time]] Call WFBE_CO_FNC_LogContent; //--- Queue Protection. missionNamespace setVariable ['WFBE_C_QUEUE_BARRACKS',0]; missionNamespace setVariable ['WFBE_C_QUEUE_BARRACKS_MAX',10]; missionNamespace setVariable ['WFBE_C_QUEUE_LIGHT',0]; missionNamespace setVariable ['WFBE_C_QUEUE_LIGHT_MAX',3]; missionNamespace setVariable ['WFBE_C_QUEUE_HEAVY',0]; missionNamespace setVariable ['WFBE_C_QUEUE_HEAVY_MAX',3]; missionNamespace setVariable ['WFBE_C_QUEUE_AIRCRAFT',0]; missionNamespace setVariable ['WFBE_C_QUEUE_AIRCRAFT_MAX',2]; missionNamespace setVariable ['WFBE_C_QUEUE_AIRPORT',0]; missionNamespace setVariable ['WFBE_C_QUEUE_AIRPORT_MAX',2]; missionNamespace setVariable ['WFBE_C_QUEUE_DEPOT',0]; missionNamespace setVariable ['WFBE_C_QUEUE_DEPOT_MAX',3]; //--- Handle the Fast Time. if ((missionNamespace getVariable 'WFBE_C_ENVIRONMENT_FAST_TIME') > 0 && !isServer) then { [] Spawn { waitUntil{!isNil "WFBE_SERVERDATE"}; [] ExecFSM "Client\FSM\env_fast_time_cli.fsm"; ["INITIALIZATION", Format ["Init_Client.sqf: Fast Time is launched at [%1]", time]] Call WFBE_CO_FNC_LogContent; }; }; //--- Handle the weather. _weat = missionNamespace getVariable "WFBE_C_ENVIRONMENT_WEATHER"; if (_weat == 3) then { [] Spawn { waitUntil {!isNil {WF_Logic getVariable "overCast"}}; ExecFSM "Client\FSM\env_weather_cli.fsm"; }; } else { _oc = 0.05; switch (_weat) do { case 0: {_oc = 0}; case 1: {_oc = 0.5}; case 2: {_oc = 1}; }; 60 setOvercast _oc; }; if ((missionNamespace getVariable "WFBE_C_ENVIRONMENT_WEATHER_VOLUMETRIC") > 0) then {[] Exec "CA\Modules\clouds\data\scripts\bis_cloudsystem.sqs"}; //--- Global Client Variables. sideID = sideJoined Call GetSideID; clientTeam = group player; clientTeams = missionNamespace getVariable Format['WFBE_%1TEAMS',sideJoinedText]; playerType = typeOf player; playerDead = false; paramBoundariesRunning = false; WFBE_Client_Logic = (WFBE_Client_SideJoined) Call WFBE_CO_FNC_GetSideLogic; WFBE_Client_SideID = sideID; WFBE_Client_Color = switch (WFBE_Client_SideJoined) do { case west: {missionNamespace getVariable "WFBE_C_WEST_COLOR"}; case east: {missionNamespace getVariable "WFBE_C_EAST_COLOR"}; case resistance: {missionNamespace getVariable "WFBE_C_GUER_COLOR"}}; WFBE_Client_Team = clientTeam; WFBE_Client_Teams = clientTeams; WFBE_Client_Teams_Count = count WFBE_Client_Teams; WFBE_Client_IsRespawning = false; WFBE_Client_LastGroupJoinRequest = -5000; WFBE_Client_PendingRequests = []; WFBE_Client_PendingRequests_Accepted = []; commanderTeam = objNull; buildingMarker = 0; gearCost = 0; currentTG = 25; lastBuilt = []; unitQueu = 0; fireMissionTime = -1000; artyRange = 15; artyPos = [0,0,0]; playerUAV = objNull; comTask = objNull; voted = false; votePopUp = true; manningDefense = true; currentFX = 0; lastParaCall = -1200; lastSupplyCall = -1200; canBuildWHQ = true; WFBE_RespawnDefaultGear = false; WFBE_ForceUpdate = false; hqInRange = false; barracksInRange = false; gearInRange = false; lightInRange = false; heavyInRange = false; aircraftInRange = false; serviceInRange = false; commandInRange = false; depotInRange = false; antiAirRadarInRange = false; hangarInRange = false; enableTeamSwitch false; //--- Import the client side upgrade informations. ExecVM "Common\Config\Core_Upgrades\Labels_Upgrades.sqf"; //--- Update the player. if (isMultiplayer) then {["RequestSpecial", ["update-teamleader", WFBE_Client_Team, player]] Call WFBE_CO_FNC_SendToServer}; /* CIPHER Module - Sorting */ ExecVM "Common\Module\CIPHER\CIPHER_Sort.sqf"; //--- Disable Artillery Computer. if (((missionNamespace getVariable "WFBE_C_ARTILLERY_COMPUTER") != 2) && !WF_A2_Vanilla) then {Call Compile "enableEngineArtillery false;"}; //--- Commander % stock init. if ((missionNamespace getVariable "WFBE_C_ECONOMY_INCOME_SYSTEM") in [3,4]) then { if (isNil {WFBE_Client_Logic getVariable "wfbe_commander_percent"}) then {WFBE_Client_Logic setVariable ["wfbe_commander_percent", 70]}; }; /* Exec SQF|FSM Misc stuff. */ if ((missionNamespace getVariable "WFBE_C_UNITS_TRACK_LEADERS") > 0) then {[] ExecFSM "Client\FSM\updateteamsmarkers.fsm"}; [] ExecFSM "Client\FSM\updateactions.fsm"; /* Don't pause the client initialization process. */ [] Spawn { waitUntil {townInit}; /* Handle the capture GUI */ ["INITIALIZATION", "Init_Client.sqf: Initializing the Town Capture FSM"] Call WFBE_CO_FNC_LogContent; [] ExecFSM "Client\FSM\client_title_capture.fsm"; /* Handle the map town markers */ ["INITIALIZATION", "Init_Client.sqf: Initializing the Towns Marker FSM"] Call WFBE_CO_FNC_LogContent; [] ExecFSM "Client\FSM\updatetownmarkers.fsm"; waitUntil {!isNil {WFBE_Client_Logic getVariable "wfbe_structures"}}; if ((missionNamespace getVariable "WFBE_C_ECONOMY_CURRENCY_SYSTEM") == 0) then { waitUntil {!isNil {WFBE_Client_Logic getVariable "wfbe_supply"}}; }; /* Handle the client actions */ ["INITIALIZATION", "Init_Client.sqf: Initializing the Available Actions FSM"] Call WFBE_CO_FNC_LogContent; [] ExecFSM "Client\FSM\updateavailableactions.fsm"; /* Resources Handler */ if !((missionNamespace getVariable "WFBE_C_ECONOMY_INCOME_SYSTEM") in [3,4]) then { ["INITIALIZATION", "Init_Client.sqf: Initializing the Resources FSM"] Call WFBE_CO_FNC_LogContent; (sideJoined) ExecFSM "Client\FSM\resources_cli.fsm"; }; }; [] Spawn { Private ["_commanderTeam"]; waitUntil {!isNil {WFBE_Client_Logic getVariable "wfbe_commander"}}; /* Commander Handling */ ["INITIALIZATION", "Init_Client.sqf: Initializing the Commander Update FSM"] Call WFBE_CO_FNC_LogContent; [] ExecFSM "Client\FSM\updateclient.fsm"; }; //--- Add the briefing (notes). [] Call Compile preprocessFile "briefing.sqf"; //--- HQ Radio system. waitUntil {!isNil {WFBE_Client_Logic getVariable "wfbe_radio_hq"}}; _HQRadio = WFBE_Client_Logic getVariable "wfbe_radio_hq"; ["INITIALIZATION", Format["Init_Client.sqf: Initialized the Radio Announcer [%1]", _HQRadio]] Call WFBE_CO_FNC_LogContent; waitUntil {!isNil {WFBE_Client_Logic getVariable "wfbe_radio_hq_id"}}; WFBE_V_HQTopicSide = WFBE_Client_Logic getVariable "wfbe_radio_hq_id"; ["INITIALIZATION", Format["Init_Client.sqf: Initializing the Radio Announcer Identity [%1]", WFBE_V_HQTopicSide]] Call WFBE_CO_FNC_LogContent; _HQRadio setIdentity WFBE_V_HQTopicSide; _HQRadio setRank "COLONEL"; _HQRadio setGroupId ["HQ"]; _HQRadio kbAddTopic [WFBE_V_HQTopicSide,"Client\kb\hq.bikb","Client\kb\hq.fsm",{call compile preprocessFileLineNumbers "Client\kb\hq.sqf"}]; player kbAddTopic [WFBE_V_HQTopicSide,"Client\kb\hq.bikb","Client\kb\hq.fsm",{call compile preprocessFileLineNumbers "Client\kb\hq.sqf"}]; sideHQ = _HQRadio; ["INITIALIZATION", "Init_Client.sqf: Radio announcer is initialized."] Call WFBE_CO_FNC_LogContent; /* Wait for a valid signal (Teamswaping) with failover */ if (isMultiplayer && (missionNamespace getVariable "WFBE_C_GAMEPLAY_TEAMSWAP_DISABLE") > 0 && time > 7) then { Private ["_get","_timelaps"]; _get = true; sleep (random 0.1); ["RequestJoin", [player, sideJoined]] Call WFBE_CO_FNC_SendToServer; _timelaps = 0; while {true} do { sleep 0.1; _get = missionNamespace getVariable 'WFBE_P_CANJOIN'; if !(isNil '_get') exitWith {["INITIALIZATION", Format["Init_Client.sqf: [%1] Client [%2], Can join? [%3]",sideJoined,name player,_get]] Call WFBE_CO_FNC_LogContent}; _timelaps = _timelaps + 0.1; if (_timelaps > 5) then { _timelaps = 0; ["WARNING", Format["Init_Client.sqf: [%1] Client [%2] join is pending... no ACK was received from the server, a new request will be submited.",sideJoined,name player]] Call WFBE_CO_FNC_LogContent; ["RequestJoin", [player, sideJoined]] Call WFBE_CO_FNC_SendToServer; }; }; if !(_get) exitWith { ["WARNING", Format["Init_Client.sqf: [%1] Client [%2] has teamswapped and is now being sent back to the lobby.",sideJoined,name player]] Call WFBE_CO_FNC_LogContent; (localize 'STR_WF_CHAT_Teamswap_Warnning') Call CommandChatMessage; sleep 3; failMission "END1"; }; }; /* Get the client starting location */ ["INITIALIZATION", "Init_Client.sqf: Retrieving the client spawn location."] Call WFBE_CO_FNC_LogContent; _base = objNull; if (time < 30) then { waitUntil {!isNil {WFBE_Client_Logic getVariable "wfbe_startpos"}}; _base = WFBE_Client_Logic getVariable "wfbe_startpos"; } else { waitUntil {!isNil {WFBE_Client_Logic getVariable "wfbe_hq"}}; waitUntil {!isNil {WFBE_Client_Logic getVariable "wfbe_structures"}}; _base = (sideJoined) Call WFBE_CO_FNC_GetSideHQ; _buildings = (sideJoined) Call WFBE_CO_FNC_GetSideStructures; if (count _buildings > 0) then {_base = _buildings select 0}; }; ["INITIALIZATION", Format["Init_Client.sqf: Client spawn location has been determined at [%1].", _base]] Call WFBE_CO_FNC_LogContent; /* Position the client at the previously defined location */ player setPos ([_base,20,30] Call GetRandomPosition); /* HQ Building Init. */ waitUntil {!isNil {WFBE_Client_Logic getVariable "wfbe_hq_deployed"}}; ["INITIALIZATION", "Init_Client.sqf: Initializing COIN Module."] Call WFBE_CO_FNC_LogContent; _isDeployed = (sideJoined) Call WFBE_CO_FNC_GetSideHQDeployStatus; if (_isDeployed) then { [missionNamespace getVariable "WFBE_C_BASE_COIN_AREA_HQ_DEPLOYED",true,MCoin] Call Compile preprocessFile "Client\Init\Init_Coin.sqf"; } else { [missionNamespace getVariable "WFBE_C_BASE_COIN_AREA_HQ_UNDEPLOYED",false,MCoin] Call Compile preprocessFile "Client\Init\Init_Coin.sqf"; }; _greenList = []; {_greenList = _greenList + [missionNamespace getVariable Format ["%1%2",WFBE_Client_SideJoinedText,_x]]} forEach ["BAR","LVF","HEAVY","AIR"]; missionNamespace setVariable ["COIN_UseHelper", _greenList]; /* Options menu. */ Options = player addAction ["" + (localize "STR_WF_Options") + "","Client\Action\Action_Menu.sqf", "", 1, false, true, "", "_target == player"]; /* Zeta Cargo Lifter. */ [] Call Compile preprocessFile "Client\Module\ZetaCargo\Zeta_Init.sqf"; /* Set Groups ID. */ [] Call Compile preprocessFile "Client\Functions\Client_SetGroupsID.sqf"; sleep 1; //--- Play a tune. _music = switch (true) do { case WF_A2_Vanilla: {["Track11_Large_Scale_Assault","Track02_Insertion","Ambient07_Manhattan","Track10_Logistics","Track09_Movement_To_Contact","Track16_Valentine"]}; case WF_A2_Arrowhead: {["EP1_Track10","EP1_Track12","EP1_Track14","EP1_Track15"]}; case WF_A2_CombinedOps: {["EP1_Track15","Track11_Large_Scale_Assault","Track02_Insertion","Ambient07_Manhattan","Track10_Logistics","Track09_Movement_To_Contact","Track16_Valentine"]}; default {[]}; }; if (count _music > 0) then {playMusic (_music select floor(random(count _music)))}; //--- Make sure that player is always the leader. if (leader(group player) != player) then {(group player) selectLeader player}; /* Override player's Gear.*/ _default = missionNamespace getVariable Format["WFBE_%1_DefaultGear", WFBE_Client_SideJoinedText]; if (count _default <= 3) then { [player, _default select 0, _default select 1, _default select 2] Call WFBE_CO_FNC_EquipUnit; } else { [player, _default select 0, _default select 1, _default select 2, _default select 3, _default select 4] Call WFBE_CO_FNC_EquipUnit; }; /* Default gear menu filler. */ WF_Logic setVariable ['filler','primary']; /* Skill Module. */ [] Call Compile preprocessFile "Client\Module\Skill\Skill_Init.sqf"; (player) Call WFBE_SK_FNC_Apply; /* Vote System, define whether a vote is already running or not */ waitUntil {!isNil {WFBE_Client_Logic getVariable "wfbe_votetime"}}; ["INITIALIZATION", "Init_Client.sqf: Vote system is initialized."] Call WFBE_CO_FNC_LogContent; if ((WFBE_Client_Logic getVariable "wfbe_votetime") > 0) then {createDialog "WFBE_VoteMenu"}; /* Debug System - Client */ if (WF_Debug) then { onMapSingleClick "vehicle player setpos _pos;(vehicle player) setVelocity [0,0,-0.1];"; //--- Teleport //player addEventHandler ["HandleDamage", {false}]; // player setCaptive true; player addEventHandler ["HandleDamage", {false;if (player != (_this select 3)) then {(_this select 3) setDammage 1}}]; //--- God-Slayer mode. }; if ((missionNamespace getVariable "WFBE_C_ARTILLERY_UI") > 0) then {[] ExecVM "ca\modules\ARTY\data\scripts\init.sqf"}; //--- Artillery UI. if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_EASA") > 0) then {Call Compile preprocessFileLineNumbers "Client\Module\EASA\EASA_Init.sqf"}; //--- EASA. if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES") > 0 && WF_A2_Vanilla) then {Call Compile preprocessFileLineNumbers "Client\Module\CM\CM_Init.sqf"}; //--- Countermeasures. /* Key Binding */ [] Call Compile preprocessFile "Client\Init\Init_Keybind.sqf"; /* JIP Handler */ waitUntil {townInit}; ["INITIALIZATION", "Init_Client.sqf: Towns are initialized."] Call WFBE_CO_FNC_LogContent; /* Conquest helper */ if ((missionNamespace getVariable "WFBE_C_TOWNS_CONQUEST_MODE") > 0) then {[] ExecFSM "Client\FSM\conquest_helper.fsm"}; //--- Define the CoIn placement method. switch (missionNamespace getVariable "WFBE_C_STRUCTURES_COLLIDING") do { case 1: { //--- Smooth. missionNamespace setVariable ["WFBE_C_STRUCTURES_PLACEMENT_METHOD",{ Private ["_color","_itemcategory","_preview"]; _itemcategory = _this select 0; _preview = _this select 1; _color = _this select 2; if (surfaceIsWater(position _preview)) then { _color = _colorRed; } else { if (_color != _colorRed) then { if (_itemcategory == 0) then { //--- Structures. if (count(((position _preview) nearObjects ["Building", 10]) - [_preview]) > 0) then {_color = _colorRed}; } else { //--- Rest. if (count((position _preview) nearEntities [['Man','Car','Motorcycle','Tank','Air','Ship'], 10]) > 0) then {_color = _colorRed}; }; }; }; _color }]; }; default { //--- Strict. missionNamespace setVariable ["WFBE_C_STRUCTURES_PLACEMENT_METHOD",{ Private ["_color","_itemcategory","_preview"]; _itemcategory = _this select 0; _preview = _this select 1; _color = _this select 2; if !(typeOf _preview in ["Concrete_Wall_EP1"]) then { _isFlat = (position _preview) isFlatEmpty [ (sizeof typeof _preview) / (missionNamespace getVariable "WFBE_C_BASE_COIN_DISTANCE_MIN"), //--- Minimal distance from another object 0, //--- If 0, just check position. If >0, select new one (missionNamespace getVariable "WFBE_C_BASE_COIN_GRADIENT_MAX"), //--- Max gradient (sizeof typeOf _preview), //--- Gradient area 0, //--- 0 for restricted water, 2 for required water, false, //--- True if some water can be in 25m radius _preview //--- Ignored object ]; //--- Unable to Place due to the land. if (count _isFlat == 0 || count (((position _preview) nearEntities 10) - [_preview]) > 0) then {_color = _colorRed}; }; _color }]; }; }; sleep 3; /* JIP System, initialize the camps and towns properly. */ [] Spawn { sleep 2; ["INITIALIZATION", "Init_Client.sqf: Updating JIP Markers."] Call WFBE_CO_FNC_LogContent; Call Compile preprocessFileLineNumbers "Client\Init\Init_Markers.sqf"; }; /* Repair Truck CoIn Handling. */ [missionNamespace getVariable "WFBE_C_BASE_COIN_AREA_REPAIR",false,RCoin,"REPAIR"] Call Compile preprocessFile "Client\Init\Init_Coin.sqf"; /* A new player come to reinforce the battlefield */ [sideJoinedText,'UnitsCreated',1] Call UpdateStatistics; /* Towns Task System */ ["TownAddComplete"] Spawn TaskSystem; /* Client death handler. */ WFBE_PLAYERKEH = player addEventHandler ['Killed', {[_this select 0,_this select 1] Spawn WFBE_CL_FNC_OnKilled; [_this select 0,_this select 1, sideID] Spawn WFBE_CO_FNC_OnUnitKilled}]; /* Client Init Done - Remove the blackout */ 12452 cutText [(localize 'STR_WF_Loading')+"...","BLACK IN",5]; ["INITIALIZATION", Format ["Init_Client.sqf: Client initialization ended at [%1]", time]] Call WFBE_CO_FNC_LogContent; /* add guer respawn marker on each map */Private ['_area','_coin','_coinCategories','_coinItemArray','_curId','_d','_defenseCategories','_defenseCosts','_defenseDescriptions','_defenses','_emptyStructures','_extra','_fix','_i','_indexCategory','_isHQdeployed','_structureCosts','_structureDescriptions','_structures','_updateDefenses','_updateStructures']; _area = _this select 0; _isHQdeployed = _this select 1; _coin = _this select 2; _extra = ""; if (count _this > 3) then {_extra = _this select 3}; _coin setVariable ["BIS_COIN_areasize", _area]; _coin setVariable ["BIS_COIN_fundsDescription",["$"]]; if (_extra == "") then { _coin setVariable ["BIS_COIN_funds",if ((missionNamespace getVariable "WFBE_C_ECONOMY_CURRENCY_SYSTEM") == 0) then {[(sideJoined) Call GetSideSupply, Call GetPlayerFunds]} else {Call GetPlayerFunds}]; _coin setVariable ["BIS_COIN_fundsDescription",if ((missionNamespace getVariable "WFBE_C_ECONOMY_CURRENCY_SYSTEM") == 0) then {["S ","$ "]} else {["$ "]}]; }; _defenses = []; _defenseCosts = []; _defenseDescriptions = []; _defenseCategories = []; _structures = [(missionNamespace getVariable Format["WFBE_%1STRUCTURENAMES",sideJoinedText]) select 0]; _structureCosts = [(missionNamespace getVariable Format["WFBE_%1STRUCTURECOSTS",sideJoinedText]) select 0]; _structureDescriptions = [(missionNamespace getVariable Format["WFBE_%1STRUCTUREDESCRIPTIONS",sideJoinedText]) select 0]; _i = 0; _updateStructures = false; _updateDefenses = false; _emptyStructures = false; if (_isHQdeployed && _extra == "") then {_i = 1;_updateStructures = true; _updateDefenses = true}; if (_extra == "REPAIR") then {_updateDefenses = true; _emptyStructures = true;_coin setVariable ["BIS_COIN_funds",Call GetPlayerFunds]}; if (_updateStructures) then { _structures = missionNamespace getVariable Format["WFBE_%1STRUCTURENAMES",sideJoinedText]; _structureCosts = missionNamespace getVariable Format["WFBE_%1STRUCTURECOSTS",sideJoinedText]; _structureDescriptions = missionNamespace getVariable Format["WFBE_%1STRUCTUREDESCRIPTIONS",sideJoinedText]; }; if (_updateDefenses) then { _defenses = missionNamespace getVariable Format["WFBE_%1DEFENSENAMES",sideJoinedText]; { _d = missionNamespace getVariable _x; if !(isNil '_d') then { _defenseCosts = _defenseCosts + [(_d select QUERYUNITPRICE)]; _defenseDescriptions = _defenseDescriptions + [(_d select QUERYUNITLABEL)]; _defenseCategories = _defenseCategories + [(_d select QUERYUNITFACTORY)]; }; } forEach _defenses; }; if (_emptyStructures) then { _structures = []; _structureCosts = []; _structureDescriptions = []; }; _indexCategory=0; _coinCategories = []; _coinItemArray = []; if (count _structures > 0) then {_coinCategories = _coinCategories + [localize "strwfbase"];_indexCategory =_indexCategory +1;}; if (count _defenses > 0) then {if (_extra == "REPAIR") then {_coinCategories = []};_coinCategories = _coinCategories + [localize "str_m04t37_0"] + [localize "STR_WF_Fortification"] + [localize "STR_WF_Strategic"] + [localize "STR_WF_Ammo"]}; if (_isHQdeployed && _i == 1 && _extra == "") then {_coinItemArray = _coinItemArray + [[_structures select 0,0,[0, _structureCosts select 0], (_structureDescriptions select 0) + " " + localize "strwfhqmobilizeme"]]}; for [{_i=_i}, {_i*/ /*%FSM*/ /* item0[] = {"React",0,250,-675.000000,-1800.000000,-575.000000,-1750.000000,0.000000,"React"}; item1[] = {"",7,210,-625.645081,-1628.257446,-617.645203,-1620.257446,0.000000,""}; item2[] = {"__",8,218,-775.000000,-1650.000000,-675.000000,-1600.000000,0.000000,"-"}; item3[] = {"END",1,250,-775.000000,-1575.000000,-675.000000,-1525.000000,0.000000,"END"}; item4[] = {"Come_on__come",4,218,-525.000000,-1525.000000,-225.000000,-1475.000000,1.000000,"Come on, come"}; item5[] = {"___Nervous_anim",1,250,-175.000000,-1500.000000,125.000000,-1450.000000,0.000000,"< Nervous anim >" \n "No more!"}; item6[] = {"___Interrupted_",4,218,-525.000000,-1650.000000,-225.000000,-1600.000000,1.000000,"< Interrupted >"}; item7[] = {"Come_on__come",1,250,-175.000000,-1625.000000,125.000000,-1575.000000,0.000000,"Come on, come"}; link0[] = {0,1}; link1[] = {1,2}; link2[] = {1,4}; link3[] = {1,6}; link4[] = {2,3}; link5[] = {4,5}; link6[] = {6,7}; globals[] = {25.000000,1,0,1,16777215,640,480,2,361,6316128,1,-785.646118,299.399323,-517.653870,-1918.175049,681,879,1}; window[] = {2,-1,-1,-1,-1,790,54,1076,54,3,701}; *//*%FSM*/ class FSM { fsmName = "WF_HQ"; class States { /*%FSM*/ class React { name = "React"; init = /*%FSM*/"if (isNil ""BIS_DEBUG_DIALOG"") then {} else" \n "{" \n " debugLog format[""DIALOG- FSM of %1 initiated by %2 sentenceId %3 sentence %4"",_this,_from, _sentenceId, localize (""STR_""+""_sentenceId"")];" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Come_on__come { priority = 1.000000; to="___Nervous_anim"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_sentenceId in [""Cooper_ComeOnWithMe""]);"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class ___Interrupted_ { priority = 1.000000; to="Come_on__come"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_sentenceId in [""Interrupted""]);"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class __ { priority = 0.000000; to="END"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class END { name = "END"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class ___Nervous_anim { name = "___Nervous_anim"; init = /*%FSM*/"_this doWatch _from;" \n "DEBUGLOG ""CooperGalkinaScene.fsm: START-----------------------------------"";" \n "" \n "DEBUGLOG ""Galkina is NERVOUS and ESCAPING"";" \n "_t = time;" \n "[] spawn" \n "{" \n " _nic = [objNull, BIS_civWoman, rPLAYMOVENOW, ""Cwmn_GalkinaLiesNervousThenRun""] call RE;" \n " DEBUGLOG ""sceneGalkina.sqf: Animation: Cwmn_GalkinaLiesNervousThenRun"";" \n " _BIS_civWomanDone = BIS_civWoman addEventHandler [""AnimDone"", " \n " { " \n " //DEBUGLOG format[""%1 animdone: %2"", _this select 0, _this select 1];" \n " " \n " //BIS_civWoman enableAI ""ANIM"";" \n " //BIS_civWoman setSpeedMode ""FULL"";" \n " " \n " _nic = [objNull, BIS_civWoman, rPLAYMOVENOW, ""AmovPercMrunSnonWnonDf""] call RE;" \n " _womanDir = (getDir BIS_civWoman) - 180;" \n " BIS_civWoman setdir _womanDir;" \n " _GalkinaEscapePoints = [""BIS_civWomanPositionEnd2a"", ""BIS_civWomanPositionEnd2b"", ""BIS_civWomanPositionEnd2c""];" \n " _GalkinaSelectedPoint = _GalkinaEscapePoints select floor(random (count _GalkinaEscapePoints)); " \n " DEBUGLOG format[""grpCIVWoman.fsm: Galkina ESCAPING on random point: %1"",_GalkinaSelectedPoint];" \n " " \n " //CREATE END TRIGGER " \n " _trgGalkinaEnd2=createTrigger[""EmptyDetector"",getMarkerPos _GalkinaSelectedPoint];" \n " _trgGalkinaEnd2 setTriggerArea[5,5,0,false];" \n " _trgGalkinaEnd2 setTriggerActivation[""MEMBER"",""PRESENT"",true];" \n " _trgGalkinaEnd2 triggerAttachVehicle [BIS_civWoman];" \n " _trgGalkinaEnd2 setTriggerStatements" \n " [" \n " ""this"", " \n " ""DEBUGLOG """"grpCIVWoman.fsm: Galkina reached her end position"""";BIS_civWoman setUnitPos """"DOWN""""; ""," \n " """"" \n " ]; " \n " " \n " BIS_civWoman doMove getMarkerPos _GalkinaSelectedPoint;" \n " BIS_civWoman forceSpeed 15;" \n " BIS_civWoman removeEventHandler [""animDone"", 0];" \n " }" \n " ];" \n " sleep 7;" \n " _nic = [objNull, BIS_civWoman , rKBTELL, BIS_cooper, ""CooperGalkinaScene"", ""Galkina_NoNoMore""] call RE;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Come_on__come { name = "Come_on__come"; init = /*%FSM*/"_nic = [objNull, _from , rKBTELL, _this, _topic, ""Cooper_ComeOnWithMe""] call RE;" \n "" \n "_this doWatch _from;" \n "DEBUGLOG ""CooperGalkinaScene.fsm: START-----------------------------------"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ }; initState="React"; finalStates[] = { "END", "___Nervous_anim", "Come_on__come", }; }; /*%FSM*/ Private ["_flarecount","_i","_isActive","_missile","_type","_vehicle"]; _vehicle = _this select 0; _missile = _this select 1; if (alive _vehicle && (getPos _vehicle) select 2 > 5) then { _isActive = _vehicle getvariable "FlareActive"; _type = getNumber (configFile >> "CfgAmmo" >> _missile >> "AirLock"); if ((_type == 1) && (! _isActive)) then { private ["_flarecount"]; _vehicle setVariable ["FlareActive", true]; if ((driver _vehicle) == player) then {_vehicle vehicleChat "WARNING: incomming missile!"}; _flarecount = _vehicle getVariable "FlareCount"; if (_flarecount > 0) then { _this Spawn CM_Spoofing; for [{_i=0}, {_i<8}, {_i=_i+1}] do { [_vehicle] Call CM_Flares; sleep 0.3; }; }; _vehicle setVariable ["FlareActive", false]; }; };//--- ArmA 2 countermeasures, by Maddmatt. Private ["_dirpos","_div","_emmiters","_flare","_flarecount","_flares","_flarevel","_i","_launchercount","_li","_muzzzlevel","_relpos","_sm","_sp","_vehicle","_vvel"]; _vehicle = _this select 0; _flares = []; _emmiters = []; _muzzzlevel = 25; if (_vehicle isKindOf "Plane") then {_muzzzlevel = 150}; _launchercount = 0; while {([0,0,0] distance (_vehicle selectionPosition (format ["flare_launcher%1",_launchercount+1]))) != 0} do {_launchercount = _launchercount+1}; for "_i" from 1 to (_launchercount) do { _flarecount = (_vehicle getVariable "FlareCount") - 1; _vehicle setVariable ["FlareCount", _flarecount]; _relpos = _vehicle modelToWorld (_vehicle selectionPosition format["flare_launcher%1",_i]); _dirpos = _vehicle modelToWorld (_vehicle selectionPosition format["flare_launcher%1_dir",_i]); _flare = "FlareCountermeasure" createVehicleLocal _relpos; _dirpos = [(_dirpos select 0) - (_relpos select 0),(_dirpos select 1) - (_relpos select 1),(_dirpos select 2) - (_relpos select 2)]; _div = abs(_dirpos select 0)+abs(_dirpos select 1)+abs(_dirpos select 2); _flarevel = [(_dirpos select 0)/_div*_muzzzlevel,(_dirpos select 1)/_div*_muzzzlevel,(_dirpos select 2)/_div*_muzzzlevel]; _vvel = velocity _vehicle; _flare setVelocity [(_flarevel select 0) + (_vvel select 0),(_flarevel select 1) + (_vvel select 1),(_flarevel select 2) + (_vvel select 2)]; _flares = _flares + [_flare]; _sm = "#particlesource" createVehicleLocal getpos _flare; _sm setParticleRandom [0.5, [0.3, 0.3, 0.3], [0.5, 0.5, 0.5], 0, 0.3, [0, 0, 0, 0], 0, 0,360]; _sm setParticleParams [["\ca\Data\ParticleEffects\Universal\Universal", 16, 12, 8,0],"", "Billboard", 1, 3, [0, 0, 0],[0,0,0], 1, 1, 0.80, 0.5, [1.3,4],[[0.9,0.9,0.9,0.6], [1,1,1,0.3], [1,1,1,0]],[1],0.1,0.1,"","",_flare]; _sm setDropInterval 0.02; _sp = "#particlesource" createVehicleLocal getpos _flare; _sp setParticleRandom [0.03, [0.3, 0.3, 0.3], [1, 1, 1], 0, 0.2, [0, 0, 0, 0], 0, 0,360]; _sp setParticleParams [["\ca\Data\ParticleEffects\Universal\Universal", 16, 13, 2,0],"", "Billboard", 1, 0.1, [0, 0, 0],[0,0,0], 1, 1, 0.80, 0.5, [1.5,0],[[1,1,1,-4], [1,1,1,-4], [1,1,1,-2],[1,1,1,0]],[1000],0.1,0.1,"","",_flare,360]; _sp setDropInterval 0.001; _li = "#lightpoint" createVehicleLocal getpos _flare; _li setLightBrightness 0.1; _li setLightAmbient [0.8, 0.6, 0.2]; _li setLightColor [1, 0.5, 0.2]; _li lightAttachObject [_flare, [0,0,0]]; _emmiters = _emmiters + [_sm,_sp,_li]; }; (_emmiters + _flares) spawn { sleep 4.5 + random 1; {deletevehicle _x} forEach _this; };CM_Countermeasures = Compile preprocessFile "Client\Module\CM\CM_Countermeasures.sqf"; CM_Flares = Compile preprocessFile "Client\Module\CM\CM_Flares.sqf"; CM_Spoofing = Compile preprocessFile "Client\Module\CM\CM_Spoofing.sqf";Private ["_amount","_vehicle"]; _vehicle = _this select 0; if (isNull _vehicle) exitWith {}; waitUntil {commonInitComplete}; sleep 2; _amount = if (_vehicle isKindOf "Plane") then {missionNamespace getVariable 'WFBE_C_UNITS_COUNTERMEASURE_PLANES'} else {missionNamespace getVariable 'WFBE_C_UNITS_COUNTERMEASURE_CHOPPERS'}; _vehicle setVariable ["FlareCount", _amount]; _vehicle setVariable ["FlareActive", false]; Private ["_ammo","_chance","_enemy","_prob","_missile","_vehicle"]; _vehicle = _this select 0; _ammo = _this select 1; _enemy = _this select 2; _missile = objnull; if ((alive _vehicle) && (isEngineOn _vehicle)) then { _missile = nearestObject [_enemy,_ammo]; waitUntil {(_missile distance _vehicle) < ((speed _vehicle) * 1.5)}; _prob = 25 + (random 75); _chance = random 100; if (_prob > _chance) then { while {alive _missile} do { _missile setDir ((getDir _missile) + ((random 20) - 10)); sleep 0.1; }; }; };_logic = _this select 3; _startPos = _this select 4; _source = _this select 5; if !(alive _source) exitWith {}; //--- Area limits. _root = "REPAIR"; _hq = (sideJoined) Call WFBE_CO_FNC_GetSideHQ; if (_source == _hq) then {_root = "HQ"}; _tooFar = false; if ((missionNamespace getVariable "WFBE_C_BASE_AREA") > 0) then { if (_source == _hq) then { if (count(WFBE_Client_Logic getVariable "wfbe_basearea") >= (missionNamespace getVariable "WFBE_C_BASE_AREA")) then { _startpos = [_startPos,WFBE_Client_Logic getVariable "wfbe_basearea"] Call WFBE_CO_FNC_GetClosestEntity; if (_source distance _startpos > (missionNamespace getVariable "WFBE_C_BASE_HQ_BUILD_RANGE")) exitWith {_tooFar = true}; }; }; }; if (isNil 'WFBE_COIN_Root') then {WFBE_COIN_Root = ""}; if (WFBE_COIN_Root != _root) then {lastBuilt = []}; WFBE_COIN_Root = _root; if (_tooFar) exitWith {hint (localize 'STR_WF_INFO_BaseArea_Reached')};//--- Base area reached. //--- Call in the construction interface. 112200 cutrsc ["WFBE_ConstructionInterface","plain"]; //---added-MrNiceGuy uiNamespace setVariable ["COIN_displayMain",finddisplay 46]; //--- Terminate of system is already running if !(isNil {player getVariable "bis_coin_logic"}) exitWith {}; player setVariable ["bis_coin_logic",_logic]; bis_coin_player = player; //--- Convert the startpos to array if needed (base area). if (typeName _startPos == "OBJECT") then {_startPos = getPos _startPos}; _camera = BIS_CONTROL_CAM; if (isNil "BIS_CONTROL_CAM") then { _camera = "camconstruct" camCreate [position player select 0,position player select 1,15]; _camera cameraEffect ["internal","back"]; _camera camPrepareFov 0.900; _camera camPrepareFocus [-1,-1]; _camera camCommitPrepared 0; cameraEffectEnableHUD true; _camera setdir direction player; [_camera,-30,0] call BIS_fnc_setPitchBank; _camera camConstuctionSetParams ([_startPos] + (_logic getVariable "BIS_COIN_areasize")); }; BIS_CONTROL_CAM = _camera; BIS_CONTROL_CAM_LMB = false; BIS_CONTROL_CAM_RMB = false; 1122 cutrsc ["constructioninterface","plain"]; //--- Prevent uikey override for other mods. WF_COIN_DEH1 = (uiNamespace getVariable "COIN_displayMain") displayAddEventHandler ["KeyDown", "if !(isNil 'BIS_CONTROL_CAM_Handler') then {BIS_temp = ['keydown',_this,commandingMenu] spawn BIS_CONTROL_CAM_Handler; BIS_temp = nil;}"]; WF_COIN_DEH2 = (uiNamespace getVariable "COIN_displayMain") displayAddEventHandler ["KeyUp", "if !(isNil 'BIS_CONTROL_CAM_Handler') then {BIS_temp = ['keyup',_this] spawn BIS_CONTROL_CAM_Handler; BIS_temp = nil;}"]; WF_COIN_DEH3 = (uiNamespace getVariable "COIN_displayMain") displayAddEventHandler ["MouseButtonDown", "if !(isNil 'BIS_CONTROL_CAM_Handler') then {BIS_temp = ['mousedown',_this,commandingMenu] spawn BIS_CONTROL_CAM_Handler; BIS_temp = nil; BIS_CONTROL_CAM_onMouseButtonDown = _this; if (_this select 1 == 1) then {BIS_CONTROL_CAM_RMB = true}; if (_this select 1 == 0) then {BIS_CONTROL_CAM_LMB = true};}"]; WF_COIN_DEH4 = (uiNamespace getVariable "COIN_displayMain") displayAddEventHandler ["MouseButtonUp", "if !(isNil 'BIS_CONTROL_CAM_Handler') then {BIS_CONTROL_CAM_RMB = false; BIS_CONTROL_CAM_LMB = false;}"]; BIS_CONTROL_CAM_keys = []; if (isNil "BIS_CONTROL_CAM_ASL") then { createCenter sideLogic; _logicGrp = createGroup sidelogic; _logicASL = _logicGrp createUnit ["Logic",position player,[],0,"none"]; BIS_CONTROL_CAM_ASL = _logicASL; }; _logic setVariable ["BIS_COIN_selected",objNull]; _logic setVariable ["BIS_COIN_params",[]]; _logic setVariable ["BIS_COIN_tooltip",""]; _logic setVariable ["BIS_COIN_menu","#USER:BIS_Coin_categories_0"]; _logic setVariable ["BIS_COIN_restart",true]; _logic setVariable ["WF_RequestUpdate",false]; _get = _logic getVariable 'WF_NVGPersistent'; _nvgstate = true; if (isNil '_get') then { _nvgstate = if (daytime > 18.5 || daytime < 5.5) then {true} else {false}; _logic setVariable ['WF_NVGPersistent',_nvgstate]; } else { _nvgstate = _logic getVariable 'WF_NVGPersistent'; }; camUseNVG _nvgstate; _logic setVariable ["BIS_COIN_nvg",_nvgstate]; _bns = missionNamespace getVariable Format["WFBE_%1STRUCTURENAMES",sideJoinedText]; _greenList = missionNamespace getVariable "COIN_UseHelper"; //--- Building Limit Init. _buildingsNames = _bns; _buildingsNames = _buildingsNames - [_buildingsNames select 0]; _buildingsType = missionNamespace getVariable Format["WFBE_%1STRUCTURES",sideJoinedText]; _buildingsType = _buildingsType - [_buildingsType select 0]; //--- Open menu _logic spawn { _logic = _this; waitUntil {!isNil {_this getVariable "BIS_COIN_fundsOld"}}; while {!isNil "BIS_CONTROL_CAM"} do { waitUntil { _params = _logic getVariable "BIS_COIN_params"; if (isNil "_params") then {_params = []}; (commandingMenu == "" && count _params == 0 && !BIS_CONTROL_CAM_RMB) || isNil "BIS_CONTROL_CAM" }; if (isNil "BIS_CONTROL_CAM") exitWith {}; showCommandingMenu "#USER:BIS_Coin_categories_0"; sleep 0.01; }; }; //--- Border - temporary solution //TODO: move border if position of logic changes (eg. by placing hq) _createBorder = { Private ["_logic","_startpos"]; _logic = _this select 0; _startpos = _this select 1; _oldBorder = missionNamespace getVariable "BIS_COIN_border"; if (!isNil "_oldBorder") then { {deleteVehicle _x} forEach _oldBorder; }; missionNamespace setVariable ["BIS_COIN_border",nil]; _border = []; _center = _startpos; _size = (_logic getVariable "BIS_COIN_areasize") select 0; _width = 9.998; //200/126 _width = 9.996; //150/96 _width = 9.992; //100/64 _width = 9.967; //50/32 _width = 9.917; //30/20 _width = 9.83; //20/14 _width = 9.48; //10/8 _width = 10 - (0.1/(_size * 0.2)); _width = 10; _pi = 3.14159265358979323846; _perimeter = (_size * _pi); _perimeter = _perimeter + _width - (_perimeter % _width); _size = (_perimeter / _pi); _wallcount = _perimeter / _width * 2; _total = _wallcount; for "_i" from 1 to _total do { _dir = (360 / _total) * _i; _xpos = (_center select 0) + (sin _dir * _size); _ypos = (_center select 1) + (cos _dir * _size); _zpos = (_center select 2); _a = "transparentwall" createVehicleLocal [_xpos,_ypos,_zpos]; _a setposasl [_xpos,_ypos,0]; _a setdir (_dir + 90); _border = _border + [_a]; }; missionNamespace setVariable ["BIS_COIN_border",_border]; }; _createBorderScope = [_logic,_startpos] spawn _createBorder; //--- This block is pretty important if !(isNil "BIS_CONTROL_CAM_Handler") exitWith {endLoadingScreen}; BIS_CONTROL_CAM_Handler = { _mode = _this select 0; _input = _this select 1; _camera = BIS_CONTROL_CAM; _logic = bis_coin_player getVariable "bis_coin_logic"; _terminate = false; if (isNil "_logic") exitWith {}; _areasize = (_logic getVariable "BIS_COIN_areasize"); _limitH = _areasize select 0; _limitV = _areasize select 1; _keysCancel = actionKeys "MenuBack"; _keysBanned = [1]; _keyNightVision = actionKeys "NightVision"; //--- Mouse DOWN if (_mode == "mousedown") then { _key = _input select 1; if (_key == 1 && 65665 in (actionkeys "MenuBack")) then {_terminate = true}; }; //--- Key DOWN if (_mode == "keydown") then { _key = _input select 1; _ctrl = _input select 3; if !(_key in (BIS_CONTROL_CAM_keys + _keysBanned)) then {BIS_CONTROL_CAM_keys = BIS_CONTROL_CAM_keys + [_key]}; //--- Terminate CoIn if (_key in _keysCancel && isNil "BIS_Coin_noExit") then {_terminate = true}; //--- Start NVG if (_key in _keyNightVision) then { _NVGstate = !(_logic getVariable "BIS_COIN_nvg"); _logic setVariable ["BIS_COIN_nvg",_NVGstate]; _logic setVariable ['WF_NVGPersistent',_NVGstate]; camUseNVG _NVGstate; }; //--- Last Built Defense (Custom Action #1). if ((_key in (actionKeys "User15")) && count lastBuilt > 0) then { _deployed = true; if (WFBE_COIN_Root == "HQ") then {_deployed = (sideJoined) Call WFBE_CO_FNC_GetSideHQDeployStatus}; _currentCash = Call GetPlayerFunds; if (_currentCash > (lastBuilt select 2) select 1 && _deployed) then { showCommandingMenu ''; _logic setVariable ["BIS_COIN_params",lastBuilt]; }; }; //--- Manning Defense (Custom Action #2). if ((_key in (actionKeys "User16")) && ((missionNamespace getVariable "WFBE_C_BASE_DEFENSE_MAX_AI") > 0)) then { if (manningDefense) then {manningDefense = false} else {manningDefense = true}; _status = if (manningDefense) then {localize "STR_WF_On"} else {localize "STR_WF_Off"}; _logic setVariable ["WF_RequestUpdate",true]; }; //--- Sell Defense. (Commander only) (Custom Action #3). if ((_key in (actionKeys "User17")) && !isNull(commanderTeam)) then { if(commanderTeam == clientTeam) then { _preview = _logic getVariable "BIS_COIN_preview"; if (isNil "_preview") then {//--- Proceed when there is no preview. _targeting = screenToWorld [0.5,0.5]; _near = nearestObjects [_targeting,missionNamespace getVariable Format["WFBE_%1DEFENSENAMES",sideJoinedText],25]; if (count _near > 0) then { _closest = _near select 0; //--- Abort if too far. if ((player distance _closest) > ((_logic getVariable "BIS_COIN_areasize") select 0)) exitWith {}; _sold = _closest getVariable 'sold'; _closestType = typeOf (_closest); _get = missionNamespace getVariable _closestType; if (!isNil '_get' && isNil '_sold') then { _closest setVariable ['sold',true]; _price = _get select QUERYUNITPRICE; round(_price/2) Call ChangePlayerFunds; deleteVehicle _closest; }; }; }; }; }; }; //--- Key UP if (_mode == "keyup") then { _key = _input select 1; if (_key in BIS_CONTROL_CAM_keys) then {BIS_CONTROL_CAM_keys = BIS_CONTROL_CAM_keys - [_key]}; }; //--- Deselect or Close if (_terminate) then { _menu = _this select 2; //--- Close if (isNil "BIS_Coin_noExit") then { if (_menu == "#USER:BIS_Coin_categories_0") then { BIS_CONTROL_CAM cameraEffect ["terminate","back"]; camDestroy BIS_CONTROL_CAM; BIS_CONTROL_CAM = nil; } else { _preview = _logic getVariable "BIS_COIN_preview"; if !(isNil "_preview") then {deleteVehicle _preview}; _logic setVariable ["BIS_COIN_preview",nil]; _logic setVariable ["BIS_COIN_params",[]]; _get = _logic getVariable 'WFBE_Helper'; if !(isNil '_get') then { deleteVehicle _get; _logic setVariable ['WFBE_Helper',nil]; }; }; }; }; //--- Camera no longer exists - terminate and start cleanup if (isNil "BIS_CONTROL_CAM" || player != bis_coin_player || !isNil "BIS_COIN_QUIT") exitWith { if !(isNil "BIS_CONTROL_CAM") then {BIS_CONTROL_CAM cameraEffect ["terminate","back"];camDestroy BIS_CONTROL_CAM;}; BIS_CONTROL_CAM = nil; BIS_CONTROL_CAM_Handler = nil; 1122 cuttext ["","plain"]; _player = bis_coin_player; _player setVariable ["bis_coin_logic",nil]; bis_coin_player = objNull; _preview = _logic getVariable "BIS_COIN_preview"; if !(isNil "_preview") then {deleteVehicle _preview}; _logic setVariable ["BIS_COIN_preview",nil]; _get = _logic getVariable 'WFBE_Helper'; if !(isNil '_get') then { deleteVehicle _get; _logic setVariable ['WFBE_Helper',nil]; }; _logic setVariable ["BIS_COIN_selected",nil]; _logic setVariable ["BIS_COIN_params",nil]; _logic setVariable ["BIS_COIN_lastdir",nil]; _logic setVariable ["BIS_COIN_tooltip",nil]; _logic setVariable ["BIS_COIN_fundsOld",nil]; _logic setVariable ["BIS_COIN_restart",nil]; _logic setVariable ["BIS_COIN_nvg",nil]; _logic setVariable ["WF_RequestUpdate",nil]; showCommandingMenu ""; //_display = finddisplay 46; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["KeyDown",WF_COIN_DEH1]; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["KeyUp",WF_COIN_DEH2]; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["MouseButtonDown",WF_COIN_DEH3]; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["MouseButtonUp",WF_COIN_DEH4]; //--- Behold the placeholders BIS_COIN_QUIT = nil; _border = missionNamespace getVariable "BIS_COIN_border"; {deleteVehicle _x} forEach _border; missionNamespace setVariable ["BIS_COIN_border",nil]; }; }; waitUntil {scriptDone _createBorderScope}; endLoadingScreen; ///*** LOOOP **** _canAffordCount = 0; _canAffordCountOld = 0; _oldMenu = commandingMenu; _limitHOld = -1; _limitVOld = -1; _loaded = false; _localtime = time; while {!isNil "BIS_CONTROL_CAM"} do { //if (isnull (uiNamespace getVariable 'BIS_CONTROL_CAM_DISPLAY') && !_loaded) then { if (isnull (uiNamespace getVariable 'wfbe_title_coin') && !_loaded) then { //---TEST MrNiceGuy cameraEffectEnableHUD true; 1122 cutrsc ["constructioninterface","plain"]; _loaded = true; _logic setVariable ["BIS_COIN_restart",true]; _localtime = time; }; if ((time - _localtime) >= 1 && _loaded) then {_loaded = false}; _logic = bis_coin_player getVariable "bis_coin_logic"; _mode = "mousemoving"; _camera = BIS_CONTROL_CAM; if (isNil "_logic") exitWith {}; //--- Player dies on construction mode or the source die. if (!alive player || !alive _source) exitWith { startLoadingScreen [localize "str_coin_exit" + " " + localize "str_coin_name","RscDisplayLoadMission"]; if !(isNil "BIS_CONTROL_CAM") then {BIS_CONTROL_CAM cameraEffect ["terminate","back"];camDestroy BIS_CONTROL_CAM;}; BIS_CONTROL_CAM = nil; BIS_CONTROL_CAM_Handler = nil; 1122 cuttext ["","plain"]; _player = bis_coin_player; _player setVariable ["bis_coin_logic",nil]; bis_coin_player = objNull; _preview = _logic getVariable "BIS_COIN_preview"; if !(isNil "_preview") then {deleteVehicle _preview}; _logic setVariable ["BIS_COIN_preview",nil]; _get = _logic getVariable 'WFBE_Helper'; if !(isNil '_get') then { deleteVehicle _get; _logic setVariable ['WFBE_Helper',nil]; }; _logic setVariable ["BIS_COIN_selected",nil]; _logic setVariable ["BIS_COIN_params",nil]; _logic setVariable ["BIS_COIN_lastdir",nil]; _logic setVariable ["BIS_COIN_tooltip",nil]; _logic setVariable ["BIS_COIN_fundsOld",nil]; _logic setVariable ["BIS_COIN_restart",nil]; _logic setVariable ["BIS_COIN_nvg",nil]; _logic setVariable ["WF_RequestUpdate",nil]; showCommandingMenu ""; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["KeyDown",WF_COIN_DEH1]; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["KeyUp",WF_COIN_DEH2]; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["MouseButtonDown",WF_COIN_DEH3]; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["MouseButtonUp",WF_COIN_DEH4]; //--- Behold the placeholders BIS_COIN_QUIT = nil; WF_COIN_DEH1 = nil; WF_COIN_DEH2 = nil; WF_COIN_DEH3 = nil; WF_COIN_DEH4 = nil; _border = missionNamespace getVariable "BIS_COIN_border"; {deleteVehicle _x} forEach _border; missionNamespace setVariable ["BIS_COIN_border",nil]; endLoadingScreen; }; _areasize = (_logic getVariable "BIS_COIN_areasize"); _limitH = _areasize select 0; _limitV = _areasize select 1; if (_limitH != _limitHOld || _limitV != _limitVOld) then { [_logic,_startpos] spawn _createBorder; BIS_CONTROL_CAM camConstuctionSetParams ([_startPos] + (_logic getVariable "BIS_COIN_areasize")); }; _limitHOld = _limitH; _limitVOld = _limitV; _keysCancel = actionKeys "MenuBack"; _keysBanned = [1]; //--- Mouse moving or holding if (_mode in ["mousemoving","mouseholding"]) then { //--- Check pressed keys _keys = BIS_CONTROL_CAM_keys; _ctrl = (29 in _keys) || (157 in _keys); _shift = (42 in _keys) || (54 in _keys); _alt = (56 in _keys); //--- Construction or Selection _params = _logic getVariable "BIS_COIN_params"; _tooltip = "empty"; _tooltipType = "empty"; _selected = objNull; if (count _params > 0) then { //--- Basic colors _colorGreen = "#(argb,8,8,3)color(0,1,0,0.3,ca)"; _colorRed = "#(argb,8,8,3)color(1,0,0,0.3,ca)"; _colorGray = "#(argb,8,8,3)color(1,1,1,0.1,ca)"; _colorGray = "#(argb,8,8,3)color(0,0,0,0.25,ca)"; _color = _colorGreen; //--- Class, Category, Cost, (preview class), (display name) _itemclass = _params select 0; _itemcategory = _params select 1; _itemcost = _params select 2; _itemcash = 0; if (typename _itemcost == "ARRAY") then {_itemcash = _itemcost select 0; _itemcost = _itemcost select 1}; _funds = _logic getVariable "BIS_COIN_funds"; if (typename _funds == "ARRAY") then { _a = (sideJoined) Call GetSideSupply; _b = Call GetPlayerFunds; _funds = [_a]+[_b]; } else { _funds = [Call GetPlayerFunds]; }; _itemFunds = _funds select _itemcash; _itemname = if (count _params > 3) then {_params select 3} else {getText (configFile >> "CfgVehicles" >> _itemclass >> "displayName")}; _itemclass_preview = getText (configFile >> "CfgVehicles" >> _itemclass >> "ghostpreview"); if (_itemclass_preview == "") then {_itemclass_preview = _itemclass}; //--- Preview building _preview = camtarget BIS_CONTROL_CAM; _new = false; if (typeof _preview != _itemclass_preview) then { //--- No preview deleteVehicle _preview; if !(isNil {_logic getVariable "BIS_COIN_preview"}) then {deleteVehicle (_logic getVariable "BIS_COIN_preview")}; //--- Serialization hack _get = _logic getVariable 'WFBE_Helper'; if !(isNil '_get') then { deleteVehicle _get; _logic setVariable ['WFBE_Helper',nil]; }; _hqDeployed = (sideJoined) Call WFBE_CO_FNC_GetSideHQDeployStatus; _index = _bns find _itemclass; if (_index == 0 && _hqDeployed) exitWith { _mhq = (sideJoined) Call WFBE_CO_FNC_GetSideHQ; (_mhq) Spawn HandleHQAction; // WFBE_RequestStructure = ['SRVFNCREQUESTSTRUCTURE',[sideJoined,_itemclass,[0,0,0],0]]; // publicVariable 'WFBE_RequestStructure'; // if (isHostedServer) then {['SRVFNCREQUESTSTRUCTURE',[sideJoined,_itemclass,[0,0,0],0]] Spawn HandleSPVF}; ["RequestStructure", [sideJoined,_itemclass,[0,0,0],0]] Call WFBE_CO_FNC_SendToServer; [missionNamespace getVariable "WFBE_C_BASE_COIN_AREA_HQ_UNDEPLOYED",false,MCoin] Call Compile preprocessFile "Client\Init\Init_Coin.sqf"; _structuresCosts = missionNamespace getVariable Format["WFBE_%1STRUCTURECOSTS",sideJoinedText]; if ((missionNamespace getVariable "WFBE_C_ECONOMY_CURRENCY_SYSTEM") == 0) then { [sideJoined,-(_structuresCosts select _index)] Call ChangeSideSupply; } else { -(_structuresCosts select _index) Call ChangePlayerFunds; }; ////////////////////////////////////////////////// startLoadingScreen [localize "str_coin_exit" + " " + localize "str_coin_name","RscDisplayLoadMission"]; ////////////////////////////////////////////////// if !(isNil "BIS_CONTROL_CAM") then {BIS_CONTROL_CAM cameraEffect ["terminate","back"];camDestroy BIS_CONTROL_CAM;}; BIS_CONTROL_CAM = nil; BIS_CONTROL_CAM_Handler = nil; 1122 cuttext ["","plain"]; _player = bis_coin_player; _player setVariable ["bis_coin_logic",nil]; bis_coin_player = objNull; _preview = _logic getVariable "BIS_COIN_preview"; if !(isNil "_preview") then {deleteVehicle _preview}; _logic setVariable ["BIS_COIN_preview",nil]; _logic setVariable ["BIS_COIN_selected",nil]; _logic setVariable ["BIS_COIN_params",nil]; _logic setVariable ["BIS_COIN_lastdir",nil]; _logic setVariable ["BIS_COIN_tooltip",nil]; _logic setVariable ["BIS_COIN_fundsOld",nil]; _logic setVariable ["BIS_COIN_restart",nil]; _logic setVariable ["BIS_COIN_nvg",nil]; _logic setVariable ["WF_RequestUpdate",nil]; showCommandingMenu ""; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["KeyDown",WF_COIN_DEH1]; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["KeyUp",WF_COIN_DEH2]; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["MouseButtonDown",WF_COIN_DEH2]; (uiNamespace getVariable "COIN_displayMain") displayRemoveEventHandler ["MouseButtonUp",WF_COIN_DEH3]; //--- Behold the placeholders BIS_COIN_QUIT = nil; WF_COIN_DEH1 = nil; WF_COIN_DEH2 = nil; WF_COIN_DEH3 = nil; WF_COIN_DEH4 = nil; _border = missionNamespace getVariable "BIS_COIN_border"; {deleteVehicle _x} forEach _border; missionNamespace setVariable ["BIS_COIN_border",nil]; [] Spawn { _start = time; waitUntil {!((sideJoined) Call WFBE_CO_FNC_GetSideHQDeployStatus) || time - _start > 15}; if (time - _start < 15) then { sleep 2; _mhq = (sideJoined) Call WFBE_CO_FNC_GetSideHQ; if (alive _mhq) then { _mhq addAction [localize "STR_WF_Unlock_MHQ","Client\Action\Action_ToggleLock.sqf", [], 95, false, true, '', 'alive _target && locked _target']; _mhq addAction [localize "STR_WF_Lock_MHQ","Client\Action\Action_ToggleLock.sqf", [], 94, false, true, '', 'alive _target && !(locked _target)']; }; }; }; endLoadingScreen; }; _preview = _itemclass_preview createVehicleLocal (screenToWorld [0.5,0.5]); _gdir = _logic getVariable 'BIS_COIN_lastdir'; if !(isNil '_gdir') then {_preview setDir _gdir}; BIS_CONTROL_CAM camSetTarget _preview; BIS_CONTROL_CAM camCommit 0; _logic setVariable ["BIS_COIN_preview",_preview]; _new = true; //--- Preview Helper. if (_itemclass in _greenList && _index != -1) then { _distance = (missionNamespace getVariable Format ["WFBE_%1STRUCTUREDISTANCES",sideJoinedText]) select _index; _direction = (missionNamespace getVariable Format ["WFBE_%1STRUCTUREDIRECTIONS",sideJoinedText]) select _index; _npos = [getPos _preview,_distance,getDir _preview + _direction] Call GetPositionFrom; _helper = "Sign_Danger" createVehicleLocal _npos; _helper setPos _npos; _helper setDir (_direction+65); _array = _preview worldToModel (getPos _helper); _array set [2,0]; _helper attachTo [_preview,_array]; _logic setVariable ['WFBE_Helper',_helper]; }; _preview setObjectTexture [0,_colorGray]; _preview setVariable ["BIS_COIN_color",_colorGray]; //--- Exception - preview not created if (isnull _preview) then { deleteVehicle _preview; _logic setVariable ["BIS_COIN_preview",nil]; _logic setVariable ["BIS_COIN_params",[]]; _get = _logic getVariable 'WFBE_Helper'; if !(isNil '_get') then { deleteVehicle _get; _logic setVariable ['WFBE_Helper',nil]; }; }; } else { //--- Check zone if ( ([position _preview,_startPos] call BIS_fnc_distance2D) > _limitH ) then { _color = _colorGray } else { //--- No money _funds = 0; call compile format ["_funds = %1;",_itemFunds]; _fundsRemaining = _funds - _itemcost; if (_fundsRemaining < 0) then {_color = _colorRed}; _color = [_itemcategory, _preview, _color] Call (missionNamespace getVariable "WFBE_C_STRUCTURES_PLACEMENT_METHOD"); }; _preview setObjectTexture [0,_color]; _preview setVariable ["BIS_COIN_color",_color]; _tooltip = _itemclass; _tooltipType = "preview"; //--- Temporary solution _colorGUI = [1,1,1,0.1]; if (_color == _colorGreen) then {_colorGUI = [0.3,1,0.3,0.3]}; if (_color == _colorRed) then {_colorGUI = [1,0.2,0.2,0.4]}; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112201) ctrlSetTextColor _colorGUI; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112201) ctrlCommit 0; }; //--- Place if (!_new && !isnull _preview && ((BIS_CONTROL_CAM_LMB && 65536 in (actionKeys "DefaultAction")) || {_x in (actionKeys "DefaultAction")} count BIS_CONTROL_CAM_keys > 0) && _color == _colorGreen) then { _pos = position _preview; _dir = direction _preview; deleteVehicle _preview; _logic setVariable ["BIS_COIN_preview",nil]; _logic setVariable ["BIS_COIN_params",[]]; _get = _logic getVariable 'WFBE_Helper'; if !(isNil '_get') then { deleteVehicle _get; _logic setVariable ['WFBE_Helper',nil]; }; //--- Remove funds //call compile format ["%1 = %1 - _itemcost;",_itemFunds]; //--- Execute designer defined code [_logic,_itemclass,_pos,_dir,_params] spawn { _logic = _this select 0; _itemclass = _this select 1; _pos = _this select 2; _dir = _this select 3; _par = _this select 4; //--- Define the last direction used. _logic setVariable ["BIS_COIN_lastdir",_dir]; //--- On Purchase. [_logic,_itemclass] call { Private["_cash","_class","_costs","_index","_logic","_price"]; _logic = _this select 0; _class = _this select 1; _structures = missionNamespace getVariable Format["WFBE_%1STRUCTURENAMES",sideJoinedText]; _defenses = missionNamespace getVariable Format["WFBE_%1DEFENSENAMES",sideJoinedText]; _costs = missionNamespace getVariable Format["WFBE_%1STRUCTURECOSTS",sideJoinedText]; //--- Structures. _index = _structures find _class; if (_index != -1) then { _price = _costs select _index; if ((missionNamespace getVariable "WFBE_C_ECONOMY_CURRENCY_SYSTEM") == 0) then { [sideJoined, -_price] Call ChangeSideSupply; } else { -(_price) Call ChangePlayerFunds; }; if (_index == 0) then { _hqDeployed = (sideJoined) Call WFBE_CO_FNC_GetSideHQDeployStatus; if (_hqDeployed) then { [missionNamespace getVariable "WFBE_C_BASE_COIN_AREA_HQ_UNDEPLOYED",false,MCoin] Call Compile preprocessFile "Client\Init\Init_Coin.sqf"; } else { [missionNamespace getVariable "WFBE_C_BASE_COIN_AREA_HQ_DEPLOYED",true,MCoin] Call Compile preprocessFile "Client\Init\Init_Coin.sqf"; }; _logic setVariable ["BIS_COIN_restart",true]; } else { ["RequestChangeScore", [player,score player + (missionNamespace getVariable "WFBE_C_PLAYERS_COMMANDER_SCORE_BUILD")]] Call WFBE_CO_FNC_SendToServer; }; }; //--- Defense. _get = missionNamespace getVariable _class; if !(isNil '_get') then { _price = _get select QUERYUNITPRICE; -(_price) Call ChangePlayerFunds; }; }; //--- Execute designer defined code On Construct [_logic,_itemclass,_pos,_dir,_par] call { private ["_class","_defenses","_deployed","_dir",'_find',"_logic","_par","_pos","_structures"]; _logic = _this select 0; _class = _this select 1; _pos = _this select 2; _dir = _this select 3; _par = _this select 4; _deployed = (sideJoined) Call WFBE_CO_FNC_GetSideHQDeployStatus; _structures = missionNamespace getVariable Format["WFBE_%1STRUCTURENAMES",sideJoinedText]; _defenses = missionNamespace getVariable Format["WFBE_%1DEFENSENAMES",sideJoinedText]; _find = _structures find _class; if (_find != -1) then { //--- Increment the buildings. if ((_find - 1) > -1) then { _current = WFBE_Client_Logic getVariable "wfbe_structures_live"; _current set [_find - 1, (_current select (_find-1)) + 1]; WFBE_Client_Logic setVariable ["wfbe_structures_live", _current, true]; }; // WFBE_RequestStructure = ['SRVFNCREQUESTSTRUCTURE',[sideJoined,_class,_pos,_dir]]; // publicVariable 'WFBE_RequestStructure'; // if (isHostedServer) then {['SRVFNCREQUESTSTRUCTURE',[sideJoined,_class,_pos,_dir]] Spawn HandleSPVF}; ["RequestStructure", [sideJoined,_class,_pos,_dir]] Call WFBE_CO_FNC_SendToServer; }; if (_class in _defenses) then { // WFBE_RequestDefense = ['SRVFNCREQUESTDEFENSE',[sideJoined,_class,_pos,_dir,manningDefense]]; // publicVariable 'WFBE_RequestDefense'; // if (isHostedServer) then {['SRVFNCREQUESTDEFENSE',[sideJoined,_class,_pos,_dir,manningDefense]] Spawn HandleSPVF}; ["RequestDefense", [sideJoined,_class,_pos,_dir,manningDefense]] Call WFBE_CO_FNC_SendToServer; lastBuilt = _par; }; }; }; //--- Temporary solution _colorGUI = [1,1,1,0.1]; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112201) ctrlSetTextColor _colorGUI; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112201) ctrlCommit 0; }; } else { _colorGUI = [1,1,1,0.1]; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112201) ctrlSetTextColor _colorGUI; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112201) ctrlCommit 0; }; _oldTooltip = _logic getVariable "BIS_COIN_tooltip"; if ((_tooltipType + _tooltip) != _oldTooltip || commandingMenu != _oldMenu || _logic getVariable "WF_RequestUpdate") then { _logic setVariable ["WF_RequestUpdate",false]; //--- Description _type = _tooltip; //--- Header & preview picture _textHeader = "
"; _textPicture = "


"; _fileIcon = getText (configFile >> "cfgvehicles" >> _type >> "icon"); if (str(configFile >> "CfgVehicleIcons" >> _fileIcon) != "") then {_fileIcon = getText (configFile >> "CfgVehicleIcons" >> _fileIcon)}; _filePicture = getText (configFile >> "cfgvehicles" >> _type >> "picture"); if (str(configFile >> "CfgVehicleIcons" >> _filePicture) != "") then {_filePicture = getText (configFile >> "CfgVehicleIcons" >> _filePicture)}; if (_tooltipType != "empty") then { _textHeader = format [" %1
", getText (configFile >> "cfgvehicles" >> _type >> "displayname"), if (isnull _selected) then {""} else {str round ((1 - damage _selected) * 100) + "%"} ]; _textPicture = format [" ",_filePicture]; }; _text1 = if (count _params > 0) then {"" + localize "str_coin_rotate" + "" + call compile (keyname 29) + "
"} else {"
"}; _status = if (manningDefense) then {localize "STR_WF_On"} else {localize "STR_WF_Off"}; _text2 = if (count _params > 0) then {"" + localize "str_coin_build" + "" + call compile (actionKeysNames ["DefaultAction",1]) + "
"} else {"" + localize "STR_WF_AutoDefense" + ":" + _status + "
"}; _text3 = if (commandingMenu != "#USER:BIS_Coin_categories_0") then { //--- Back hint if (isNil "BIS_Coin_noExit") then { "" + localize "str_coin_back" + "" + call compile (actionKeysNames ["MenuBack",1]) + ""; } else {""}; } else { //--- Exit hint if (isNil "BIS_Coin_noExit") then { "" + localize "str_coin_exit" + "" + call compile (actionKeysNames ["MenuBack",1]) + ""; } else {""}; }; //--- Compose text _textHint = ( _textPicture + _textHeader + "" ); _textControls = ( _text1 + _text2 + _text3 + "" ); //--- Set box ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112211) ctrlShow true; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112211) ctrlCommit 0; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112214) ctrlSetStructuredText (parseText _textHint); ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112214) ctrlShow true; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112214) ctrlCommit 0; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112215) ctrlSetStructuredText (parseText _textControls); ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112215) ctrlShow true; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112215) ctrlCommit 0; }; //--- Amount of funds changed _funds = _logic getVariable "BIS_COIN_funds"; if (typename _funds == "ARRAY") then { _a = (sideJoined) Call GetSideSupply; _b = Call GetPlayerFunds; _funds = [_a]+[_b]; } else { _funds = [Call GetPlayerFunds]; }; _fundsDescription = _logic getVariable "BIS_COIN_fundsDescription"; _cashValues = []; {_cashValues = _cashValues + [_x]} forEach _funds; _cashValuesOld = _logic getVariable "BIS_COIN_fundsOld"; if (isNil "_cashValuesOld") then {_cashValuesOld = []; _cashValuesOld set [count _cashValues - 1,-1]}; _restart = _logic getVariable "BIS_COIN_restart"; if (!([_cashValues,_cashValuesOld] call bis_fnc_arraycompare) || _restart) then { _cashValuesCount = count _cashValues; _cashSize = if (_cashValuesCount <= 1) then {2} else {2.8 / _cashValuesCount}; _cashText = format ["",_cashSize]; _cashLines = 0; for "_i" from 0 to (count _funds - 1) do { _cashValue = _cashValues select _i; _cashDescription = if (count _fundsDescription > _i) then {_fundsDescription select _i} else {"?"}; _cashText = _cashText + format ["%1 %2
",_cashDescription,round _cashValue]; _cashLines = _cashLines + 0.05; }; _cashText = _cashText + "
"; _cashPos = ctrlPosition ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112224); ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112224) ctrlSetStructuredText (parseText _cashText); ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112224) ctrlSetPosition [_cashPos select 0,_cashPos select 1,_cashPos select 2,(_cashPos select 3)/*0.1*/ + _cashLines]; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112224) ctrlShow true; ((uiNamespace getVariable "wfbe_title_coin") displayCtrl 112224) ctrlCommit 0; //--- Categories menu _categories = +(_logic getVariable "BIS_COIN_categories"); _categoriesMenu = []; //--- Ammo Upgrade. _upgrades = (sideJoined) Call WFBE_CO_FNC_GetSideUpgrades; if (_upgrades select WFBE_UP_AMMOCOIN < 1) then {_categories = _categories - [localize 'STR_WF_Ammo']}; for "_i" from 0 to (count _categories - 1) do { _categoriesMenu = _categoriesMenu + [_i]; }; [["Categories",true],"BIS_Coin_categories",[_categoriesMenu,_categories],"#USER:BIS_Coin_%1_items_0","",""] call BIS_fnc_createmenu; //--- Items menu _items = _logic getVariable "BIS_COIN_items"; _canAffordCountOld = _canAffordCount; _canAffordCount = 0; for "_i" from 0 to (count _categories - 1) do { _category = _categories select _i; _arrayNames = []; _arrayNamesLong = []; _arrayEnable = []; _arrayParams = []; { _itemclass = _x select 0; _itemcategory = _x select 1; if (typename _itemcategory == typename "") then {//--- Backward compatibility _itemcategory = _categories find _itemcategory; } else {100}; if (_itemcategory < count _categories) then { _itemcost = _x select 2; _itemcash = 0; if (typename _itemcost == "ARRAY") then {_itemcash = _itemcost select 0; _itemcost = _itemcost select 1}; _cashValue = _cashValues select _itemcash; _cashDescription = if (count _fundsDescription > _itemcash) then {_fundsDescription select _itemcash} else {"?"}; _itemname = if (count _x > 3) then {_x select 3} else {getText (configFile >> "CfgVehicles" >> _itemclass >> "displayName")}; //--- Build Limit reached? _buildLimit = false; _find = _buildingsNames find _itemclass; if (_find != -1) then { _current = WFBE_Client_Logic getVariable "wfbe_structures_live"; _limit = missionNamespace getVariable (Format['WFBE_C_STRUCTURES_MAX_%1',(_buildingsType select _find)]); if (isNil '_limit') then {_limit = 4}; //--- Default. if ((_current select _find) >= _limit) then {_buildLimit = true}; }; if (_itemcategory == _i/*_category*/) then { _canAfford = if (_cashValue - _itemcost >= 0 && !_buildLimit) then {1} else {0}; _canAffordCount = _canAffordCount + _canAfford; // _text = _itemname + " - " + _cashDescription + str _itemcost; // _arrayNamesLong = _arrayNamesLong + [_text + " "]; _text = parseText(Format ['%1 %2 %3',_itemname,_cashDescription,_itemcost] + " "); _arrayNames = _arrayNames + [_text]; _arrayNamesLong = _arrayNamesLong + [_text]; _arrayEnable = _arrayEnable + [_canAfford]; _arrayParams = _arrayParams + [[_logic getVariable "BIS_COIN_ID"] + [_x,_i]]; }; }; } forEach _items; [[_category,true],format ["BIS_Coin_%1_items",_i],[_arrayNames,_arrayNamesLong,_arrayEnable],""," BIS_CONTROL_CAM_LMB = false; scopename 'main'; _item = '%1'; _id = %2; _array = (call compile '%3') select _id; _logic = call compile ('BIS_COIN_'+ str (_array select 0)); _params = _array select 1; _logic setVariable ['BIS_COIN_params',_params]; _logic setVariable ['BIS_COIN_menu',commandingMenu]; showCommandingMenu ''; ",_arrayParams] call BIS_fnc_createmenu; }; if (_canAffordCount != _canAffordCountOld) then {showCommandingMenu (commandingMenu)}; //<-- Open menu again to show disabled items }; _logic setVariable ["BIS_COIN_fundsOld",_cashValues]; _logic setVariable ["BIS_COIN_tooltip",_tooltipType + _tooltip]; if (_restart) then { _logic setVariable ["BIS_COIN_restart",false]; }; }; _oldMenu = commandingMenu; sleep 0.01; }; 112200 cuttext ["","plain"]; //---added-MrNiceGuy showCommandingMenu ''; Private ['_data','_get','_i','_index','_j','_old','_override','_tar','_tindex','_type','_vehicle','_z']; _vehicle = _this select 0; _index = _this select 1; _tindex = _index; _override = if (count _this > 2) then {_this select 2} else {false}; if (typeName _vehicle != 'OBJECT') exitWith {["ERROR", Format ["EASA_Equip.sqf: Invalid Parameter (_vehicle), expected object instead of [%1]", _vehicle]] Call WFBE_CO_FNC_LogContent}; _type = (missionNamespace getVariable 'WFBE_EASA_Vehicles') find (typeOf _vehicle); if (_type != -1) then { _get = _vehicle getVariable 'WFBE_EASA_Setup'; //--- Vehicle Loadout check. if (isNil '_get') then { [_vehicle,(missionNamespace getVariable 'WFBE_EASA_Default') select _type] Call EASA_RemoveLoadout; } else { //--- Override the index?. _tindex = if (_override) then {_index} else {(_get select 1)}; //--- Grab the old loadout. _old = ((missionNamespace getVariable 'WFBE_EASA_Loadouts') select (_get select 0)) select (_get select 1); _tar = []; for [{_i = 2},{_i < count(_old)},{_i = _i + 1}] do { _tar = _tar + [_old select _i]; }; _old = _tar; [_vehicle,(missionNamespace getVariable 'WFBE_EASA_Default') select _type] Call EASA_RemoveLoadout; [_vehicle,_old] Call EASA_RemoveLoadout; }; _data = ((missionNamespace getVariable 'WFBE_EASA_Loadouts') select _type) select _tindex; for [{_j = 2},{_j < count(_data)},{_j = _j + 1}] do { _z = _data select _j; for [{_i = count(_z)-1},{_i >= 0},{_i = _i - 1}] do { if (_i > 0) then { _vehicle addMagazine (_z select _i); } else { _vehicle addWeapon (_z select _i); }; }; }; _vehicle setVariable ['WFBE_EASA_Setup',[_type,_tindex],true]; };Private ['_easaDefault','_easaLoadout','_easaVehi','_vehicle']; EASA_Equip = Compile preProcessFile 'Client\Module\EASA\EASA_Equip.sqf'; EASA_RemoveLoadout = Compile preProcessFile 'Client\Module\EASA\EASA_RemoveLoadout.sqf'; _easaDefault = []; _easaLoadout = []; _easaVehi = []; /* [[Price], [Description], [Weapon, Ammos], [Weapon, Ammos]...] */ _easaVehi = _easaVehi + ['Su25_TK_EP1']; _easaDefault = _easaDefault + [[['AirBombLauncher','4Rnd_FAB_250'],['R73Launcher_2','2Rnd_R73']]]; _easaLoadout = _easaLoadout + [ if (WF_A2_Arrowhead) then { [ [[1200],['R-73 (6)'],['R73Launcher_2','2Rnd_R73','2Rnd_R73','2Rnd_R73']], [[1400],['R-73 (4) | FAB-250 (2)'],['R73Launcher_2','2Rnd_R73','2Rnd_R73'],['AirBombLauncher','2Rnd_FAB_250']], [[1600],['R-73 (2) | FAB-250 (4)'],['R73Launcher_2','2Rnd_R73'],['AirBombLauncher','4Rnd_FAB_250']], [[1900],['FAB-250 (6)'],['AirBombLauncher','4Rnd_FAB_250','2Rnd_FAB_250']] ] } else { [ [[1900],['FAB-250 (6)'],['AirBombLauncher','4Rnd_FAB_250','2Rnd_FAB_250']], [[2100],['Ch-29 (6)'],['Ch29Launcher_Su34','6Rnd_Ch29']], [[2200],['Ch-29 (4) | FAB-250 (2)'],['Ch29Launcher_Su34','4Rnd_Ch29'],['AirBombLauncher','2Rnd_FAB_250']], [[1800],['Ch-29 (4) | R-73 (2)'],['Ch29Launcher_Su34','4Rnd_Ch29'],['R73Launcher_2','2Rnd_R73']], [[1700],['R-73 (6)'],['R73Launcher_2','2Rnd_R73','2Rnd_R73','2Rnd_R73']], [[1400],['R-73 (4) | FAB-250 (2)'],['R73Launcher','4Rnd_R73'],['AirBombLauncher','2Rnd_FAB_250']], [[1600],['R-73 (2) | FAB-250 (4)'],['R73Launcher_2','2Rnd_R73'],['AirBombLauncher','4Rnd_FAB_250']] ] } ]; _easaVehi = _easaVehi + ['Su25_Ins']; _easaDefault = _easaDefault + [[['AirBombLauncher','4Rnd_FAB_250'],['R73Launcher_2','2Rnd_R73']]]; _easaLoadout = _easaLoadout + [ [ [[1900],['FAB-250 (6)'],['AirBombLauncher','4Rnd_FAB_250','2Rnd_FAB_250']], [[2100],['Ch-29 (6)'],['Ch29Launcher_Su34','6Rnd_Ch29']], [[2200],['Ch-29 (4) | FAB-250 (2)'],['Ch29Launcher_Su34','4Rnd_Ch29'],['AirBombLauncher','2Rnd_FAB_250']], [[1800],['Ch-29 (4) | R-73 (2)'],['Ch29Launcher_Su34','4Rnd_Ch29'],['R73Launcher_2','2Rnd_R73']], [[1700],['R-73 (6)'],['R73Launcher_2','2Rnd_R73','2Rnd_R73','2Rnd_R73']], [[1400],['R-73 (4) | FAB-250 (2)'],['R73Launcher','4Rnd_R73'],['AirBombLauncher','2Rnd_FAB_250']], [[1600],['R-73 (2) | FAB-250 (4)'],['R73Launcher_2','2Rnd_R73'],['AirBombLauncher','4Rnd_FAB_250']] ] ]; _easaVehi = _easaVehi + ['Su39']; _easaDefault = _easaDefault + [[['Ch29Launcher','4Rnd_Ch29'],['R73Launcher_2','2Rnd_R73']]]; _easaLoadout = _easaLoadout + [ [ [[1900],['FAB-250 (6)'],['AirBombLauncher','4Rnd_FAB_250','2Rnd_FAB_250']], [[2100],['Ch-29 (6)'],['Ch29Launcher_Su34','6Rnd_Ch29']], [[2200],['Ch-29 (4) | FAB-250 (2)'],['Ch29Launcher_Su34','4Rnd_Ch29'],['AirBombLauncher','2Rnd_FAB_250']], [[1800],['Ch-29 (4) | R-73 (2)'],['Ch29Launcher_Su34','4Rnd_Ch29'],['R73Launcher_2','2Rnd_R73']], [[1700],['R-73 (6)'],['R73Launcher_2','2Rnd_R73','2Rnd_R73','2Rnd_R73']], [[1400],['R-73 (4) | FAB-250 (2)'],['R73Launcher','4Rnd_R73'],['AirBombLauncher','2Rnd_FAB_250']], [[1600],['R-73 (2) | FAB-250 (4)'],['R73Launcher_2','2Rnd_R73'],['AirBombLauncher','4Rnd_FAB_250']] ] ]; _easaVehi = _easaVehi + ['Su34']; _easaDefault = _easaDefault + [[['Ch29Launcher_Su34','6Rnd_Ch29'],['R73Launcher','4Rnd_R73']]]; _easaLoadout = _easaLoadout + [ [ [[3200],['FAB-250 (10)'],['AirBombLauncher','4Rnd_FAB_250','4Rnd_FAB_250','2Rnd_FAB_250']], [[2950],['FAB-250 (8) | R-73 (2)'],['AirBombLauncher','4Rnd_FAB_250','4Rnd_FAB_250'],['R73Launcher_2','2Rnd_R73']], [[2800],['FAB-250 (6) | R-73 (4)'],['AirBombLauncher','4Rnd_FAB_250','2Rnd_FAB_250'],['R73Launcher','4Rnd_R73']], [[3100],['FAB-250 (6) | Ch-29 (4)'],['AirBombLauncher','4Rnd_FAB_250','2Rnd_FAB_250'],['Ch29Launcher_Su34','4Rnd_Ch29']], [[3400],['FAB-250 (4) | Ch-29 (4) | R-73 (2)'],['AirBombLauncher','4Rnd_FAB_250'],['Ch29Launcher_Su34','4Rnd_Ch29'],['R73Launcher_2','2Rnd_R73']], [[2700],['FAB-250 (4) | R-73 (6)'],['AirBombLauncher','4Rnd_FAB_250'],['R73Launcher_2','2Rnd_R73'],['R73Launcher','4Rnd_R73']], [[2500],['FAB-250 (4) | Ch-29 (6)'],['AirBombLauncher','4Rnd_FAB_250'],['Ch29Launcher_Su34','6Rnd_Ch29']], [[2400],['FAB-250 (2) | R-73 (8)'],['AirBombLauncher','2Rnd_FAB_250'],['R73Launcher','4Rnd_R73','4Rnd_R73']], [[2600],['FAB-250 (2) | R-73 (4) | Ch-29 (4)'],['AirBombLauncher','2Rnd_FAB_250'],['R73Launcher','4Rnd_R73'],['Ch29Launcher_Su34','4Rnd_Ch29']], [[2700],['FAB-250 (2) | R-73 (2) | Ch-29 (6)'],['AirBombLauncher','2Rnd_FAB_250'],['R73Launcher_2','2Rnd_R73'],['Ch29Launcher_Su34','6Rnd_Ch29']], [[2200],['R-73 (10)'],['R73Launcher','4Rnd_R73','4Rnd_R73'],['R73Launcher_2','2Rnd_R73']], [[2900],['Ch-29 (6) | R-73 (4)'],['Ch29Launcher_Su34','6Rnd_Ch29'],['R73Launcher','4Rnd_R73']], [[3500],['Ch-29 (10)'],['Ch29Launcher_Su34','6Rnd_Ch29','4Rnd_Ch29']] ] ]; _easaVehi = _easaVehi + ['Mi24_P']; _easaDefault = _easaDefault + [[['HeliBombLauncher','2Rnd_FAB_250']]]; _easaLoadout = _easaLoadout + [ [ [[500],['FAB-250 (2)'],['HeliBombLauncher','2Rnd_FAB_250']], [[300],['R-73 (2)'],['R73Launcher_2','2Rnd_R73']] ] ]; if ((missionNamespace getVariable "WFBE_C_UNITS_BALANCING") > 0) then { _easaVehi = _easaVehi + ['Ka52']; _easaDefault = _easaDefault + [[['AT9Launcher','4Rnd_AT9_Mi24P','4Rnd_AT9_Mi24P'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z']]]; _easaLoadout = _easaLoadout + [ [ [[2150],['AT-9 (4) | AIM-9L (8)'],['AT9Launcher','4Rnd_AT9_Mi24P'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z']], [[2250],['AT-9 (8) | AIM-9L (4)'],['AT9Launcher','4Rnd_AT9_Mi24P','4Rnd_AT9_Mi24P'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z']], [[2400],['AT-9 (12)'],['AT9Launcher','4Rnd_AT9_Mi24P','4Rnd_AT9_Mi24P','4Rnd_AT9_Mi24P']], [[1900],['AIM-9L (12)'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z']] ] ]; _easaVehi = _easaVehi + ['Ka52Black']; _easaDefault = _easaDefault + [[['AT9Launcher','4Rnd_AT9_Mi24P','4Rnd_AT9_Mi24P'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z']]]; _easaLoadout = _easaLoadout + [ [ [[2150],['AT-9 (4) | AIM-9L (8)'],['AT9Launcher','4Rnd_AT9_Mi24P'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z']], [[2250],['AT-9 (8) | AIM-9L (4)'],['AT9Launcher','4Rnd_AT9_Mi24P','4Rnd_AT9_Mi24P'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z']], [[2400],['AT-9 (12)'],['AT9Launcher','4Rnd_AT9_Mi24P','4Rnd_AT9_Mi24P','4Rnd_AT9_Mi24P']], [[1900],['AIM-9L (12)'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z']] ] ]; }; _easaVehi = _easaVehi + ['F35B']; _easaDefault = _easaDefault + [[['BombLauncherF35','2Rnd_GBU12'],['SidewinderLaucher_F35','2Rnd_Sidewinder_F35']]]; _easaLoadout = _easaLoadout + [ [ [[1950],['GBU-12 (4)'],['BombLauncherA10','4Rnd_GBU12']], [[1500],['GBU-12 (2) | AIM-9L (2)'],['BombLauncherF35','2Rnd_GBU12'],['SidewinderLaucher_F35','2Rnd_Sidewinder_F35']], [[1750],['GBU-12 (2) | AGM-65 (2)'],['BombLauncherF35','2Rnd_GBU12'],['MaverickLauncher','2Rnd_Maverick_A10']], [[2250],['AGM-65 (4)'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10']], [[1200],['AIM-9L (4)'],['SidewinderLaucher','4Rnd_Sidewinder_AV8B']] ] ]; _easaVehi = _easaVehi + ['AV8B']; _easaDefault = _easaDefault + [[['BombLauncher','6Rnd_GBU12_AV8B']]]; _easaLoadout = _easaLoadout + [ [ [[3600],['Mk82 (6)'],['Mk82BombLauncher_6','6Rnd_Mk82']], [[3500],['GBU-12 (6)'],['BombLauncher','6Rnd_GBU12_AV8B']], [[2900],['GBU-12 (4) | AIM-9L (2)'],['BombLauncherA10','4Rnd_GBU12'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z']], [[3400],['GBU-12 (4) | AGM-65 (2)'],['BombLauncherA10','4Rnd_GBU12'],['MaverickLauncher','2Rnd_Maverick_A10']], [[2700],['GBU-12 (2) | AIM-9L (4)'],['BombLauncherF35','2Rnd_GBU12'],['SidewinderLaucher','4Rnd_Sidewinder_AV8B']], [[3000],['GBU-12 (2) | AIM-9L (2) | AGM-65 (2)'],['BombLauncherF35','2Rnd_GBU12'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z'],['MaverickLauncher','2Rnd_Maverick_A10']], [[2200],['AIM-9L (6)'],['SidewinderLaucher','4Rnd_Sidewinder_AV8B'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z']], [[3800],['AGM-65 (6)'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10','2Rnd_Maverick_A10']] ] ]; _easaVehi = _easaVehi + ['AV8B2']; _easaDefault = _easaDefault + [[['Mk82BombLauncher_6','6Rnd_Mk82'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z']]]; _easaLoadout = _easaLoadout + [ [ [[4200],['GBU-12 (8)'],['BombLauncherA10','4Rnd_GBU12','4Rnd_GBU12']], [[4100],['GBU-12 (6) | AGM-65 (2)'],['BombLauncher','6Rnd_GBU12_AV8B'],['MaverickLauncher','2Rnd_Maverick_A10']], [[3800],['GBU-12 (6) | AIM-9L (2)'],['BombLauncher','6Rnd_GBU12_AV8B'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z']], [[4300],['GBU-12 (4) | AGM-65 (4)'],['BombLauncherA10','4Rnd_GBU12'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10']], [[3400],['GBU-12 (4) | AIM-9L (4)'],['BombLauncherA10','4Rnd_GBU12'],['SidewinderLaucher','4Rnd_Sidewinder_AV8B']], [[3600],['GBU-12 (4) | AIM-9L (2) | AGM-65 (2)'],['BombLauncherA10','4Rnd_GBU12'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z'],['MaverickLauncher','2Rnd_Maverick_A10']], [[3200],['GBU-12 (2) | AIM-9L (4) | AGM-65 (2)'],['BombLauncherF35','2Rnd_GBU12'],['SidewinderLaucher','4Rnd_Sidewinder_AV8B'],['MaverickLauncher','2Rnd_Maverick_A10']], [[3500],['GBU-12 (2) | AIM-9L (2) | AGM-65 (4)'],['BombLauncherF35','2Rnd_GBU12'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10']], [[3100],['GBU-12 (2) | AIM-9L (6)'],['BombLauncherF35','2Rnd_GBU12'],['SidewinderLaucher','4Rnd_Sidewinder_AV8B'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z']], [[3600],['GBU-12 (2) | AGM-65 (6)'],['BombLauncherF35','2Rnd_GBU12'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10','2Rnd_Maverick_A10']], [[3900],['Mk82 (6) | AIM-9L (2)'],['Mk82BombLauncher_6','6Rnd_Mk82'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z']], [[4400],['Mk82 (6) | AGM-65 (2)'],['Mk82BombLauncher_6','6Rnd_Mk82'],['MaverickLauncher','2Rnd_Maverick_A10']], [[4550],['Mk82 (6) | GBU-12 (2)'],['Mk82BombLauncher_6','6Rnd_Mk82'],['BombLauncherF35','2Rnd_GBU12']], [[4600],['AGM-65 (8)'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10','2Rnd_Maverick_A10','2Rnd_Maverick_A10']], [[3700],['AGM-65 (4) | AIM-9L (4)'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10'],['SidewinderLaucher','4Rnd_Sidewinder_AV8B']], [[3900],['AGM-65 (6) | AIM-9L (2)'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10','2Rnd_Maverick_A10'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z']], [[3200],['AGM-114 (8)'],['HellfireLauncher','8Rnd_Hellfire']], [[3100],['AIM-9L (8)'],['SidewinderLaucher_AH64','8Rnd_Sidewinder_AH64']], [[3300],['AIM-9L (6) | AGM-65 (2)'],['SidewinderLaucher','4Rnd_Sidewinder_AV8B'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z'],['MaverickLauncher','2Rnd_Maverick_A10']] ] ]; _easaVehi = _easaVehi + ['A10']; _easaDefault = _easaDefault + [[['BombLauncherA10','4Rnd_GBU12'],['MaverickLauncher','2Rnd_Maverick_A10'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z']]]; _easaLoadout = _easaLoadout + [ [ [[4200],['GBU-12 (8)'],['BombLauncherA10','4Rnd_GBU12','4Rnd_GBU12']], [[4100],['GBU-12 (6) | AGM-65 (2)'],['BombLauncher','6Rnd_GBU12_AV8B'],['MaverickLauncher','2Rnd_Maverick_A10']], [[3800],['GBU-12 (6) | AIM-9L (2)'],['BombLauncher','6Rnd_GBU12_AV8B'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z']], [[4300],['GBU-12 (4) | AGM-65 (4)'],['BombLauncherA10','4Rnd_GBU12'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10']], [[3400],['GBU-12 (4) | AIM-9L (4)'],['BombLauncherA10','4Rnd_GBU12'],['SidewinderLaucher','4Rnd_Sidewinder_AV8B']], [[3600],['GBU-12 (4) | AIM-9L (2) | AGM-65 (2)'],['BombLauncherA10','4Rnd_GBU12'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z'],['MaverickLauncher','2Rnd_Maverick_A10']], [[3200],['GBU-12 (2) | AIM-9L (4) | AGM-65 (2)'],['BombLauncherF35','2Rnd_GBU12'],['SidewinderLaucher','4Rnd_Sidewinder_AV8B'],['MaverickLauncher','2Rnd_Maverick_A10']], [[3500],['GBU-12 (2) | AIM-9L (2) | AGM-65 (4)'],['BombLauncherF35','2Rnd_GBU12'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10']], [[3100],['GBU-12 (2) | AIM-9L (6)'],['BombLauncherF35','2Rnd_GBU12'],['SidewinderLaucher','4Rnd_Sidewinder_AV8B'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z']], [[3600],['GBU-12 (2) | AGM-65 (6)'],['BombLauncherF35','2Rnd_GBU12'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10','2Rnd_Maverick_A10']], [[3900],['Mk82 (6) | AIM-9L (2)'],['Mk82BombLauncher_6','6Rnd_Mk82'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z']], [[4400],['Mk82 (6) | AGM-65 (2)'],['Mk82BombLauncher_6','6Rnd_Mk82'],['MaverickLauncher','2Rnd_Maverick_A10']], [[4550],['Mk82 (6) | GBU-12 (2)'],['Mk82BombLauncher_6','6Rnd_Mk82'],['BombLauncherF35','2Rnd_GBU12']], [[4600],['AGM-65 (8)'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10','2Rnd_Maverick_A10','2Rnd_Maverick_A10']], [[3700],['AGM-65 (4) | AIM-9L (4)'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10'],['SidewinderLaucher','4Rnd_Sidewinder_AV8B']], [[3900],['AGM-65 (6) | AIM-9L (2)'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10','2Rnd_Maverick_A10'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z']], [[3200],['AGM-114 (8)'],['HellfireLauncher','8Rnd_Hellfire']], [[3100],['AIM-9L (8)'],['SidewinderLaucher_AH64','8Rnd_Sidewinder_AH64']], [[3300],['AIM-9L (6) | AGM-65 (2)'],['SidewinderLaucher','4Rnd_Sidewinder_AV8B'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z'],['MaverickLauncher','2Rnd_Maverick_A10']] ] ]; _easaVehi = _easaVehi + ['A10_US_EP1']; _easaDefault = _easaDefault + [[['BombLauncherA10','4Rnd_GBU12'],['MaverickLauncher','2Rnd_Maverick_A10'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z']]]; _easaLoadout = _easaLoadout + [ if (WF_A2_Arrowhead) then { [ [[4200],['GBU-12 (8)'],['BombLauncherA10','4Rnd_GBU12','4Rnd_GBU12']], [[4300],['GBU-12 (4) | AGM-65 (4)'],['BombLauncherA10','4Rnd_GBU12'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10']], [[3400],['GBU-12 (4) | AIM-9L (4)'],['BombLauncherA10','4Rnd_GBU12'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z']], [[3600],['GBU-12 (4) | AIM-9L (2) | AGM-65 (2)'],['BombLauncherA10','4Rnd_GBU12'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z'],['MaverickLauncher','2Rnd_Maverick_A10']], [[4600],['AGM-65 (8)'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10','2Rnd_Maverick_A10','2Rnd_Maverick_A10']], [[3700],['AGM-65 (4) | AIM-9L (4)'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z']], [[3900],['AGM-65 (6) | AIM-9L (2)'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10','2Rnd_Maverick_A10'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z']], [[3200],['AGM-114 (8)'],['HellfireLauncher','8Rnd_Hellfire']], [[3100],['AIM-9L (8)'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z']], [[3300],['AIM-9L (6) | AGM-65 (2)'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z'],['MaverickLauncher','2Rnd_Maverick_A10']] ] } else { [ [[4200],['GBU-12 (8)'],['BombLauncherA10','4Rnd_GBU12','4Rnd_GBU12']], [[4100],['GBU-12 (6) | AGM-65 (2)'],['BombLauncher','6Rnd_GBU12_AV8B'],['MaverickLauncher','2Rnd_Maverick_A10']], [[3800],['GBU-12 (6) | AIM-9L (2)'],['BombLauncher','6Rnd_GBU12_AV8B'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z']], [[4300],['GBU-12 (4) | AGM-65 (4)'],['BombLauncherA10','4Rnd_GBU12'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10']], [[3400],['GBU-12 (4) | AIM-9L (4)'],['BombLauncherA10','4Rnd_GBU12'],['SidewinderLaucher','4Rnd_Sidewinder_AV8B']], [[3600],['GBU-12 (4) | AIM-9L (2) | AGM-65 (2)'],['BombLauncherA10','4Rnd_GBU12'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z'],['MaverickLauncher','2Rnd_Maverick_A10']], [[3200],['GBU-12 (2) | AIM-9L (4) | AGM-65 (2)'],['BombLauncherF35','2Rnd_GBU12'],['SidewinderLaucher','4Rnd_Sidewinder_AV8B'],['MaverickLauncher','2Rnd_Maverick_A10']], [[3500],['GBU-12 (2) | AIM-9L (2) | AGM-65 (4)'],['BombLauncherF35','2Rnd_GBU12'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10']], [[3100],['GBU-12 (2) | AIM-9L (6)'],['BombLauncherF35','2Rnd_GBU12'],['SidewinderLaucher','4Rnd_Sidewinder_AV8B'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z']], [[3600],['GBU-12 (2) | AGM-65 (6)'],['BombLauncherF35','2Rnd_GBU12'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10','2Rnd_Maverick_A10']], [[3900],['Mk82 (6) | AIM-9L (2)'],['Mk82BombLauncher_6','6Rnd_Mk82'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z']], [[4400],['Mk82 (6) | AGM-65 (2)'],['Mk82BombLauncher_6','6Rnd_Mk82'],['MaverickLauncher','2Rnd_Maverick_A10']], [[4550],['Mk82 (6) | GBU-12 (2)'],['Mk82BombLauncher_6','6Rnd_Mk82'],['BombLauncherF35','2Rnd_GBU12']], [[4600],['AGM-65 (8)'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10','2Rnd_Maverick_A10','2Rnd_Maverick_A10']], [[3700],['AGM-65 (4) | AIM-9L (4)'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10'],['SidewinderLaucher','4Rnd_Sidewinder_AV8B']], [[3900],['AGM-65 (6) | AIM-9L (2)'],['MaverickLauncher','2Rnd_Maverick_A10','2Rnd_Maverick_A10','2Rnd_Maverick_A10'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z']], [[3200],['AGM-114 (8)'],['HellfireLauncher','8Rnd_Hellfire']], [[3100],['AIM-9L (8)'],['SidewinderLaucher_AH64','8Rnd_Sidewinder_AH64']], [[3300],['AIM-9L (6) | AGM-65 (2)'],['SidewinderLaucher','4Rnd_Sidewinder_AV8B'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z'],['MaverickLauncher','2Rnd_Maverick_A10']] ] } ]; _easaVehi = _easaVehi + ['AH64D']; _easaDefault = _easaDefault + [[['HellfireLauncher','8Rnd_Hellfire']]]; _easaLoadout = _easaLoadout + [ if (WF_A2_Arrowhead) then { [ [[2900],['AGM-114 (8)'],['HellfireLauncher','8Rnd_Hellfire']], [[3100],['AIM-9L (8)'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z']] ] } else { [ [[2900],['AGM-114 (8)'],['HellfireLauncher','8Rnd_Hellfire']], [[3100],['AIM-9L (8)'],['SidewinderLaucher_AH64','8Rnd_Sidewinder_AH64']] ] } ]; _easaVehi = _easaVehi + ['AH64D_EP1']; _easaDefault = _easaDefault + [[['HellfireLauncher','8Rnd_Hellfire']]]; _easaLoadout = _easaLoadout + [ if (WF_A2_Arrowhead) then { [ [[2900],['AGM-114 (8)'],['HellfireLauncher','8Rnd_Hellfire']], [[3100],['AIM-9L (8)'],['SidewinderLaucher_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z','2Rnd_Sidewinder_AH1Z']] ] } else { [ [[2900],['AGM-114 (8)'],['HellfireLauncher','8Rnd_Hellfire']], [[3100],['AIM-9L (8)'],['SidewinderLaucher_AH64','8Rnd_Sidewinder_AH64']] ] } ]; _easaVehi = _easaVehi + ['AH1Z']; _easaDefault = _easaDefault + [[['HellfireLauncher','8Rnd_Hellfire']]]; _easaLoadout = _easaLoadout + [ [ [[2900],['AGM-114 (8)'],['HellfireLauncher','8Rnd_Hellfire']], [[3100],['AIM-9L (8)'],['SidewinderLaucher_AH64','8Rnd_Sidewinder_AH64']] ] ]; missionNamespace setVariable ['WFBE_EASA_Vehicles',_easaVehi]; missionNamespace setVariable ['WFBE_EASA_Loadouts',_easaLoadout]; missionNamespace setVariable ['WFBE_EASA_Default',_easaDefault];Private ['_loadout','_vehicle']; _vehicle = _this select 0; _loadout = _this select 1; { for [{_i = count(_x)-1},{_i >= 0},{_i = _i - 1}] do { if (_i > 0) then { _vehicle removeMagazine (_x select _i); } else { _vehicle removeWeapon (_x select _i); }; }; } forEach _loadout;Private ['_get','_id','_label','_marker','_task']; _chopper = _this select 0; _label = _this select 1; _id = _this select 2; _get = missionNamespace getVariable Format["WFBE_TSK_M_%1%2",_label,_id]; if !(isNil '_get') exitWith {}; taskHint [format [localize "str_taskNew" + "\n%1",localize 'STR_WF_M_PLAYERS_Attack_Air'], [1,1,1,1], "taskNew"]; _task = player createSimpleTask [Format["TSK_M_%1%2",_label,_id]]; missionNamespace setVariable [Format["WFBE_TSK_M_%1%2",_label,_id],true]; _task setSimpleTaskDescription [localize 'STR_WF_M_PLAYERS_Attack_Air_Description', localize 'STR_WF_M_PLAYERS_Attack_Air', localize 'STR_WF_M_PLAYERS_Attack_Air']; _task setSimpleTaskTarget [_chopper, false]; //--- Wait for the result. waitUntil {sleep 5; !alive _chopper}; _task setTaskState "Succeeded"; taskHint [format [localize "str_taskAccomplished" + "\n%1",localize 'STR_WF_M_PLAYERS_Attack_Air'], [1,1,1,1], "taskDone"]; sleep 30; missionNamespace setVariable [Format["WFBE_TSK_M_%1%2",_label,_id],nil]; //--- Remove the task & markers. player removeSimpleTask _task;Private ['_id','_label','_marker','_markerRanPos','_markers','_randomPos','_searchArea','_sideWin','_size','_task','_taskState','_uav']; _size = _this select 0; _label = _this select 1; _id = _this select 2; _uav = _this select 3; _marker = Format["%1%2",_label,_id]; //--- Does the client already have the mission (jip handler, some client joining won't have it running)? if (((getMarkerPos _marker) select 0) != 0 && ((getMarkerPos _marker) select 1) != 0) exitWith {}; taskHint [format [localize "str_taskNew" + "\n%1",localize 'STR_WF_M_UAV_RetrieveModule'], [1,1,1,1], "taskNew"]; _randomPos = getPos _uav; //--- Determine the marker random area. _searchArea = (_size/1.5); _markerRanPos = [(_randomPos select 0)+random(_searchArea)-random(_searchArea),(_randomPos select 1)+random(_searchArea)-random(_searchArea)]; _task = player createSimpleTask [Format["TSK_M_%1%2",_label,_id]]; _task setSimpleTaskDescription [localize 'STR_WF_M_UAV_RetrieveModule_Description', localize 'STR_WF_M_UAV_RetrieveModule', localize 'STR_WF_M_UAV_RetrieveModule']; _task setSimpleTaskDestination _markerRanPos; //--- Marker part. _markers = [_marker]; createMarkerLocal [_marker, _markerRanPos]; _marker setMarkerColorLocal "ColorYellow"; _marker setMarkerShapeLocal "ELLIPSE"; _marker setMarkerBrushLocal "BORDER"; _marker setMarkerSizeLocal [_size,_size]; _marker = Format["0%1%2",_label,_id]; _markers = _markers + [_marker]; createMarkerLocal [_marker, _markerRanPos]; _marker setMarkerColorLocal "ColorYellow"; _marker setMarkerShapeLocal "ELLIPSE"; _marker setMarkerBrushLocal "FDIAGONAL"; _marker setMarkerSizeLocal [_size,_size]; _marker = Format["00%1%2",_label,_id]; _markers = _markers + [_marker]; createMarkerLocal [_marker, _markerRanPos]; _marker setMarkerColorLocal "ColorYellow"; _marker setMarkerTypeLocal "pickup"; _marker setMarkerSizeLocal [0.5,0.5]; _marker setMarkerTextLocal "UAV Crash Site"; //--- Wait for the result. waitUntil {sleep 5; _sideWin = _uav getVariable 'side'; !(isNil '_sideWin')}; _taskState = if (side player == (_uav getVariable 'side')) then {"Succeeded"} else {"Failed"}; //--- Wait for mission completion. waitUntil {sleep 5; (isNull _uav)}; _task setTaskState _taskState; if (_taskState == 'Succeeded') then { taskHint [format [localize "str_taskAccomplished" + "\n%1",localize 'STR_WF_M_UAV_RetrieveModule'], [1,1,1,1], "taskDone"]; } else { taskHint [format [localize "str_taskFailed" + "\n%1",localize 'STR_WF_M_UAV_RetrieveModule'], [1,1,1,1], "taskFailed"]; }; sleep 30; //--- Remove the task & markers. player removeSimpleTask _task; {deleteMarkerLocal _x} forEach _markers;//--- Nuke destruction. Private ["_array","_blackListed","_bo","_destroy","_target","_z"]; _target = _this select 0; _array = _target nearObjects ["All", 700]; _blackListed = [missionNamespace getVariable "WFBE_C_DEPOT"] + ["land_nav_pier_c","land_nav_pier_c2","land_nav_pier_c2_end","land_nav_pier_c_270","land_nav_pier_c_90","land_nav_pier_c_big","land_nav_pier_C_L","land_nav_pier_C_L10","land_nav_pier_C_L30","land_nav_pier_C_R","land_nav_pier_C_R10","land_nav_pier_C_R30","land_nav_pier_c_t15","land_nav_pier_c_t20","land_nav_pier_F_17","land_nav_pier_F_23","land_nav_pier_m","land_nav_pier_m_1","land_nav_pier_m_end","land_nav_pier_M_fuel","land_nav_pier_pneu","land_nav_pier_uvaz"]; _destroy = _array; {if ((typeOf _x) in _blackListed) then {_destroy = _destroy - [_x]}} forEach _array; {_bo = "BO_GBU12_LGB" createVehicle [random 1000,random 1000,500];_bo setPos [getPos _x select 0, getPos _x select 1, getPos _x select 2]} forEach _destroy; [_target] Spawn { Private ["_array","_dammageable","_dammages","_range","_target"]; _target = _this select 0; _dammageable = ["Man","Car","Motorcycle","Tank","Ship","Air","StaticWeapon"]; _range = 800; _dammages = 1; for [{_z = 0},{_z < 4},{_z = _z + 1}] do { _array = _target nearEntities [_dammageable, _range]; { _x setDammage (getDammage _x + _dammages); {_x setDammage (getDammage _x + _dammages)} forEach crew _x; } forEach _array; _range = _range + 300; _dammages = _dammages - 0.2; sleep 3; }; //--- Radiations. [_target] Spawn NukeRadiation; };if (local player) then { Nuke = Compile preprocessFile "Client\Module\Nuke\nuke.sqf"; NukeIncomming = Compile preprocessFile "Client\Module\Nuke\nukeincoming.sqf"; }; if (isServer) then { NukeDammage = Compile preprocessFileLineNumbers "Client\Module\Nuke\damage.sqf"; NukeRadiation = Compile preprocessFileLineNumbers "Client\Module\Nuke\radzone.sqf"; };//--- Nuke blast. Private ['_Cone','_light','_smoke','_smoke2','_target','_top','_top2','_top3','_top4','_top5','_Wave','_xHandle']; _target = _this select 0; if (player distance _target < 4000) then { "dynamicBlur" ppEffectEnable true; "dynamicBlur" ppEffectAdjust [1]; "dynamicBlur" ppEffectCommit 1; }; _Cone = "#particlesource" createVehicleLocal getPos _target; _Cone setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 7, 48], "", "Billboard", 1, 10, [0, 0, 0], [0, 0, 0], 0, 1.275, 1, 0, [40,80], [[0.25, 0.25, 0.25, 0], [0.25, 0.25, 0.25, 0.5], [0.25, 0.25, 0.25, 0.5], [0.25, 0.25, 0.25, 0.05], [0.25, 0.25, 0.25, 0]], [0.25], 0.1, 1, "", "", _target]; _Cone setParticleRandom [2, [1, 1, 30], [1, 1, 30], 0, 0, [0, 0, 0, 0.1], 0, 0]; _Cone setParticleCircle [10, [-10, -10, 20]]; _Cone setDropInterval 0.005; _top = "#particlesource" createVehicleLocal getPos _target; _top setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 3, 48, 0], "", "Billboard", 1, 20, [0, 0, 0], [0, 0, 80], 0, 1.7, 1, 0, [180,150,180], [[1, 1, 1, -10],[1, 1, 1, -7],[1, 1, 1, -4],[1, 1, 1, -0.5],[1, 1, 1, 0]], [0.05], 1, 1, "", "", _target]; _top setParticleRandom [0, [75, 75, 15], [17, 17, 10], 0, 0, [0, 0, 0, 0], 0, 0, 360]; _top setDropInterval 0.001; _top2 = "#particlesource" createVehicleLocal getPos _target; _top2 setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 3, 112, 0], "", "Billboard", 1, 20, [0, 0, 0], [0, 0, 20], 0, 1.7, 1, 0, [80,80,100], [[1, 1, 1, 0.5],[1, 1, 1, 0]], [0.07], 1, 1, "", "", _target]; _top2 setParticleRandom [0, [75, 75, 15], [17, 17, 10], 0, 0, [0, 0, 0, 0], 0, 0, 360]; _top2 setDropInterval 0.002; _smoke = "#particlesource" createVehicleLocal getPos _target; _smoke setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 7, 48, 1], "", "Billboard", 1, 25, [0, 0, 0], [0, 0, 80], 0, 1.7, 1, 0, [40,50,60], [[1, 1, 1, 0.2],[1, 1, 1, 0.3],[1, 1, 1, 0.3],[1, 1, 1, 0.3],[1, 1, 1, 0.3],[1, 1, 1, 0.3],[1, 1, 1, 0.3],[1, 1, 1, 0]] , [0.5, 0.1], 1, 1, "", "", _target]; _smoke setParticleRandom [0, [10, 10, 15], [15, 15, 7], 0, 0, [0, 0, 0, 0], 0, 0, 360]; _smoke setDropInterval 0.002; _Wave = "#particlesource" createVehicleLocal getPos _target; _Wave setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 7, 48], "", "Billboard", 1, 20, [0, 0, 0], [0, 0, 0], 0, 1.5, 1, 0, [50, 100], [[0.1, 0.1, 0.1, 0.5], [0.5, 0.5, 0.5, 0.5], [1, 1, 1, 0.3], [1, 1, 1, 0]], [1,0.5], 0.1, 1, "", "", _target]; _Wave setParticleRandom [2, [20, 20, 20], [5, 5, 0], 0, 0, [0, 0, 0, 0.1], 0, 0]; _Wave setParticleCircle [50, [-80, -80, 2.5]]; _Wave setDropInterval 0.0002; _light = "#lightpoint" createVehicleLocal [((getPos _target select 0)),(getPos _target select 1),((getPos _target select 2)+500)]; _light setLightAmbient[1500, 1200, 1000]; _light setLightColor[1500, 1200, 1000]; _light setLightBrightness 100000.0; if (player distance _target < 4000) then { "colorCorrections" ppEffectEnable true; "colorCorrections" ppEffectAdjust [0.8, 15, 0, [0.5, 0.5, 0.5, 0], [0.0, 0.0, 0.6, 2],[0.3, 0.3, 0.3, 0.1]];"colorCorrections" ppEffectCommit 0.4; "dynamicBlur" ppEffectAdjust [0.5]; "dynamicBlur" ppEffectCommit 3; sleep 0.1; _xHandle = [] Spawn { Sleep 4; "colorCorrections" ppEffectAdjust [1.0, 0.5, 0, [0.5, 0.5, 0.5, 0], [1.0, 1.0, 0.8, 0.4],[0.3, 0.3, 0.3, 0.1]]; "colorCorrections" ppEffectCommit 7; }; "dynamicBlur" ppEffectAdjust [2]; "dynamicBlur" ppEffectCommit 1; "dynamicBlur" ppEffectAdjust [0.5]; "dynamicBlur" ppEffectCommit 4; }; _light setLightBrightness 100000.0; sleep 3.5; _Wave setDropInterval 0.001; deleteVehicle _top; deleteVehicle _top2; sleep 7; _top3 = "#particlesource" createVehicleLocal getPos _target; _top3 setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 3, 48, 0], "", "Billboard", 1, 20, [0, 0, 500], [0, 0, 65], 0, 1.7, 1, 0, [200,200,200], [[1, 1, 1, -10],[1, 1, 1, -7],[1, 1, 1, -4],[1, 1, 1, -0.5],[1, 1, 1, 0]], [0.05], 1, 1, "", "", _target]; _top3 setParticleRandom [0, [75, 75, 15], [17, 17, 10], 0, 0, [0, 0, 0, 0], 0, 0, 360]; _top3 setDropInterval 0.001; sleep 0.6; deleteVehicle _top3; sleep 3; if (player distance _target < 4000) then { "colorCorrections" ppEffectAdjust [1, 1, 0, [0.5, 0.5, 0.5, 0], [1.0, 1.0, 0.8, 0.4],[0.3, 0.3, 0.3, 0.1]];"colorCorrections" ppEffectCommit 1; "colorCorrections" ppEffectEnable TRUE; "dynamicBlur" ppEffectAdjust [0]; "dynamicBlur" ppEffectCommit 1; }; _top4 = "#particlesource" createVehicleLocal getPos _target; _top4 setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 3, 48, 0], "", "Billboard", 1, 20, [0, 0, 800], [0, 0, 55], 0, 1.7, 1, 0, [200,200,200], [[1, 1, 1, -10],[1, 1, 1, -7],[1, 1, 1, -4],[1, 1, 1, -0.5],[1, 1, 1, 0]], [0.05], 1, 1, "", "", _target]; _top4 setParticleRandom [0, [75, 75, 15], [17, 17, 10], 0, 0, [0, 0, 0, 0], 0, 0, 360]; _top4 setDropInterval 0.001; sleep 0.6; deleteVehicle _light; deleteVehicle _top4; sleep 4; _top5 = "#particlesource" createVehicleLocal getPos _target; _top5 setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 3, 48, 0], "", "Billboard", 1, 20, [0, 0, 1000], [0, 0, 20], 0, 1.7, 1, 0, [250,280,250], [[1, 1, 1, -10],[1, 1, 1, -7],[1, 1, 1, -4],[1, 1, 1, -0.5],[1, 1, 1, 0]], [0.05], 1, 1, "", "", _target]; _top5 setParticleRandom [0, [75, 75, 15], [17, 17, 10], 0, 0, [0, 0, 0, 0], 0, 0, 360]; _top5 setDropInterval 0.001; _Cone setDropInterval 0.01; _Wave setDropInterval 0.001; _smoke setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 7, 48, 1], "", "Billboard", 1, 25, [0, 0, 0], [0, 0, 80], 0, 1.7, 1, 0, [150,150,150], [[1, 1, 1, 0.2],[1, 1, 1, 0.3],[1, 1, 1, 0.3],[1, 1, 1, 0.3],[1, 1, 1, 0.3],[1, 1, 1, 0.3],[1, 1, 1, 0.3],[1, 1, 1, 0]] , [0.5, 0.1], 1, 1, "", "", _target]; _smoke setDropInterval 0.01; _smoke2 = "#particlesource" createVehicleLocal getPos _target; _smoke2 setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 7, 48, 1], "", "Billboard", 1, 25, [0, 0, 900], [0, 0, 25], 0, 1.7, 1, 0, [160,180,170], [[1, 1, 1, 0.2],[1, 1, 1, 0.3],[1, 1, 1, 0.3],[1, 1, 1, 0.3],[1, 1, 1, 0.3],[1, 1, 1, 0.3],[1, 1, 1, 0.3],[1, 1, 1, 0]] , [0.5, 0.1], 1, 1, "", "", _target]; _smoke2 setParticleRandom [0, [10, 10, 15], [15, 15, 7], 0, 0, [0, 0, 0, 0], 0, 0, 360]; _smoke2 setDropInterval 0.01; sleep 5; deleteVehicle _top5; _Cone setDropInterval 0.02; _Wave setDropInterval 0.01; sleep 5; deleteVehicle _smoke2; sleep 10; deleteVehicle _Wave; deleteVehicle _cone; deleteVehicle _smoke; sleep 20; if (player distance _target < 4000) then {"colorCorrections" ppEffectEnable false}; [currentFX] Spawn FX;//--- Nuke launching. Private ['_cruise','_dropPosition','_dropPosX','_dropPosY','_dropPosZ','_misFlare','_nukeMarker','_path','_pathS','_planespawnpos','_target','_type']; _target = _this select 0; _nukeMarker = _this select 1; [nil, "LocalizeMessage", ['TacticalLaunch']] Call WFBE_CO_FNC_SendToClients; if (isMultiplayer) then {(localize "STR_WF_CHAT_ICBM_Launch") Call CommandChatMessage}; sleep 300; _path = "\ca\air2\cruisemissile\"; //"; _pathS = _path + "data\scripts\"; //"; _dropPosition = getpos _target; _type = if (WF_A2_Vanilla || WF_A2_CombinedOps) then {'Chukar'} else {'Chukar_EP1'}; _cruise = createVehicle [_type,_dropPosition,[], 0, "FLY"]; _cruise setVectorDir [ 0.1,- 1,+ 0.5]; _cruise setPos [(getPos _cruise select 0),(getPos _cruise select 1),570]; _cruise setVelocity [0,2,0]; _cruise flyInHeight 570; _cruise setSpeedMode "FULL"; ["RequestSpecial", ["ICBM",sideJoined,_target,_cruise,clientTeam]] Call WFBE_CO_FNC_SendToServer; sleep 1.5; [nil, "HandleSpecial", ["icbm-display", _target, _cruise]] Call WFBE_CO_FNC_SendToClients; _misFlare = objNull; if (WF_A2_Vanilla || WF_A2_CombinedOps) then { _dropPosX = _dropPosition select 0; _dropPosY = _dropPosition select 1; _dropPosZ = _dropPosition select 2; _planespawnpos = [_dropPosX , _dropPosY , _dropPosZ + 600]; _misFlare = createVehicle ["cruiseMissileFlare1",_planespawnpos,[], 0, "NONE"]; _misFlare inflame true; _cruise setVariable ["cruisemissile_level", false]; [_cruise, _misFlare] execVM (_pathS + "cruisemissileflare.sqf"); _cruise setObjectTexture [0, _path + "data\exhaust_flame_ca"]; [_cruise] execVM (_pathS + "exhaust1.sqf"); }; sleep 7; waitUntil {!alive _cruise}; sleep 5; if (WF_A2_Vanilla || WF_A2_CombinedOps) then {deleteVehicle _misFlare}; deleteVehicle _cruise; sleep 50; deleteMarkerLocal _nukeMarker; //--- Radiation Private ['_target','_z']; _target = _this select 0; [_target] Spawn { Private ["_array","_target"]; _target = _this select 0; for [{_z = 0},{_z < 100},{_z = _z + 1}] do { _array = _target nearEntities [["Man","Car","Motorcycle","Tank","Ship","Air","StaticWeapon"], 1000]; { _x setDammage (getDammage _x + 0.03); {_x setDammage (getDammage _x + 0.05)} forEach crew _x; } forEach _array; sleep (5 + random 5); }; deleteVehicle _target; };/* Script: Officer Skill MASH Undeploy Description: Undeploy the MASH */ Private ["_MASH"]; _MASH = _this select 0; _skip = false; for '_z' from 0 to 3 do { sleep 0.5; player playMove "AinvPknlMstpSlayWrflDnon_medic"; sleep 0.5; waitUntil {animationState player == "ainvpknlmstpslaywrfldnon_amovpknlmstpsraswrfldnon" || !alive player || vehicle player != player}; if (!alive player || vehicle player != player) exitWith {_skip = true}; }; if (!_skip) then { deleteVehicle _MASH; WFBE_SK_V_LastUse_MASH = -2000; };/* Script: Skill Application System by Benny. Description: Skill Application. */ Private ["_unit"]; _unit = _this; switch (WFBE_SK_V_Type) do { case 'Engineer': { /* Repair Ability */ _unit addAction [ ("" + localize 'STR_WF_ACTION_Repair'+ ""), (WFBE_SK_V_Root + 'Engineer' + '.sqf'), [], 80, false, true, "", "time - WFBE_SK_V_LastUse_Repair > WFBE_SK_V_Reload_Repair" ]; }; case 'Officer': { /* MASH Ability require that the MASH parameter is enabled */ if ((missionNamespace getVariable "WFBE_C_RESPAWN_MASH") > 0) then { /* MASH Ability */ _unit addAction [ ("" + localize 'STR_WF_ACTION_DeployMASH'+ ""), (WFBE_SK_V_Root + 'Officer' + '.sqf'), [], 80, false, true, "", "time - WFBE_SK_V_LastUse_MASH > WFBE_SK_V_Reload_MASH" ]; }; }; case 'SpecOps': { /* Lockpicking Ability */ _unit addAction [ ("" + localize 'STR_WF_ACTION_Lockpick'+ ""), (WFBE_SK_V_Root + 'SpecOps' + '.sqf'), [], 80, false, true, "", "time - WFBE_SK_V_LastUse_Lockpick > WFBE_SK_V_Reload_Lockpick" ]; }; case 'Spotter': { /* Spotting Ability */ _unit addAction [ ("" + localize 'STR_WF_ACTION_Spot'+ ""), (WFBE_SK_V_Root + 'Sniper' + '.sqf'), [], 80, false, true, "", "time - WFBE_SK_V_LastUse_Spot > WFBE_SK_V_Reload_Spot" ]; /* Lockpicking Ability */ _unit addAction [ ("" + localize 'STR_WF_ACTION_Lockpick'+ ""), (WFBE_SK_V_Root + 'SpecOps' + '.sqf'), [], 79, false, true, "", "time - WFBE_SK_V_LastUse_Lockpick > WFBE_SK_V_Reload_Lockpick" ]; }; };/* Script: Engineer Skill System by Benny. Description: Add special skills to the defined engineer. */ Private ['_dammages','_skip','_vehicle','_vehicles','_z']; _vehicles = player nearEntities [["Car","Motorcycle","Tank","Ship","Air","StaticWeapon"],5]; if (count _vehicles < 1) exitWith {}; _vehicle = [player,_vehicles] Call WFBE_CO_FNC_GetClosestEntity; _dammages = getDammage _vehicle; if (_dammages <= 0) exitWith {}; WFBE_SK_V_LastUse_Repair = time; _skip = false; for [{_z = 0},{_z < 5},{_z = _z + 1}] do { sleep 0.5; player playMove "AinvPknlMstpSlayWrflDnon_medic"; sleep 0.5; waitUntil {animationState player == "ainvpknlmstpslaywrfldnon_amovpknlmstpsraswrfldnon" || !alive player || vehicle player != player || !alive _vehicle || _vehicle distance player > 5}; if (!alive player || vehicle player != player || !alive _vehicle || _vehicle distance player > 5) exitWith {_skip = true}; }; if (!_skip) then { _dammages = _dammages - 0.15; if (_dammages < 0) then {_dammages = 0}; _vehicle setDammage _dammages; };/* Script: Skill System by Benny. Description: Skill Initialization. */ /* Skills Root */ WFBE_SK_V_Root = 'Client\Module\Skill\Skill_'; /* Functions */ WFBE_SK_FNC_Apply = Compile preprocessFile "Client\Module\Skill\Skill_Apply.sqf"; /* Define which classname belong to which skill group */ WFBE_SK_V_Engineers = ['OFrP_Soldier_FELIN_TeamLeader','USMC_SoldierS_Engineer','MVD_Soldier_TL','US_Soldier_Engineer_EP1','TK_Soldier_Engineer_EP1','CDF_Soldier_Engineer','Ins_Soldier_Sapper','Soldier_Engineer_PMC','GUE_Soldier_Sab']; WFBE_SK_V_Officers = ['OFrP_Soldier_OFF','FR_Commander','RUS_Commander','US_Soldier_SL_EP1','TK_Soldier_SL_EP1','CDF_Soldier_Officer','Ins_Commander','Soldier_TL_PMC','GUE_Soldier_CO']; WFBE_SK_V_Soldiers = ['OFrP_Soldier_CoS_Saboteur','FR_R','RUS_Soldier1','US_Delta_Force_EP1','TK_Special_Forces_EP1','CDF_Soldier','Ins_Soldier_1','CIV_Contractor2_BAF','GUE_Commander']; WFBE_SK_V_SpecsOps = ['OFrP_Soldier_Inf_TeamLeader','FR_TL','RUS_Soldier_TL','US_Delta_Force_TL_EP1','TK_Special_Forces_TL_EP1','CDF_Soldier_TL','Ins_Soldier_2','Soldier_Bodyguard_M4_PMC','GUE_Soldier_Sab']; WFBE_SK_V_Spotters = ['OFrP_Soldier_Inf_SniperFRF2','USMC_SoldierS_Sniper','RU_Soldier_Sniper','US_Soldier_Sniper_EP1','TK_Soldier_Sniper_EP1','CDF_Soldier_Sniper','Ins_Soldier_Sniper','Soldier_Sniper_PMC','GUE_Soldier_Scout']; //--- Binoculars. missionNamespace setVariable ["WFBE_BINOCULARS", ["Laserdesignator", "Binocular", "Binocular_Vector"]]; /* Skills Variables */ WFBE_SK_V_LastUse_Repair = -1200; WFBE_SK_V_LastUse_MASH = -1200; WFBE_SK_V_LastUse_Lockpick = -1200; WFBE_SK_V_LastUse_Spot = -1200; /* Skills Timeout */ WFBE_SK_V_Reload_Repair = 65; WFBE_SK_V_Reload_MASH = 600; WFBE_SK_V_Reload_Lockpick = 25; WFBE_SK_V_Reload_Spot = 8; /* Find the player type */ WFBE_SK_V_Type = ""; if (playerType in WFBE_SK_V_Engineers) then {WFBE_SK_V_Type = "Engineer"}; if (playerType in WFBE_SK_V_Officers) then {WFBE_SK_V_Type = "Officer"}; if (playerType in WFBE_SK_V_Soldiers) then {WFBE_SK_V_Type = "Soldier"}; if (playerType in WFBE_SK_V_SpecsOps) then {WFBE_SK_V_Type = "SpecOps"}; if (playerType in WFBE_SK_V_Spotters) then {WFBE_SK_V_Type = "Spotter"}; /* Special one time init */ /* The soldier can hire more units than the others leader */ if (WFBE_SK_V_Type == 'Soldier') then {missionNamespace setVariable ['WFBE_C_PLAYERS_AI_MAX',(missionNamespace getVariable "WFBE_C_PLAYERS_AI_MAX") + (missionNamespace getVariable "WFBE_C_PLAYERS_SKILL_SOLDIER_UNITS_MAX")]};/* Script: Officer Skill System by Benny. Description: Add special skills to the defined officer. */ Private ['_array','_exist','_skip','_tent','_toWorld','_type','_z']; _type = missionNamespace getVariable Format ["WFBE_%1FARP",sideJoinedText]; _exist = WFBE_Client_Logic getVariable "wfbe_mash"; if !(isNull _exist) then {deleteVehicle _exist}; WFBE_SK_V_LastUse_MASH = time; _skip = false; for [{_z = 0},{_z < 7},{_z = _z + 1}] do { sleep 0.5; player playMove "AinvPknlMstpSlayWrflDnon_medic"; sleep 0.5; waitUntil {animationState player == "ainvpknlmstpslaywrfldnon_amovpknlmstpsraswrfldnon" || !alive player || vehicle player != player}; if (!alive player || vehicle player != player) exitWith {_skip = true}; }; if (!_skip) then { _array = [((player worldToModel (getPos player)) select 0),((player worldToModel (getPos player)) select 1) + 10]; _toWorld = player modelToWorld _array; _tent = _type createVehicle _toWorld; WFBE_Client_Logic setVariable ["wfbe_mash", _tent, true]; _tent addAction ["" + localize 'STR_WF_ACTION_UndeployMASH'+ "", "Client\Module\Skill\Actions\Officer_Undeploy_MASH.sqf", [], 75, false, true, "", "alive _target && time - WFBE_SK_V_LastUse_MASH > 240"]; } else { WFBE_Client_Logic setVariable ["wfbe_mash", objNull, true]; };/* Script: Sniper Skill System by Benny. Description: Add special skills to the defined sniper. */ Private ['_binoculars','_markerName','_markertime','_screenPos']; _binoculars = missionNamespace getVariable 'WFBE_BINOCULARS'; if !((currentWeapon player) in _binoculars) exitWith {hint (localize "STR_WF_INFO_Spot_Info")}; if (isNil "markerID") then {markerID = 1}; _screenPos = screenToWorld [0.5,0.5]; _markerName = Format ["Spot%1",markerID]; createMarkerLocal [_markerName,_screenPos]; _markertime = [daytime] call bis_fnc_timetostring; _markerName setMarkerText Format ['SPOTTED: %1',_markertime]; _markerName setMarkerTypeLocal "mil_destroy"; _markerName setMarkerColorLocal "ColorRed"; _markerName setMarkerSizeLocal [0.5,0.5]; markerID = markerID + 1; WFBE_SK_V_LastUse_Spot = time; [_markerName] Spawn { Private ["_marker"]; _marker = _this select 0; sleep 180; deleteMarkerLocal _marker; };/* Script: Spec Ops Skill System by Benny. Description: Add special skills to the defined spec ops unit. */ Private ['_min','_ran','_skip','_vehicle','_vehicles','_z']; _vehicles = player nearEntities [["Car","Motorcycle","Tank","Ship","Air"],5]; if (count _vehicles < 1) exitWith {}; if (isNil "WFBE_SK_V_LockpickChance") then { //--- Some units will have less troubles lockpicking than the others, negative means more chance WFBE_SK_V_LockpickChance = switch (WFBE_SK_V_Type) do { case "SpecOps": {-20}; default {0}; }; }; _vehicle = [player,_vehicles] Call WFBE_CO_FNC_GetClosestEntity; if (!locked _vehicle) exitWith {}; WFBE_SK_V_LastUse_Lockpick = time; _skip = false; for [{_z = 0},{_z < 2},{_z = _z + 1}] do { sleep 0.5; player playMove "AinvPknlMstpSlayWrflDnon_medic"; sleep 0.5; waitUntil {animationState player == "ainvpknlmstpslaywrfldnon_amovpknlmstpsraswrfldnon" || !alive player || vehicle player != player || !alive _vehicle || _vehicle distance player > 5}; if (!alive player || vehicle player != player || !alive _vehicle || _vehicle distance player > 5) exitWith {_skip = true}; }; if (!locked _vehicle) exitWith {}; if (!_skip) then { _min = 30; switch (typeOf _vehicle) do { case "Motorcycle": {_min = 45}; case "Car": {_min = 35}; case "Tank": {_min = 20}; case "Ship": {_min = 25}; case "Air": {_min = 15}; }; _ran = ((random 100)-WFBE_SK_V_LockpickChance); if (_ran <= _min) then { //--- Unlocked, gain experience. if (WFBE_SK_V_LockpickChance > -51) then {WFBE_SK_V_LockpickChance = WFBE_SK_V_LockpickChance - 1}; // WFBE_RequestVehicleLock = ['SRVFNCREQUESTVEHICLELOCK',[_vehicle,false]]; // publicVariable 'WFBE_RequestVehicleLock'; // if (isHostedServer) then {['SRVFNCREQUESTVEHICLELOCK',[_vehicle,false]] Spawn HandleSPVF}; ["RequestVehicleLock", [_vehicle, false]] Call WFBE_CO_FNC_SendToServer; hint (localize "STR_WF_INFO_Lockpick_Succeed"); } else { hint (localize "STR_WF_INFO_Lockpick_Failed"); }; }; Private ['_add','_buildings','_built','_checks','_closest','_cw','_d','_dir','_driver','_group','_gunner','_lastWP','_lastWPpos','_logic','_logicMARTA','_pos','_radius','_sorted','_spawn','_step','_uav','_waypoints','_wp','_wpcount']; _logic = WF_Logic; if (!isNull playerUAV) then {if (!alive playerUAV) then {playerUAV = objNull}}; if (!isNull playerUAV) exitWith { //--- Disable targetting. {(driver playerUAV) disableAI _x} forEach ["TARGET","AUTOTARGET"]; if (WF_A2_Vanilla) then { ExecVM "Client\Module\UAV\uav_interface.sqf"; } else { ExecVM "Client\Module\UAV\uav_interface_oa.sqf"; }; }; //--- Execute MARTA if (isnil "bis_marta_mainscope") then { _logicMARTA = (group _logic) createunit ["MartaManager",position player,[],0,"none"]; }; if (isNil {missionNamespace getVariable Format ["WFBE_%1UAV",sideJoinedText]}) exitWith {}; if ((missionNamespace getVariable Format ["WFBE_%1UAV",sideJoinedText]) == "") exitWith {}; _buildings = (sideJoined) Call WFBE_CO_FNC_GetSideStructures; _checks = [sideJoined,missionNamespace getVariable Format ["WFBE_%1COMMANDCENTERTYPE",sideJoinedText],_buildings] Call GetFactories; _closest = objNull; if (count _checks > 0) then { _closest = [player,_checks] Call WFBE_CO_FNC_GetClosestEntity; }; if (isNull _closest) exitWith {}; _uav = createVehicle [missionNamespace getVariable Format ["WFBE_%1UAV",sideJoinedText],getPos _closest, [], 0, "FLY"]; playerUAV = _uav; Call Compile Format ["_uav addEventHandler ['Killed',{[_this select 0,_this select 1,%1] Spawn WFBE_CO_FNC_OnUnitKilled}]",sideID]; _uav setVehicleInit Format["[this,%1] ExecVM 'Common\Init\Init_Unit.sqf';",sideID]; processInitCommands; //--- Remove weapons if air restriction is enabled. if ((missionNamespace getVariable "WFBE_C_UNITS_RESTRICT_AIR") == 2) then {removeAllWeapons _uav}; _group = createGroup sideJoined; _driver = [missionNamespace getVariable Format ["WFBE_%1SOLDIER",sideJoinedText],_group,getPos _uav,WFBE_Client_SideID] Call WFBE_CO_FNC_CreateUnit; _driver moveInDriver _uav; //--- Disable targetting. {(driver playerUAV) disableAI _x} forEach ["TARGET","AUTOTARGET"]; _built = 1; //--- OPFOR Uav has no gunner slot. if (sideJoined == west) then { _gunner = [missionNamespace getVariable Format ["WFBE_%1SOLDIER",sideJoinedText],_group,getPos _uav,WFBE_Client_SideID] Call WFBE_CO_FNC_CreateUnit; _gunner MoveInGunner _uav; _built = _built + 1; }; [sideJoinedText,'UnitsCreated',_built] Call UpdateStatistics; [sideJoinedText,'VehiclesCreated',1] Call UpdateStatistics; -12500 Call ChangePlayerFunds; ["RequestSpecial", ["uav",sideJoined,_uav,clientTeam]] Call WFBE_CO_FNC_SendToServer; sleep 0.02; if ((count units _uav) > 1) then {[driver _uav] join grpnull}; _radius = 1000; _wpcount = 4; _step = 360 / _wpcount; _add = 0; _cw = true; _dir = 0; if !(isNil "_lastWP") then {deleteWaypoint _lastWP}; //--- No need to preprocess those. if (WF_A2_Vanilla) then { ExecVM "Client\Module\UAV\uav_interface.sqf"; } else { ExecVM "Client\Module\UAV\uav_interface_oa.sqf"; }; [_uav] ExecVM 'Client\Module\UAV\uav_spotter.sqf'; _spawn = [] spawn {}; //--- Empty spawn while {alive _uav} do { waituntil {waypointDescription [group _uav,currentWaypoint group _uav] != ' ' || !alive _uav}; terminate _spawn; //--- Terminate spawn from previous loop if !(alive _uav) exitWith {}; _waypoints = waypoints _uav; _lastWP = _waypoints select (count _waypoints - 1); _lastWPpos = waypointPosition _lastWP; deleteWaypoint _lastWP; for "_d" from 0 to (360-_step) step _step do { _add = _d; if !(_cw) then {_add = -_d}; _pos = [_lastWPpos, _radius, _dir+_add] call bis_fnc_relPos; _wp = (group _uav) addWaypoint [_pos,0]; _wp setWaypointType "MOVE"; _wp setWaypointDescription ' '; _wp setWaypointCompletionRadius (1000/_wpcount); }; _spawn = [_uav,_add,_step,_lastWPpos,_radius,_dir] spawn { Private ['_add','_currentWP','_dir','_lastWPpos','_pos','_radius','_step','_uav','_wp']; scriptname "UAV Route planning"; _uav = _this select 0; _add = _this select 1; _step = _this select 2; _lastWPpos = _this select 3; _radius = _this select 4; _dir = _this select 5; _currentWP = currentWaypoint group _uav; while {alive _uav} do { waitUntil {_currentWP != currentWaypoint group _uav}; sleep .01; _add = _add + _step; if !(_cw) then {_add = -_add}; _pos = [_lastWPpos, _radius, _dir+_add] call bis_fnc_relPos; _wp = (group _uav) addWaypoint [_pos,0]; _wp setWaypointType "MOVE"; _wp setWaypointDescription ' '; _wp setWaypointCompletionRadius (1000/_wpcount); _currentWP = currentWaypoint group _uav; }; }; _wpcount = count waypoints _uav; waitUntil {waypointDescription [group _uav,currentWaypoint group _uav] == ' ' || _wpcount != count waypoints _uav || !alive _uav}; if (!(alive _uav)||isNull _uav) exitWith {}; }; Private ['_IGUI_update','_alt','_defaultTeamswitch','_defaultvalue','_displayEH_keydown','_displayEH_mousebuttondown','_displayEH_mousezchanged','_locked','_logic','_mapEH_mousebttondown','_newalt','_newspeed','_ppBlur','_ppColor','_ppGrain','_ppInversion','_speed','_uav']; _defaultTeamswitch = teamswitchenabled; startLoadingScreen ["UAV","RscDisplayLoadMission"]; _uav = playerUAV; //--- UAV destroyed if (isnull _uav) exitwith {endLoadingScreen;hintc format [localize "strwfbasestructuredestroyed",localize "str_uav_action"]}; //--- Switch view gunner _uav removeweapon "nvgoggles"; _uav switchcamera "internal"; player remoteControl gunner _uav; _locked = locked _uav; _uav lock true; _uav selectweapon (weapons _uav select 0); enableteamswitch false; titletext ["","black in"]; BIS_UAV_TIME = 0; BIS_UAV_PLANE = _uav; _ppInversion = 0; //--- Disable HC hcshowbar false; //--- Show MARTA icons if (isnil "BIS_UAV_visible") then {BIS_UAV_visible = groupiconsvisible}; setGroupIconsVisible [true,true]; (group _uav) setvariable ["MARTA_waypoint",[true,[-1,-1,-1,-1]]]; //--- Postprocess effects _ppColor = ppEffectCreate ["ColorCorrections", 1999]; _ppColor ppEffectEnable true; _ppColor ppEffectAdjust [1, 1, 0, [1, 1, 1, 0], [1, 1, 1, 0.0], [1, 1, 1, 1.0]]; _ppColor ppEffectCommit 0; _ppBlur = ppEffectCreate ["dynamicBlur", 505]; _ppBlur ppEffectEnable true; _ppBlur ppEffectAdjust [.5]; _ppBlur ppEffectCommit 0; _ppGrain = ppEffectCreate ["filmGrain", 2005]; _ppGrain ppEffectEnable true; _ppGrain ppEffectAdjust [0.02, 1, 1, 0, 1]; _ppGrain ppEffectCommit 0; //--- RSC 1124 cutrsc ["RscUnitInfoUAV","plain"]; waituntil {!isnil {uinamespace getvariable "BIS_UAV_DISPLAY"}}; progressLoadingScreen 0.5; //--- Minimap update ((uinamespace getvariable "BIS_UAV_DISPLAY") displayctrl 112410) mapcenteroncamera true; //--- Default aperture if (isnil {BIS_UAV_PLANE getvariable 'BIS_UAV_aperture'}) then { _defaultvalue = if (daytime > 5 && daytime < 19) then {24} else {0.07}; BIS_UAV_PLANE setvariable ['BIS_UAV_aperture',_defaultValue]; setaperture _defaultvalue; } else { setaperture (BIS_UAV_PLANE getvariable 'BIS_UAV_aperture'); }; //--- Default height _newalt = BIS_UAV_PLANE getvariable 'BIS_UAV_height'; if (isnil "_newalt") then { _alt = position _uav select 2; _newalt = (round (_alt / 50)) * 50; if (_newalt < 100) then {_newalt = 100}; _uav flyinheight _newalt; _uav setvariable ['BIS_UAV_height',_newalt]; }; ((uinamespace getvariable 'BIS_UAV_DISPLAY') displayctrl 112413) ctrlsettext str (_newalt); ((uinamespace getvariable 'BIS_UAV_DISPLAY') displayctrl 112413) ctrlcommit 0; //--- Default speed _newspeed = BIS_UAV_PLANE getvariable 'BIS_UAV_speed'; if (isnil "_newspeed") then { _speed = speed _uav; _newspeed = (round (_speed / 50)) * 50; if (_newalt < 200) then {_newalt = 200}; driver _uav forcespeed _newspeed;; _uav setvariable ['BIS_UAV_speed',_newspeed]; }; ((uinamespace getvariable 'BIS_UAV_DISPLAY') displayctrl 112412) ctrlsettext str (_newspeed); ((uinamespace getvariable 'BIS_UAV_DISPLAY') displayctrl 112412) ctrlcommit 0; BIS_UAV_GUIinit = {scriptName "UAV\data\scripts\uav_interface.sqf: GUI Init"; disableserialization; Private ['_control','_controlHint','_controls','_display']; _display = uinamespace getvariable "BIS_UAV_DISPLAY"; _controls = [112401,112402,112403,112404]; { _control = _display displayctrl _x; _control ctrlshow false; _control ctrlcommit 0; } foreach _controls; _controlHint = _display displayctrl 112414; _controlHint ctrlsettext ( localize "str_coin_exit" + " " + localize "str_input_device_mouse_1" + "\n\n" + localize "str_disp_opt_bright" + " " + localize "str_input_device_mouse_axis_z" + "\n" + localize "str_arcmark_title1" + ": " + call compile actionkeysnames ["Binocular",2] ); _controlHint ctrlcommit 0; }; [] spawn BIS_UAV_GUIinit; _IGUI_update = [] spawn {scriptName "UAV\data\scripts\uav_interface.sqf: IGUI Update"; Private ['_uav']; _uav = BIS_UAV_PLANE; while {cameraon == BIS_UAV_PLANE} do { if (isnull (uinamespace getvariable "BIS_UAV_DISPLAY")) then {bis_uav_terminate = true; ExecVM "ca\modules\uav\data\scripts\uav_interface.sqf"; }; if (visiblemap) then { if (ctrlshown ((uinamespace getvariable "BIS_UAV_DISPLAY") displayctrl 112411)) then { { ((uinamespace getvariable "BIS_UAV_DISPLAY") displayctrl _x) ctrlshow false; ((uinamespace getvariable "BIS_UAV_DISPLAY") displayctrl _x) ctrlcommit 0; } foreach [112410,112411,112412,112413,112414]; }; } else { if !(ctrlshown ((uinamespace getvariable "BIS_UAV_DISPLAY") displayctrl 112411)) then { { ((uinamespace getvariable "BIS_UAV_DISPLAY") displayctrl _x) ctrlshow true; ((uinamespace getvariable "BIS_UAV_DISPLAY") displayctrl _x) ctrlcommit 0; } foreach [112410,112411,112412,112413,112414]; }; }; ((uinamespace getvariable "BIS_UAV_DISPLAY") displayctrl 112411) ctrlsettext str (round speed _uav); ((uinamespace getvariable "BIS_UAV_DISPLAY") displayctrl 112411) ctrlcommit 0; sleep 0.01; }; }; //--- Detect pressed keys (temporary solution) _displayEH_keydown = (finddisplay 46) displayaddeventhandler ["keydown"," Private ['_id','_key','_level','_marker','_markertime','_ppInversion','_uav','_worldpos']; _key = _this select 1; comment '--- END'; if (_key in (actionkeys 'menuback')) then {bis_uav_terminate = true}; comment '--- NVG'; if (_key in (actionkeys 'NightVision')) then { _uav = BIS_UAV_PLANE; if (isnil {_uav getvariable 'BIS_UAV_pp_NVG'}) then { _ppInversion = ppEffectCreate ['colorInversion', 2555]; _ppInversion ppEffectEnable true; _ppInversion ppEffectAdjust [1,1,1]; _ppInversion ppEffectCommit 0; _uav setvariable ['BIS_UAV_pp_NVG',_ppInversion]; } else { ppEffectDestroy (_uav getvariable 'BIS_UAV_pp_NVG'); _uav setvariable ['BIS_UAV_pp_NVG',nil]; }; }; comment '--- MARKER'; if (_key in (actionkeys 'binocular') && !visiblemap) then { _id = 1; while {markertype format ['_user_defined_UAV_MARKER_%1',_id] != ''} do { _id = _id + 1; }; _worldpos = screentoworld [0.5,0.5]; _marker = createmarker [format ['_user_defined_UAV_MARKER_%1',_id],_worldpos]; _marker setmarkertype 'mil_destroy'; _marker setmarkercolor 'colorred'; _marker setmarkersize [0.5,0.5]; _markertime = [daytime] call bis_fnc_timetostring; _marker setmarkertext format ['UAV %1: %2',_id,_markertime]; }; comment '--- UP'; if (_key in (actionkeys 'HeliUp')) then { _uav = BIS_UAV_PLANE; _level = _uav getvariable 'BIS_UAV_height'; _level = _level + 50; if (_level > 1000) then {_level = 1000}; _uav flyinheight _level; _uav setvariable ['BIS_UAV_height',_level]; ((uinamespace getvariable 'BIS_UAV_DISPLAY') displayctrl 112413) ctrlsettext str (_level); ((uinamespace getvariable 'BIS_UAV_DISPLAY') displayctrl 112413) ctrlcommit 0; }; comment '--- DOWN'; if (_key in (actionkeys 'HeliDown')) then { _uav = BIS_UAV_PLANE; _level = _uav getvariable 'BIS_UAV_height'; _level = _level - 50; if (_level < 100) then {_level = 100}; _uav flyinheight _level; _uav setvariable ['BIS_UAV_height',_level]; ((uinamespace getvariable 'BIS_UAV_DISPLAY') displayctrl 112413) ctrlsettext str (_level); ((uinamespace getvariable 'BIS_UAV_DISPLAY') displayctrl 112413) ctrlcommit 0; }; comment '--- FORWARD'; if (_key in (actionkeys 'HeliForward')) then { _uav = BIS_UAV_PLANE; _level = _uav getvariable 'BIS_UAV_speed'; _level = _level + 50; if (_level > 500) then {_level = 500}; if (_level < 200) then {_level = 200}; driver _uav forcespeed (_level / 3.6); _uav setvariable ['BIS_UAV_speed',_level]; ((uinamespace getvariable 'BIS_UAV_DISPLAY') displayctrl 112412) ctrlsettext str (_level); ((uinamespace getvariable 'BIS_UAV_DISPLAY') displayctrl 112412) ctrlcommit 0; }; comment '--- BACK'; if (_key in (actionkeys 'HeliBack')) then { _uav = BIS_UAV_PLANE; _level = _uav getvariable 'BIS_UAV_speed'; _level = _level - 50; if (_level > 500) then {_level = 500}; if (_level < 200) then {_level = 200}; driver _uav forcespeed (_level / 3.6); _uav setvariable ['BIS_UAV_speed',_level]; ((uinamespace getvariable 'BIS_UAV_DISPLAY') displayctrl 112412) ctrlsettext str (_level); ((uinamespace getvariable 'BIS_UAV_DISPLAY') displayctrl 112412) ctrlcommit 0; }; "]; //--- Detect pressed mouse buttons _displayEH_mousebuttondown = (finddisplay 46) displayaddeventhandler ["mousebuttondown"," disableserialization; Private ['_button','_control','_controls','_display']; _button = _this select 1; if (_button == 007 && !visiblemap) then {comment 'DISABLED'; _display = uinamespace getvariable 'BIS_UAV_DISPLAY'; _controls = [112401,112402,112403,112404]; { _control = _display displayctrl _x; _control ctrlshow !(ctrlshown _control); _control ctrlcommit 0; } foreach _controls; }; if (_button == 1 && !visiblemap && 65665 in (actionkeys 'menuback')) then {bis_uav_terminate = true}; "]; //--- Detect mouse wheel rotation _displayEH_mousezchanged = (finddisplay 46) displayaddeventhandler ["mousezchanged"," Private ['_aperture','_oldAperture','_zChangeFinal','_zchange']; _zchange = _this select 1; _oldAperture = BIS_UAV_PLANE getvariable 'BIS_UAV_aperture'; _zChangeFinal = _zChange / 2; if (_oldAperture <= 1.0) then {_zChangeFinal = _zChange / 10}; if (_oldAperture <= 0.1) then {_zChangeFinal = _zChange / 1000}; _aperture = _oldAperture + _zchangeFinal; if (_oldaperture > 1.0 && _aperture < 1.0) then {_aperture = 1.0}; if (_oldaperture > 0.1 && _aperture < 0.1) then {_aperture = 0.1}; if (_aperture < 0.001) then {_aperture = 0.001}; BIS_UAV_PLANE setvariable ['BIS_UAV_aperture',_aperture]; setaperture _aperture; "]; _mapEH_mousebttondown = ((findDisplay 12) displayCtrl 51) ctrladdeventhandler ["mousebuttondown", " Private ['_button','_uav','_worldpos','_wp']; _button = _this select 1; if (_button == 0) then { _uav = BIS_UAV_PLANE; while {count (waypoints _uav) > 0} do {deletewaypoint ((waypoints _uav) select 0)}; _worldpos = (_this select 0) posscreentoworld [_this select 2,_this select 3]; _wp = (group _uav) addwaypoint [_worldpos,0]; _wp setWaypointType 'MOVE'; (group _uav) setcurrentwaypoint _wp; }; "]; endLoadingScreen; //--- TERMINATE waituntil {!isnil "bis_uav_terminate" || !alive _uav || !alive player}; if (!alive _uav) then { hintc format [localize "strwfbasestructuredestroyed",localize "str_uav_action"]; } else { //--- Reenable targetting. {(driver playerUAV) enableAI _x} forEach ["TARGET","AUTOTARGET"]; }; _uav lock _locked; titletext ["","black in"]; bis_uav_terminate = nil; BIS_UAV_TIME = nil; BIS_UAV_PLANE = nil; objnull remoteControl gunner _uav; player switchcamera "internal"; enableteamswitch _defaultTeamswitch; setGroupIconsVisible BIS_UAV_visible; BIS_UAV_visible = nil; (group _uav) setvariable ["MARTA_waypoint",[false,[-1,-1,-1,-1]]]; setaperture -1; ppEffectDestroy _ppColor; ppEffectDestroy _ppBlur; ppEffectDestroy (_uav getvariable 'BIS_UAV_pp_NVG'); //--- Color Invert Fix. ppEffectDestroy _ppGrain; 1124 cuttext ["","plain"]; (finddisplay 46) displayremoveeventhandler ["keydown",_displayEH_keydown]; (finddisplay 46) displayremoveeventhandler ["mousebuttondown",_displayEH_mousebuttondown]; (finddisplay 46) displayremoveeventhandler ["mousezchanged",_displayEH_mousezchanged]; ((findDisplay 12) displayCtrl 51) ctrlremoveeventhandler ["mousebuttondown",_mapEH_mousebttondown];Private ['_action_leave','_defaultTeamswitch','_displayEH_keydown','_displayEH_mousebuttondown','_locked','_logic','_mapEH_mousebttondown','_ppColor','_uav']; _defaultTeamswitch = teamswitchenabled; startLoadingScreen ["UAV","RscDisplayLoadMission"]; _uav = playerUAV; //--- UAV destroyed if (isnull _uav) exitwith {endLoadingScreen;hint format [localize "strwfbasestructuredestroyed",localize "str_uav_action"]}; //--- Switch view gunner _uav removeweapon "nvgoggles"; _uav switchcamera "internal"; player remoteControl gunner _uav; _locked = locked _uav; _uav lock true; _uav selectweapon (weapons _uav select 0); enableteamswitch false; titletext ["","black in"]; BIS_UAV_TIME = 0; BIS_UAV_PLANE = _uav; //--- Action! _action_leave = _uav addaction [ localize "STR_EP1_UAV_action_exit", "ca\modules_e\uav\data\scripts\uav_actionCommit.sqf", [0], 1, false, true, "PersonView", "isnil 'BIS_UAV_noExit'" ]; //--- Disable HC if (hcShownBar) then {hcshowbar false}; //--- Show MARTA icons if (isnil "BIS_UAV_visible") then {BIS_UAV_visible = groupiconsvisible}; setGroupIconsVisible [true,true]; (group _uav) setvariable ["MARTA_waypoint",[true,[-1,-1,-1,-1]]]; //--- Prostprocess effects //setaperture 24; _ppColor = ppEffectCreate ["ColorCorrections", 1999]; _ppColor ppEffectEnable true; _ppColor ppEffectAdjust [1, 1, 0, [1, 1, 1, 0], [1, 1, 1, 0.0], [0.2, 0.2, 0.2, 0]]; _ppColor ppEffectCommit 0; //--- RSC progressLoadingScreen 0.5; //--- Detect pressed keys (temporary solution) BIS_UAV_HELI_keydown = { Private ['_id','_key','_marker','_markertime','_newHeight','_uav','_worldpos']; _key = _this select 1; _uav = BIS_UAV_PLANE; //--- END //if (_key in (actionkeys 'menuback') && isnil 'BIS_UAV_noExit') then {bis_uav_terminate = true}; //--- MARKER if (_key in (actionkeys 'binocular') && !visiblemap) then { _id = 1; while {markertype format ['_user_defined_UAV_MARKER_%1',_id] != ''} do { _id = _id + 1; }; _worldpos = screentoworld [0.5,0.5]; _marker = createmarker [format ['_user_defined_UAV_MARKER_%1',_id],_worldpos]; _marker setmarkertype 'mil_destroy'; _marker setmarkercolor 'colorred'; _marker setmarkersize [0.5,0.5]; _markertime = [daytime] call bis_fnc_timetostring; _marker setmarkertext format ['UAV %1: %2',_id,_markertime]; }; //--- UP if (_key in (actionkeys 'HeliUp')) then { _newHeight = (position _uav select 2) + 50; if (_newHeight > 1000) then {_newHeight = 1000}; if (speed _uav < 1) then {_uav domove position _uav;}; _uav land 'none'; _uav flyinheight _newHeight; }; //--- DOWN if (_key in (actionkeys 'HeliDown')) then { _newHeight = (position _uav select 2) - 50; if (_newHeight < 100) then {_newHeight = 100}; _uav land 'none'; _uav flyinheight _newHeight; }; }; _displayEH_keydown = (finddisplay 46) displayaddeventhandler ["keydown","Private['_sqf']; _sqf = _this spawn BIS_UAV_HELI_keydown"]; //--- Detect pressed mouse buttons _displayEH_mousebuttondown = (finddisplay 46) displayaddeventhandler ["mousebuttondown"," disableserialization; Private ['_button','_control','_controls','_display']; _button = _this select 1; if (_button == 007 && !visiblemap) then {comment 'DISABLED'; _display = uinamespace getvariable 'BIS_UAV_DISPLAY'; _controls = [112401,112402,112403,112404]; { _control = _display displayctrl _x; _control ctrlshow !(ctrlshown _control); _control ctrlcommit 0; } foreach _controls; }; "]; //_display = findDisplay 12; //_map = _display displayCtrl 51; _mapEH_mousebttondown = ((findDisplay 12) displayCtrl 51) ctrladdeventhandler ["mousebuttondown", " Private ['_button','_uav','_worldpos','_wp']; _button = _this select 1; if (_button == 0) then { _uav = BIS_UAV_PLANE; while {count (waypoints _uav) > 0} do {deletewaypoint ((waypoints _uav) select 0)}; _worldpos = (_this select 0) posscreentoworld [_this select 2,_this select 3]; _wp = (group _uav) addwaypoint [_worldpos,0]; _wp setWaypointType 'MOVE'; (group _uav) setcurrentwaypoint _wp; }; "]; ////////////////////////////////////////////////// endLoadingScreen; ////////////////////////////////////////////////// //--- TERMINATE waituntil {!isnil "bis_uav_terminate" || !alive _uav || !alive player}; if (!alive _uav) then { hint format [localize "strwfbasestructuredestroyed",localize "str_uav_action"]; } else { //--- Reenable targetting. {(driver playerUAV) enableAI _x} forEach ["TARGET","AUTOTARGET"]; }; _uav lock _locked; titletext ["","black in"]; bis_uav_terminate = nil; BIS_UAV_TIME = nil; BIS_UAV_PLANE = nil; objnull remoteControl gunner _uav; player switchcamera "internal"; enableteamswitch _defaultTeamswitch; _uav removeaction _action_leave; setGroupIconsVisible BIS_UAV_visible; BIS_UAV_visible = nil; (group _uav) setvariable ["MARTA_waypoint",[false,[-1,-1,-1,-1]]]; ppEffectDestroy _ppColor; //1124 cuttext ["","plain"]; (finddisplay 46) displayremoveeventhandler ["keydown",_displayEH_keydown]; (finddisplay 46) displayremoveeventhandler ["mousebuttondown",_displayEH_mousebuttondown]; //(finddisplay 46) displayremoveeventhandler ["mousezchanged",_displayEH_mousezchanged]; ((findDisplay 12) displayCtrl 51) ctrlremoveeventhandler ["mousebuttondown",_mapEH_mousebttondown];/* Author: Benny Name: uav_spotter.sqf Parameters: 0 - UAV Description: This file handle the UAV 'spotting' ability. If the UAV knows about an hostile unit, it'll reveal it's average location on the map. */ Private ['_delay','_range','_sensitivity','_uav']; _uav = _this select 0; _delay = missionNamespace getVariable "WFBE_C_PLAYERS_UAV_SPOTTING_DELAY"; _range = missionNamespace getVariable "WFBE_C_PLAYERS_UAV_SPOTTING_RANGE"; _sensitivity = missionNamespace getVariable "WFBE_C_PLAYERS_UAV_SPOTTING_DETECTION"; while {true} do { sleep _delay; if !(alive _uav) exitWith {}; { if (_uav knowsAbout _x > _sensitivity && !(side _x in [sideJoined, civilian])) then { sleep (0.05 + random 0.05); [sideJoined, "HandleSpecial", ["uav-reveal", _uav, _x]] Call WFBE_CO_FNC_SendToClients; }; } forEach (_uav nearEntities _range); }; Private ["_action","_actionID","_caller","_index","_isAttached","_lifter","_position","_type","_vehicle","_vehicles"]; _lifter = _this select 0; _caller = _this select 1; _actionID = _this select 2; if (_caller != driver _lifter) exitWith {}; if ((typeOf _lifter) in Zeta_Special) then { if (speed _lifter > 20) exitWith {}; } else { if ((speed _lifter > 20)||((getpos _lifter select 2)<2)) exitWith {}; }; //--- nearEntities handle living units. _vehicles = _lifter nearEntities [Zeta_Types, 10]; if (count _vehicles < 1) exitWith {}; _vehicle = [_lifter,_vehicles] Call WFBE_CO_FNC_GetClosestEntity; _type = typeOf _lifter; _position = Zeta_DefaultPos; _index = Zeta_Special find _type; if (_index != -1) then {_position = Zeta_SpecialPosition select _index}; if (count crew(_vehicle) > 0) exitWith {hint (localize 'STR_WF_INFO_Hook_Manned')}; _vehicle attachTo [_lifter,_position]; _lifter setVariable ["Attached",true,false]; _lifter removeAction _actionID; _action = _lifter addAction [localize "STR_WF_Lift_Detach","Client\Module\ZetaCargo\Zeta_Unhook.sqf"]; while {!gameOver} do { sleep 2; _isAttached = _lifter getVariable "Attached"; if ((getDammage _lifter > 0.3)||!_isAttached||isNull (driver _lifter) || count crew(_vehicle) > 0) exitWith { detach _vehicle; _lifter removeAction _action; if (alive _lifter) then {_lifter addAction [localize "STR_WF_Lift","Client\Module\ZetaCargo\Zeta_Hook.sqf"]}; }; };//--- Zeta Cargo by Benny. //--- Unit allowed to hook. Zeta_Lifter = ["MH60S","MV22","C130J","Mi17_Ins","Mi17_medevac_RU","UH60M_EP1","UH60M_MEV_EP1","CH_47F_EP1","C130J_US_EP1","Mi17_TK_EP1","BAF_Merlin_HC3_D","CH_47F_BAF","Mi17_Civilian"]; //--- Zeta Cargo can lift these types. Zeta_Types = ["Car","Motorcycle","Tank","Ship"]; //--- Zeta Cargo default Position. Zeta_DefaultPos = [0,0,-4]; //--- Special vehicle with special position. Zeta_Special = ["C130J","C130J_US_EP1"]; Zeta_SpecialPosition = [[0,0,-2]];Private ["_actionID","_caller","_index","_lifter","_param","_sorted","_type","_vehicle","_vehicles"]; _lifter = _this select 0; _caller = _this select 1; _actionID = _this select 2; _param = _this select 3; _vehicle = _param select 0; _lifter setVariable ["Attached",false]; detach _vehicle; if ((typeOf _lifter) in Zeta_Special) then { _vehicle setPos [(getPos _lifter select 0) - (15 * sin (getDir _vehicle)), (getPos _lifter select 1) - (15 * cos (getDir _vehicle)), getPos _lifter select 2]; }; _vehicle setVelocity (velocity _lifter); _lifter removeAction _actionID; sleep 1; if ((getPos _vehicle) select 2 < 0) then {_vehicle setPos [(getPos _vehicle) select 0,(getPos _vehicle) select 1,0];_vehicle setVelocity [0,0,-0.1]};/* Set a town's camps to a side on a client. Parameters: - Town. - Old Side. - New Side. */ Private ["_camps","_side_old","_side_new","_town"]; _town = _this select 0; _side_old = _this select 1; _side_new = _this select 2; //--- Abort if the client is not concerned (3-way). if !(WFBE_Client_SideID in [_side_old,_side_new]) exitWith {}; _camps = _town getVariable "camps"; _color = missionNamespace getVariable (Format ["WFBE_C_%1_COLOR",(_side_new) Call WFBE_CO_FNC_GetSideFromID]); {(_x getVariable "wfbe_camp_marker") setMarkerColorLocal _color} forEach _camps;Private["_assist","_bounty","_get","_name","_type"]; _type = _this select 0; _assist = _this select 1; _ai = if (count _this > 2) then {_this select 2} else {objNull}; _get = missionNamespace getVariable _type; _name = _get select QUERYUNITLABEL; _bounty = round((_get select QUERYUNITPRICE) * (missionNamespace getVariable "WFBE_C_UNITS_BOUNTY_COEF")); sleep (random 3); //--- Are we dealing with a kill assist or a full kill. if (_assist) then { _bounty = _bounty * (missionNamespace getVariable "WFBE_C_UNITS_BOUNTY_ASSISTANCE_COEF"); Format[Localize "STR_WF_CHAT_Award_Bounty_Assist", _bounty, _name] Call GroupChatMessage; } else { Format[Localize "STR_WF_CHAT_Award_Bounty", _bounty, _name] Call GroupChatMessage; }; _bounty Call ChangePlayerFunds; if (alive _ai) then {//--- If the killer was one of our ai, then we improve it's skill. Private ["_skill", "_skill_ai"]; _skill = switch (true) do { case (_type isKindOf "Infantry"): {0.01}; case (_type isKindOf "Car"): {0.02}; case (_type isKindOf "Ship"): {0.02}; case (_type isKindOf "Motorcycle"): {0.01}; case (_type isKindOf "Tank"): {0.04}; case (_type isKindOf "Helicopter"): {0.05}; case (_type isKindOf "Plane"): {0.05}; case (_type isKindOf "StaticWeapon"): {0.03}; case (_type isKindOf "Building"): {0.02}; default {0.005}; }; _skill_ai = skill _ai; if (_skill_ai < 1) then { //--- Don't bother if the unit's skill is already 1. if (_skill_ai + _skill > 1) then {_skill = 1 - _skill_ai}; _ai setSkill (_skill_ai + _skill); }; };/* A camp has been captured by a unit or repaired. Parameters: - Camp. - New Side. - Old Side. - {Is repaired}. */ Private ["_camps","_is_repair","_side","_side_new","_sideID_new","_sideID_old","_town"]; _camp = _this select 0; _sideID_new = _this select 1; _sideID_old = _this select 2; _is_repair = if (count _this > 3) then {_this select 3} else {false}; _town = _camp getVariable "town"; //--- Does the new side match the client side? if (WFBE_Client_SideID == _sideID_new) then { //--- The client side has captured a camp. (_camp getVariable "wfbe_camp_marker") setMarkerColorLocal WFBE_Client_Color; //--- Skip the reset upon repair. if (_is_repair) exitWith {}; //--- Attempt to award the client if his orders were to take a town. // if ((WFBE_Client_Team getVariable "wfbe_task_order") == "towns") then { //--- Ensure that the destination is the camp's town. // if ((WFBE_Client_Team getVariable "wfbe_task_position") == _town) then { Private ["_closest"]; //--- Get the closest unit from the player group near the camp. _closest = [_camp, units group player] Call WFBE_CO_FNC_GetClosestEntity; //--- If the closest unit is in range, then award the player's group. if (_closest distance _camp < (missionNamespace getVariable "WFBE_C_CAMPS_RANGE")) then { hint parseText Format["Information:

Your squad has captured a camp near %1 and has been rewarded with $%2.",_town getVariable "name",missionNamespace getVariable "WFBE_C_CAMPS_CAPTURE_BOUNTY"]; ["RequestChangeScore", [player,score player + (missionNamespace getVariable 'WFBE_C_PLAYERS_SCORE_CAPTURE_CAMP')]] Call WFBE_CO_FNC_SendToServer; (missionNamespace getVariable "WFBE_C_CAMPS_CAPTURE_BOUNTY") Call WFBE_CL_FNC_ChangeClientFunds; }; // }; // }; } else { //--- Did the client side lost a known camp? if (WFBE_Client_SideID in [(_town getVariable "sideID"), _sideID_old]) then { (_camp getVariable "wfbe_camp_marker") setMarkerColorLocal (missionNamespace getVariable Format ["WFBE_C_%1_COLOR",(_sideID_new) Call WFBE_CO_FNC_GetSideFromID]); }; };Private ["_newScore","_playerChanged","_oldScore"]; _playerChanged = _this select 0; _newScore = _this select 1; _oldScore = score _playerChanged; _playerChanged addScore -(_oldScore); _playerChanged addScore _newScore;Private['_args', '_request']; _request = _this select 0; _args = +_this; _args set [0, "**NIL**"]; _args = _args - ["**NIL**"]; //--- Strip the action request from the arguments. switch (_request) do { case "action-perform": {_args spawn WFBE_CL_FNC_Perform_Action}; case "commander-vote": {_args spawn WFBE_CL_FNC_Commander_VoteEnd}; case "commander-vote-start": {_args spawn WFBE_CL_FNC_Commander_VoteStart}; case "delegate-townai": {_args spawn WFBE_CL_FNC_Delegate_TownAI}; case "endgame": {_args spawn WFBE_CL_FNC_EndGame}; case "group-join-accept": {_args call WFBE_CL_FNC_Groups_JoinAccepted}; case "group-join-deny": {_args call WFBE_CL_FNC_Groups_JoinDenied}; case "group-kick": {_args call WFBE_CL_FNC_Groups_KickedOff}; case "group-join-request": {_args call WFBE_CL_FNC_Groups_ReceiveRequest}; case "hq-setstatus": {_args spawn WFBE_CL_FNC_HQ_SetStatus}; case "icbm-display": {_args spawn WFBE_CL_FNC_Display_ICBM}; case "irsmoke-createfx": {{_x spawn WFBE_CO_MOD_IRS_CreateSmoke} forEach (_args select 0)}; case "join-answer": {missionNamespace setVariable ['WFBE_P_CANJOIN', (_args select 0)]}; case "uav-reveal": {_args spawn WFBE_CL_FNC_Reveal_UAV}; case "upgrade-complete": {_args spawn WFBE_CL_FNC_Upgrade_Complete}; };Private["_localize","_txt"]; _localize = _this select 0; _txt = ""; switch (_localize) do { case "BuildingTeamkill": {_txt = Format [Localize "STR_WF_CHAT_Teamkill_Building",_this select 1, _this select 2, [_this select 3, 'displayName'] Call GetConfigInfo]}; case "Teamswap": {_txt = Format [Localize "STR_WF_CHAT_Teamswap",_this select 1, _this select 2, _this select 3, _this select 4]}; case "CommanderDisconnected": {_txt = Localize "strwfcommanderdisconnected"}; case "TacticalLaunch": {_txt = Localize "STR_WF_CHAT_ICBM_Launch"}; case "Teamkill": {_txt = Format [Localize "STR_WF_CHAT_Teamkill",(missionNamespace getVariable "WFBE_C_PLAYERS_PENALTY_TEAMKILL")]; -(missionNamespace getVariable "WFBE_C_PLAYERS_PENALTY_TEAMKILL") Call ChangePlayerFunds}; case "FundsTransfer": {_txt = Format [Localize "STR_WF_CHAT_FundsTransfer",_this select 1,_this select 2]}; case "StructureSold": {_txt = Format [Localize "STR_WF_CHAT_Structure_Sold",([_this select 1,'displayName'] Call GetConfigInfo)]}; case "StructureSell": {_txt = Format [Localize "STR_WF_CHAT_Structure_Sell",([_this select 1,'displayName'] Call GetConfigInfo),_this select 2]}; case "SecondaryAward": {_txt = Format [Localize "STR_WF_CHAT_Secondary_Award",_this select 1, _this select 2];(_this select 2) Call ChangePlayerFunds}; }; if (_localize != 'FundsTransfer') then { _txt Call CommandChatMessage; } else { _txt Call GroupChatMessage; };/* Client receive a secondary mission (if enabled). Parameters: - Mission Parameters. */ Private ["_folder","_parameters"]; _parameters = _this; _folder = _parameters select 0; //--- Exclude the folder. _parameters set [0, "**NIL**"]; _parameters = _parameters - ["**NIL**"]; //--- Call the mission with the proper parameter count now. _parameters ExecVM Format["Client\Module\Missions\%1\m_init_client.sqf", _folder];Private ["_task","_taskPos","_taskTime","_taskTimeLabel"]; _task = _this select 0; _taskTime = _this select 1; _taskTimeLabel = _this select 2; _taskPos = _this select 3; if (!isNull(comTask)) then {player removeSimpleTask comTask}; comTask = player createSimpleTask ["CommanderOrder"]; comTask setSimpleTaskDescription [Format[localize "STR_WF_CHAT_TaskTO_Display",_task,_taskTimeLabel], _task, _task]; comTask setSimpleTaskDestination _taskPos; player setCurrentTask comTask; taskHint [format [localize "str_taskNew" + "\n%1",_task], [1,1,1,1], "taskNew"]; [comTask,_taskTime,_taskPos,_task] Spawn { Private ["_duration","_pos","_succeed","_task","_timer","_type"]; _task = _this select 0; _duration = (_this select 1)*60; //--- Converts to seconds. _pos = _this select 2; _type = _this select 3; _timer = 0; _succeed = false; while {(taskDestination _task) select 0 == (_pos select 0) && !_succeed} do { sleep 5; if (player distance _pos < 250) then {_timer = _timer + 5}; if (_timer > _duration) then {_succeed = true}; }; if (_succeed) then { taskHint [format [localize "str_taskAccomplished" + "\n%1",_type], [1,1,1,1], "taskDone"]; _task setTaskState "Succeeded"; player kbTell [sideHQ, WFBE_V_HQTopicSide, "OrderDone",["1","","HQ",["HQ"]],["2","","We are",["WeAre"]],["3","","ready for orders",["ReadyForOrders"]],["4","","over.",["Over1"]],true]; }; };(_this select 0) lock (_this select 1);/* Triggered everytime a capture is done (town captured or lost). Parameters: - Town - Old side ID. - New side ID. */ Private ["_color","_town","_townMarker","_town_side_value","_town_side_value_new"]; _town = _this select 0; _town_side_value = _this select 1; _town_side_value_new = _this select 2; //--- Make sure that the client is concerned by the capture either by capturing or having a town captured. if !(WFBE_Client_SideID in [_town_side_value,_town_side_value_new]) exitWith {}; _side_captured = (_town_side_value_new) Call WFBE_CO_FNC_GetSideFromID; //--- Color the town depending on the side which captured. _color = missionNamespace getVariable (Format ["WFBE_C_%1_COLOR", _side_captured]); _townMarker = Format ["WFBE_%1_CityMarker", _town]; _townMarker setMarkerColorLocal _color; //--- Display a title message. _side_label = switch (_side_captured) do {case west: {localize "STR_WF_PARAMETER_Side_West"}; case east: {localize "STR_WF_PARAMETER_Side_East"}; case resistance: {localize "STR_WF_Side_Resistance"}; default {"Civilian"}}; [Format[Localize "STR_WF_CHAT_Town_Captured", _town getVariable "name", _side_label]] Call TitleTextMessage; //--- Task. _task = _town getVariable 'taskLink'; _ptask = currentTask player; if (isNil '_task') then {_task = objNull}; //--- Taskman ["TownUpdate", _town] Spawn TaskSystem; //--- Client side capture. if (_town_side_value_new == WFBE_Client_SideID) then { //--- Retrieve the closest unit of the town. _closest = [_town, (units group player) Call WFBE_CO_FNC_GetLiveUnits] Call WFBE_CO_FNC_GetClosestEntity; //--- Client reward. if !(isNull _closest) then { //--- Check if the closest unit of the town in in range. _distance = _closest distance _town; _bonus = -1; _score = -1; if (_distance <= (missionNamespace getVariable "WFBE_C_TOWNS_CAPTURE_RANGE")) then { //--- Capture _bonus = if (_task == _ptask) then {missionNamespace getVariable "WFBE_C_PLAYERS_BOUNTY_CAPTURE_MISSION"} else {missionNamespace getVariable "WFBE_C_PLAYERS_BOUNTY_CAPTURE"}; _score = missionNamespace getVariable "WFBE_C_PLAYERS_SCORE_CAPTURE"; } else { //--- Is it an assist?. if (_distance <= (missionNamespace getVariable "WFBE_C_TOWNS_CAPTURE_ASSIST")) then { //--- Assist. _bonus = if (_task == _ptask) then {missionNamespace getVariable "WFBE_C_PLAYERS_BOUNTY_CAPTURE_MISSION_ASSIST"} else {missionNamespace getVariable "WFBE_C_PLAYERS_BOUNTY_CAPTURE_ASSIST"}; _score = missionNamespace getVariable "WFBE_C_PLAYERS_SCORE_CAPTURE_ASSIST"; }; }; //--- Update the funds if necessary. if (_bonus != -1) then { (_bonus) Call WFBE_CL_FNC_ChangeClientFunds; Format[Localize "STR_WF_CHAT_Town_Bounty_Full", _town getVariable "name", _bonus] Call CommandChatMessage; }; //--- Update the score necessary. if (_score != -1) then {["RequestChangeScore", [player,score player + _score]] Call WFBE_CO_FNC_SendToServer}; }; //--- Commander reward (if the player is the commander) if !(isNull commanderTeam) then { if (commanderTeam == group player) then { _bonus = (_town getVariable "startingSupplyValue") * (missionNamespace getVariable "WFBE_C_PLAYERS_COMMANDER_BOUNTY_CAPTURE_COEF"); (_bonus) Call WFBE_CL_FNC_ChangeClientFunds; ["RequestChangeScore", [player,score player + (missionNamespace getVariable "WFBE_C_PLAYERS_COMMANDER_SCORE_CAPTURE")]] Call WFBE_CO_FNC_SendToServer; Format[Localize "STR_WF_CHAT_Commander_Bounty_Town", _bonus, _town getVariable "name"] Call CommandChatMessage; }; }; //--- Taskman if !(isNull _task) then { if (_ptask == _task) then { ["TownAssignClosest"] Spawn TaskSystem; }; }; };Private ["_height","_object","_markerName","_side"]; _object = _this select 0; _side = _this select 1; unitMarker = unitMarker + 1; _markerName = Format ["unitMarker%1",unitMarker]; createMarkerLocal [_markerName,[0,0,0]]; _markerName setMarkerTypeLocal "Vehicle"; _markerName setMarkerColorLocal "ColorYellow"; _markerName setMarkerSizeLocal [5,5]; _markerName setMarkerAlphaLocal 0; _height = missionNamespace getVariable "WFBE_C_STRUCTURES_ANTIAIRRADAR_DETECTION"; while {alive _object && !(isNull _object)} do { if (antiAirRadarInRange) then { if (((getPos _object) select 2) > _height) then { _markerName setMarkerAlphaLocal 1; _markerName setMarkerPosLocal (getPos _object); } else { _markerName setMarkerAlphaLocal 0; }; }; sleep 1; }; deleteMarkerLocal _markerName;Private ["_arty"]; _arty = _this select 0; waitUntil {BIS_ARTY_LOADED}; sleep 5; [_arty] call BIS_ARTY_F_initVehicle;Private ["_deathMarkerColor","_deathMarkerSize","_deathMarkerType","_delete","_deletePrevious","_markerColor","_markerName","_markerSize","_markerType","_markerText","_refreshRate","_trackDeath","_tracked","_side"]; waitUntil {commonInitComplete}; _markerType = _this select 0; _markerColor = _this select 1; _markerSize = _this select 2; _markerText = _this select 3; _markerName = _this select 4; _tracked = _this select 5; _refreshRate = _this select 6; _trackDeath = _this select 7; _deathMarkerType = _this select 8; _deathMarkerColor = _this select 9; _deletePrevious = _this select 10; _side = _this select 11; _deathMarkerSize = [1,1]; if (count _this > 12) then {_deathMarkerSize = _this select 12}; if (_side != side player || isNull _tracked || !(alive _tracked)) exitWith {}; if (_deletePrevious) then {deleteMarkerLocal _markerName}; createMarkerLocal [_markerName,getPos _tracked]; if (_markerText != "") then {_markerName setMarkerTextLocal _markerText}; _markerName setMarkerTypeLocal _markerType; _markerName setMarkerColorLocal _markerColor; _markerName setMarkerSizeLocal _markerSize; while {alive _tracked && !(isNull _tracked)} do { _markerName setMarkerPosLocal (getPos _tracked); sleep _refreshRate; }; if (_trackDeath) then { _markerName setMarkerTypeLocal _deathMarkerType; _markerName setMarkerColorLocal _deathMarkerColor; _markerName setMarkerSizeLocal _deathMarkerSize; sleep (missionNamespace getVariable "WFBE_C_PLAYERS_MARKER_DEAD_DELAY"); }; deleteMarkerLocal _markerName;Private ["_belong","_cpt","_def_content","_div","_faction","_n","_name","_o","_p","_processed","_set","_type","_u","_z"]; _faction = _this select 0; _u = _this select 1; _p = _this select 2; _n = _this select 3; _o = _this select 4; _z = _this select 5; _cpt = 0; for '_i' from 0 to count(_u)-1 do { if (isClass(configFile >> 'CfgVehicles' >> (_u select _i))) then { _processed = false; if (getNumber(configFile >> 'CfgVehicles' >> (_u select _i) >> "isbackpack") == 1 && !isClass(configFile >> 'CfgVehicles' >> (_u select _i) >> "assembleInfo")) then { _cpt = _cpt + 1; _processed = true; if (isNil {missionNamespace getVariable (_u select _i)}) then { _name = getText(configFile >> 'CfgVehicles' >> (_u select _i) >> "displayName"); if ((_n select _i) != '') then { _tag = toArray(_n select _i); if (toString[_tag select 0] == "+") then {_tag set[0,20];_name = _name + toString(_tag)}; }; _set = []; _set set [0, if ((_p select _i) == '') then {getText(configFile >> 'CfgVehicles' >> (_u select _i) >> "picture")} else {_p select _i}]; _set set [1, _name]; _set set [2, _o select _i]; _set set [3, _z select _i]; _set set [4, 200]; _def_content = [[[],[]],[[],[]]]; if (isClass(configFile >> 'CfgVehicles' >> (_u select _i) >> 'TransportWeapons')) then { Private ["_cname","_get","_root"]; for '_j' from 0 to count(configFile >> 'CfgVehicles' >> (_u select _i) >> "TransportWeapons")-1 do { _root = (configFile >> 'CfgVehicles' >> (_u select _i) >> 'TransportWeapons') select _j; _cname = getText(_root >> 'weapon'); _get = missionNamespace getVariable _cname; if !(isNil '_get') then { [(_def_content select 0) select 0, _cname] Call WFBE_CO_FNC_ArrayPush; [(_def_content select 0) select 1, getNumber(_root >> 'count')] Call WFBE_CO_FNC_ArrayPush; } else { ["ERROR", Format["Config_Backpack.sqf : [%1] Backpack [%2] Weapon [%3] could not be found in the gear file.",_faction,_u select _i,_cname], 3] Call WFBE_CO_FNC_LogContent; }; }; }; if (isClass(configFile >> 'CfgVehicles' >> (_u select _i) >> 'TransportMagazines')) then { Private ["_cname","_count","_get","_root"]; for '_j' from 0 to count(configFile >> 'CfgVehicles' >> (_u select _i) >> "TransportMagazines")-1 do { _root = (configFile >> 'CfgVehicles' >> (_u select _i) >> 'TransportMagazines') select _j; _cname = getText(_root >> 'magazine'); _get = missionNamespace getVariable Format["Mag_%1",_cname]; if !(isNil '_get') then { [(_def_content select 1) select 0, _cname] Call WFBE_CO_FNC_ArrayPush; [(_def_content select 1) select 1, getNumber(_root >> 'count')] Call WFBE_CO_FNC_ArrayPush; } else { ["ERROR", Format["Config_Backpack.sqf : [%1] Backpack [%2] Ammunition [%3] could not be found in the gear file.",_faction,_u select _i,_cname], 3] Call WFBE_CO_FNC_LogContent; }; }; }; _set set [5, _def_content]; missionNamespace setVariable [Format["%1",_u select _i], _set]; ["INITIALIZATION", Format["Config_Backpack.sqf : [%1] Backpack [%2] defined",_faction,_u select _i]] Call WFBE_CO_FNC_LogContent; } else { ["TRIVIAL", Format["Config_Backpack.sqf : [%1] Backpack [%2] has been skipped since it's already defined",_faction,_u select _i]] Call WFBE_CO_FNC_LogContent; }; }; if (isClass(configFile >> 'CfgVehicles' >> (_u select _i) >> "assembleInfo")) then { _cpt = _cpt + 1; _processed = true; if (isNil {missionNamespace getVariable (_u select _i)}) then { _set = []; _set set [0, if ((_p select _i) == '') then {getText(configFile >> 'CfgVehicles' >> (_u select _i) >> "picture")} else {_p select _i}]; _set set [1, if ((_n select _i) == '') then {getText(configFile >> 'CfgVehicles' >> (_u select _i) >> "displayName")} else {_n select _i}]; _set set [2, _o select _i]; _set set [3, _z select _i]; _set set [4, 201]; missionNamespace setVariable [Format["%1",_u select _i], _set]; ["INITIALIZATION", Format["Config_Backpack.sqf : [%1] Backpack [%2] defined",_faction,_u select _i]] Call WFBE_CO_FNC_LogContent; } else { ["TRIVIAL", Format["Config_Backpack.sqf : [%1] Bag [%2] has been skipped since it's already defined",_faction,_u select _i]] Call WFBE_CO_FNC_LogContent; }; }; if !(_processed) then {["ERROR", Format["Config_Backpack.sqf : [%1] Entitie [%2] is not a valid Backpack",_faction,_u select _i], 3] Call WFBE_CO_FNC_LogContent;}; } else { ["ERROR", Format["Config_Backpack.sqf : [%1] Backpack [%2] is not a valid class within ",_faction,_u select _i], 3] Call WFBE_CO_FNC_LogContent; }; }; ["INFORMATION", Format ["Config_Backpack.sqf : [%1] [%2/%3] Backpacks were defined.", _faction, _cpt, count _u], 1] Call WFBE_CO_FNC_LogContent;/* Define the defenses type in towns by side. */ Private ["_c","_def_kinds","_def_kinds_content","_k","_side"]; _side = _this select 0; _c = _this select 1; _k = _this select 2; _def_kinds = []; _def_kinds_content = []; for '_i' from 0 to count(_c)-1 do { _find = _def_kinds find (_k select _i); if (_find != -1) then { _def_kinds_content set [_find, (_def_kinds_content select _find) + [_c select _i]]; } else { if (_k select _i != "") then {[_def_kinds, _k select _i] Call WFBE_CO_FNC_ArrayPush;[_def_kinds_content, [_c select _i]] Call WFBE_CO_FNC_ArrayPush}; }; }; for '_i' from 0 to (count _def_kinds)-1 do {missionNamespace setVariable [Format ["WFBE_%1_Defenses_%2", _side,_def_kinds select _i], _def_kinds_content select _i]}; ["INFORMATION", Format ["Config_Defenses_Towns.sqf : [%1] [%2] Category defined.", _side, count _def_kinds]] Call WFBE_CO_FNC_LogContent;/* Define the groups to be used in town. */ Private ["_b","_c","_cost","_divideby","_faction","_get","_is_inf","_k","_l","_s","_side","_t"]; _k = _this select 0; _l = _this select 1; _side = _this select 2; _faction = _this select 3; for '_i' from 0 to count(_k)-1 do { _get = missionNamespace getVariable Format ["WFBE_%1_GROUPS_%2",_side,_k select _i]; if (isNil '_get') then { missionNamespace setVariable [Format ["WFBE_%1_GROUPS_%2",_side,_k select _i], [_l select _i]]; } else { [_get, _l select _i] Call WFBE_CO_FNC_ArrayPush; }; }; ["INITIALIZATION", "Config_Groups.sqf: Initialization is done."] Call WFBE_CO_FNC_LogContent;Private ["_belong","_cpt","_div","_faction","_n","_o","_p","_set","_type","_u","_z"]; _faction = _this select 0; _u = _this select 1; _p = _this select 2; _n = _this select 3; _o = _this select 4; _z = _this select 5; _cpt = 0; for '_i' from 0 to count(_u)-1 do { if (isClass(configFile >> 'CfgMagazines' >> (_u select _i))) then { if (isNil {missionNamespace getVariable Format["Mag_%1",_u select _i]}) then { _set = []; _div = 0; _type = getNumber(configFile >> 'CfgMagazines' >> (_u select _i) >> "type"); _belong = -1; switch (true) do { case (_type >= 16 && _type < 256): {_belong = 100;_div = 16}; case (_type >= 256 && _type < 4096): {_belong = 101;_div = 256}; }; if (_belong != -1) then { _set set [0, if ((_p select _i) == '') then {getText(configFile >> 'CfgMagazines' >> (_u select _i) >> "picture")} else {_p select _i}]; _set set [1, if ((_n select _i) == '') then {getText(configFile >> 'CfgMagazines' >> (_u select _i) >> "displayName")} else {_n select _i}]; _set set [2, _o select _i]; _set set [3, _z select _i]; _set set [4, _belong]; _set set [5, _type/_div]; _set set [6, _u select _i]; missionNamespace setVariable [Format["Mag_%1",_u select _i], _set]; _cpt = _cpt + 1; ["INITIALIZATION", Format["Config_Magazines.sqf : [%1] Magazine [%2], Belong to [%3]",_faction,_u select _i,if (_belong == 1) then {"Main Pool"} else {"Secondary Pool"}]] Call WFBE_CO_FNC_LogContent; } else { ["WARNING", Format["Config_Magazines.sqf : [%1] Magazine [%2] was not defined since it's magazine pool is unknown (type)",_faction,_u select _i], 2] Call WFBE_CO_FNC_LogContent; }; } else { _cpt = _cpt + 1; ["TRIVIAL", Format["Config_Magazines.sqf : [%1] Magazine [%2] has been skipped since it's already defined",_faction,_u select _i]] Call WFBE_CO_FNC_LogContent; }; } else { ["ERROR", Format["Config_Magazines.sqf : [%1] Magazine [%2] is not a valid class within ",_faction,_u select _i],3] Call WFBE_CO_FNC_LogContent; }; }; ["INFORMATION", Format ["Config_Magazines.sqf : [%1] [%2/%3] Entities were defined.", _faction, _cpt, count _u], 1] Call WFBE_CO_FNC_LogContent;/* Set the gear templates. Parameters: - list - side - skip template on exist. */ Private ["_counts","_counts_b","_emplacement","_get","_items","_mags","_prefix","_s","_set","_side","_skiponexist","_u","_u_back","_u_backpack","_u_backpack_usedefault","_u_belong","_u_label","_u_mags","_u_picture","_u_price","_u_upgrade","_u_weap"]; _u = _this select 0; _side = _this select 1; _skiponexist = if (count _this > 2) then {_this select 2} else {true}; if (_skiponexist && !isNil {missionNamespace getVariable Format ["WFBE_%1_Template", _side]}) exitWith { ["TRIVIAL", Format ["Config_SetTemplates.sqf : [%1] Templates were skipped since a template already exists, use an extra false parameter on the call of this script to include this template.", _side]] Call WFBE_CO_FNC_LogContent; }; _s = []; for '_h' from 0 to count(_u)-1 do { _u_weap = (_u select _h) select 0; _u_mags = (_u select _h) select 1; _u_back = if (count (_u select _h) > 2) then {(_u select _h) select 2} else {[]}; _set = []; _u_upgrade = 0; _u_price = 0; _u_label = ""; _u_picture = ""; _u_backpack = ""; _u_backpack_usedefault = if (typeName _u_back == "SCALAR") then {true} else {false}; for '_i' from 0 to count(_u_weap)-1 do { _get = missionNamespace getVariable (_u_weap select _i); if !(isNil '_get') then { _u_belong = _get select 4; if ((_get select 3) > _u_upgrade) then {_u_upgrade = (_get select 3)}; _u_price = _u_price + (_get select 2); switch (true) do { case (_u_belong < 4): { if (_u_picture == "") then {_u_picture = (_get select 0)}; if (_u_label != "") then {_u_label = _u_label + " | " + (_get select 1)} else {_u_label = _u_label + (_get select 1)}; }; case (_u_belong == 200): {_u_backpack = _u_weap select _i}; }; } else { ["ERROR", Format["Config_SetTemplate.sqf : [%1] Item [%2] is not a defined within any Gear files",_side,(_u_weap select _i)], 3] Call WFBE_CO_FNC_LogContent; _u_weap set [_i, false]; }; }; _u_weap = _u_weap - [false]; if (count _u_mags > 0) then { _mags = _u_mags select 0; _counts = _u_mags select 1; for '_i' from 0 to count(_mags)-1 do { _get = missionNamespace getVariable Format["Mag_%1",(_mags select _i)]; if !(isNil '_get') then { if ((_get select 3) > _u_upgrade) then {_u_upgrade = (_get select 3)}; if (_u_picture == "") then {_u_picture = (_get select 0)}; if (_u_label == "") then {_u_label = (_get select 1)}; _u_price = _u_price + ((_get select 2)*(_counts select _i)); } else { ["ERROR", Format["Config_SetTemplate.sqf : [%1] Magazine [%2] is not a defined within any Gear files",_side,(_mags select _i)], 3] Call WFBE_CO_FNC_LogContent; _mags set [_i, false]; _counts set [_i, false]; }; }; _mags = _mags - [false]; _counts = _counts - [false]; }; if (_u_backpack != "" && _u_backpack_usedefault) then { _get = missionNamespace getVariable _u_backpack; if !(isNil '_get') then {_u_back = _get select 5}; }; if (typeName _u_back == "SCALAR") then {_u_back = [[[],[]],[[],[]]]}; if (count _u_back > 0 && _u_backpack != "") then { _prefix = ""; for '_i' from 0 to count(_u_back)-1 do { _emplacement = _u_back select _i; if (count _emplacement > 0) then { _items = _emplacement select 0; _counts_b = _emplacement select 1; for '_j' from 0 to count(_items)-1 do { _get = missionNamespace getVariable Format["%1%2",_prefix,(_items select _j)]; if !(isNil '_get') then { if ((_get select 3) > _u_upgrade) then {_u_upgrade = (_get select 3)}; if (_u_picture == "") then {_u_picture = (_get select 0)}; if (_u_label == "") then {_u_label = (_get select 1)}; _u_price = _u_price + ((_get select 2)*(_counts_b select _j)); } else { ["ERROR", Format["Config_SetTemplate.sqf : [%1] Backpack item [%2] is not a defined within any Gear files",_side,(_items select _j)],3] Call WFBE_CO_FNC_LogContent; _items set [_j, false]; _counts_b set [_j, false]; }; }; _items = _items - [false]; _counts_b = _counts_b - [false]; _u_back set [_i, [_items,_counts_b]]; }; _prefix = "Mag_"; }; }; _set set [0,_u_picture]; _set set [1,_u_label]; _set set [2,_u_price]; _set set [3,_u_upgrade]; _set set [4,_u_weap]; _set set [5,[_mags,_counts]]; _set set [6,_u_back]; _s = _s + [_set]; ["INFORMATION", Format ["Config_SetTemplates.sqf : [%1] Template [%2] was defined for [$%3] using upgrade level [%4].", _side, _u_label, _u_price, _u_upgrade]] Call WFBE_CO_FNC_LogContent; }; ["INFORMATION", Format ["Config_SetTemplates.sqf : [%1] [%2] Templates were defined.", _side, count _s],1] Call WFBE_CO_FNC_LogContent; //--- Set or update. if (isNil {missionNamespace getVariable Format ["WFBE_%1_Template", _side]}) then { missionNamespace setVariable [Format ["WFBE_%1_Template", _side], _s]; } else { missionNamespace setVariable [Format ["WFBE_%1_Template", _side], (missionNamespace getVariable Format ["WFBE_%1_Template", _side]) + _s]; };/* Properly sort the magazines in groups and skipped if side-defined. Parameters: - magazines - side */ Private ["_add","_get","_m","_mag","_side"]; _m = _this select 0; _side = _this select 1; _get = missionNamespace getVariable Format ["WFBE_%1_Magazines", _side]; if (isNil '_get') then {_get = []}; _add = []; { _mag = _x; if (({_x == _mag} count _get) == 0) then { [_add, _mag] Call WFBE_CO_FNC_ArrayPush; }; } forEach _m; //--- Set or update. if (isNil {missionNamespace getVariable Format ["WFBE_%1_Magazines", _side]}) then { missionNamespace setVariable [Format ["WFBE_%1_Magazines", _side], _add]; } else { missionNamespace setVariable [Format ["WFBE_%1_Magazines", _side], (missionNamespace getVariable Format ["WFBE_%1_Magazines", _side]) + _add]; }; _add/* Properly sort the weapons in groups and skipped if side-defined. Parameters: - list - magazines - side */ Private ["_add","_belong","_get","_getall","_index","_m","_side","_sorted","_tiMode","_w","_wep"]; _w = _this select 0; _m = _this select 1; _side = _this select 2; _sorted = [[],[],[],[]]; _getall = missionNamespace getVariable Format ["WFBE_%1_All", _side]; if (isNil '_getall') then {_getall = []}; _tiMode = missionNamespace getVariable 'WFBE_C_GAMEPLAY_THERMAL_IMAGING'; _tiMode = if (_tiMode in [1,3]) then {true} else {false}; { _get = missionNamespace getVariable _x; _wep = _x; if !(isNil '_get') then { _belong = _get select 4; _index = switch (true) do {case (_belong in [0,3]): {0}; case (_belong == 1): {1}; case (_belong in [2,200,201]): {2}; case (_belong in [4,5]): {3}; default {-1}}; if (_index != -1) then { //--- TI Mode checkup, only used upon primary weapons. _add = true; if (!_tiMode && _index == 0) then { if ("Ti" in getArray(configFile >> 'CfgWeapons' >> _wep >> 'visionMode')) then { _add = false; ["INFORMATION", Format["Config_SortWeapons.sqf : [%1] Weapon [%2] will not be available for purchase since the TI parameter for weapons is disabled.", _side, _x]] Call WFBE_CO_FNC_LogContent; }; }; if (_add) then { if (({_x == _wep} count _getall) == 0) then { [_sorted select _index, _x] Call WFBE_CO_FNC_ArrayPush; }; }; } else { ["ERROR", Format["Config_SortWeapons.sqf : [%1] Weapon [%2] does not belong to any known pool.", _side, _x]] Call WFBE_CO_FNC_LogContent; }; } else { ["ERROR", Format["Config_SortWeapons.sqf : [%1] Weapon [%2] is not defined inside the Gear files.", _side, _x]] Call WFBE_CO_FNC_LogContent; }; } forEach _w; //--- Set or update. { if (isNil {missionNamespace getVariable (_x select 0)}) then { missionNamespace setVariable [(_x select 0), (_x select 1)]; } else { missionNamespace setVariable [(_x select 0), (missionNamespace getVariable (_x select 0)) + (_x select 1)]; }; } forEach [[Format ["WFBE_%1_Primary", _side], _sorted select 0],[Format ["WFBE_%1_Pistols", _side], _sorted select 1],[Format ["WFBE_%1_Secondary", _side], _sorted select 2],[Format ["WFBE_%1_Equipment", _side], _sorted select 3],[Format ["WFBE_%1_All", _side], (_sorted select 0) + (_sorted select 1) + (_sorted select 2) + (_sorted select 3) + _m]];Private ["_belong","_cpt","_div","_faction","_is","_m","_magz","_n","_o","_p","_set","_size","_u","_z"]; _faction = _this select 0; _u = _this select 1; _p = _this select 2; _n = _this select 3; _o = _this select 4; _z = _this select 5; _m = _this select 6; _cpt = 0; for '_i' from 0 to count(_u)-1 do { if (isClass(configFile >> 'CfgWeapons' >> (_u select _i))) then { if (isNil {missionNamespace getVariable Format["%1",_u select _i]}) then { _set = []; _div = 0; _belong = -1; _size = -1; _is = ""; switch (getNumber(configFile >> 'CfgWeapons' >> (_u select _i) >> "type")) do { case 1: {_belong = 0;_size = 10;_is = "Primary"}; case 2: {_belong = 1;_size = 5;_is = "Pistol"}; case 4: {_belong = 2;_size = 10;_is = "Launcher"}; case 5: {_belong = 3;_size = 10;_is = "Primary (Both)"}; case 4096: {_belong = 4;_size = 1;_is = "Equipment"}; case 131072: {_belong = 5;_size = 1;_is = "Item"}; }; if (_belong != -1) then { _magz = []; if (typeName(_m select _i) != "ARRAY") then { {_magz = _magz + (if (_x == "this") then {getArray(configFile >> 'CfgWeapons' >> (_u select _i) >> 'magazines')} else {getArray(configfile >> "CfgWeapons" >> (_u select _i) >> _x >> "magazines")})} forEach getArray(configFile >> "CfgWeapons" >> (_u select _i) >> "muzzles"); }; _set set [0, if ((_p select _i) == '') then {getText(configFile >> 'CfgWeapons' >> (_u select _i) >> "picture")} else {_p select _i}]; _set set [1, if ((_n select _i) == '') then {getText(configFile >> 'CfgWeapons' >> (_u select _i) >> "displayName")} else {_n select _i}]; _set set [2, _o select _i]; _set set [3, _z select _i]; _set set [4, _belong]; _set set [5, _size]; _set set [6, if (typeName(_m select _i) == "ARRAY") then {_m select _i} else {_magz}]; missionNamespace setVariable [Format["%1",_u select _i], _set]; _cpt = _cpt + 1; ["INITIALIZATION", Format["Config_Weapons.sqf : [%1] Weapon [%2], Belong to [%3]",_faction,_u select _i,_is]] Call WFBE_CO_FNC_LogContent; } else { ["WARNING", Format["Config_Weapons.sqf : [%1] Weapon [%2] was not defined since it's gear emplacement is unknown (type)",_faction,_u select _i], 2] Call WFBE_CO_FNC_LogContent; }; } else { _cpt = _cpt + 1; ["TRIVIAL", Format["Config_Weapons.sqf : [%1] Weapon [%2] has been skipped since it's already defined",_faction,_u select _i]] Call WFBE_CO_FNC_LogContent; }; } else { ["ERROR", Format["Config_Weapons.sqf : [%1] Weapon [%2] is not a valid class within ",_faction,_u select _i], 3] Call WFBE_CO_FNC_LogContent; }; }; ["INFORMATION", Format ["Config_Weapons.sqf : [%1] [%2/%3] Entities were defined.", _faction, _cpt, count _u], 1] Call WFBE_CO_FNC_LogContent;/* ACE Russian Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Light Vehicles */ _c = _c + ['ACE_BTR70_RU']; _i = _i + [['','',175,14,-2,0,1,0,'Russians',[]]]; _c = _c + ['ACE_BRDM2_SA9_RU']; _i = _i + [['','',175,14,-2,0,1,0,'Russians',[]]]; /* Heavy Vehicles */ _c = _c + ['ACE_T72B_RU']; _i = _i + [['','',1650,25,[false,true,2,0],0,2,0,'Russians',[]]]; _c = _c + ['ACE_T72BA_RU']; _i = _i + [['','',1650,25,[false,true,2,0],0,2,0,'Russians',[]]]; _c = _c + ['ACE_BMP2D_RU']; _i = _i + [['','',1650,25,[false,true,2,0],0,2,0,'Russians',[]]]; _c = _c + ['ACE_BMD_1_RU']; _i = _i + [['','',1650,25,[false,true,2,0],0,2,0,'Russians',[]]]; _c = _c + ['ACE_BMD_1P_RUS']; _i = _i + [['','',1650,25,[false,true,2,0],0,2,0,'Russians',[]]]; _c = _c + ['ACE_BMD_2K_RU']; _i = _i + [['','',1650,25,[false,true,2,0],0,2,0,'Russians',[]]]; /* Air Vehicles */ _c = _c + ['ACE_Mi24_V_FAB250_RU']; _i = _i + [['','',29500,50,-2,1,3,0,'Russians',[]]]; _c = _c + ['ACE_Mi24_V_UPK23_RU']; _i = _i + [['','',35500,50,-2,1,3,0,'Russians',[]]]; _c = _c + ['ACE_Su27_CAP']; _i = _i + [['','',35500,50,-2,1,3,0,'Russians',[]]]; _c = _c + ['ACE_Su27_CASP']; _i = _i + [['','',35500,50,-2,1,3,0,'Russians',[]]]; _c = _c + ['ACE_Su27_CAS']; _i = _i + [['','',35500,50,-2,1,3,0,'Russians',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = (_c select _z) Call GetNamespace; if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; [_c select _z,_i select _z] Call SetNamespace; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_ACE_US_D: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_ACE_US_D: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_ACE_RU: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* ACE US Desert Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Heavy Vehicles */ _c = _c + ['ACE_Stryker_RV_SLAT_D']; _i = _i + [['','',1800,25,[false,true,2,0],0,2,0,'US',[]]]; _c = _c + ['ACE_M1A1HA_TUSK_DESERT']; _i = _i + [['','',5850,40,-2,2,2,0,'US',[]]]; _c = _c + ['ACE_M1A1HA_TUSK_CSAMM_DESERT']; _i = _i + [['','',6450,40,-2,3,2,0,'US',[]]]; /* Air Vehicles */ _c = _c + ['ACE_AH6_GAU19_FLIR']; _i = _i + [['','',29500,50,-2,2,3,0,'US',[]]]; _c = _c + ['ACE_AH6J_DAGR_FLIR']; _i = _i + [['','',35500,50,-2,2,3,0,'US',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_ACE_US_D: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_ACE_US_D: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_ACE_US_D: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* ACE US Woodland Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Light Vehicles */ _c = _c + ['ACE_ATV_Honda']; _i = _i + [['','',175,14,-2,0,1,0,'US - Woodland',[]]]; _c = _c + ['ACE_HMMWV_USARMY']; _i = _i + [['','',300,15,-2,0,1,0,'US - Woodland',[]]]; _c = _c + ['ACE_HMMWV_MK19_USARMY']; _i = _i + [['','',900,18,-2,1,1,0,'US - Woodland',[]]]; _c = _c + ['ACE_HMMWV_GMV']; _i = _i + [['','',1050,20,-2,1,1,0,'US - Woodland',[]]]; _c = _c + ['ACE_HMMWV_GMV_MK19']; _i = _i + [['','',1050,20,-2,1,1,0,'US - Woodland',[]]]; _c = _c + ['ACE_HMMWV_M2_USARMY']; _i = _i + [['','',850,20,-2,0,1,0,'US - Woodland',[]]]; _c = _c + ['ACE_HMMWV_TOW_USARMY']; _i = _i + [['','',1450,20,-2,2,1,0,'US - Woodland',[]]]; _c = _c + ['ACE_HMMWV_Ambulance_USARMY']; _i = _i + [['','',725,22,-2,2,1,0,'US - Woodland',[]]]; _c = _c + ['ACE_Truck5tOpen']; _i = _i + [['','',400,20,-2,0,1,0,'US - Woodland',[]]]; _c = _c + ['ACE_Truck5t']; _i = _i + [['','',400,20,-2,0,1,0,'US - Woodland',[]]]; _c = _c + ['ACE_Truck5tMGOpen']; _i = _i + [['','',400,20,-2,0,1,0,'US - Woodland',[]]]; _c = _c + ['ACE_Truck5tMG']; _i = _i + [['','',400,20,-2,0,1,0,'US - Woodland',[]]]; _c = _c + ['ACE_Truck5tRepair']; _i = _i + [['','',525,22,-2,2,1,0,'US - Woodland',[]]]; _c = _c + ['ACE_Truck5tReammo']; _i = _i + [['','',550,22,-2,1,1,0,'US - Woodland',[]]]; _c = _c + ['ACE_Truck5tRefuel']; _i = _i + [['','',500,22,-2,1,1,0,'US - Woodland',[]]]; /* Heavy Vehicles */ _c = _c + ['ACE_Stryker_ICV_M2_SLAT']; _i = _i + [['','',1650,25,[false,true,2,0],0,2,0,'US - Woodland',[]]]; _c = _c + ['ACE_Stryker_RV_SLAT']; _i = _i + [['','',1800,25,[false,true,2,0],0,2,0,'US - Woodland',[]]]; _c = _c + ['ACE_Stryker_ICV_MK19_SLAT']; _i = _i + [['','',1950,25,[false,true,2,0],0,2,0,'US - Woodland',[]]]; _c = _c + ['ACE_Stryker_TOW_MG_Slat']; _i = _i + [['','',1850,25,-2,2,2,0,'US - Woodland',[]]]; _c = _c + ['ACE_Stryker_MGS_Slat']; _i = _i + [['','',2450,25,-2,2,2,0,'US - Woodland',[]]]; _c = _c + ['ACE_M113A3_Ambul']; _i = _i + [['','',1950,25,-2,1,2,0,'US - Woodland',[]]]; _c = _c + ['ACE_Vulcan']; _i = _i + [['','',1950,25,-2,1,2,0,'US - Woodland',[]]]; _c = _c + ['ACE_M113A3']; _i = _i + [['','',1950,25,-2,1,2,0,'US - Woodland',[]]]; _c = _c + ['ACE_M2A2_W']; _i = _i + [['','',4450,30,-2,1,2,0,'US - Woodland',[]]]; _c = _c + ['ACE_M2A3_W']; _i = _i + [['','',4950,32,-2,2,2,0,'US - Woodland',[]]]; _c = _c + ['ACE_M1A1_NATO']; _i = _i + [['','',5650,40,-2,2,2,0,'US - Woodland',[]]]; _c = _c + ['ACE_M1A1HA_TUSK']; _i = _i + [['','',5650,40,-2,2,2,0,'US - Woodland',[]]]; _c = _c + ['ACE_M1A1HA_TUSK_CSAMM']; _i = _i + [['','',5650,40,-2,2,2,0,'US - Woodland',[]]]; _c = _c + ['ACE_M6A1_W']; _i = _i + [['','',8200,35,-2,3,2,0,'US - Woodland',[]]]; /* Air Vehicles */ _c = _c + ['ACE_AH6_GAU19_FLIR']; _i = _i + [['','',29500,50,-2,1,3,0,'US - Woodland',[]]]; _c = _c + ['ACE_AH6J_DAGR_FLIR']; _i = _i + [['','',35500,50,-2,1,3,0,'US - Woodland',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_ACE_US_W: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_ACE_US_W: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_ACE_US_W: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* ACR Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['CZ_Soldier_Light_DES_EP1']; _i = _i + [['','',125,4,-1,0,0,0.85,'Czech',[]]]; _c = _c + ['CZ_Soldier_DES_EP1']; _i = _i + [['','',150,4,-1,0,0,0.85,'Czech',[]]]; _c = _c + ['CZ_Soldier_B_DES_EP1']; _i = _i + [['','',150,4,-1,0,0,0.85,'Czech',[]]]; _c = _c + ['CZ_Soldier_AT_DES_EP1']; _i = _i + [['','',310,5,-1,0,0,0.87,'Czech',[]]]; _c = _c + ['CZ_Soldier_AMG_DES_EP1']; _i = _i + [['','',210,5,-1,1,0,0.85,'Czech',[]]]; _c = _c + ['CZ_Soldier_MG_DES_EP1']; _i = _i + [['','',220,5,-1,0,0,0.86,'Czech',[]]]; _c = _c + ['CZ_Soldier_Sniper_EP1']; _i = _i + [['','',280,5,-1,1,0,0.88,'Czech',[]]]; _c = _c + ['CZ_Special_Forces_GL_DES_EP1']; _i = _i + [['','',290,5,-1,3,0,0.90,'Czech',[]]]; _c = _c + ['CZ_Special_Forces_MG_DES_EP1']; _i = _i + [['','',310,5,-1,3,0,0.90,'Czech',[]]]; _c = _c + ['CZ_Special_Forces_DES_EP1']; _i = _i + [['','',285,5,-1,3,0,0.89,'Czech',[]]]; _c = _c + ['CZ_Special_Forces_Scout_DES_EP1']; _i = _i + [['','',305,5,-1,3,0,0.90,'Czech',[]]]; _c = _c + ['CZ_Special_Forces_TL_DES_EP1']; _i = _i + [['','',310,5,-1,3,0,0.91,'Czech',[]]]; _c = _c + ['CZ_Soldier_Pilot_EP1']; _i = _i + [['','',120,4,-1,0,0,0.86,'Czech',[]]]; _c = _c + ['CZ_Soldier_Office_DES_EP1']; _i = _i + [['','',240,5,-1,1,0,0.88,'Czech',[]]]; _c = _c + ['CZ_Soldier_SL_DES_EP1']; _i = _i + [['','',220,5,-1,2,0,0.87,'Czech',[]]]; /* Light Vehicles */ _c = _c + ['ATV_CZ_EP1']; _i = _i + [['','',175,15,-2,0,1,0,'Czech',[]]]; _c = _c + ['HMMWV_M1151_M2_CZ_DES_EP1']; _i = _i + [['','',850,20,-2,0,1,0,'Czech',[]]]; _c = _c + ['LandRover_CZ_EP1']; _i = _i + [['','',275,18,-2,0,1,0,'Czech',[]]]; _c = _c + ['LandRover_Special_CZ_EP1']; _i = _i + [['','',700,20,-2,0,1,0,'Czech',[]]]; /* Air Vehicles */ _c = _c + ['Mi171Sh_CZ_EP1']; _i = _i + [['','',7600,35,-2,1,3,0,'Czech',[]]]; _c = _c + ['Mi171Sh_rockets_CZ_EP1']; _i = _i + [['','',26500,40,-2,0,3,0,'Czech',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_ACR: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_ACR: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_ACR: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* BAF (MTP) Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['BAF_Soldier_AA_MTP']; _i = _i + [['','',410,6,-1,2,0,0.88,'British',[]]]; _c = _c + ['BAF_Soldier_AAA_MTP']; _i = _i + [['','',190,6,-1,2,0,0.89,'British',[]]]; _c = _c + ['BAF_Soldier_AAT_MTP']; _i = _i + [['','',190,4,-1,2,0,0.84,'British',[]]]; _c = _c + ['BAF_Soldier_AHAT_MTP']; _i = _i + [['','',190,6,-1,3,0,0.85,'British',[]]]; _c = _c + ['BAF_Soldier_AAR_MTP']; _i = _i + [['','',190,5,-1,2,0,0.88,'British',[]]]; _c = _c + ['BAF_Soldier_AMG_MTP']; _i = _i + [['','',190,6,-1,1,0,0.87,'British',[]]]; _c = _c + ['BAF_Soldier_AT_MTP']; _i = _i + [['','',360,6,-1,2,0,0.88,'British',[]]]; _c = _c + ['BAF_Soldier_HAT_MTP']; _i = _i + [['','',810,6,-1,3,0,0.89,'British',[]]]; _c = _c + ['BAF_Soldier_AR_MTP']; _i = _i + [['','',210,5,-1,2,0,0.85,'British',[]]]; _c = _c + ['BAF_crewman_MTP']; _i = _i + [['','',125,5,-1,0,0,0.83,'British',[]]]; _c = _c + ['BAF_Soldier_EN_MTP']; _i = _i + [['','',230,5,-1,0,0,0.84,'British',[]]]; _c = _c + ['BAF_Soldier_GL_MTP']; _i = _i + [['','',170,5,-1,0,0,0.84,'British',[]]]; _c = _c + ['BAF_Soldier_FAC_MTP']; _i = _i + [['','',375,6,-1,3,0,0.98,'British',[]]]; _c = _c + ['BAF_Soldier_MG_MTP']; _i = _i + [['','',210,5,-1,0,0,0.85,'British',[]]]; _c = _c + ['BAF_Soldier_scout_MTP']; _i = _i + [['','',340,6,-1,2,0,0.9,'British',[]]]; _c = _c + ['BAF_Soldier_Marksman_MTP']; _i = _i + [['','',370,6,-1,3,0,0.91,'British',[]]]; _c = _c + ['BAF_Soldier_Medic_MTP']; _i = _i + [['','',200,6,-1,0,0,0.86,'British',[]]]; _c = _c + ['BAF_Soldier_Officer_MTP']; _i = _i + [['','',265,6,-1,2,0,0.86,'British',[]]]; _c = _c + ['BAF_Pilot_MTP']; _i = _i + [['','',125,6,-1,0,0,0.84,'British',[]]]; _c = _c + ['BAF_Soldier_MTP']; _i = _i + [['','',155,6,-1,0,0,0.85,'British',[]]]; _c = _c + ['BAF_ASoldier_MTP']; _i = _i + [['','',160,6,-1,0,0,0.85,'British',[]]]; _c = _c + ['BAF_Soldier_L_MTP']; _i = _i + [['','',130,6,-1,0,0,0.85,'British',[]]]; _c = _c + ['BAF_Soldier_N_MTP']; _i = _i + [['','',175,6,-1,1,0,0.86,'British',[]]]; _c = _c + ['BAF_Soldier_SL_MTP']; _i = _i + [['','',235,6,-1,2,0,0.92,'British',[]]]; _c = _c + ['BAF_Soldier_SniperN_MTP']; _i = _i + [['','',390,6,-1,3,0,0.9,'British',[]]]; _c = _c + ['BAF_Soldier_SniperH_MTP']; _i = _i + [['','',420,6,-1,2,0,0.9,'British',[]]]; _c = _c + ['BAF_Soldier_Sniper_MTP']; _i = _i + [['','',395,6,-1,2,0,0.9,'British',[]]]; _c = _c + ['BAF_Soldier_spotter_MTP']; _i = _i + [['','',340,6,-1,2,0,0.88,'British',[]]]; _c = _c + ['BAF_Soldier_spotterN_MTP']; _i = _i + [['','',350,6,-1,2,0,0.88,'British',[]]]; _c = _c + ['BAF_Soldier_TL_MTP']; _i = _i + [['','',245,6,-1,1,0,0.91,'British',[]]]; /* Air Vehicles */ _c = _c + ['BAF_Merlin_HC3_D']; _i = _i + [['','',21000,45,-2,0,3,0,'British',[]]]; _c = _c + ['CH_47F_BAF']; _i = _i + [['','',20000,40,-2,0,3,0,'British',[]]]; _c = _c + ['BAF_Apache_AH1_D']; _i = _i + [['','',82500,60,-2,2,3,0,'British',[]]]; _c = _c + ['AW159_Lynx_BAF']; _i = _i + [['','',75000,35,-2,1,3,0,'British',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_BAF: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_BAF: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_BAF: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* BAF (Desert) Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['BAF_Soldier_AA_DDPM']; _i = _i + [['','',410,6,-1,2,0,0.88,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_AAA_DDPM']; _i = _i + [['','',440,6,-1,2,0,0.87,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_AAT_DDPM']; _i = _i + [['','',190,4,-1,2,0,0.84,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_AHAT_DDPM']; _i = _i + [['','',190,6,-1,3,0,0.85,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_AAR_DDPM']; _i = _i + [['','',190,5,-1,2,0,0.88,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_AMG_DDPM']; _i = _i + [['','',190,6,-1,1,0,0.87,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_AT_DDPM']; _i = _i + [['','',360,6,-1,2,0,0.87,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_HAT_DDPM']; _i = _i + [['','',810,6,-1,3,0,0.89,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_AR_DDPM']; _i = _i + [['','',210,5,-1,2,0,0.85,'British (Desert)',[]]]; _c = _c + ['BAF_crewman_DDPM']; _i = _i + [['','',125,5,-1,0,0,0.83,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_EN_DDPM']; _i = _i + [['','',230,5,-1,0,0,0.84,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_GL_DDPM']; _i = _i + [['','',170,5,-1,0,0,0.84,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_FAC_DDPM']; _i = _i + [['','',375,6,-1,3,0,0.98,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_MG_DDPM']; _i = _i + [['','',210,5,-1,0,0,0.85,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_scout_DDPM']; _i = _i + [['','',340,6,-1,2,0,0.9,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_Marksman_DDPM']; _i = _i + [['','',370,6,-1,3,0,0.91,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_Medic_DDPM']; _i = _i + [['','',200,6,-1,0,0,0.86,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_Officer_DDPM']; _i = _i + [['','',265,6,-1,2,0,0.86,'British (Desert)',[]]]; _c = _c + ['BAF_Pilot_DDPM']; _i = _i + [['','',125,6,-1,0,0,0.84,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_DDPM']; _i = _i + [['','',155,6,-1,0,0,0.85,'British (Desert)',[]]]; _c = _c + ['BAF_ASoldier_DDPM']; _i = _i + [['','',160,6,-1,0,0,0.85,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_L_DDPM']; _i = _i + [['','',130,6,-1,0,0,0.85,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_N_DDPM']; _i = _i + [['','',175,6,-1,1,0,0.86,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_SL_DDPM']; _i = _i + [['','',235,6,-1,2,0,0.92,'British (Desert)',[]]]; _c = _c + ['BAF_Soldier_TL_DDPM']; _i = _i + [['','',245,6,-1,1,0,0.91,'British (Desert)',[]]]; /* Light Vehicles */ _c = _c + ['BAF_ATV_D']; _i = _i + [['','',175,12,-2,0,1,0,'British (Desert)',[]]]; _c = _c + ['BAF_Offroad_D']; _i = _i + [['','',375,13,-2,0,1,0,'British (Desert)',[]]]; _c = _c + ['BAF_Jackal2_GMG_D']; _i = _i + [['','',965,20,-2,1,1,0,'British (Desert)',[]]]; _c = _c + ['BAF_Jackal2_L2A1_D']; _i = _i + [['','',725,21,-2,0,1,0,'British (Desert)',[]]]; /* Heavy Vehicles */ _c = _c + ['BAF_FV510_D']; _i = _i + [['','',4950,30,-2,2,2,0,'British (Desert)',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_BAFD: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_BAFD: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_BAFD: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* BAF (Woodland) Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['BAF_Soldier_AA_W']; _i = _i + [['','',410,6,-1,2,0,0.88,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_AAA_W']; _i = _i + [['','',190,6,-1,2,0,0.87,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_AAT_W']; _i = _i + [['','',190,4,-1,2,0,0.84,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_AHAT_W']; _i = _i + [['','',190,6,-1,3,0,0.85,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_AAR_W']; _i = _i + [['','',190,5,-1,2,0,0.86,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_AMG_W']; _i = _i + [['','',190,6,-1,1,0,0.87,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_AT_W']; _i = _i + [['','',360,6,-1,2,0,0.87,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_HAT_W']; _i = _i + [['','',810,6,-1,3,0,0.9,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_AR_W']; _i = _i + [['','',210,5,-1,2,0,0.85,'British (Woodland)',[]]]; _c = _c + ['BAF_crewman_W']; _i = _i + [['','',125,5,-1,0,0,0.83,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_EN_W']; _i = _i + [['','',230,5,-1,0,0,0.84,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_GL_W']; _i = _i + [['','',170,5,-1,0,0,0.84,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_FAC_W']; _i = _i + [['','',375,6,-1,3,0,0.98,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_MG_W']; _i = _i + [['','',210,5,-1,0,0,0.85,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_scout_W']; _i = _i + [['','',340,6,-1,2,0,0.9,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_Marksman_W']; _i = _i + [['','',370,6,-1,3,0,0.91,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_Medic_W']; _i = _i + [['','',200,6,-1,0,0,0.86,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_Officer_W']; _i = _i + [['','',265,6,-1,2,0,0.86,'British (Woodland)',[]]]; _c = _c + ['BAF_Pilot_W']; _i = _i + [['','',125,6,-1,0,0,0.84,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_W']; _i = _i + [['','',155,6,-1,0,0,0.85,'British (Woodland)',[]]]; _c = _c + ['BAF_ASoldier_W']; _i = _i + [['','',160,6,-1,0,0,0.85,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_L_W']; _i = _i + [['','',130,6,-1,0,0,0.85,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_N_W']; _i = _i + [['','',175,6,-1,1,0,0.86,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_SL_W']; _i = _i + [['','',235,6,-1,2,0,0.92,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_SniperN_W']; _i = _i + [['','',390,6,-1,3,0,0.9,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_SniperH_W']; _i = _i + [['','',420,6,-1,2,0,0.9,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_Sniper_W']; _i = _i + [['','',395,6,-1,2,0,0.9,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_spotter_W']; _i = _i + [['','',340,6,-1,2,0,0.88,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_spotterN_W']; _i = _i + [['','',350,6,-1,2,0,0.88,'British (Woodland)',[]]]; _c = _c + ['BAF_Soldier_TL_W']; _i = _i + [['','',245,6,-1,1,0,0.91,'British (Woodland)',[]]]; /* Light Vehicles */ _c = _c + ['BAF_ATV_W']; _i = _i + [['','',175,12,-2,0,1,0,'British (Woodland)',[]]]; _c = _c + ['BAF_Offroad_W']; _i = _i + [['','',375,13,-2,0,1,0,'British (Woodland)',[]]]; _c = _c + ['BAF_Jackal2_GMG_W']; _i = _i + [['','',965,20,-2,1,1,0,'British (Woodland)',[]]]; _c = _c + ['BAF_Jackal2_L2A1_W']; _i = _i + [['','',725,21,-2,0,1,0,'British (Woodland)',[]]]; /* Heavy Vehicles */ _c = _c + ['BAF_FV510_W']; _i = _i + [['','',4950,30,-2,2,2,0,'British (Woodland)',[]]]; /* Static Defenses */ _c = _c + ['BAF_GPMG_Minitripod_W']; _i = _i + [['','',225,0,1,0,'Defense',0,'British (Woodland)',[]]]; _c = _c + ['BAF_GMG_Tripod_W']; _i = _i + [['','',250,0,1,0,'Defense',0,'British (Woodland)',[]]]; _c = _c + ['BAF_L2A1_Minitripod_W']; _i = _i + [['','',300,0,1,0,'Defense',0,'British (Woodland)',[]]]; _c = _c + ['BAF_L2A1_Tripod_W']; _i = _i + [['','',325,0,1,0,'Defense',0,'British (Woodland)',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_BAFW: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_BAFW: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_BAFW: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* CDF Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['CDF_Soldier']; _i = _i + [['','',150,4,-1,0,0,0.65,'CDF',[]]]; _c = _c + ['CDF_Soldier_Engineer']; _i = _i + [['','',225,5,-1,0,0,0.66,'CDF',[]]]; _c = _c + ['CDF_Soldier_Light']; _i = _i + [['','',175,4,-1,0,0,0.65,'CDF',[]]]; _c = _c + ['CDF_Soldier_GL']; _i = _i + [['','',180,4,-1,0,0,0.65,'CDF',[]]]; _c = _c + ['CDF_Soldier_Militia']; _i = _i + [['','',160,3,-1,0,0,0.62,'CDF',[]]]; _c = _c + ['CDF_Soldier_Medic']; _i = _i + [['','',210,4,-1,0,0,0.69,'CDF',[]]]; _c = _c + ['CDF_Soldier_Sniper']; _i = _i + [['','',230,5,-1,1,0,0.72,'CDF',[]]]; _c = _c + ['CDF_Soldier_Spotter']; _i = _i + [['','',240,6,-1,1,0,0.71,'CDF',[]]]; _c = _c + ['CDF_Soldier_Marksman']; _i = _i + [['','',235,7,-1,3,0,0.69,'CDF',[]]]; _c = _c + ['CDF_Soldier_RPG']; _i = _i + [['','',250,6,-1,1,0,0.64,'CDF',[]]]; _c = _c + ['CDF_Soldier_Strela']; _i = _i + [['','',400,6,-1,2,0,0.68,'CDF',[]]]; _c = _c + ['CDF_Soldier_AR']; _i = _i + [['','',165,6,-1,1,0,0.64,'CDF',[]]]; _c = _c + ['CDF_Soldier_MG']; _i = _i + [['','',180,5,-1,0,0,0.65,'CDF',[]]]; _c = _c + ['CDF_Soldier_TL']; _i = _i + [['','',210,6,-1,2,0,0.73,'CDF',[]]]; _c = _c + ['CDF_Soldier_Officer']; _i = _i + [['','',230,7,-1,1,0,0.74,'CDF',[]]]; _c = _c + ['CDF_Commander']; _i = _i + [['','',280,7,-1,3,0,0.75,'CDF',[]]]; _c = _c + ['CDF_Soldier_Pilot']; _i = _i + [['','',130,5,-1,0,0,0.62,'CDF',[]]]; _c = _c + ['CDF_Soldier_Crew']; _i = _i + [['','',130,5,-1,0,0,0.63,'CDF',[]]]; /* Light Vehicles */ _c = _c + ['UAZ_CDF']; _i = _i + [['','',150,15,-2,0,1,0,'CDF',[]]]; _c = _c + ['UAZ_MG_CDF']; _i = _i + [['','',310,17,-2,0,1,0,'CDF',[]]]; _c = _c + ['UAZ_AGS30_CDF']; _i = _i + [['','',475,25,-2,1,1,0,'CDF',[]]]; _c = _c + ['Ural_CDF']; _i = _i + [['','',300,20,-2,0,1,0,'CDF',[]]]; _c = _c + ['WarfareSalvageTruck_CDF']; _i = _i + [['','',450,18,-2,0,1,0,'CDF',[]]]; _c = _c + ['UralRepair_CDF']; _i = _i + [['','',525,21,-2,2,1,0,'CDF',[]]]; _c = _c + ['UralReammo_CDF']; _i = _i + [['','',550,21,-2,1,1,0,'CDF',[]]]; _c = _c + ['UralRefuel_CDF']; _i = _i + [['','',500,21,-2,1,1,0,'CDF',[]]]; _c = _c + ['WarfareSupplyTruck_CDF']; _i = _i + [['','',550,21,-2,0,1,0,'CDF',[]]]; _c = _c + ['BRDM2_CDF']; _i = _i + [['','',1100,25,-2,1,1,0,'CDF',[]]]; _c = _c + ['BRDM2_ATGM_CDF']; _i = _i + [['','',1650,25,-2,2,1,0,'CDF',[]]]; _c = _c + ['Ural_ZU23_CDF']; _i = _i + [['','',1750,20,-2,2,1,0,'CDF',[]]]; _c = _c + ['GRAD_CDF']; _i = _i + [['','',4200,35,-2,3,1,0,'CDF',[]]]; /* Heavy Vehicles */ _c = _c + ['BMP2_Ambul_CDF']; _i = _i + [['','',950,20,-2,0,2,0,'CDF',[]]]; _c = _c + ['BMP2_CDF']; _i = _i + [['','',2600,30,-2,1,2,0,'CDF',[]]]; _c = _c + ['ZSU_CDF']; _i = _i + [['','',3400,35,-2,2,2,0,'CDF',[]]]; _c = _c + ['T72_CDF']; _i = _i + [['','',4900,35,-2,3,2,0,'CDF',[]]]; /* Air Vehicles */ _c = _c + ['Mi17_CDF']; _i = _i + [['','',15000,35,-2,0,3,0,'CDF',[]]]; _c = _c + ['Mi17_medevac_CDF']; _i = _i + [['','',18000,35,-2,1,3,0,'CDF',[]]]; _c = _c + ['Mi24_D']; _i = _i + [['','',65000,40,-2,2,3,0,'CDF',[]]]; _c = _c + ['Su25_CDF']; _i = _i + [['','',92000,55,-2,3,3,0,'CDF',[]]]; /* Static Defenses */ _c = _c + ['CDF_WarfareBMGNest_PK']; _i = _i + [['','',300,0,1,0,'Defense',0,'CDF',[]]]; _c = _c + ['DSHkM_Mini_TriPod_CDF']; _i = _i + [['','',200,0,1,0,'Defense',0,'CDF',[]]]; _c = _c + ['DSHKM_CDF']; _i = _i + [['','',225,0,1,0,'Defense',0,'CDF',[]]]; _c = _c + ['SearchLight_CDF']; _i = _i + [['','',125,0,1,0,'Defense',0,'CDF',[]]]; _c = _c + ['AGS_CDF']; _i = _i + [['','',700,0,1,0,'Defense',0,'CDF',[]]]; _c = _c + ['SPG9_CDF']; _i = _i + [['','',475,0,1,0,'Defense',0,'CDF',[]]]; _c = _c + ['ZU23_CDF']; _i = _i + [['','',945,0,1,0,'Defense',0,'CDF',[]]]; _c = _c + ['2b14_82mm_CDF']; _i = _i + [['Podnos 2B14','',1150,0,1,0,'Defense',0,'CDF',[]]]; _c = _c + ['D30_CDF']; _i = _i + [['','',2250,0,1,0,'Defense',0,'CDF',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_CDF: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_CDF: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_CDF: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* CIV Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['Worker1']; _i = _i + [['','',375,4,-1,0,0,0.4,'Civilians',[]]]; _c = _c + ['Worker2']; _i = _i + [['','',375,4,-1,0,0,0.4,'Civilians',[]]]; _c = _c + ['Worker3']; _i = _i + [['','',375,4,-1,0,0,0.4,'Civilians',[]]]; _c = _c + ['Worker4']; _i = _i + [['','',375,4,-1,0,0,0.4,'Civilians',[]]]; /* Light Vehicles */ _c = _c + ['MMT_Civ']; _i = _i + [['','',50,8,-2,0,1,0,'Civilians',[]]]; _c = _c + ['TT650_Civ']; _i = _i + [['','',100,12,-2,0,1,0,'Civilians',[]]]; _c = _c + ['Tractor']; _i = _i + [['','',150,15,-2,0,1,0,'Civilians',[]]]; _c = _c + ['Lada1']; _i = _i + [['','',175,18,-2,0,1,0,'Civilians',[]]]; _c = _c + ['Lada2']; _i = _i + [['','',175,18,-2,0,1,0,'Civilians',[]]]; _c = _c + ['LadaLM']; _i = _i + [['','',180,20,-2,0,1,0,'Civilians',[]]]; _c = _c + ['SkodaBlue']; _i = _i + [['','',190,17,-2,0,1,0,'Civilians',[]]]; _c = _c + ['SkodaRed']; _i = _i + [['','',190,17,-2,0,1,0,'Civilians',[]]]; _c = _c + ['car_sedan']; _i = _i + [['','',200,20,-2,0,1,0,'Civilians',[]]]; _c = _c + ['car_hatchback']; _i = _i + [['','',220,20,-2,0,1,0,'Civilians',[]]]; _c = _c + ['datsun1_civil_1_open']; _i = _i + [['','',250,22,-2,0,1,0,'Civilians',[]]]; _c = _c + ['datsun1_civil_2_covered']; _i = _i + [['','',250,22,-2,0,1,0,'Civilians',[]]]; _c = _c + ['datsun1_civil_3_open']; _i = _i + [['','',250,22,-2,0,1,0,'Civilians',[]]]; _c = _c + ['VWGolf']; _i = _i + [['','',270,23,-2,0,1,0,'Civilians',[]]]; _c = _c + ['hilux1_civil_1_open']; _i = _i + [['','',340,25,-2,0,1,0,'Civilians',[]]]; _c = _c + ['hilux1_civil_2_covered']; _i = _i + [['','',340,25,-2,0,1,0,'Civilians',[]]]; _c = _c + ['V3S_Civ']; _i = _i + [['','',380,22,-2,0,1,0,'Civilians',[]]]; _c = _c + ['UralCivil']; _i = _i + [['','',390,25,-2,0,1,0,'Civilians',[]]]; _c = _c + ['Ikarus']; _i = _i + [['','',420,25,-2,0,1,0,'Civilians',[]]]; /* Air Vehicles */ _c = _c + ['Mi17_Civilian']; _i = _i + [['','',15000,35,-2,0,3,0,'Civilians',[]]]; /* Defense Structures */ _c = _c + ['Land_HBarrier3']; _i = _i + [['','',20,0,0,0,'Fortification',0,'Civilians',[]]]; _c = _c + ['Land_HBarrier5']; _i = _i + [['','',30,0,0,0,'Fortification',0,'Civilians',[]]]; _c = _c + ['Land_HBarrier_large']; _i = _i + [['','',50,0,0,0,'Fortification',0,'Civilians',[]]]; _c = _c + ['Land_fort_bagfence_long']; _i = _i + [['','',10,0,0,0,'Fortification',0,'Civilians',[]]]; _c = _c + ['Land_fort_bagfence_corner']; _i = _i + [['','',8,0,0,0,'Fortification',0,'Civilians',[]]]; _c = _c + ['Land_fort_bagfence_round']; _i = _i + [['','',12,0,0,0,'Fortification',0,'Civilians',[]]]; _c = _c + ['Hhedgehog_concreteBig']; _i = _i + [['','',95,0,0,0,'Fortification',0,'Civilians',[]]]; _c = _c + ['Hedgehog']; _i = _i + [['','',5,0,0,0,'Fortification',0,'Civilians',[]]]; _c = _c + ['HeliH']; _i = _i + [['','',15,0,0,0,'Strategic',0,'Civilians',[]]]; _c = _c + ['MASH']; _i = _i + [['','',30,0,0,0,'Strategic',0,'Civilians',[]]]; _c = _c + ['Land_Ind_SawMillPen']; _i = _i + [['Roof','',150,0,0,0,'Strategic',0,'Civilians',[]]]; _c = _c + ['Land_Campfire']; _i = _i + [['','',3,0,0,0,'Strategic',0,'Civilians',[]]]; _c = _c + ['Base_WarfareBBarrier5x']; _i = _i + [['','',15,0,0,0,'Fortification',0,'Civilians',[]]]; _c = _c + ['Base_WarfareBBarrier10x']; _i = _i + [['','',25,0,0,0,'Fortification',0,'Civilians',[]]]; _c = _c + ['Base_WarfareBBarrier10xTall']; _i = _i + [['','',50,0,0,0,'Fortification',0,'Civilians',[]]]; _c = _c + ['Land_fortified_nest_small']; _i = _i + [['','',40,0,0,0,'Fortification',0,'Civilians',[]]]; _c = _c + ['Land_fortified_nest_big']; _i = _i + [['','',100,0,0,0,'Fortification',0,'Civilians',[]]]; _c = _c + ['Land_Fort_Watchtower']; _i = _i + [['','',125,0,0,0,'Fortification',0,'Civilians',[]]]; _c = _c + ['Land_fort_rampart']; _i = _i + [['','',30,0,0,0,'Fortification',0,'Civilians',[]]]; _c = _c + ['Land_fort_artillery_nest']; _i = _i + [['','',65,0,0,0,'Fortification',0,'Civilians',[]]]; _c = _c + ['Sign_Danger']; _i = _i + [[localize 'STR_WF_Minefield','',1200,0,0,0,'Strategic',0,'Civilians',[]]]; _c = _c + ['Fort_RazorWire']; _i = _i + [['','',25,0,0,0,'Fortification',0,'Civilians',[]]]; _c = _c + ['Land_Ind_IlluminantTower']; _i = _i + [['','',200,0,0,0,'Fortification',0,'Civilians',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_CIV: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_CIV: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_CIV: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* Spetsnaz Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['US_Delta_Force_EP1']; _i = _i + [['','',300,6,-1,3,0,0.99,'US Delta Force',[]]]; _c = _c + ['US_Delta_Force_TL_EP1']; _i = _i + [['','',360,6,-1,3,0,1.00,'US Delta Force',[]]]; _c = _c + ['US_Delta_Force_Medic_EP1']; _i = _i + [['','',320,6,-1,3,0,0.98,'US Delta Force',[]]]; _c = _c + ['US_Delta_Force_Assault_EP1']; _i = _i + [['','',335,6,-1,3,0,0.99,'US Delta Force',[]]]; _c = _c + ['US_Delta_Force_SD_EP1']; _i = _i + [['','',345,6,-1,3,0,0.99,'US Delta Force',[]]]; _c = _c + ['US_Delta_Force_MG_EP1']; _i = _i + [['','',340,6,-1,3,0,0.99,'US Delta Force',[]]]; _c = _c + ['US_Delta_Force_AR_EP1']; _i = _i + [['','',330,6,-1,3,0,0.99,'US Delta Force',[]]]; _c = _c + ['US_Delta_Force_Night_EP1']; _i = _i + [['','',315,6,-1,3,0,0.99,'US Delta Force',[]]]; _c = _c + ['US_Delta_Force_Marksman_EP1']; _i = _i + [['','',320,6,-1,3,0,0.99,'US Delta Force',[]]]; _c = _c + ['US_Delta_Force_M14_EP1']; _i = _i + [['','',310,6,-1,3,0,0.99,'US Delta Force',[]]]; _c = _c + ['US_Delta_Force_Air_Controller_EP1']; _i = _i + [['','',350,6,-1,3,0,1.0,'US Delta Force',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_DeltaForce: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_DeltaForce: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_DeltaForce: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* FR Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['FR_GL']; _i = _i + [['','',260,6,-1,2,0,0.98,'USMC Force Recon',[]]]; _c = _c + ['FR_Corpsman']; _i = _i + [['','',270,6,-1,2,0,0.98,'USMC Force Recon',[]]]; _c = _c + ['FR_Commander']; _i = _i + [['','',295,6,-1,2,0,1.00,'USMC Force Recon',[]]]; _c = _c + ['FR_TL']; _i = _i + [['','',285,6,-1,2,0,1.00,'USMC Force Recon',[]]]; _c = _c + ['FR_Assault_R']; _i = _i + [['','',280,6,-1,2,0,0.99,'USMC Force Recon',[]]]; _c = _c + ['FR_Assault_GL']; _i = _i + [['','',285,6,-1,2,0,0.99,'USMC Force Recon',[]]]; _c = _c + ['FR_AR']; _i = _i + [['','',290,6,-1,2,0,0.98,'USMC Force Recon',[]]]; _c = _c + ['FR_R']; _i = _i + [['','',300,6,-1,2,0,0.98,'USMC Force Recon',[]]]; _c = _c + ['FR_Sapper']; _i = _i + [['','',310,6,-1,2,0,0.98,'USMC Force Recon',[]]]; _c = _c + ['FR_AC']; _i = _i + [['','',320,6,-1,2,0,1.0,'USMC Force Recon',[]]]; _c = _c + ['FR_Marksman']; _i = _i + [['','',340,6,-1,2,0,0.99,'USMC Force Recon',[]]]; /* Infantry - Special Characters */ _c = _c + ['FR_Cooper']; _i = _i + [['','',400,6,-1,3,0,1.0,'USMC Force Recon',[]]]; _c = _c + ['FR_Miles']; _i = _i + [['','',400,6,-1,3,0,1.0,'USMC Force Recon',[]]]; _c = _c + ['FR_OHara']; _i = _i + [['','',400,6,-1,3,0,1.0,'USMC Force Recon',[]]]; _c = _c + ['FR_Rodriguez']; _i = _i + [['','',400,6,-1,3,0,1.0,'USMC Force Recon',[]]]; _c = _c + ['FR_Sykes']; _i = _i + [['','',400,6,-1,3,0,1.0,'USMC Force Recon',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_FR: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_FR: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_FR: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* GUE Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['GUE_Soldier_1']; _i = _i + [['','',150,4,-1,0,0,0.55,'Guerilla',[]]]; _c = _c + ['GUE_Soldier_2']; _i = _i + [['','',120,4,-1,0,0,0.55,'Guerilla',[]]]; _c = _c + ['GUE_Soldier_3']; _i = _i + [['','',140,4,-1,0,0,0.55,'Guerilla',[]]]; _c = _c + ['GUE_Soldier_GL']; _i = _i + [['','',150,5,-1,1,0,0.55,'Guerilla',[]]]; _c = _c + ['GUE_Soldier_AT']; _i = _i + [['','',220,5,-1,1,0,0.58,'Guerilla',[]]]; _c = _c + ['GUE_Soldier_AA']; _i = _i + [['','',250,4,-1,0,0,0.59,'Guerilla',[]]]; _c = _c + ['GUE_Soldier_AR']; _i = _i + [['','',150,4,-1,1,0,0.54,'Guerilla',[]]]; _c = _c + ['GUE_Soldier_MG']; _i = _i + [['','',190,4,-1,0,0,0.53,'Guerilla',[]]]; _c = _c + ['GUE_Soldier_Sniper']; _i = _i + [['','',175,6,-1,1,0,0.62,'Guerilla',[]]]; _c = _c + ['GUE_Soldier_Medic']; _i = _i + [['','',160,6,-1,0,0,0.59,'Guerilla',[]]]; _c = _c + ['GUE_Soldier_Crew']; _i = _i + [['','',120,5,-1,0,0,0.51,'Guerilla',[]]]; _c = _c + ['GUE_Soldier_Pilot']; _i = _i + [['','',120,5,-1,0,0,0.52,'Guerilla',[]]]; _c = _c + ['GUE_Soldier_Scout']; _i = _i + [['','',260,5,-1,3,0,0.63,'Guerilla',[]]]; _c = _c + ['GUE_Soldier_Sab']; _i = _i + [['','',220,5,-1,2,0,0.64,'Guerilla',[]]]; _c = _c + ['GUE_Commander']; _i = _i + [['','',240,5,-1,0,0,0.65,'Guerilla',[]]]; _c = _c + ['GUE_Worker2']; _i = _i + [['','',100,5,-1,0,0,0.41,'Guerilla',[]]]; _c = _c + ['GUE_Woodlander3']; _i = _i + [['','',100,5,-1,0,0,0.41,'Guerilla',[]]]; _c = _c + ['GUE_Villager3']; _i = _i + [['','',100,5,-1,0,0,0.41,'Guerilla',[]]]; _c = _c + ['GUE_Woodlander2']; _i = _i + [['','',100,5,-1,0,0,0.41,'Guerilla',[]]]; _c = _c + ['GUE_Woodlander1']; _i = _i + [['','',100,5,-1,0,0,0.41,'Guerilla',[]]]; _c = _c + ['GUE_Villager4']; _i = _i + [['','',100,5,-1,0,0,0.41,'Guerilla',[]]]; /* Light Vehicles */ _c = _c + ['TT650_Gue']; _i = _i + [['','',150,15,-2,0,1,0,'Guerilla',[]]]; _c = _c + ['V3S_Gue']; _i = _i + [['','',175,15,-2,0,1,0,'Guerilla',[]]]; _c = _c + ['Pickup_PK_GUE']; _i = _i + [['','',250,17,-2,0,1,0,'Guerilla',[]]]; _c = _c + ['Offroad_DSHKM_Gue']; _i = _i + [['','',300,25,-2,1,1,0,'Guerilla',[]]]; _c = _c + ['Offroad_SPG9_Gue']; _i = _i + [['','',380,20,-2,2,1,0,'Guerilla',[]]]; _c = _c + ['WarfareRepairTruck_Gue']; _i = _i + [['','',425,17,-2,2,1,0,'Guerilla',[]]]; _c = _c + ['WarfareSalvageTruck_Gue']; _i = _i + [['','',450,17,-2,1,1,0,'Guerilla',[]]]; _c = _c + ['WarfareReammoTruck_Gue']; _i = _i + [['','',450,18,-2,1,1,0,'Guerilla',[]]]; _c = _c + ['WarfareSupplyTruck_Gue']; _i = _i + [['','',450,21,-2,0,1,0,'Guerilla',[]]]; _c = _c + ['BRDM2_Gue']; _i = _i + [['','',600,25,-2,2,1,0,'Guerilla',[]]]; _c = _c + ['Ural_ZU23_Gue']; _i = _i + [['','',950,25,-2,2,1,0,'Guerilla',[]]]; /* Heavy Vehicles */ _c = _c + ['BMP2_Gue']; _i = _i + [['','',2200,30,-2,0,2,0,'Guerilla',[]]]; _c = _c + ['T72_Gue']; _i = _i + [['','',3200,35,-2,1,2,0,'Guerilla',[]]]; /* Static Defenses */ _c = _c + ['GUE_WarfareBMGNest_PK']; _i = _i + [['','',300,0,1,0,'Defense',0,'Guerilla',[]]]; _c = _c + ['DSHKM_Gue']; _i = _i + [['','',225,0,1,0,'Defense',0,'Guerilla',[]]]; _c = _c + ['SPG9_Gue']; _i = _i + [['','',475,0,1,0,'Defense',0,'Guerilla',[]]]; _c = _c + ['ZU23_Gue']; _i = _i + [['','',600,0,1,0,'Defense',0,'Guerilla',[]]]; _c = _c + ['2b14_82mm_GUE']; _i = _i + [['Podnos 2B14','',1025,0,1,0,'Defense',0,'Guerilla',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_GUE: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_GUE: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_GUE: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* INS Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['Ins_Soldier_1']; _i = _i + [['','',150,4,-1,0,0,0.61,'Insurgents',[]]]; _c = _c + ['Ins_Soldier_2']; _i = _i + [['','',160,4,-1,0,0,0.61,'Insurgents',[]]]; _c = _c + ['Ins_Soldier_GL']; _i = _i + [['','',175,4,-1,0,0,0.65,'Insurgents',[]]]; _c = _c + ['Ins_Soldier_CO']; _i = _i + [['','',210,5,-1,1,0,0.7,'Insurgents',[]]]; _c = _c + ['Ins_Commander']; _i = _i + [['','',250,5,-1,2,0,0.7,'Insurgents',[]]]; _c = _c + ['Ins_Soldier_Medic']; _i = _i + [['','',175,4,-1,0,0,0.62,'Insurgents',[]]]; _c = _c + ['Ins_Soldier_AR']; _i = _i + [['','',180,4,-1,1,0,0.61,'Insurgents',[]]]; _c = _c + ['Ins_Soldier_MG']; _i = _i + [['','',190,4,-1,0,0,0.60,'Insurgents',[]]]; _c = _c + ['Ins_Soldier_AT']; _i = _i + [['','',220,6,-1,1,0,0.60,'Insurgents',[]]]; _c = _c + ['Ins_Soldier_AA']; _i = _i + [['','',300,6,-1,2,0,0.62,'Insurgents',[]]]; _c = _c + ['Ins_Soldier_Sniper']; _i = _i + [['','',220,6,-1,1,0,0.66,'Insurgents',[]]]; _c = _c + ['Ins_Soldier_Sapper']; _i = _i + [['','',190,5,-1,2,0,0.64,'Insurgents',[]]]; _c = _c + ['Ins_Soldier_Sab']; _i = _i + [['','',180,5,-1,2,0,0.68,'Insurgents',[]]]; _c = _c + ['Ins_Soldier_Pilot']; _i = _i + [['','',130,5,-1,0,0,0.59,'Insurgents',[]]]; _c = _c + ['Ins_Soldier_Crew']; _i = _i + [['','',130,5,-1,0,0,0.58,'Insurgents',[]]]; _c = _c + ['INS_Woodlander1']; _i = _i + [['','',100,5,-1,0,0,0.58,'Insurgents',[]]]; _c = _c + ['INS_Woodlander2']; _i = _i + [['','',100,5,-1,0,0,0.58,'Insurgents',[]]]; _c = _c + ['INS_Woodlander3']; _i = _i + [['','',100,5,-1,0,0,0.58,'Insurgents',[]]]; _c = _c + ['INS_Villager3']; _i = _i + [['','',100,5,-1,0,0,0.58,'Insurgents',[]]]; _c = _c + ['INS_Villager4']; _i = _i + [['','',100,5,-1,0,0,0.58,'Insurgents',[]]]; _c = _c + ['INS_Worker2']; _i = _i + [['','',100,5,-1,0,0,0.58,'Insurgents',[]]]; /* Light Vehicles */ _c = _c + ['TT650_Ins']; _i = _i + [['','',150,15,-2,0,1,0,'Insurgents',[]]]; _c = _c + ['UAZ_INS']; _i = _i + [['','',260,15,-2,0,1,0,'Insurgents',[]]]; _c = _c + ['Pickup_PK_INS']; _i = _i + [['','',300,15,-2,0,1,0,'Insurgents',[]]]; _c = _c + ['Offroad_DSHKM_INS']; _i = _i + [['','',350,15,-2,0,1,0,'Insurgents',[]]]; _c = _c + ['UAZ_MG_INS']; _i = _i + [['','',460,17,-2,0,1,0,'Insurgents',[]]]; _c = _c + ['UAZ_AGS30_INS']; _i = _i + [['','',585,25,-2,1,1,0,'Insurgents',[]]]; _c = _c + ['UAZ_SPG9_INS']; _i = _i + [['','',650,20,-2,2,1,0,'Insurgents',[]]]; _c = _c + ['UralOpen_INS']; _i = _i + [['','',290,20,-2,0,1,0,'Insurgents',[]]]; _c = _c + ['Ural_INS']; _i = _i + [['','',300,20,-2,0,1,0,'Insurgents',[]]]; _c = _c + ['WarfareSalvageTruck_INS']; _i = _i + [['','',450,18,-2,0,1,0,'Insurgents',[]]]; _c = _c + ['UralRepair_INS']; _i = _i + [['','',525,21,-2,2,1,0,'Insurgents',[]]]; _c = _c + ['UralReammo_INS']; _i = _i + [['','',550,21,-2,1,1,0,'Insurgents',[]]]; _c = _c + ['UralRefuel_INS']; _i = _i + [['','',500,21,-2,1,1,0,'Insurgents',[]]]; _c = _c + ['WarfareSupplyTruck_INS']; _i = _i + [['','',550,21,-2,0,1,0,'Insurgents',[]]]; _c = _c + ['BRDM2_INS']; _i = _i + [['','',1000,25,-2,2,1,0,'Insurgents',[]]]; _c = _c + ['BRDM2_ATGM_INS']; _i = _i + [['','',1550,25,-2,3,1,0,'Insurgents',[]]]; _c = _c + ['Ural_ZU23_INS']; _i = _i + [['','',1650,20,-2,2,1,0,'Insurgents',[]]]; _c = _c + ['GRAD_INS']; _i = _i + [['','',4000,35,-2,3,1,0,'Insurgents',[]]]; /* Heavy Vehicles */ _c = _c + ['BMP2_Ambul_INS']; _i = _i + [['','',950,20,-2,0,2,0,'Insurgents',[]]]; _c = _c + ['BMP2_INS']; _i = _i + [['','',2500,30,-2,1,2,0,'Insurgents',[]]]; _c = _c + ['ZSU_INS']; _i = _i + [['','',3200,35,-2,2,2,0,'Insurgents',[]]]; _c = _c + ['T72_INS']; _i = _i + [['','',4500,35,-2,3,2,0,'Insurgents',[]]]; /* Air Vehicles */ _c = _c + ['Mi17_Ins']; _i = _i + [['','',15000,35,-2,0,3,0,'Insurgents',[]]]; _c = _c + ['Mi17_medevac_Ins']; _i = _i + [['','',18000,35,-2,1,3,0,'Insurgents',[]]]; _c = _c + ['Su25_Ins']; _i = _i + [['','',90000,55,-2,3,3,0,'Insurgents',[]]]; /* Static Defenses */ _c = _c + ['Ins_WarfareBMGNest_PK']; _i = _i + [['','',300,0,1,0,'Defense',0,'Insurgents',[]]]; _c = _c + ['DSHkM_Mini_TriPod']; _i = _i + [['','',200,0,1,0,'Defense',0,'Insurgents',[]]]; _c = _c + ['DSHKM_Ins']; _i = _i + [['','',225,0,1,0,'Defense',0,'Insurgents',[]]]; _c = _c + ['SearchLight_INS']; _i = _i + [['','',125,0,1,0,'Defense',0,'Insurgents',[]]]; _c = _c + ['AGS_Ins']; _i = _i + [['','',650,0,1,0,'Defense',0,'Insurgents',[]]]; _c = _c + ['SPG9_Ins']; _i = _i + [['','',475,0,1,0,'Defense',0,'Insurgents',[]]]; _c = _c + ['ZU23_Ins']; _i = _i + [['','',945,0,1,0,'Defense',0,'Insurgents',[]]]; _c = _c + ['2b14_82mm_INS']; _i = _i + [['Podnos 2B14','',1025,0,1,0,'Defense',0,'Insurgents',[]]]; _c = _c + ['D30_Ins']; _i = _i + [['','',2300,0,1,0,'Defense',0,'Insurgents',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_INS: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_INS: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_INS: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* KSK Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['GER_Soldier_MG_EP1']; _i = _i + [['','',340,6,-1,2,0,0.95,'KSK',[]]]; _c = _c + ['GER_Soldier_Medic_EP1']; _i = _i + [['','',325,6,-1,2,0,0.94,'KSK',[]]]; _c = _c + ['GER_Soldier_EP1']; _i = _i + [['','',310,6,-1,2,0,0.94,'KSK',[]]]; _c = _c + ['GER_Soldier_Scout_EP1']; _i = _i + [['','',345,6,-1,2,0,0.96,'KSK',[]]]; _c = _c + ['GER_Soldier_TL_EP1']; _i = _i + [['','',355,6,-1,2,0,0.98,'KSK',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_KSK: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_KSK: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_KSK: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* MVD Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['MVD_Soldier_GL']; _i = _i + [['','',310,7,-1,3,0,0.98,'MVD',[]]]; _c = _c + ['MVD_Soldier_MG']; _i = _i + [['','',320,7,-1,3,0,0.98,'MVD',[]]]; _c = _c + ['MVD_Soldier_Marksman']; _i = _i + [['','',330,7,-1,3,0,0.99,'MVD',[]]]; _c = _c + ['MVD_Soldier_AT']; _i = _i + [['','',345,7,-1,3,0,0.99,'MVD',[]]]; _c = _c + ['MVD_Soldier_Sniper']; _i = _i + [['','',350,7,-1,3,0,0.99,'MVD',[]]]; _c = _c + ['MVD_Soldier_TL']; _i = _i + [['','',360,7,-1,3,0,1.0,'MVD',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_MVD: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_MVD: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_RU: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* OFrP Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* OFrP - Basic Infantry */ _c = _c + ['OFrP_Soldier_Inf_Stinger']; _i = _i + [['','',410,6,-1,2,0,0.88,'French',[]]]; _c = _c + ['OFrP_Soldier_Inf']; _i = _i + [['','',150,4,-1,0,0,0.86,'French',[]]]; _c = _c + ['OFrP_Soldier_Inf_Grenadier']; _i = _i + [['','',155,4,-1,0,0,0.86,'French',[]]]; _c = _c + ['OFrP_Soldier_Inf_Minimi']; _i = _i + [['','',220,5,-1,0,0,0.89,'French',[]]]; _c = _c + ['OFrP_Soldier_Inf_Scout']; _i = _i + [['','',340,6,-1,2,0,0.9,'French',[]]]; _c = _c + ['OFrP_Soldier_Inf_Medic']; _i = _i + [['','',190,4,-1,0,0,0.89,'French',[]]]; _c = _c + ['OFrP_Soldier_Inf_ABL']; _i = _i + [['','',225,5,-1,0,0,0.88,'French',[]]]; _c = _c + ['OFrP_Soldier_Inf_LRAC89']; _i = _i + [['','',350,5,-1,2,0,0.9,'French',[]]]; _c = _c + ['OFrP_Soldier_Inf_ERYX']; _i = _i + [['','',600,6,-1,3,0,0.92,'French',[]]]; _c = _c + ['OFrP_Soldier_Inf_Laser']; _i = _i + [['','',400,6,-1,2,0,0.88,'French',[]]]; _c = _c + ['OFrP_Soldier_Inf_SniperFRF2']; _i = _i + [['','',320,6,-1,2,0,0.92,'French',[]]]; _c = _c + ['OFrP_Soldier_Inf_Crew']; _i = _i + [['','',120,4,-1,0,0,0.86,'French',[]]]; _c = _c + ['OFrP_Soldier_INF_TankCrew']; _i = _i + [['','',120,4,-1,0,0,0.86,'French',[]]]; _c = _c + ['OFrP_Soldier_Inf_TeamLeader']; _i = _i + [['','',240,5,-1,1,0,0.94,'French',[]]]; _c = _c + ['OFrP_Soldier_OFF']; _i = _i + [['','',250,5,-1,1,0,0.92,'French',[]]]; /*OFrP - French Pilot*/ _c = _c + ['OFrP_Soldier_T3_CIRAS_Pilot3_ALAT']; _i = _i + [['','',120,4,-1,0,0,0.87,'French',[]]]; _c = _c + ['OFrP_Soldier_Pilot1_ADA']; _i = _i + [['','',120,4,-1,0,0,0.87,'French',[]]]; /*OFrP Cos*/ _c = _c + ['OFrP_Soldier_CoS']; _i = _i + [['','',250,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_CoS_Grenadier']; _i = _i + [['','',250,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_CoS_Minimi']; _i = _i + [['','',270,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_CoS_Medic']; _i = _i + [['','',290,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_CoS_ABL']; _i = _i + [['','',270,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_CoS_ERYX']; _i = _i + [['','',700,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_CoS_Laser']; _i = _i + [['','',500,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_CoS_Saboteur']; _i = _i + [['','',295,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_COS_SniperFRF2']; _i = _i + [['','',420,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_CoS_TeamLeader']; _i = _i + [['','',300,6,-1,3,0,1.00,'French',[]]]; /*OFrP Felin*/ _c = _c + ['OFrP_Soldier_FELIN_Stinger']; _i = _i + [['','',510,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_FELIN']; _i = _i + [['','',250,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_FELIN_Grenadier']; _i = _i + [['','',270,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_FELIN_Minimi']; _i = _i + [['','',270,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_FELIN_Medic']; _i = _i + [['','',290,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_FELIN_Optronic']; _i = _i + [['','',300,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_FELIN_ABL']; _i = _i + [['','',270,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_FELIN_ERYX']; _i = _i + [['','',700,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_FELIN_Laser']; _i = _i + [['','',500,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_FELIN_Saboteur']; _i = _i + [['','',295,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_FELIN_SniperFRF2']; _i = _i + [['','',420,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_FELIN_Crew']; _i = _i + [['','',220,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_FELIN_TankCrew']; _i = _i + [['','',220,6,-1,3,0,1.00,'French',[]]]; _c = _c + ['OFrP_Soldier_FELIN_TeamLeader']; _i = _i + [['','',340,6,-1,3,0,1.00,'French',[]]]; /*OFrP Light*/ _c = _c + ['OFrP_P4']; _i = _i + [['','',260,12,-2,0,1,0,'French',[]]]; _c = _c + ['OFrP_P4_b']; _i = _i + [['','',260,12,-2,0,1,0,'French',[]]]; _c = _c + ['OFrP_P4_ANF1']; _i = _i + [['','',550,18,-2,1,1,0,'French',[]]]; _c = _c + ['OFrP_P4_VPS']; _i = _i + [['','',550,18,-2,1,1,0,'French',[]]]; _c = _c + ['OFrP_Hurricane']; _i = _i + [['','',225,17,-2,0,1,0,'French',[]]]; _c = _c + ['OFrP_TRM2000']; _i = _i + [['','',400,20,-2,0,1,0,'French',[]]]; _c = _c + ['OFrP_TRM2000_Fuel']; _i = _i + [['','',500,22,-2,1,1,0,'French',[]]]; _c = _c + ['OFrP_GBC180']; _i = _i + [['','',400,20,-2,0,1,0,'French',[]]]; _c = _c + ['OFrP_GBC180_APD']; //(Munitions) _i = _i + [['','',550,22,-2,1,1,0,'French',[]]]; _c = _c + ['OFrP_GBC180_lot7']; // (Rparation) _i = _i + [['','',525,22,-2,2,1,0,'French',[]]]; _c = _c + ['MtvrSalvage_DES_EP1']; _i = _i + [['','',450,21,-2,0,1,0,'French',[]]]; _c = _c + ['MtvrSupply_DES_EP1']; _i = _i + [['','',550,25,-2,0,1,0,'French',[]]]; _c = _c + ['OFrP_VBL_desert']; _i = _i + [['','',300,15,-2,0,1,0,'French',[]]]; _c = _c + ['OFrP_VBL_ANF1_desert']; _i = _i + [['','',700,18,-2,1,1,0,'French',[]]]; _c = _c + ['OFrP_VBL_127_desert']; _i = _i + [['','',750,20,-2,1,1,0,'French',[]]]; _c = _c + ['OFrP_VBL_Milan_desert']; _i = _i + [['','',1350,20,-2,2,1,0,'French',[]]]; _c = _c + ['OFrP_PVP']; _i = _i + [['','',400,15,-2,0,1,0,'French',[]]]; _c = _c + ['OFrP_PVP_ANF1']; _i = _i + [['','',800,18,-2,1,1,0,'French',[]]]; _c = _c + ['OFrP_PVP_WASP']; _i = _i + [['','',850,20,-2,2,1,0,'French',[]]]; _c = _c + ['OFrP_PVP_WASP_MILAN']; _i = _i + [['','',1550,20,-2,2,1,0,'French',[]]]; _c = _c + ['OFrP_VAB_desert']; _i = _i + [['','',725,22,-2,0,1,0,'French',[]]]; _c = _c + ['OFrP_VAB_SAN_desert']; _i = _i + [['','',725,22,-2,1,1,0,'French',[]]]; _c = _c + ['OFrP_VAB_127_desert']; _i = _i + [['','',1150,20,-2,1,1,0,'French',[]]]; _c = _c + ['OFrP_VAB_TOP127_desert']; _i = _i + [['','',1450,20,-2,2,1,0,'French',[]]]; _c = _c + ['OFrP_VABT20_desert']; _i = _i + [['','',1550,20,-2,2,1,0,'French',[]]]; _c = _c + ['OFrP_VAB_Mephisto_desert']; _i = _i + [['','',1650,20,-2,2,1,0,'French',[]]]; _c = _c + ['OFrP_VAB_MILAN_desert']; _i = _i + [['','',1550,20,-2,2,1,0,'French',[]]]; _c = _c + ['OFrP_Aravis_desert']; _i = _i + [['','',400,15,-2,0,1,0,'French',[]]]; _c = _c + ['OFrP_Aravis_TOP127_desert']; _i = _i + [['','',1050,20,-2,2,1,0,'French',[]]]; _c = _c + ['OFrP_Aravis_WASP_desert']; _i = _i + [['','',850,20,-2,2,1,0,'French',[]]]; _c = _c + ['OFrP_Aravis_WASP_MILAN_desert']; _i = _i + [['','',1550,20,-2,2,1,0,'French',[]]]; /*Heavy Factory */ _c = _c + ['OFrP_VBCI_vci']; _i = _i + [['','',2550,30,-2,0,2,0,'French',[]]]; _c = _c + ['OFrP_10RC']; _i = _i + [['','',4500,27,-2,1,2,0,'French',[]]]; _c = _c + ['OFrP_10RCR']; _i = _i + [['','',4900,30,-2,2,2,0,'French',[]]]; _c = _c + ['OFrP_Leclerc_desert']; _i = _i + [['','',6950,40,-2,3,2,0,'French',[]]]; _c = _c + ['MLRS_DES_EP1']; _i = _i + [['','',5800,40,-2,3,2,0,'French',[]]]; /*Air Factory*/ _c = _c + ['OFrP_Puma_CE']; _i = _i + [['','',15000,35,-2,0,3,0,'French',[]]]; _c = _c + ['OFrP_Puma_RESCO']; _i = _i + [['','',18000,35,-2,0,3,0,'French',[]]]; _c = _c + ['OFrP_Puma_CE_Pirate']; _i = _i + [['','',25000,40,-2,1,3,0,'French',[]]]; _c = _c + ['OFrP_Caracal']; _i = _i + [['','',25000,40,-2,1,3,0,'French',[]]]; _c = _c + ['OFrP_Tiger_HAP_CE']; _i = _i + [['','',86000,60,-2,2,3,0,'French',[]]]; _c = _c + ['OFrP_Tiger_HAD_CE']; _i = _i + [['','',80000,60,-2,2,3,0,'French',[]]]; _c = _c + ['OFrP_Mirage_C']; _i = _i + [['','',95000,65,-2,3,3,0,'French',[]]]; _c = _c + ['OFrP_Mirage_5']; _i = _i + [['','',95000,65,-2,3,3,0,'French',[]]]; _c = _c + ['OFrP_Mirage_D_GBU12']; _i = _i + [['','',130000,65,-2,3,3,0,'French',[]]]; _c = _c + ['OFrP_Mirage_D_AS30L']; _i = _i + [['','',130000,65,-2,3,3,0,'French',[]]]; _c = _c + ['OFrP_Rafale_C1']; _i = _i + [['','',100000,65,-2,3,3,0,'French',[]]]; _c = _c + ['OFrP_Rafale_B1']; _i = _i + [['','',140000,65,-2,3,3,0,'French',[]]]; _c = _c + ['OFrP_Rafale_B1T']; _i = _i + [['','',140000,65,-2,3,3,0,'French',[]]]; _c = _c + ['OFrP_Transall_A']; _i = _i + [['','',26500,52,-2,1,3,0,'French',[]]]; /* Special */ _c = _c + ['MQ9PredatorB_US_EP1']; _i = _i + [['','',30000,35,-2,2,3,0,'French',[]]]; /* Static Defenses */ _c = _c + ['WarfareBMGNest_M240_US_EP1']; _i = _i + [['','',300,0,1,0,'Defense',0,'French',[]]]; _c = _c + ['M2HD_mini_TriPod_US_EP1']; _i = _i + [['','',200,0,1,0,'Defense',0,'French',[]]]; _c = _c + ['M2StaticMG_US_EP1']; _i = _i + [['','',225,0,1,0,'Defense',0,'French',[]]]; _c = _c + ['SearchLight_US_EP1']; _i = _i + [['','',125,0,1,0,'Defense',0,'French',[]]]; _c = _c + ['MK19_TriPod_US_EP1']; _i = _i + [['','',700,0,1,0,'Defense',0,'French',[]]]; _c = _c + ['OFrP_Milan_Launcher_Static']; _i = _i + [['','',700,0,1,0,'Defense',0,'French',[]]]; _c = _c + ['Stinger_Pod_US_EP1']; _i = _i + [['','',850,0,1,0,'Defense',0,'French',[]]]; _c = _c + ['M252_US_EP1']; _i = _i + [['','',1150,0,1,0,'Defense',0,'French',[]]]; _c = _c + ['M119_US_EP1']; _i = _i + [['','',2250,0,1,0,'Defense',0,'French',[]]]; /* Defense Structures */ _c = _c + ['US_WarfareBBarrier5x_EP1']; _i = _i + [['','',15,0,0,0,'Fortification',0,'French',[]]]; _c = _c + ['US_WarfareBBarrier10x_EP1']; _i = _i + [['','',25,0,0,0,'Fortification',0,'French',[]]]; _c = _c + ['US_WarfareBBarrier10xTall_EP1']; _i = _i + [['','',50,0,0,0,'Fortification',0,'French',[]]]; _c = _c + ['Land_CamoNet_NATO_EP1']; _i = _i + [['','',35,0,0,0,'Strategic',0,'French',[]]]; _c = _c + ['Land_CamoNetVar_NATO_EP1']; _i = _i + [['','',45,0,0,0,'Strategic',0,'French',[]]]; _c = _c + ['Land_CamoNetB_NATO_EP1']; _i = _i + [['','',55,0,0,0,'Strategic',0,'French',[]]]; _c = _c + ['USOrdnanceBox_EP1']; _i = _i + [['','',850,0,0,0,'Ammo',0,'French',[]]]; _c = _c + ['USVehicleBox_EP1']; _i = _i + [['','',1200,0,0,0,'Ammo',0,'French',[]]]; _c = _c + ['USBasicAmmunitionBox_EP1']; _i = _i + [['','',1950,0,0,0,'Ammo',0,'French',[]]]; _c = _c + ['USBasicWeapons_EP1']; _i = _i + [['','',2975,0,0,0,'Ammo',0,'French',[]]]; _c = _c + ['USLaunchers_EP1']; _i = _i + [['','',6250,0,0,0,'Ammo',0,'French',[]]]; _c = _c + ['USSpecialWeapons_EP1']; _i = _i + [['','',7200,0,0,0,'Ammo',0,'French',[]]]; /*EOF*/ for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_FR: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_FR: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_OFrP: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* PMC Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['Soldier_AA_PMC']; _i = _i + [['','',300,6,-1,2,0,0.92,'PMC',[]]]; _c = _c + ['Soldier_AT_PMC']; _i = _i + [['','',260,6,-1,0,0,0.90,'PMC',[]]]; _c = _c + ['Soldier_Bodyguard_AA12_PMC']; _i = _i + [['','',325,6,-1,3,0,0.94,'PMC',[]]]; _c = _c + ['Soldier_Bodyguard_M4_PMC']; _i = _i + [['','',225,6,-1,0,0,0.94,'PMC',[]]]; _c = _c + ['Soldier_Crew_PMC']; _i = _i + [['','',170,6,-1,0,0,0.89,'PMC',[]]]; _c = _c + ['Soldier_Engineer_PMC']; _i = _i + [['','',270,6,-1,2,0,0.91,'PMC',[]]]; _c = _c + ['Soldier_GL_M16A2_PMC']; _i = _i + [['','',185,6,-1,0,0,0.92,'PMC',[]]]; _c = _c + ['Soldier_GL_PMC']; _i = _i + [['','',260,6,-1,2,0,0.92,'PMC',[]]]; _c = _c + ['Soldier_M4A3_PMC']; _i = _i + [['','',210,6,-1,1,0,0.91,'PMC',[]]]; _c = _c + ['Soldier_Medic_PMC']; _i = _i + [['','',255,6,-1,2,0,0.92,'PMC',[]]]; _c = _c + ['Soldier_MG_PKM_PMC']; _i = _i + [['','',190,6,-1,0,0,0.90,'PMC',[]]]; _c = _c + ['Soldier_MG_PMC']; _i = _i + [['','',260,6,-1,3,0,0.92,'PMC',[]]]; _c = _c + ['Soldier_Pilot_PMC']; _i = _i + [['','',175,6,-1,0,0,0.90,'PMC',[]]]; _c = _c + ['Soldier_PMC']; _i = _i + [['','',230,6,-1,0,0,0.91,'PMC',[]]]; _c = _c + ['Soldier_Sniper_KSVK_PMC']; _i = _i + [['','',290,6,-1,0,0,0.94,'PMC',[]]]; _c = _c + ['Soldier_Sniper_PMC']; _i = _i + [['','',275,6,-1,0,0,0.94,'PMC',[]]]; _c = _c + ['Soldier_TL_PMC']; _i = _i + [['','',280,6,-1,0,0,0.95,'PMC',[]]]; /* Light Vehicles */ _c = _c + ['SUV_PMC']; _i = _i + [['','',300,20,-2,0,1,0,'PMC',[]]]; _c = _c + ['ArmoredSUV_PMC']; _i = _i + [['','',1250,25,-2,0,1,0,'PMC',[]]]; /* Air Vehicles */ _c = _c + ['Ka137_PMC']; _i = _i + [['','',3000,35,-2,0,3,0,'PMC',[]]]; _c = _c + ['Ka137_MG_PMC']; _i = _i + [['','',3500,35,-2,0,3,0,'PMC',[]]]; _c = _c + ['Ka60_PMC']; _i = _i + [['','',35000,43,-2,1,3,0,'PMC',[]]]; _c = _c + ['Ka60_GL_PMC']; _i = _i + [['','',37500,45,-2,2,3,0,'PMC',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_PMC: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_PMC: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_PMC: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* RU Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['RU_Soldier']; _i = _i + [['','',150,4,-1,0,0,0.76,'Russians',[]]]; _c = _c + ['RU_Soldier2']; _i = _i + [['','',120,4,-1,0,0,0.74,'Russians',[]]]; _c = _c + ['RU_Soldier_LAT']; _i = _i + [['','',220,5,-1,0,0,0.78,'Russians',[]]]; _c = _c + ['RU_Soldier_AT']; _i = _i + [['','',310,5,-1,1,0,0.8,'Russians',[]]]; _c = _c + ['RU_Soldier_HAT']; _i = _i + [['','',620,6,-1,3,0,0.84,'Russians',[]]]; _c = _c + ['RU_Soldier_AA']; _i = _i + [['','',425,6,-1,1,0,0.81,'Russians',[]]]; _c = _c + ['RU_Soldier_AR']; _i = _i + [['','',210,5,-1,1,0,0.78,'Russians',[]]]; _c = _c + ['RU_Soldier_MG']; _i = _i + [['','',220,5,-1,0,0,0.79,'Russians',[]]]; _c = _c + ['RU_Soldier_GL']; _i = _i + [['','',160,5,-1,0,0,0.8,'Russians',[]]]; _c = _c + ['RU_Soldier_Marksman']; _i = _i + [['','',290,5,-1,1,0,0.82,'Russians',[]]]; _c = _c + ['RU_Soldier_Spotter']; _i = _i + [['','',295,5,-1,2,0,0.84,'Russians',[]]]; _c = _c + ['RU_Soldier_Sniper']; _i = _i + [['','',300,5,-1,2,0,0.84,'Russians',[]]]; _c = _c + ['RU_Soldier_SniperH']; _i = _i + [['','',330,5,-1,3,0,0.86,'Russians',[]]]; _c = _c + ['RU_Soldier_Medic']; _i = _i + [['','',190,4,-1,0,0,0.79,'Russians',[]]]; _c = _c + ['RU_Soldier_Crew']; _i = _i + [['','',120,4,-1,0,0,0.76,'Russians',[]]]; _c = _c + ['RU_Soldier_Pilot']; _i = _i + [['','',120,4,-1,0,0,0.77,'Russians',[]]]; _c = _c + ['RU_Soldier_TL']; _i = _i + [['','',240,5,-1,1,0,0.9,'Russians',[]]]; _c = _c + ['RU_Soldier_SL']; _i = _i + [['','',220,5,-1,2,0,0.89,'Russians',[]]]; /* Light Vehicles */ _c = _c + ['UAZ_RU']; _i = _i + [['','',260,15,-2,0,1,0,'Russians',[]]]; _c = _c + ['PBX']; _i = _i + [['','',225,15,-2,0,1,0,'Russians',[]]]; _c = _c + ['UAZ_AGS30_RU']; _i = _i + [['','',585,18,-2,1,1,0,'Russians',[]]]; _c = _c + ['Kamaz']; _i = _i + [['','',300,15,-2,0,1,0,'Russians',[]]]; _c = _c + ['WarfareSalvageTruck_RU']; _i = _i + [['','',450,18,-2,0,1,0,'Russians',[]]]; _c = _c + ['KamazRepair']; _i = _i + [['','',525,21,-2,2,1,0,'Russians',[]]]; _c = _c + ['WarfareReammoTruck_RU']; _i = _i + [['','',550,21,-2,1,1,0,'Russians',[]]]; _c = _c + ['KamazRefuel']; _i = _i + [['','',500,21,-2,1,1,0,'Russians',[]]]; _c = _c + ['WarfareSupplyTruck_RU']; _i = _i + [['','',550,21,-2,0,1,0,'Russians',[]]]; _c = _c + ['GAZ_Vodnik_MedEvac']; _i = _i + [['','',525,25,-2,2,1,0,'Russians',[]]]; _c = _c + ['GAZ_Vodnik']; _i = _i + [['','',1200,22,-2,1,1,0,'Russians',[]]]; _c = _c + ['GAZ_Vodnik_HMG']; _i = _i + [['','',1450,24,[false,true,2,0],2,1,0,'Russians',[[0]]]]; _c = _c + ['BTR90']; _i = _i + [['','',3250,25,-2,3,1,0,'Russians',[]]]; _c = _c + ['GRAD_RU']; _i = _i + [['','',4200,25,-2,3,1,0,'Russians',[]]]; /* Heavy Vehicles */ _c = _c + ['BMP3']; _i = _i + [['','',3400,35,-2,if (WF_A2_Vanilla) then {0} else {2},2,0,'Russians',[]]]; _c = _c + ['T72_RU']; _i = _i + [['','',4900,40,-2,if (WF_A2_Vanilla) then {1} else {2},2,0,'Russians',[]]]; _c = _c + ['T90']; _i = _i + [['','',6250,40,-2,if (WF_A2_Vanilla) then {2} else {3},2,0,'Russians',[]]]; _c = _c + ['2S6M_Tunguska']; _i = _i + [['','',9800,35,-2,3,2,0,'Russians',[]]]; /* Air Vehicles */ _c = _c + ['Mi17_medevac_RU']; _i = _i + [['','',18000,35,-2,0,3,0,'Russians',[]]]; _c = _c + ['Mi17_rockets_RU']; _i = _i + [['','',70000,45,-2,1,3,0,'Russians',[]]]; _c = _c + ['Mi24_V']; _i = _i + [['','',60000,50,-2,2,3,0,'Russians',[]]]; _c = _c + ['Mi24_P']; _i = _i + [['','',64000,52,-2,2,3,0,'Russians',[]]]; _c = _c + ['Su34']; _i = _i + [['','',110000,55,-2,3,3,0,'Russians',[]]]; _c = _c + ['Su39']; _i = _i + [['','',90000,55,-2,3,3,0,'Russians',[]]]; _c = _c + ['Ka52']; _i = _i + [['','',if ((missionNamespace getVariable "WFBE_C_UNITS_BALANCING") > 0) then {85000} else {100000},55,-2,if ((missionNamespace getVariable "WFBE_C_UNITS_BALANCING") > 0) then {2} else {3},3,0,'Russians',[]]]; _c = _c + ['Ka52Black']; _i = _i + [['','',if ((missionNamespace getVariable "WFBE_C_UNITS_BALANCING") > 0) then {85000} else {100000},55,-2,if ((missionNamespace getVariable "WFBE_C_UNITS_BALANCING") > 0) then {2} else {3},3,0,'Russians',[]]]; /* Special */ _c = _c + ['Pchela1T']; _i = _i + [['','',9000,35,-2,1,3,0,'Russians',[]]]; /* Static Defenses */ _c = _c + ['RU_WarfareBMGNest_PK']; _i = _i + [['','',300,0,1,0,'Defense',0,'Russians',[]]]; _c = _c + ['KORD']; _i = _i + [['KORD','',200,0,1,0,'Defense',0,'Russians',[]]]; _c = _c + ['KORD_high']; _i = _i + [['KORD Minitripod','',225,0,1,0,'Defense',0,'Russians',[]]]; _c = _c + ['SearchLight_RUS']; _i = _i + [['','',125,0,1,0,'Defense',0,'Russians',[]]]; _c = _c + ['AGS_RU']; _i = _i + [['','',650,0,1,0,'Defense',0,'Russians',[]]]; _c = _c + ['Metis']; _i = _i + [['Metis-M 9K115-2','',725,0,1,0,'Defense',0,'Russians',[]]]; _c = _c + ['Igla_AA_pod_East']; _i = _i + [['Igla AA POD launcher','',815,0,1,0,'Defense',0,'Russians',[]]]; _c = _c + ['2b14_82mm']; _i = _i + [['Podnos 2B14','',1025,0,1,0,'Defense',0,'Russians',[]]]; _c = _c + ['D30_RU']; _i = _i + [['','',2300,0,1,0,'Defense',0,'Russians',[]]]; /* Defense Structures */ _c = _c + ['Land_CamoNet_EAST']; _i = _i + [['','',35,0,0,0,'Strategic',0,'Russians',[]]]; _c = _c + ['Land_CamoNetVar_EAST']; _i = _i + [['','',45,0,0,0,'Strategic',0,'Russians',[]]]; _c = _c + ['Land_CamoNetB_EAST']; _i = _i + [['','',55,0,0,0,'Strategic',0,'Russians',[]]]; _c = _c + ['RUOrdnanceBox']; _i = _i + [['','',850,0,0,0,'Ammo',0,'Russians',[]]]; _c = _c + ['RUVehicleBox']; _i = _i + [['','',1200,0,0,0,'Ammo',0,'Russians',[]]]; _c = _c + ['RUBasicAmmunitionBox']; _i = _i + [['','',1950,0,0,0,'Ammo',0,'Russians',[]]]; _c = _c + ['RUBasicWeaponsBox']; _i = _i + [['','',2975,0,0,0,'Ammo',0,'Russians',[]]]; _c = _c + ['RULaunchersBox']; _i = _i + [['','',6250,0,0,0,'Ammo',0,'Russians',[]]]; _c = _c + ['RUSpecialWeaponsBox']; _i = _i + [['','',7200,0,0,0,'Ammo',0,'Russians',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_RU: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_RU: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_RU: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* Spetsnaz Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['RUS_Soldier1']; _i = _i + [['','',250,6,-1,2,0,0.98,'Russians Spetsnaz',[]]]; _c = _c + ['RUS_Soldier2']; _i = _i + [['','',260,6,-1,3,0,0.98,'Russians Spetsnaz',[]]]; _c = _c + ['RUS_Soldier_GL']; _i = _i + [['','',270,6,-1,3,0,0.99,'Russians Spetsnaz',[]]]; _c = _c + ['RUS_Soldier_Marksman']; _i = _i + [['','',290,6,-1,3,0,0.99,'Russians Spetsnaz',[]]]; _c = _c + ['RUS_Soldier3']; _i = _i + [['','',295,6,-1,3,0,0.98,'Russians Spetsnaz',[]]]; _c = _c + ['RUS_Soldier_TL']; _i = _i + [['','',300,6,-1,3,0,1.0,'Russians Spetsnaz',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_Spetsnaz: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_Spetsnaz: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_Spetsnaz: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* TKA Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['TK_Soldier_EP1']; _i = _i + [['','',150,4,-1,0,0,0.77,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_B_EP1']; _i = _i + [['','',125,4,-1,0,0,0.77,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_TWS_EP1']; _i = _i + [['','',205,5,-1,0,0,0.82,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_Engineer_EP1']; _i = _i + [['','',155,5,-1,0,0,0.78,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_LAT_EP1']; _i = _i + [['','',225,5,-1,0,0,0.78,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_AT_EP1']; _i = _i + [['','',310,5,-1,1,0,0.8,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_AAT_EP1']; _i = _i + [['','',270,5,-1,1,0,0.8,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_HAT_EP1']; _i = _i + [['','',620,7,-1,3,0,0.83,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_AA_EP1']; _i = _i + [['','',425,6,-1,1,0,0.82,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_AR_EP1']; _i = _i + [['','',210,5,-1,1,0,0.79,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_AMG_EP1']; _i = _i + [['','',205,5,-1,0,0,0.8,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_MG_EP1']; _i = _i + [['','',220,5,-1,0,0,0.8,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_GL_EP1']; _i = _i + [['','',160,5,-1,0,0,0.78,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_Sniper_EP1']; _i = _i + [['','',280,5,-1,1,0,0.88,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_SniperH_EP1']; _i = _i + [['','',320,5,-1,3,0,0.88,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_Spotter_EP1']; _i = _i + [['','',290,5,-1,1,0,0.82,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_Medic_EP1']; _i = _i + [['','',190,4,-1,0,0,0.81,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_Crew_EP1']; _i = _i + [['','',120,4,-1,0,0,0.76,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_Pilot_EP1']; _i = _i + [['','',120,4,-1,0,0,0.77,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_Officer_EP1']; _i = _i + [['','',240,5,-1,1,0,0.85,'Takistani Army',[]]]; _c = _c + ['TK_Soldier_SL_EP1']; _i = _i + [['','',220,5,-1,2,0,0.86,'Takistani Army',[]]]; /* Light Vehicles */ _c = _c + ['TT650_TK_EP1']; _i = _i + [['','',150,15,-2,0,1,0,'Takistani Army',[]]]; _c = _c + ['UAZ_Unarmed_TK_EP1']; _i = _i + [['','',260,15,-2,0,1,0,'Takistani Army',[]]]; _c = _c + ['SUV_TK_EP1']; _i = _i + [['','',290,15,-2,0,1,0,'Takistani Army',[]]]; _c = _c + ['UAZ_MG_TK_EP1']; _i = _i + [['','',460,15,-2,0,1,0,'Takistani Army',[]]]; _c = _c + ['UAZ_AGS30_TK_EP1']; _i = _i + [['','',585,15,-2,1,1,0,'Takistani Army',[]]]; _c = _c + ['LandRover_MG_TK_EP1']; _i = _i + [['','',550,17,-2,0,1,0,'Takistani Army',[]]]; _c = _c + ['LandRover_SPG9_TK_EP1']; _i = _i + [['','',750,17,-2,2,1,0,'Takistani Army',[]]]; _c = _c + ['V3S_TK_EP1']; _i = _i + [['','',275,20,-2,0,1,0,'Takistani Army',[]]]; _c = _c + ['V3S_Open_TK_EP1']; _i = _i + [['','',250,20,-2,0,1,0,'Takistani Army',[]]]; _c = _c + ['UralRepair_TK_EP1']; _i = _i + [['','',425,17,-2,2,1,0,'Takistani Army',[]]]; _c = _c + ['UralSalvage_TK_EP1']; _i = _i + [['','',450,17,-2,1,1,0,'Takistani Army',[]]]; _c = _c + ['UralReammo_TK_EP1']; _i = _i + [['','',450,18,-2,1,1,0,'Takistani Army',[]]]; _c = _c + ['UralRefuel_TK_EP1']; _i = _i + [['','',400,19,-2,1,1,0,'Takistani Army',[]]]; _c = _c + ['UralSupply_TK_EP1']; _i = _i + [['','',450,21,-2,0,1,0,'Takistani Army',[]]]; _c = _c + ['M113Ambul_TK_EP1']; _i = _i + [['','',750,25,-2,1,1,0,'Takistani Army',[]]]; _c = _c + ['BRDM2_TK_EP1']; _i = _i + [['','',1100,22,-2,1,1,0,'Takistani Army',[]]]; _c = _c + ['BRDM2_ATGM_TK_EP1']; _i = _i + [['','',1650,22,-2,2,1,0,'Takistani Army',[]]]; _c = _c + ['BTR60_TK_EP1']; _i = _i + [['','',1425,25,-2,2,1,0,'Takistani Army',[]]]; _c = _c + ['Ural_ZU23_TK_EP1']; _i = _i + [['','',1750,25,-2,2,1,0,'Takistani Army',[]]]; _c = _c + ['GRAD_TK_EP1']; _i = _i + [['','',4200,25,-2,3,1,0,'Takistani Army',[]]]; /* Heavy Vehicles */ _c = _c + ['M113_TK_EP1']; _i = _i + [['','',1100,22,-2,0,2,0,'Takistani Army',[]]]; _c = _c + ['BMP2_TK_EP1']; _i = _i + [['','',2600,25,-2,if (WF_A2_Arrowhead) then {0} else {1},2,0,'Takistani Army',[]]]; _c = _c + ['ZSU_TK_EP1']; _i = _i + [['','',3400,25,-2,1,2,0,'Takistani Army',[]]]; _c = _c + ['T34_TK_EP1']; _i = _i + [['','',3900,25,-2,0,2,0,'Takistani Army',[]]]; _c = _c + ['T55_TK_EP1']; _i = _i + [['','',4500,27,-2,1,2,0,'Takistani Army',[]]]; _c = _c + ['T72_TK_EP1']; _i = _i + [['','',4900,30,-2,2,2,0,'Takistani Army',[]]]; /* Air Vehicles */ _c = _c + ['An2_TK_EP1']; _i = _i + [['','',15000,35,-2,1,3,0,'Takistani Army',[]]]; _c = _c + ['Mi17_TK_EP1']; _i = _i + [['','',15000,33,-2,0,3,0,'Takistani Army',[]]]; _c = _c + ['UH1H_TK_EP1']; _i = _i + [['','',12500,30,-2,0,3,0,'Takistani Army',[]]]; _c = _c + ['Mi24_D_TK_EP1']; _i = _i + [['','',65000,40,-2,1,3,0,'Takistani Army',[]]]; _c = _c + ['L39_TK_EP1']; _i = _i + [['','',70000,50,-2,2,3,0,'Takistani Army',[]]]; _c = _c + ['Su25_TK_EP1']; _i = _i + [['','',90000,55,-2,3,3,0,'Takistani Army',[]]]; /* Static Defenses */ _c = _c + ['WarfareBMGNest_PK_TK_EP1']; _i = _i + [['','',300,0,1,0,'Defense',0,'Takistani Army',[]]]; _c = _c + ['KORD_TK_EP1']; _i = _i + [['KORD Minitripod','',200,0,1,0,'Defense',0,'Takistani Army',[]]]; _c = _c + ['KORD_high_TK_EP1']; _i = _i + [['KORD','',225,0,1,0,'Defense',0,'Takistani Army',[]]]; _c = _c + ['SearchLight_TK_EP1']; _i = _i + [['','',125,0,1,0,'Defense',0,'Takistani Army',[]]]; _c = _c + ['AGS_TK_EP1']; _i = _i + [['','',650,0,1,0,'Defense',0,'Takistani Army',[]]]; _c = _c + ['SPG9_TK_INS_EP1']; _i = _i + [['','',475,0,1,0,'Defense',0,'Takistani Army',[]]]; _c = _c + ['Metis_TK_EP1']; _i = _i + [['Metis-M 9K115-2','',725,0,1,0,'Defense',0,'Takistani Army',[]]]; _c = _c + ['Igla_AA_pod_TK_EP1']; _i = _i + [['Igla AA POD launcher','',815,0,1,0,'Defense',0,'Takistani Army',[]]]; _c = _c + ['ZU23_TK_EP1']; _i = _i + [['','',945,0,1,0,'Defense',0,'Takistani Army',[]]]; _c = _c + ['2b14_82mm_TK_EP1']; _i = _i + [['Podnos 2B14','',1025,0,1,0,'Defense',0,'Takistani Army',[]]]; _c = _c + ['D30_TK_EP1']; _i = _i + [['','',2300,0,1,0,'Defense',0,'Takistani Army',[]]]; /* Defense Structures */ _c = _c + ['TK_WarfareBBarrier5x_EP1']; _i = _i + [['','',15,0,0,0,'Fortification',0,'Takistani Army',[]]]; _c = _c + ['TK_WarfareBBarrier10x_EP1']; _i = _i + [['','',25,0,0,0,'Fortification',0,'Takistani Army',[]]]; _c = _c + ['TK_WarfareBBarrier10xTall_EP1']; _i = _i + [['','',50,0,0,0,'Fortification',0,'Takistani Army',[]]]; _c = _c + ['Land_CamoNet_EAST_EP1']; _i = _i + [['','',35,0,0,0,'Strategic',0,'Takistani Army',[]]]; _c = _c + ['Land_CamoNetVar_EAST_EP1']; _i = _i + [['','',45,0,0,0,'Strategic',0,'Takistani Army',[]]]; _c = _c + ['Land_CamoNetB_EAST_EP1']; _i = _i + [['','',55,0,0,0,'Strategic',0,'Takistani Army',[]]]; _c = _c + ['TKOrdnanceBox_EP1']; _i = _i + [['','',850,0,0,0,'Ammo',0,'Takistani Army',[]]]; _c = _c + ['TKVehicleBox_EP1']; _i = _i + [['','',1200,0,0,0,'Ammo',0,'Takistani Army',[]]]; _c = _c + ['TKBasicAmmunitionBox_EP1']; _i = _i + [['','',1950,0,0,0,'Ammo',0,'Takistani Army',[]]]; _c = _c + ['TKBasicWeapons_EP1']; _i = _i + [['','',2975,0,0,0,'Ammo',0,'Takistani Army',[]]]; _c = _c + ['TKLaunchers_EP1']; _i = _i + [['','',6250,0,0,0,'Ammo',0,'Takistani Army',[]]]; _c = _c + ['TKSpecialWeapons_EP1']; _i = _i + [['','',7200,0,0,0,'Ammo',0,'Takistani Army',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_TKA: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_TKA: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_TKA: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* CIV Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['TK_CIV_Worker01_EP1']; _i = _i + [['','',375,4,-1,0,0,0.4,'Takistani Civilians',[]]]; _c = _c + ['TK_CIV_Worker02_EP1']; _i = _i + [['','',375,4,-1,0,0,0.4,'Takistani Civilians',[]]]; /* Light Vehicles */ _c = _c + ['Old_bike_TK_CIV_EP1']; _i = _i + [['','',50,8,-2,0,1,0,'Takistani Civilians',[]]]; _c = _c + ['Old_moto_TK_Civ_EP1']; _i = _i + [['','',100,12,-2,0,1,0,'Takistani Civilians',[]]]; _c = _c + ['TT650_TK_CIV_EP1']; _i = _i + [['','',110,15,-2,0,1,0,'Takistani Civilians',[]]]; _c = _c + ['Lada1_TK_CIV_EP1']; _i = _i + [['','',175,18,-2,0,1,0,'Takistani Civilians',[]]]; _c = _c + ['Lada2_TK_CIV_EP1']; _i = _i + [['','',175,18,-2,0,1,0,'Takistani Civilians',[]]]; _c = _c + ['Volha_1_TK_CIV_EP1']; _i = _i + [['','',200,21,-2,0,1,0,'Takistani Civilians',[]]]; _c = _c + ['Volha_2_TK_CIV_EP1']; _i = _i + [['','',200,21,-2,0,1,0,'Takistani Civilians',[]]]; _c = _c + ['VolhaLimo_TK_CIV_EP1']; _i = _i + [['','',200,22,-2,0,1,0,'Takistani Civilians',[]]]; _c = _c + ['LandRover_TK_CIV_EP1']; _i = _i + [['','',250,24,-2,0,1,0,'Takistani Civilians',[]]]; _c = _c + ['S1203_TK_CIV_EP1']; _i = _i + [['','',320,25,-2,0,1,0,'Takistani Civilians',[]]]; _c = _c + ['V3S_Open_TK_CIV_EP1']; _i = _i + [['','',380,25,-2,0,1,0,'Takistani Civilians',[]]]; _c = _c + ['Ural_TK_CIV_EP1']; _i = _i + [['','',390,25,-2,0,1,0,'Takistani Civilians',[]]]; _c = _c + ['Ikarus_TK_CIV_EP1']; _i = _i + [['','',420,25,-2,0,1,0,'Takistani Civilians',[]]]; /* Air Vehicles */ _c = _c + ['An2_1_TK_CIV_EP1']; _i = _i + [['','',10000,35,-2,1,3,0,'Takistani Civilians',[]]]; _c = _c + ['An2_2_TK_CIV_EP1']; _i = _i + [['','',10000,35,-2,1,3,0,'Takistani Civilians',[]]]; /* Defense Structures */ _c = _c + ['Land_HBarrier3']; _i = _i + [['','',20,0,0,0,'Fortification',0,'Takistani Civilians',[]]]; _c = _c + ['Land_HBarrier5']; _i = _i + [['','',30,0,0,0,'Fortification',0,'Takistani Civilians',[]]]; _c = _c + ['Land_HBarrier_large']; _i = _i + [['','',50,0,0,0,'Fortification',0,'Takistani Civilians',[]]]; _c = _c + ['Land_fort_bagfence_long']; _i = _i + [['','',10,0,0,0,'Fortification',0,'Takistani Civilians',[]]]; _c = _c + ['Land_fort_bagfence_corner']; _i = _i + [['','',8,0,0,0,'Fortification',0,'Takistani Civilians',[]]]; _c = _c + ['Land_fort_bagfence_round']; _i = _i + [['','',12,0,0,0,'Fortification',0,'Takistani Civilians',[]]]; _c = _c + ['Hhedgehog_concreteBig']; _i = _i + [['','',95,0,0,0,'Fortification',0,'Takistani Civilians',[]]]; _c = _c + ['Hedgehog_EP1']; _i = _i + [['','',5,0,0,0,'Fortification',0,'Takistani Civilians',[]]]; _c = _c + ['HeliH']; _i = _i + [['','',15,0,0,0,'Strategic',0,'Takistani Civilians',[]]]; _c = _c + ['MASH_EP1']; _i = _i + [['','',30,0,0,0,'Strategic',0,'Takistani Civilians',[]]]; _c = _c + ['Land_Campfire']; _i = _i + [['','',3,0,0,0,'Strategic',0,'Civilians',[]]]; _c = _c + ['Land_fort_rampart_EP1']; _i = _i + [['','',30,0,0,0,'Fortification',0,'Takistani Civilians',[]]]; _c = _c + ['Land_fort_artillery_nest_EP1']; _i = _i + [[localize 'STR_WF_ArtilleryNest','',65,0,0,0,'Fortification',0,'Takistani Civilians',[]]]; _c = _c + ['Land_fortified_nest_small_EP1']; _i = _i + [['','',40,0,0,0,'Fortification',0,'Takistani Civilians',[]]]; _c = _c + ['Sign_Danger']; _i = _i + [[localize 'STR_WF_Minefield','',1200,0,0,0,'Strategic',0,'Takistani Civilians',[]]]; _c = _c + ['Fort_RazorWire']; _i = _i + [['','',25,0,0,0,'Fortification',0,'Takistani Civilians',[]]]; _c = _c + ['Concrete_Wall_EP1']; _i = _i + [['','',20,0,0,0,'Fortification',0,'Takistani Civilians',[]]]; _c = _c + ['Land_Ind_IlluminantTower']; _i = _i + [['','',200,0,0,0,'Fortification',0,'Takistani Civilians',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_TKCIV: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_TKCIV: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_TKCIV: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* TK GUE Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['TK_GUE_Soldier_EP1']; _i = _i + [['','',110,4,-1,0,0,0.48,'Takistani Guerilla',[]]]; _c = _c + ['TK_GUE_Soldier_2_EP1']; _i = _i + [['','',120,4,-1,0,0,0.46,'Takistani Guerilla',[]]]; _c = _c + ['TK_GUE_Soldier_3_EP1']; _i = _i + [['','',110,4,-1,0,0,0.5,'Takistani Guerilla',[]]]; _c = _c + ['TK_GUE_Soldier_4_EP1']; _i = _i + [['','',100,5,-1,0,0,0.49,'Takistani Guerilla',[]]]; _c = _c + ['TK_GUE_Soldier_5_EP1']; _i = _i + [['','',100,5,-1,0,0,0.47,'Takistani Guerilla',[]]]; _c = _c + ['TK_GUE_Soldier_AT_EP1']; _i = _i + [['','',220,4,-1,1,0,0.52,'Takistani Guerilla',[]]]; _c = _c + ['TK_GUE_Soldier_AAT_EP1']; _i = _i + [['','',210,4,-1,2,0,0.51,'Takistani Guerilla',[]]]; _c = _c + ['TK_GUE_Soldier_AA_EP1']; _i = _i + [['','',270,4,-1,2,0,0.53,'Takistani Guerilla',[]]]; _c = _c + ['TK_GUE_Soldier_AR_EP1']; _i = _i + [['','',190,5,-1,1,0,0.52,'Takistani Guerilla',[]]]; _c = _c + ['TK_GUE_Soldier_MG_EP1']; _i = _i + [['','',200,6,-1,0,0,0.53,'Takistani Guerilla',[]]]; _c = _c + ['TK_GUE_Soldier_Sniper_EP1']; _i = _i + [['','',180,5,-1,1,0,0.56,'Takistani Guerilla',[]]]; _c = _c + ['TK_GUE_Bonesetter_EP1']; _i = _i + [['','',125,5,-1,0,0,0.49,'Takistani Guerilla',[]]]; _c = _c + ['TK_GUE_Soldier_HAT_EP1']; _i = _i + [['','',350,5,-1,3,0,0.58,'Takistani Guerilla',[]]]; _c = _c + ['TK_GUE_Soldier_TL_EP1']; _i = _i + [['','',200,5,-1,2,0,0.61,'Takistani Guerilla',[]]]; _c = _c + ['TK_GUE_Warlord_EP1']; _i = _i + [['','',210,5,-1,1,0,0.59,'Takistani Guerilla',[]]]; /* Light Vehicles */ _c = _c + ['V3S_TK_GUE_EP1']; _i = _i + [['','',175,15,-2,0,1,0,'Takistani Guerilla',[]]]; _c = _c + ['Pickup_PK_TK_GUE_EP1']; _i = _i + [['','',250,17,-2,0,1,0,'Takistani Guerilla',[]]]; _c = _c + ['Offroad_DSHKM_TK_GUE_EP1']; _i = _i + [['','',300,25,-2,1,1,0,'Takistani Guerilla',[]]]; _c = _c + ['Offroad_SPG9_TK_GUE_EP1']; _i = _i + [['','',380,20,-2,2,1,0,'Takistani Guerilla',[]]]; _c = _c + ['V3S_Repair_TK_GUE_EP1']; _i = _i + [['','',425,17,-2,2,1,0,'Takistani Guerilla',[]]]; _c = _c + ['V3S_Salvage_TK_GUE_EP1']; _i = _i + [['','',450,17,-2,1,1,0,'Takistani Guerilla',[]]]; _c = _c + ['V3S_Reammo_TK_GUE_EP1']; _i = _i + [['','',450,18,-2,1,1,0,'Takistani Guerilla',[]]]; _c = _c + ['V3S_Refuel_TK_GUE_EP1']; _i = _i + [['','',400,19,-2,1,1,0,'Takistani Guerilla',[]]]; _c = _c + ['V3S_Supply_TK_GUE_EP1']; _i = _i + [['','',450,21,-2,0,1,0,'Takistani Guerilla',[]]]; _c = _c + ['BRDM2_TK_GUE_EP1']; _i = _i + [['','',600,25,-2,1,1,0,'Takistani Guerilla',[]]]; _c = _c + ['BTR40_TK_GUE_EP1']; _i = _i + [['','',650,25,-2,0,1,0,'Takistani Guerilla',[]]]; _c = _c + ['BTR40_MG_TK_GUE_EP1']; _i = _i + [['','',800,25,-2,1,1,0,'Takistani Guerilla',[]]]; _c = _c + ['Ural_ZU23_TK_GUE_EP1']; _i = _i + [['','',950,25,-2,2,1,0,'Takistani Guerilla',[]]]; /* Heavy Vehicles */ _c = _c + ['T34_TK_GUE_EP1']; _i = _i + [['','',2400,30,-2,0,2,0,'Takistani Guerilla',[]]]; _c = _c + ['T55_TK_GUE_EP1']; _i = _i + [['','',2800,35,-2,1,2,0,'Takistani Guerilla',[]]]; /* Air Vehicles */ _c = _c + ['UH1H_TK_GUE_EP1']; _i = _i + [['','',12500,30,-2,0,3,0,'Takistani Guerilla',[]]]; /* Static Defenses */ _c = _c + ['SearchLight_TK_GUE_EP1']; _i = _i + [['','',125,0,1,0,'Defense',0,'Takistani Guerilla',[]]]; _c = _c + ['WarfareBMGNest_PK_TK_GUE_EP1']; _i = _i + [['','',300,0,1,0,'Defense',0,'Takistani Guerilla',[]]]; _c = _c + ['DSHkM_Mini_TriPod_TK_GUE_EP1']; _i = _i + [['','',200,0,1,0,'Defense',0,'Takistani Guerilla',[]]]; _c = _c + ['DSHKM_TK_GUE_EP1']; _i = _i + [['','',225,0,1,0,'Defense',0,'Takistani Guerilla',[]]]; _c = _c + ['AGS_TK_GUE_EP1']; _i = _i + [['','',650,0,1,0,'Defense',0,'Takistani Guerilla',[]]]; _c = _c + ['SPG9_TK_GUE_EP1']; _i = _i + [['','',475,0,1,0,'Defense',0,'Takistani Guerilla',[]]]; _c = _c + ['ZU23_TK_GUE_EP1']; _i = _i + [['','',600,0,1,0,'Defense',0,'Takistani Guerilla',[]]]; _c = _c + ['2b14_82mm_TK_GUE_EP1']; _i = _i + [['Podnos 2B14','',1025,0,1,0,'Defense',0,'Takistani Guerilla',[]]]; _c = _c + ['D30_TK_GUE_EP1']; _i = _i + [['','',2300,0,1,0,'Defense',0,'Takistani Guerilla',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_TKGUE: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_TKGUE: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_TKGUE: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* TK SF Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['TK_Special_Forces_EP1']; _i = _i + [['','',280,6,-1,2,0,0.82,'Takistani Special Forces',[]]]; _c = _c + ['TK_Special_Forces_TL_EP1']; _i = _i + [['','',300,6,-1,2,0,0.85,'Takistani Special Forces',[]]]; _c = _c + ['TK_Special_Forces_MG_EP1']; _i = _i + [['','',305,6,-1,2,0,0.81,'Takistani Special Forces',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { _get = missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_TKSF: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_TKSF: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_TKSF: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* US Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['US_Soldier_Light_EP1']; _i = _i + [['','',130,4,-1,0,0,0.86,'US',[]]]; _c = _c + ['US_Soldier_EP1']; _i = _i + [['','',150,4,-1,0,0,0.86,'US',[]]]; _c = _c + ['US_Soldier_B_EP1']; _i = _i + [['','',155,4,-1,0,0,0.86,'US',[]]]; _c = _c + ['US_Soldier_LAT_EP1']; _i = _i + [['','',225,5,-1,0,0,0.88,'US',[]]]; _c = _c + ['US_Soldier_AT_EP1']; _i = _i + [['','',350,5,-1,2,0,0.9,'US',[]]]; _c = _c + ['US_Soldier_HAT_EP1']; _i = _i + [['','',800,6,-1,3,0,0.92,'US',[]]]; _c = _c + ['US_Soldier_AA_EP1']; _i = _i + [['','',400,6,-1,2,0,0.91,'US',[]]]; _c = _c + ['US_Soldier_AR_EP1']; _i = _i + [['','',210,5,-1,1,0,0.88,'US',[]]]; _c = _c + ['US_Soldier_MG_EP1']; _i = _i + [['','',220,5,-1,0,0,0.89,'US',[]]]; _c = _c + ['US_Soldier_GL_EP1']; _i = _i + [['','',160,5,-1,0,0,0.87,'US',[]]]; _c = _c + ['US_Soldier_Sniper_EP1']; _i = _i + [['','',320,6,-1,2,0,0.92,'US',[]]]; _c = _c + ['US_Soldier_SniperH_EP1']; _i = _i + [['','',350,6,-1,3,0,0.93,'US',[]]]; _c = _c + ['US_Soldier_Sniper_NV_EP1']; _i = _i + [['','',370,6,-1,3,0,0.94,'US',[]]]; _c = _c + ['US_Soldier_Marksman_EP1']; _i = _i + [['','',330,6,-1,2,0,0.91,'US',[]]]; _c = _c + ['US_Soldier_Medic_EP1']; _i = _i + [['','',190,4,-1,0,0,0.89,'US',[]]]; _c = _c + ['US_Soldier_Engineer_EP1']; _i = _i + [['','',225,5,-1,0,0,0.87,'US',[]]]; _c = _c + ['US_Soldier_AMG_EP1']; _i = _i + [['','',185,6,-1,2,0,0.87,'US',[]]]; _c = _c + ['US_Soldier_AAR_EP1']; _i = _i + [['','',185,6,-1,3,0,0.87,'US',[]]]; _c = _c + ['US_Soldier_AHAT_EP1']; _i = _i + [['','',185,6,-1,3,0,0.89,'US',[]]]; _c = _c + ['US_Soldier_AAT_EP1']; _i = _i + [['','',320,6,-1,3,0,0.88,'US',[]]]; _c = _c + ['US_Soldier_Spotter_EP1']; _i = _i + [['','',320,6,-1,3,0,0.91,'US',[]]]; _c = _c + ['US_Soldier_Crew_EP1']; _i = _i + [['','',120,4,-1,0,0,0.86,'US',[]]]; _c = _c + ['US_Soldier_Pilot_EP1']; _i = _i + [['','',120,4,-1,0,0,0.87,'US',[]]]; _c = _c + ['US_Soldier_TL_EP1']; _i = _i + [['','',240,5,-1,1,0,0.94,'US',[]]]; _c = _c + ['US_Soldier_SL_EP1']; _i = _i + [['','',220,5,-1,2,0,0.93,'US',[]]]; _c = _c + ['US_Soldier_Officer_EP1']; _i = _i + [['','',250,5,-1,1,0,0.92,'US',[]]]; /* Light Vehicles */ _c = _c + ['M1030_US_DES_EP1']; _i = _i + [['','',150,12,-2,0,1,0,'US',[]]]; _c = _c + ['ATV_US_EP1']; _i = _i + [['','',175,14,-2,0,1,0,'US',[]]]; _c = _c + ['HMMWV_DES_EP1']; _i = _i + [['','',300,15,-2,0,1,0,'US',[]]]; _c = _c + ['HMMWV_M1035_DES_EP1']; _i = _i + [['','',350,15,-2,0,1,0,'US',[]]]; _c = _c + ['HMMWV_Terminal_EP1']; _i = _i + [['','',400,15,-2,0,1,0,'US',[]]]; _c = _c + ['HMMWV_MK19_DES_EP1']; _i = _i + [['','',900,18,-2,1,1,0,'US',[]]]; _c = _c + ['HMMWV_M998A2_SOV_DES_EP1']; _i = _i + [['','',1050,20,-2,1,1,0,'US',[]]]; _c = _c + ['HMMWV_M1151_M2_DES_EP1']; _i = _i + [['','',850,20,-2,0,1,0,'US',[]]]; _c = _c + ['HMMWV_M998_crows_M2_DES_EP1']; _i = _i + [['','',1250,22,-2,1,1,0,'US',[]]]; _c = _c + ['HMMWV_M998_crows_MK19_DES_EP1']; _i = _i + [['','',1375,22,-2,1,1,0,'US',[]]]; _c = _c + ['HMMWV_TOW_DES_EP1']; _i = _i + [['','',1450,20,-2,2,1,0,'US',[]]]; _c = _c + ['HMMWV_Avenger_DES_EP1']; _i = _i + [['','',1750,25,-2,3,1,0,'US',[]]]; _c = _c + ['HMMWV_Ambulance_DES_EP1']; _i = _i + [['','',725,22,-2,1,1,0,'US',[]]]; _c = _c + ['MTVR_DES_EP1']; _i = _i + [['','',400,20,-2,0,1,0,'US',[]]]; _c = _c + ['MtvrSalvage_DES_EP1']; _i = _i + [['','',450,21,-2,0,1,0,'US',[]]]; _c = _c + ['MtvrRepair_DES_EP1']; _i = _i + [['','',525,22,-2,2,1,0,'US',[]]]; _c = _c + ['MtvrReammo_DES_EP1']; _i = _i + [['','',550,22,-2,1,1,0,'US',[]]]; _c = _c + ['MtvrRefuel_DES_EP1']; _i = _i + [['','',500,22,-2,1,1,0,'US',[]]]; _c = _c + ['MtvrSupply_DES_EP1']; _i = _i + [['','',550,25,-2,0,1,0,'US',[]]]; _c = _c + ['M1126_ICV_M2_EP1']; _i = _i + [['','',1650,25,[false,true,2,0],1,1,0,'US',[]]]; _c = _c + ['M1126_ICV_mk19_EP1']; _i = _i + [['','',1950,25,[false,true,2,0],1,1,0,'US',[]]]; _c = _c + ['M1129_MC_EP1']; _i = _i + [['','',2300,25,-2,3,1,0,'US',[]]]; _c = _c + ['M1135_ATGMV_EP1']; _i = _i + [['','',1850,25,-2,2,1,0,'US',[]]]; _c = _c + ['M1128_MGS_EP1']; _i = _i + [['','',2450,25,-2,3,1,0,'US',[]]]; _c = _c + ['M1133_MEV_EP1']; _i = _i + [['','',1950,25,-2,2,1,0,'US',[]]]; /* Heavy Vehicles */ _c = _c + ['M2A2_EP1']; _i = _i + [['','',4450,30,-2,0,2,0,'US',[]]]; _c = _c + ['M2A3_EP1']; _i = _i + [['','',4950,32,-2,1,2,0,'US',[]]]; _c = _c + ['M1A1_US_DES_EP1']; _i = _i + [['','',5650,40,-2,2,2,0,'US',[]]]; _c = _c + ['MLRS_DES_EP1']; _i = _i + [['','',5800,40,-2,3,2,0,'US',[]]]; _c = _c + ['M1A2_US_TUSK_MG_EP1']; _i = _i + [['','',6950,40,-2,3,2,0,'US',[]]]; _c = _c + ['M6_EP1']; _i = _i + [['','',8200,35,-2,3,2,0,'US',[]]]; /* Air Vehicles */ _c = _c + ['MH6J_EP1']; _i = _i + [['','',12500,35,-2,0,3,0,'US',[]]]; _c = _c + ['UH60M_EP1']; _i = _i + [['','',15000,35,-2,0,3,0,'US',[]]]; _c = _c + ['UH60M_MEV_EP1']; _i = _i + [['','',18000,35,-2,0,3,0,'US',[]]]; _c = _c + ['CH_47F_EP1']; _i = _i + [['','',20000,40,-2,0,3,0,'US',[]]]; _c = _c + ['C130J_US_EP1']; _i = _i + [['','',26500,55,-2,1,3,0,'US',[]]]; _c = _c + ['AH6X_EP1']; _i = _i + [['','',35000,50,-2,1,3,0,'US',[]]]; _c = _c + ['AH6J_EP1']; _i = _i + [['','',30000,50,-2,1,3,0,'US',[]]]; _c = _c + ['AH64D_EP1']; _i = _i + [['','',80000,60,-2,2,3,0,'US',[]]]; _c = _c + ['A10_US_EP1']; _i = _i + [['','',100000,65,-2,3,3,0,'US',[]]]; /* Special */ _c = _c + ['MQ9PredatorB_US_EP1']; _i = _i + [['','',30000,35,-2,2,3,0,'US',[]]]; /* Static Defenses */ _c = _c + ['WarfareBMGNest_M240_US_EP1']; _i = _i + [['','',300,0,1,0,'Defense',0,'US',[]]]; _c = _c + ['M2HD_mini_TriPod_US_EP1']; _i = _i + [['','',200,0,1,0,'Defense',0,'US',[]]]; _c = _c + ['M2StaticMG_US_EP1']; _i = _i + [['','',225,0,1,0,'Defense',0,'US',[]]]; _c = _c + ['SearchLight_US_EP1']; _i = _i + [['','',125,0,1,0,'Defense',0,'US',[]]]; _c = _c + ['MK19_TriPod_US_EP1']; _i = _i + [['','',700,0,1,0,'Defense',0,'US',[]]]; _c = _c + ['TOW_TriPod_US_EP1']; _i = _i + [['','',800,0,1,0,'Defense',0,'US',[]]]; _c = _c + ['Stinger_Pod_US_EP1']; _i = _i + [['','',850,0,1,0,'Defense',0,'US',[]]]; _c = _c + ['M252_US_EP1']; _i = _i + [['','',1150,0,1,0,'Defense',0,'US',[]]]; _c = _c + ['M119_US_EP1']; _i = _i + [['','',2250,0,1,0,'Defense',0,'US',[]]]; /* Defense Structures */ _c = _c + ['US_WarfareBBarrier5x_EP1']; _i = _i + [['','',15,0,0,0,'Fortification',0,'US',[]]]; _c = _c + ['US_WarfareBBarrier10x_EP1']; _i = _i + [['','',25,0,0,0,'Fortification',0,'US',[]]]; _c = _c + ['US_WarfareBBarrier10xTall_EP1']; _i = _i + [['','',50,0,0,0,'Fortification',0,'US',[]]]; _c = _c + ['Land_CamoNet_NATO_EP1']; _i = _i + [['','',35,0,0,0,'Strategic',0,'US',[]]]; _c = _c + ['Land_CamoNetVar_NATO_EP1']; _i = _i + [['','',45,0,0,0,'Strategic',0,'US',[]]]; _c = _c + ['Land_CamoNetB_NATO_EP1']; _i = _i + [['','',55,0,0,0,'Strategic',0,'US',[]]]; _c = _c + ['USOrdnanceBox_EP1']; _i = _i + [['','',850,0,0,0,'Ammo',0,'US',[]]]; _c = _c + ['USVehicleBox_EP1']; _i = _i + [['','',1200,0,0,0,'Ammo',0,'US',[]]]; _c = _c + ['USBasicAmmunitionBox_EP1']; _i = _i + [['','',1950,0,0,0,'Ammo',0,'US',[]]]; _c = _c + ['USBasicWeapons_EP1']; _i = _i + [['','',2975,0,0,0,'Ammo',0,'US',[]]]; _c = _c + ['USLaunchers_EP1']; _i = _i + [['','',6250,0,0,0,'Ammo',0,'US',[]]]; _c = _c + ['USSpecialWeapons_EP1']; _i = _i + [['','',7200,0,0,0,'Ammo',0,'US',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_US: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_US: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_US: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];/* USMC Configuration */ Private ['_c','_get','_i','_p','_z']; _c = []; _i = []; /* Infantry */ _c = _c + ['USMC_Soldier']; _i = _i + [['','',150,4,-1,0,0,0.83,'USMC',[]]]; _c = _c + ['USMC_Soldier2']; _i = _i + [['','',125,4,-1,0,0,0.79,'USMC',[]]]; _c = _c + ['USMC_Soldier_LAT']; _i = _i + [['','',225,5,-1,0,0,0.84,'USMC',[]]]; _c = _c + ['USMC_Soldier_AT']; _i = _i + [['','',350,5,-1,2,0,0.86,'USMC',[]]]; _c = _c + ['USMC_Soldier_HAT']; _i = _i + [['','',800,6,-1,3,0,0.88,'USMC',[]]]; _c = _c + ['USMC_Soldier_AA']; _i = _i + [['','',400,6,-1,2,0,0.87,'USMC',[]]]; _c = _c + ['USMC_Soldier_AR']; _i = _i + [['','',210,5,-1,1,0,0.84,'USMC',[]]]; _c = _c + ['USMC_Soldier_MG']; _i = _i + [['','',220,5,-1,0,0,0.85,'USMC',[]]]; _c = _c + ['USMC_Soldier_GL']; _i = _i + [['','',160,5,-1,0,0,0.83,'USMC',[]]]; _c = _c + ['USMC_SoldierS_Sniper']; _i = _i + [['','',320,6,-1,2,0,0.88,'USMC',[]]]; _c = _c + ['USMC_SoldierM_Marksman']; _i = _i + [['','',350,6,-1,2,0,0.9,'USMC',[]]]; _c = _c + ['USMC_SoldierS_SniperH']; _i = _i + [['','',400,6,-1,3,0,0.92,'USMC',[]]]; _c = _c + ['USMC_Soldier_Medic']; _i = _i + [['','',190,4,-1,0,0,0.85,'USMC',[]]]; _c = _c + ['USMC_SoldierS_Engineer']; _i = _i + [['','',225,5,-1,0,0,0.83,'USMC',[]]]; _c = _c + ['USMC_SoldierS']; _i = _i + [['','',300,7,-1,1,0,0.88,'USMC',[]]]; _c = _c + ['USMC_SoldierS_Spotter']; _i = _i + [['','',320,6,-1,3,0,0.89,'USMC',[]]]; _c = _c + ['USMC_Soldier_Crew']; _i = _i + [['','',120,4,-1,0,0,0.81,'USMC',[]]]; _c = _c + ['USMC_Soldier_Pilot']; _i = _i + [['','',120,4,-1,0,0,0.8,'USMC',[]]]; _c = _c + ['USMC_Soldier_TL']; _i = _i + [['','',240,5,-1,1,0,0.83,'USMC',[]]]; _c = _c + ['USMC_Soldier_SL']; _i = _i + [['','',220,5,-1,2,0,0.92,'USMC',[]]]; /* Light Vehicles */ _c = _c + ['MMT_USMC']; _i = _i + [['','',50,10,-2,0,1,0,'USMC',[]]]; _c = _c + ['M1030']; _i = _i + [['','',150,12,-2,0,1,0,'USMC',[]]]; _c = _c + ['HMMWV']; _i = _i + [['','',300,15,-2,0,1,0,'USMC',[]]]; _c = _c + ['Zodiac']; _i = _i + [['','',225,17,-2,0,1,0,'USMC',[]]]; _c = _c + ['HMMWV_M2']; _i = _i + [['','',700,18,-2,0,1,0,'USMC',[]]]; _c = _c + ['HMMWV_Armored']; _i = _i + [['','',750,20,-2,1,1,0,'USMC',[]]]; _c = _c + ['HMMWV_MK19']; _i = _i + [['','',900,22,-2,1,1,0,'USMC',[]]]; _c = _c + ['HMMWV_TOW']; _i = _i + [['','',1450,20,-2,2,1,0,'USMC',[]]]; _c = _c + ['HMMWV_Avenger']; _i = _i + [['','',1750,25,-2,3,1,0,'USMC',[]]]; _c = _c + ['HMMWV_Ambulance']; _i = _i + [['','',725,22,-2,1,1,0,'USMC',[]]]; _c = _c + ['MTVR']; _i = _i + [['','',400,20,-2,0,1,0,'USMC',[]]]; _c = _c + ['WarfareSalvageTruck_USMC']; _i = _i + [['','',450,21,-2,0,1,0,'USMC',[]]]; _c = _c + ['MtvrRepair']; _i = _i + [['','',525,22,-2,0,1,0,'USMC',[]]]; _c = _c + ['WarfareReammoTruck_USMC']; _i = _i + [['','',550,22,-2,1,1,0,'USMC',[]]]; _c = _c + ['MtvrRefuel']; _i = _i + [['','',500,22,-2,1,1,0,'USMC',[]]]; _c = _c + ['WarfareSupplyTruck_USMC']; _i = _i + [['','',550,25,-2,0,1,0,'USMC',[]]]; _c = _c + ['RHIB']; _i = _i + [['','',850,25,-2,1,1,0,'USMC',[]]]; _c = _c + ['RHIB2Turret']; _i = _i + [['','',1250,27,-2,2,1,0,'USMC',[]]]; _c = _c + ['LAV25']; _i = _i + [['','',1650,27,-2,3,1,0,'USMC',[]]]; /* Heavy Vehicles */ _c = _c + ['AAV']; _i = _i + [['','',2550,25,-2,0,2,0,'USMC',[]]]; _c = _c + ['M1A1']; _i = _i + [['','',5650,40,-2,if (WF_A2_Vanilla) then {1} else {2},2,0,'USMC',[]]]; _c = _c + ['MLRS']; _i = _i + [['','',5800,40,-2,3,2,0,'USMC',[]]]; _c = _c + ['M1A2_TUSK_MG']; _i = _i + [['','',6950,40,-2,if (WF_A2_Vanilla) then {2} else {3},2,0,'USMC',[]]]; /* Air Vehicles */ _c = _c + ['MH60S']; _i = _i + [['','',15000,35,-2,0,3,0,'USMC',[]]]; _c = _c + ['UH1Y']; _i = _i + [['','',25000,40,-2,1,3,0,'USMC',[]]]; _c = _c + ['MV22']; _i = _i + [['','',25000,43,-2,1,3,0,'USMC',[]]]; _c = _c + ['C130J']; _i = _i + [['','',26500,52,-2,1,3,0,'USMC',[]]]; _c = _c + ['AH1Z']; _i = _i + [['','',86000,60,-2,2,3,0,'USMC',[]]]; _c = _c + ['AH64D']; _i = _i + [['','',80000,60,-2,2,3,0,'USMC',[]]]; _c = _c + ['F35B']; _i = _i + [['','',90000,62,-2,3,3,0,'USMC',[]]]; _c = _c + ['AV8B']; _i = _i + [['','',95000,65,-2,3,3,0,'USMC',[]]]; _c = _c + ['AV8B2']; _i = _i + [['','',130000,65,-2,3,3,0,'USMC',[]]]; _c = _c + ['A10']; _i = _i + [['','',100000,70,-2,3,3,0,'USMC',[]]]; /* Special */ _c = _c + ['MQ9PredatorB']; _i = _i + [['','',30000,35,2,2,3,0,'USMC',[]]]; /* Static Defenses */ _c = _c + ['USMC_WarfareBMGNest_M240']; _i = _i + [['','',300,0,1,0,'Defense',0,'USMC',[]]]; _c = _c + ['M2HD_mini_TriPod']; _i = _i + [['','',200,0,1,0,'Defense',0,'USMC',[]]]; _c = _c + ['M2StaticMG']; _i = _i + [['','',225,0,1,0,'Defense',0,'USMC',[]]]; _c = _c + ['SearchLight']; _i = _i + [['','',125,0,1,0,'Defense',0,'USMC',[]]]; _c = _c + ['MK19_TriPod']; _i = _i + [['','',700,0,1,0,'Defense',0,'USMC',[]]]; _c = _c + ['TOW_TriPod']; _i = _i + [['','',800,0,1,0,'Defense',0,'USMC',[]]]; _c = _c + ['Stinger_Pod']; _i = _i + [['','',850,0,1,0,'Defense',0,'USMC',[]]]; _c = _c + ['M252']; _i = _i + [['','',1150,0,1,0,'Defense',0,'USMC',[]]]; _c = _c + ['M119']; _i = _i + [['','',2250,0,1,0,'Defense',0,'USMC',[]]]; /* Defense Structures */ _c = _c + ['Land_CamoNet_NATO']; _i = _i + [['','',35,0,0,0,'Strategic',0,'USMC',[]]]; _c = _c + ['Land_CamoNetVar_NATO']; _i = _i + [['','',45,0,0,0,'Strategic',0,'USMC',[]]]; _c = _c + ['Land_CamoNetB_NATO']; _i = _i + [['','',55,0,0,0,'Strategic',0,'USMC',[]]]; _c = _c + ['USOrdnanceBox']; _i = _i + [['','',850,0,0,0,'Ammo',0,'USMC',[]]]; _c = _c + ['USVehicleBox']; _i = _i + [['','',1200,0,0,0,'Ammo',0,'USMC',[]]]; _c = _c + ['USBasicAmmunitionBox']; _i = _i + [['','',1950,0,0,0,'Ammo',0,'USMC',[]]]; _c = _c + ['USBasicWeaponsBox']; _i = _i + [['','',2975,0,0,0,'Ammo',0,'USMC',[]]]; _c = _c + ['USLaunchersBox']; _i = _i + [['','',6250,0,0,0,'Ammo',0,'USMC',[]]]; _c = _c + ['USSpecialWeaponsBox']; _i = _i + [['','',7200,0,0,0,'Ammo',0,'USMC',[]]]; for '_z' from 0 to (count _c)-1 do { if (isClass (configFile >> 'CfgVehicles' >> (_c select _z))) then { missionNamespace getVariable (_c select _z); if (isNil '_get') then { if ((_i select _z) select 0 == '') then {(_i select _z) set [0, [_c select _z,'displayName'] Call GetConfigInfo]}; if (typeName ((_i select _z) select 4) == 'SCALAR') then { if (((_i select _z) select 4) == -2) then { _ret = (_c select _z) Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleCrewSlot.sqf"; (_i select _z) set [4, _ret select 0]; (_i select _z) set [9, _ret select 1]; }; }; if (WF_Debug) then {(_i select _z) set [3,1]}; _p = if ((_c select _z) isKindOf 'Man') then {'portrait'} else {'picture'}; (_i select _z) set [1, [_c select _z,_p] Call GetConfigInfo]; missionNamespace setVariable [_c select _z, _i select _z]; } else { diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_USMC: Duplicated Element found '%1'",(_c select _z),diag_frameno,diag_tickTime]; }; } else { diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Core_USMC: Element '%1' is not a valid class.",(_c select _z),diag_frameno,diag_tickTime]; }; }; diag_log Format ["[WFBE (INIT)][frameno:%2 | ticktime:%3] Core_USMC: Initialization (%1 Elements) - [Done]",count _c,diag_frameno,diag_tickTime];Private ["_side"]; _side = _this; missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPLAY_NAME', _side], ['D30','2B14','GRAD']]; //--- Display Name to use in the GUI. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_WEAPONS', _side], ['D30','2B14','GRAD']]; //--- Weapon classname. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MIN', _side], [1000,50,800]]; //--- Unit cannot fire if the target is within it's min range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MAX', _side], [7000,5500,9000]]; //--- Unit max firing range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_TIME_RELOAD', _side], [7,4,2]]; //--- Approximate time needed for unit to fire again. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_BURST', _side], [10,4,10]]; //--- Burst sent per fire mission. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_VELOCITIES', _side], [500,475,550]]; //--- Projectile fall velocity. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPERSIONS', _side], [50,60,40]]; //--- Accuracy of the shell upon landing. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_LASER', _side], ['ARTY_Sh_122_LASER']]; //--- LASER rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_SADARM', _side], ['ARTY_Sh_122_SADARM']]; //--- SADARM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_ILLUMN', _side], ['ARTY_Sh_122_ILLUM','ARTY_Sh_82_ILLUM']]; //--- ILLUM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DEPLOY_SMOKE', _side], ['ARTY_Sh_122_WP','ARTY_Sh_122_SMOKE','ARTY_Sh_82_WP']]; //--- Projectiles which deploys smoke //--- Usable projectiles per artillery class. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMOS', _side], [ ['ARTY_Sh_122_HE','Sh_122_HE','ARTY_Sh_122_WP','ARTY_Sh_122_SADARM','ARTY_Sh_122_LASER','ARTY_Sh_122_SMOKE','ARTY_Sh_122_ILLUM'], ['ARTY_Sh_82_HE','Sh_82_HE','ARTY_Sh_82_WP','ARTY_Sh_82_ILLUM'], ['ARTY_R_227mm_HE_Rocket','R_GRAD'] ]]; //--- Special projectiles used by artillery classes. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS', _side], [ ['ARTY_30Rnd_122mmWP_D30','ARTY_30Rnd_122mmSADARM_D30','ARTY_30Rnd_122mmLASER_D30','ARTY_30Rnd_122mmSMOKE_D30','ARTY_30Rnd_122mmILLUM_D30'], ['ARTY_8Rnd_82mmWP_2B14','ARTY_8Rnd_82mmILLUM_2B14'], [] ]]; //--- Upgrade level required to use the special projectile. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS_UPGRADE', _side], [ [2,3,3,1,1], [2,1], [] ]]; //--- Artillery classnames, more than one of the same family may be used. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_CLASSNAMES', _side], [ ['D30_CDF'], ['2b14_82mm_CDF'], ['GRAD_CDF'] ]];Private ["_side"]; _side = _this; missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPLAY_NAME', _side], ['D30','2B14']]; //--- Display Name to use in the GUI. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_WEAPONS', _side], ['D30','2B14']]; //--- Weapon classname. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MIN', _side], [1000,50]]; //--- Unit cannot fire if the target is within it's min range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MAX', _side], [7000,5500]]; //--- Unit max firing range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_TIME_RELOAD', _side], [7,4]]; //--- Approximate time needed for unit to fire again. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_BURST', _side], [10,4]]; //--- Burst sent per fire mission. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_VELOCITIES', _side], [500,475]]; //--- Projectile fall velocity. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPERSIONS', _side], [50,60]]; //--- Accuracy of the shell upon landing. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_LASER', _side], ['Sh_122_LASER']]; //--- LASER rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_SADARM', _side], ['Sh_122_SADARM']]; //--- SADARM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_ILLUMN', _side], ['Sh_122_ILLUM','Sh_122_ILLUM']]; //--- ILLUM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DEPLOY_SMOKE', _side], ['Sh_122_WP','Sh_122_SMOKE','Sh_82_WP']]; //--- Projectiles which deploys smoke //--- Usable projectiles per artillery class. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMOS', _side], [ ['Sh_122_HE','Sh_122_WP','Sh_122_SADARM','Sh_122_LASER','Sh_122_SMOKE','Sh_122_ILLUM'], ['Sh_82_HE','Sh_82_WP','Sh_82_ILLUM'] ]]; //--- Special projectiles used by artillery classes. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS', _side], [ ['30Rnd_122mmWP_D30','30Rnd_122mmSADARM_D30','30Rnd_122mmLASER_D30','30Rnd_122mmSMOKE_D30','30Rnd_122mmILLUM_D30'], ['8Rnd_82mmWP_2B14','8Rnd_82mmILLUM_2B14'] ]]; //--- Upgrade level required to use the special projectile. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS_UPGRADE', _side], [ [2,3,3,1,1], [2,1] ]]; //--- Artillery classnames, more than one of the same family may be used. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_CLASSNAMES', _side], [ ['D30_TK_GUE_EP1'], ['2b14_82mm_TK_GUE_EP1','2b14_82mm_GUE'] ]];Private ["_side"]; _side = _this; missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPLAY_NAME', _side], ['M119','M252','MLRS']]; //--- Display Name to use in the GUI. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_WEAPONS', _side], ['M119','M252','MLRS']]; //--- Weapon classname. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MIN', _side], [1000,50,1200]]; //--- Unit cannot fire if the target is within it's min range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MAX', _side], [7000,5500,9000]]; //--- Unit max firing range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_TIME_RELOAD', _side], [7,4,2]]; //--- Approximate time needed for unit to fire again. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_BURST', _side], [10,4,6]]; //--- Burst sent per fire mission. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_VELOCITIES', _side], [500,475,550]]; //--- Projectile fall velocity. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPERSIONS', _side], [50,60,40]]; //--- Accuracy of the shell upon landing. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_LASER', _side], ['ARTY_Sh_105_LASER']]; //--- LASER rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_SADARM', _side], ['ARTY_Sh_105_SADARM']]; //--- SADARM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_ILLUMN', _side], ['ARTY_Sh_105_ILLUM','ARTY_Sh_81_ILLUM']]; //--- ILLUM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DEPLOY_SMOKE', _side], ['ARTY_Sh_105_WP','ARTY_Sh_105_SMOKE','ARTY_Sh_81_WP']]; //--- Projectiles which deploys smoke //--- Usable projectiles per artillery class. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMOS', _side], [ ['ARTY_Sh_105_HE','Sh_105_HE','ARTY_Sh_105_WP','ARTY_Sh_105_SADARM','ARTY_Sh_105_LASER','ARTY_Sh_105_SMOKE','ARTY_Sh_105_ILLUM'], ['ARTY_Sh_81_HE','Sh_81_HE','ARTY_Sh_81_WP','ARTY_Sh_81_ILLUM'], ['ARTY_R_227mm_HE_Rocket','R_MLRS'] ]]; //--- Special projectiles used by artillery classes. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS', _side], [ ['ARTY_30Rnd_105mmWP_M119','ARTY_30Rnd_105mmSADARM_M119','ARTY_30Rnd_105mmLASER_M119','ARTY_30Rnd_105mmSMOKE_M119','ARTY_30Rnd_105mmILLUM_M119'], ['ARTY_8Rnd_81mmWP_M252','ARTY_8Rnd_81mmILLUM_M252'], [] ]]; //--- Upgrade level required to use the special projectile. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS_UPGRADE', _side], [ [2,3,3,1,1], [2,1], [] ]]; //--- Artillery classnames, more than one of the same family may be used. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_CLASSNAMES', _side], [ ['M119_US_EP1','M119'], ['M252_US_EP1','M252'], ['MLRS','MLRS_DES_EP1'] ]];Private ["_side"]; _side = _this; missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPLAY_NAME', _side], ['D30','2B14','GRAD']]; //--- Display Name to use in the GUI. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_WEAPONS', _side], ['D30','2B14','GRAD']]; //--- Weapon classname. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MIN', _side], [1000,50,800]]; //--- Unit cannot fire if the target is within it's min range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MAX', _side], [7000,5500,9000]]; //--- Unit max firing range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_TIME_RELOAD', _side], [7,4,2]]; //--- Approximate time needed for unit to fire again. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_BURST', _side], [10,4,10]]; //--- Burst sent per fire mission. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_VELOCITIES', _side], [500,475,550]]; //--- Projectile fall velocity. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPERSIONS', _side], [50,60,40]]; //--- Accuracy of the shell upon landing. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_LASER', _side], ['Sh_122_LASER']]; //--- LASER rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_SADARM', _side], ['Sh_122_SADARM']]; //--- SADARM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_ILLUMN', _side], ['Sh_122_ILLUM','Sh_82_ILLUM']]; //--- ILLUM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DEPLOY_SMOKE', _side], ['Sh_122_WP','Sh_122_SMOKE','Sh_82_WP']]; //--- Projectiles which deploys smoke //--- Usable projectiles per artillery class. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMOS', _side], [ ['Sh_122_HE','Sh_122_WP','Sh_122_SADARM','Sh_122_LASER','Sh_122_SMOKE','Sh_122_ILLUM'], ['Sh_82_HE','Sh_82_WP','Sh_82_ILLUM'], ['R_GRAD'] ]]; //--- Special projectiles used by artillery classes. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS', _side], [ ['30Rnd_122mmWP_D30','30Rnd_122mmSADARM_D30','30Rnd_122mmLASER_D30','30Rnd_122mmSMOKE_D30','30Rnd_122mmILLUM_D30'], ['8Rnd_82mmWP_2B14','8Rnd_82mmILLUM_2B14'], [] ]]; //--- Upgrade level required to use the special projectile. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS_UPGRADE', _side], [ [2,3,3,1,1], [2,1], [] ]]; //--- Artillery classnames, more than one of the same family may be used. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_CLASSNAMES', _side], [ ['D30_TK_EP1','D30_RU'], ['2b14_82mm_TK_EP1','2b14_82mm'], ['GRAD_RU','GRAD_TK_EP1'] ]];Private ["_side"]; _side = _this; missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPLAY_NAME', _side], ['M119','M252','MLRS','Stryker MC']]; //--- Display Name to use in the GUI. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_WEAPONS', _side], ['M119','M252','MLRS','M120']]; //--- Weapon classname. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MIN', _side], [1000,50,1200,550]]; //--- Unit cannot fire if the target is within it's min range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MAX', _side], [7000,5500,9000,6500]]; //--- Unit max firing range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_TIME_RELOAD', _side], [7,4,2,4]]; //--- Approximate time needed for unit to fire again. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_BURST', _side], [10,4,6,6]]; //--- Burst sent per fire mission. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_VELOCITIES', _side], [500,475,550,475]]; //--- Projectile fall velocity. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPERSIONS', _side], [50,60,40,55]]; //--- Accuracy of the shell upon landing. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_LASER', _side], ['Sh_105_LASER']]; //--- LASER rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_SADARM', _side], ['Sh_105_SADARM']]; //--- SADARM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_ILLUMN', _side], ['Sh_105_ILLUM','Sh_81_ILLUM']]; //--- ILLUM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DEPLOY_SMOKE', _side], ['Sh_105_WP','Sh_105_SMOKE','Sh_81_WP']]; //--- Projectiles which deploys smoke //--- Usable projectiles per artillery class. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMOS', _side], [ ['Sh_105_HE','Sh_105_WP','Sh_105_SADARM','Sh_105_LASER','Sh_105_SMOKE','Sh_105_ILLUM'], ['Sh_81_HE','Sh_81_WP','Sh_81_ILLUM'], ['R_MLRS'], ['120mmHE_M120'] ]]; //--- Special projectiles used by artillery classes. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS', _side], [ ['30Rnd_105mmWP_M119','30Rnd_105mmSADARM_M119','30Rnd_105mmLASER_M119','30Rnd_105mmSMOKE_M119','30Rnd_105mmILLUM_M119'], ['8Rnd_81mmWP_M252','8Rnd_81mmILLUM_M252'], [], [] ]]; //--- Upgrade level required to use the special projectile. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS_UPGRADE', _side], [ [2,3,3,1,1], [2,1], [], [] ]]; //--- Artillery classnames, more than one of the same family may be used. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_CLASSNAMES', _side], [ ['M119_US_EP1','M119'], ['M252_US_EP1','M252'], ['MLRS','MLRS_DES_EP1'], ['M1129_MC_EP1'] ]];Private ["_side"]; _side = _this; missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPLAY_NAME', _side], ['2B14']]; //--- Display Name to use in the GUI. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_WEAPONS', _side], ['2B14']]; //--- Weapon classname. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MIN', _side], [50]]; //--- Unit cannot fire if the target is within it's min range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MAX', _side], [5500]]; //--- Unit max firing range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_TIME_RELOAD', _side], [4]]; //--- Approximate time needed for unit to fire again. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_BURST', _side], [4]]; //--- Burst sent per fire mission. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_VELOCITIES', _side], [475]]; //--- Projectile fall velocity. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPERSIONS', _side], [60]]; //--- Accuracy of the shell upon landing. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_LASER', _side], []]; //--- LASER rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_SADARM', _side], []]; //--- SADARM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_ILLUMN', _side], ['ARTY_Sh_82_ILLUM']]; //--- ILLUM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DEPLOY_SMOKE', _side], ['ARTY_Sh_82_WP']]; //--- Projectiles which deploys smoke //--- Usable projectiles per artillery class. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMOS', _side], [ ['ARTY_Sh_82_HE','Sh_82_HE','ARTY_Sh_82_WP','ARTY_Sh_82_ILLUM'] ]]; //--- Special projectiles used by artillery classes. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS', _side], [ ['ARTY_8Rnd_82mmWP_2B14','ARTY_8Rnd_82mmILLUM_2B14'] ]]; //--- Upgrade level required to use the special projectile. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS_UPGRADE', _side], [ [2,1] ]]; //--- Artillery classnames, more than one of the same family may be used. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_CLASSNAMES', _side], [ ['2b14_82mm_GUE'] ]];Private ["_side"]; _side = _this; missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPLAY_NAME', _side], ['D30','2B14','GRAD']]; //--- Display Name to use in the GUI. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_WEAPONS', _side], ['D30','2B14','GRAD']]; //--- Weapon classname. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MIN', _side], [1000,50,800]]; //--- Unit cannot fire if the target is within it's min range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MAX', _side], [7000,5500,9000]]; //--- Unit max firing range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_TIME_RELOAD', _side], [7,4,2]]; //--- Approximate time needed for unit to fire again. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_BURST', _side], [10,4,10]]; //--- Burst sent per fire mission. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_VELOCITIES', _side], [500,475,550]]; //--- Projectile fall velocity. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPERSIONS', _side], [50,60,40]]; //--- Accuracy of the shell upon landing. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_LASER', _side], ['ARTY_Sh_122_LASER']]; //--- LASER rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_SADARM', _side], ['ARTY_Sh_122_SADARM']]; //--- SADARM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_ILLUMN', _side], ['ARTY_Sh_122_ILLUM','ARTY_Sh_82_ILLUM']]; //--- ILLUM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DEPLOY_SMOKE', _side], ['ARTY_Sh_122_WP','ARTY_Sh_122_SMOKE','ARTY_Sh_82_WP']]; //--- Projectiles which deploys smoke //--- Usable projectiles per artillery class. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMOS', _side], [ ['ARTY_Sh_122_HE','Sh_122_HE','ARTY_Sh_122_WP','ARTY_Sh_122_SADARM','ARTY_Sh_122_LASER','ARTY_Sh_122_SMOKE','ARTY_Sh_122_ILLUM'], ['ARTY_Sh_82_HE','Sh_82_HE','ARTY_Sh_82_WP','ARTY_Sh_82_ILLUM'], ['ARTY_R_227mm_HE_Rocket','R_GRAD'] ]]; //--- Special projectiles used by artillery classes. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS', _side], [ ['ARTY_30Rnd_122mmWP_D30','ARTY_30Rnd_122mmSADARM_D30','ARTY_30Rnd_122mmLASER_D30','ARTY_30Rnd_122mmSMOKE_D30','ARTY_30Rnd_122mmILLUM_D30'], ['ARTY_8Rnd_82mmWP_2B14','ARTY_8Rnd_82mmILLUM_2B14'], [] ]]; //--- Upgrade level required to use the special projectile. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS_UPGRADE', _side], [ [2,3,3,1,1], [2,1], [] ]]; //--- Artillery classnames, more than one of the same family may be used. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_CLASSNAMES', _side], [ ['D30_CDF'], ['2b14_82mm_CDF'], ['GRAD_CDF'] ]];Private ["_side"]; _side = _this; missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPLAY_NAME', _side], ['M119','M252','MLRS']]; //--- Display Name to use in the GUI. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_WEAPONS', _side], ['M119','M252','MLRS']]; //--- Weapon classname. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MIN', _side], [1000,50,1200]]; //--- Unit cannot fire if the target is within it's min range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MAX', _side], [7000,5500,9000]]; //--- Unit max firing range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_TIME_RELOAD', _side], [7,4,2]]; //--- Approximate time needed for unit to fire again. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_BURST', _side], [10,4,6]]; //--- Burst sent per fire mission. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_VELOCITIES', _side], [500,475,550]]; //--- Projectile fall velocity. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPERSIONS', _side], [50,60,40]]; //--- Accuracy of the shell upon landing. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_LASER', _side], ['ARTY_Sh_105_LASER']]; //--- LASER rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_SADARM', _side], ['ARTY_Sh_105_SADARM']]; //--- SADARM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_ILLUMN', _side], ['ARTY_Sh_105_ILLUM','ARTY_Sh_81_ILLUM']]; //--- ILLUM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DEPLOY_SMOKE', _side], ['ARTY_Sh_105_WP','ARTY_Sh_105_SMOKE','ARTY_Sh_81_WP']]; //--- Projectiles which deploys smoke //--- Usable projectiles per artillery class. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMOS', _side], [ ['ARTY_Sh_105_HE','Sh_105_HE','ARTY_Sh_105_WP','ARTY_Sh_105_SADARM','ARTY_Sh_105_LASER','ARTY_Sh_105_SMOKE','ARTY_Sh_105_ILLUM'], ['ARTY_Sh_81_HE','Sh_81_HE','ARTY_Sh_81_WP','ARTY_Sh_81_ILLUM'], ['ARTY_R_227mm_HE_Rocket','R_MLRS'] ]]; //--- Special projectiles used by artillery classes. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS', _side], [ ['ARTY_30Rnd_105mmWP_M119','ARTY_30Rnd_105mmSADARM_M119','ARTY_30Rnd_105mmLASER_M119','ARTY_30Rnd_105mmSMOKE_M119','ARTY_30Rnd_105mmILLUM_M119'], ['ARTY_8Rnd_81mmWP_M252','ARTY_8Rnd_81mmILLUM_M252'], [] ]]; //--- Upgrade level required to use the special projectile. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS_UPGRADE', _side], [ [2,3,3,1,1], [2,1], [] ]]; //--- Artillery classnames, more than one of the same family may be used. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_CLASSNAMES', _side], [ ['M119_US_EP1'], ['M252_US_EP1'], ['MLRS_DES_EP1'] ]];Private ["_side"]; _side = _this; missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPLAY_NAME', _side], ['D30','2B14','GRAD']]; //--- Display Name to use in the GUI. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_WEAPONS', _side], ['D30','2B14','GRAD']]; //--- Weapon classname. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MIN', _side], [1000,50,800]]; //--- Unit cannot fire if the target is within it's min range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MAX', _side], [7000,5500,9000]]; //--- Unit max firing range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_TIME_RELOAD', _side], [7,4,2]]; //--- Approximate time needed for unit to fire again. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_BURST', _side], [10,4,10]]; //--- Burst sent per fire mission. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_VELOCITIES', _side], [500,475,550]]; //--- Projectile fall velocity. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPERSIONS', _side], [50,60,40]]; //--- Accuracy of the shell upon landing. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_LASER', _side], ['Sh_122_LASER']]; //--- LASER rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_SADARM', _side], ['Sh_122_SADARM']]; //--- SADARM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_ILLUMN', _side], ['Sh_122_ILLUM','Sh_122_ILLUM']]; //--- ILLUM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DEPLOY_SMOKE', _side], ['Sh_122_WP','Sh_122_SMOKE','Sh_82_WP']]; //--- Projectiles which deploys smoke //--- Usable projectiles per artillery class. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMOS', _side], [ ['Sh_122_HE','Sh_122_WP','Sh_122_SADARM','Sh_122_LASER','Sh_122_SMOKE','Sh_122_ILLUM'], ['Sh_82_HE','Sh_82_WP','Sh_82_ILLUM'], ['R_GRAD'] ]]; //--- Special projectiles used by artillery classes. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS', _side], [ ['30Rnd_122mmWP_D30','30Rnd_122mmSADARM_D30','30Rnd_122mmLASER_D30','30Rnd_122mmSMOKE_D30','30Rnd_122mmILLUM_D30'], ['8Rnd_82mmWP_2B14','8Rnd_82mmILLUM_2B14'], [] ]]; //--- Upgrade level required to use the special projectile. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS_UPGRADE', _side], [ [2,3,3,1,1], [2,1], [] ]]; //--- Artillery classnames, more than one of the same family may be used. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_CLASSNAMES', _side], [ ['D30_TK_EP1'], ['2b14_82mm_TK_EP1'], ['GRAD_TK_EP1'] ]];Private ["_side"]; _side = _this; missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPLAY_NAME', _side], ['D30','2B14']]; //--- Display Name to use in the GUI. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_WEAPONS', _side], ['D30','2B14']]; //--- Weapon classname. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MIN', _side], [1000,50]]; //--- Unit cannot fire if the target is within it's min range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MAX', _side], [7000,5500]]; //--- Unit max firing range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_TIME_RELOAD', _side], [7,4]]; //--- Approximate time needed for unit to fire again. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_BURST', _side], [10,4]]; //--- Burst sent per fire mission. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_VELOCITIES', _side], [500,475]]; //--- Projectile fall velocity. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPERSIONS', _side], [50,60]]; //--- Accuracy of the shell upon landing. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_LASER', _side], ['Sh_122_LASER']]; //--- LASER rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_SADARM', _side], ['Sh_122_SADARM']]; //--- SADARM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_ILLUMN', _side], ['Sh_122_ILLUM','Sh_122_ILLUM']]; //--- ILLUM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DEPLOY_SMOKE', _side], ['Sh_122_WP','Sh_122_SMOKE','Sh_82_WP']]; //--- Projectiles which deploys smoke //--- Usable projectiles per artillery class. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMOS', _side], [ ['Sh_122_HE','Sh_122_WP','Sh_122_SADARM','Sh_122_LASER','Sh_122_SMOKE','Sh_122_ILLUM'], ['Sh_82_HE','Sh_82_WP','Sh_82_ILLUM'] ]]; //--- Special projectiles used by artillery classes. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS', _side], [ ['30Rnd_122mmWP_D30','30Rnd_122mmSADARM_D30','30Rnd_122mmLASER_D30','30Rnd_122mmSMOKE_D30','30Rnd_122mmILLUM_D30'], ['8Rnd_82mmWP_2B14','8Rnd_82mmILLUM_2B14'] ]]; //--- Upgrade level required to use the special projectile. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS_UPGRADE', _side], [ [2,3,3,1,1], [2,1] ]]; //--- Artillery classnames, more than one of the same family may be used. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_CLASSNAMES', _side], [ ['D30_TK_GUE_EP1'], ['2b14_82mm_TK_GUE_EP1'] ]];Private ["_side"]; _side = _this; missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPLAY_NAME', _side], ['M119','M252','MLRS','Stryker MC']]; //--- Display Name to use in the GUI. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_WEAPONS', _side], ['M119','M252','MLRS','M120']]; //--- Weapon classname. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MIN', _side], [1000,50,1200,550]]; //--- Unit cannot fire if the target is within it's min range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MAX', _side], [7000,5500,9000,6500]]; //--- Unit max firing range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_TIME_RELOAD', _side], [7,4,2,4]]; //--- Approximate time needed for unit to fire again. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_BURST', _side], [10,4,6,6]]; //--- Burst sent per fire mission. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_VELOCITIES', _side], [500,475,550,475]]; //--- Projectile fall velocity. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPERSIONS', _side], [50,60,40,55]]; //--- Accuracy of the shell upon landing. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_LASER', _side], ['Sh_105_LASER']]; //--- LASER rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_SADARM', _side], ['Sh_105_SADARM']]; //--- SADARM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_ILLUMN', _side], ['Sh_105_ILLUM','Sh_81_ILLUM']]; //--- ILLUM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DEPLOY_SMOKE', _side], ['Sh_105_WP','Sh_105_SMOKE','Sh_81_WP']]; //--- Projectiles which deploys smoke //--- Usable projectiles per artillery class. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMOS', _side], [ ['Sh_105_HE','Sh_105_WP','Sh_105_SADARM','Sh_105_LASER','Sh_105_SMOKE','Sh_105_ILLUM'], ['Sh_81_HE','Sh_81_WP','Sh_81_ILLUM'], ['R_MLRS'], ['120mmHE_M120'] ]]; //--- Special projectiles used by artillery classes. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS', _side], [ ['30Rnd_105mmWP_M119','30Rnd_105mmSADARM_M119','30Rnd_105mmLASER_M119','30Rnd_105mmSMOKE_M119','30Rnd_105mmILLUM_M119'], ['8Rnd_81mmWP_M252','8Rnd_81mmILLUM_M252'], [], [] ]]; //--- Upgrade level required to use the special projectile. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS_UPGRADE', _side], [ [2,3,3,1,1], [2,1], [], [] ]]; //--- Artillery classnames, more than one of the same family may be used. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_CLASSNAMES', _side], [ ['M119_US_EP1'], ['M252_US_EP1'], ['MLRS_DES_EP1'], ['M1129_MC_EP1'] ]];Private ["_side"]; _side = _this; missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPLAY_NAME', _side], ['D30','2B14','GRAD']]; //--- Display Name to use in the GUI. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_WEAPONS', _side], ['D30','2B14','GRAD']]; //--- Weapon classname. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MIN', _side], [1000,50,800]]; //--- Unit cannot fire if the target is within it's min range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MAX', _side], [7000,5500,9000]]; //--- Unit max firing range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_TIME_RELOAD', _side], [7,4,2]]; //--- Approximate time needed for unit to fire again. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_BURST', _side], [10,4,10]]; //--- Burst sent per fire mission. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_VELOCITIES', _side], [500,475,550]]; //--- Projectile fall velocity. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPERSIONS', _side], [50,60,40]]; //--- Accuracy of the shell upon landing. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_LASER', _side], ['ARTY_Sh_122_LASER']]; //--- LASER rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_SADARM', _side], ['ARTY_Sh_122_SADARM']]; //--- SADARM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_ILLUMN', _side], ['ARTY_Sh_122_ILLUM','ARTY_Sh_82_ILLUM']]; //--- ILLUM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DEPLOY_SMOKE', _side], ['ARTY_Sh_122_WP','ARTY_Sh_122_SMOKE','ARTY_Sh_82_WP']]; //--- Projectiles which deploys smoke //--- Usable projectiles per artillery class. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMOS', _side], [ ['ARTY_Sh_122_HE','Sh_122_HE','ARTY_Sh_122_WP','ARTY_Sh_122_SADARM','ARTY_Sh_122_LASER','ARTY_Sh_122_SMOKE','ARTY_Sh_122_ILLUM'], ['ARTY_Sh_82_HE','Sh_82_HE','ARTY_Sh_82_WP','ARTY_Sh_82_ILLUM'], ['ARTY_R_227mm_HE_Rocket','R_GRAD'] ]]; //--- Special projectiles used by artillery classes. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS', _side], [ ['ARTY_30Rnd_122mmWP_D30','ARTY_30Rnd_122mmSADARM_D30','ARTY_30Rnd_122mmLASER_D30','ARTY_30Rnd_122mmSMOKE_D30','ARTY_30Rnd_122mmILLUM_D30'], ['ARTY_8Rnd_82mmWP_2B14','ARTY_8Rnd_82mmILLUM_2B14'], [] ]]; //--- Upgrade level required to use the special projectile. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS_UPGRADE', _side], [ [2,3,3,1,1], [2,1], [] ]]; //--- Artillery classnames, more than one of the same family may be used. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_CLASSNAMES', _side], [ ['D30_CDF'], ['2b14_82mm_CDF'], ['GRAD_CDF'] ]];Private ["_side"]; _side = _this; missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPLAY_NAME', _side], ['M119','M252','MLRS']]; //--- Display Name to use in the GUI. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_WEAPONS', _side], ['M119','M252','MLRS']]; //--- Weapon classname. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MIN', _side], [1000,50,1200]]; //--- Unit cannot fire if the target is within it's min range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_RANGES_MAX', _side], [7000,5500,9000]]; //--- Unit max firing range. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_TIME_RELOAD', _side], [7,4,2]]; //--- Approximate time needed for unit to fire again. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_BURST', _side], [10,4,6]]; //--- Burst sent per fire mission. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_VELOCITIES', _side], [500,475,550]]; //--- Projectile fall velocity. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DISPERSIONS', _side], [50,60,40]]; //--- Accuracy of the shell upon landing. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_LASER', _side], ['ARTY_Sh_105_LASER']]; //--- LASER rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_SADARM', _side], ['ARTY_Sh_105_SADARM']]; //--- SADARM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMO_ILLUMN', _side], ['ARTY_Sh_105_ILLUM','ARTY_Sh_81_ILLUM']]; //--- ILLUM rounds missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_DEPLOY_SMOKE', _side], ['ARTY_Sh_105_WP','ARTY_Sh_105_SMOKE','ARTY_Sh_81_WP']]; //--- Projectiles which deploys smoke //--- Usable projectiles per artillery class. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_AMMOS', _side], [ ['ARTY_Sh_105_HE','Sh_105_HE','ARTY_Sh_105_WP','ARTY_Sh_105_SADARM','ARTY_Sh_105_LASER','ARTY_Sh_105_SMOKE','ARTY_Sh_105_ILLUM'], ['ARTY_Sh_81_HE','Sh_81_HE','ARTY_Sh_81_WP','ARTY_Sh_81_ILLUM'], ['ARTY_R_227mm_HE_Rocket','R_MLRS'] ]]; //--- Special projectiles used by artillery classes. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS', _side], [ ['ARTY_30Rnd_105mmWP_M119','ARTY_30Rnd_105mmSADARM_M119','ARTY_30Rnd_105mmLASER_M119','ARTY_30Rnd_105mmSMOKE_M119','ARTY_30Rnd_105mmILLUM_M119'], ['ARTY_8Rnd_81mmWP_M252','ARTY_8Rnd_81mmILLUM_M252'], [] ]]; //--- Upgrade level required to use the special projectile. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS_UPGRADE', _side], [ [2,3,3,1,1], [2,1], [] ]]; //--- Artillery classnames, more than one of the same family may be used. missionNamespace setVariable [Format['WFBE_%1_ARTILLERY_CLASSNAMES', _side], [ ['M119'], ['M252'], ['MLRS'] ]];/* Mission Editor related Config. */ missionNamespace setVariable ["WFBE_C_CAMP", "Land_Fort_Watchtower_EP1"];//--- Camp classname to be used. missionNamespace setVariable ["WFBE_C_CAMP_FLAG", "FlagCarrierTakistan_EP1"];//--- Camp flag. missionNamespace setVariable ["WFBE_C_CAMP_FLAG_POS", [-5,5]];//--- Camp flag relative position. missionNamespace setVariable ["WFBE_C_CAMP_RDIR", -90];//--- Camp placement direction. missionNamespace setVariable ["WFBE_C_DEPOT", "Land_fortified_nest_big_EP1"];//--- Town classname to be used. missionNamespace setVariable ["WFBE_C_DEPOT_BUY_DIR", 0];//--- Town depot buy direction. missionNamespace setVariable ["WFBE_C_DEPOT_BUY_DISTANCE", 21];//--- Town depot buy distance. missionNamespace setVariable ["WFBE_C_DEPOT_RDIR", 0];//--- Town depot placement direction. missionNamespace setVariable ["WFBE_C_HANGAR", "Land_Mil_hangar_EP1"];//--- Hangar classname to be used. missionNamespace setVariable ["WFBE_C_HANGAR_BUY_DIR", 0];//--- Hangar buy direction. missionNamespace setVariable ["WFBE_C_HANGAR_BUY_DISTANCE", 60];//--- Hangar buy distance. missionNamespace setVariable ["WFBE_C_HANGAR_RDIR", 180];//--- Camp placement direction./* Mission Editor related Config. */ missionNamespace setVariable ["WFBE_C_CAMP", "Land_Fort_Watchtower_EP1"];//--- Camp classname to be used. missionNamespace setVariable ["WFBE_C_CAMP_FLAG", "FlagCarrierTakistan_EP1"];//--- Camp flag. missionNamespace setVariable ["WFBE_C_CAMP_FLAG_POS", [-5,5]];//--- Camp flag relative position. missionNamespace setVariable ["WFBE_C_CAMP_RDIR", -90];//--- Camp placement direction. missionNamespace setVariable ["WFBE_C_DEPOT", "Land_fortified_nest_big_EP1"];//--- Town classname to be used. missionNamespace setVariable ["WFBE_C_DEPOT_BUY_DIR", 0];//--- Town depot buy direction. missionNamespace setVariable ["WFBE_C_DEPOT_BUY_DISTANCE", 21];//--- Town depot buy distance. missionNamespace setVariable ["WFBE_C_DEPOT_RDIR", 0];//--- Town depot placement direction. missionNamespace setVariable ["WFBE_C_HANGAR", "Land_Mil_hangar_EP1"];//--- Hangar classname to be used. missionNamespace setVariable ["WFBE_C_HANGAR_BUY_DIR", 0];//--- Hangar buy direction. missionNamespace setVariable ["WFBE_C_HANGAR_BUY_DISTANCE", 60];//--- Hangar buy distance. missionNamespace setVariable ["WFBE_C_HANGAR_RDIR", 180];//--- Camp placement direction./* Mission Editor related Config. */ missionNamespace setVariable ["WFBE_C_CAMP", "Land_Fort_Watchtower"];//--- Camp classname to be used. missionNamespace setVariable ["WFBE_C_CAMP_FLAG", "FlagCarrierGUE"];//--- Camp flag. missionNamespace setVariable ["WFBE_C_CAMP_FLAG_POS", [-5,5]];//--- Camp flag relative position. missionNamespace setVariable ["WFBE_C_CAMP_HEALTH_COEF", 14];//--- Camp damage handler, higher is stronger. missionNamespace setVariable ["WFBE_C_CAMP_RDIR", -90];//--- Camp placement direction. missionNamespace setVariable ["WFBE_C_DEPOT", "Land_fortified_nest_big_EP1"];//--- Town classname to be used. missionNamespace setVariable ["WFBE_C_DEPOT_BUY_DIR", 0];//--- Town depot buy direction. missionNamespace setVariable ["WFBE_C_DEPOT_BUY_DISTANCE", 21];//--- Town depot buy distance. missionNamespace setVariable ["WFBE_C_DEPOT_RDIR", 0];//--- Town depot placement direction. missionNamespace setVariable ["WFBE_C_HANGAR", "WarfareBAirport"];//--- Hangar classname to be used. missionNamespace setVariable ["WFBE_C_HANGAR_BUY_DIR", 0];//--- Hangar buy direction. missionNamespace setVariable ["WFBE_C_HANGAR_BUY_DISTANCE", 60];//--- Hangar buy distance. missionNamespace setVariable ["WFBE_C_HANGAR_RDIR", 180];//--- Camp placement direction./* Mission Editor related Config. */ missionNamespace setVariable ["WFBE_C_CAMP", "WarfareBCamp"];//--- Camp classname to be used. missionNamespace setVariable ["WFBE_C_CAMP_FLAG", "FlagCarrierGUE"];//--- Camp flag. missionNamespace setVariable ["WFBE_C_CAMP_FLAG_POS", [-5,5]];//--- Camp flag relative position. missionNamespace setVariable ["WFBE_C_CAMP_HEALTH_COEF", 14];//--- Camp damage handler, higher is stronger. missionNamespace setVariable ["WFBE_C_CAMP_RDIR", -90];//--- Camp placement direction. missionNamespace setVariable ["WFBE_C_DEPOT", "WarfareBDepot"];//--- Town classname to be used. missionNamespace setVariable ["WFBE_C_DEPOT_BUY_DIR", 0];//--- Town depot buy direction. missionNamespace setVariable ["WFBE_C_DEPOT_BUY_DISTANCE", 21];//--- Town depot buy distance. missionNamespace setVariable ["WFBE_C_DEPOT_RDIR", 0];//--- Town depot placement direction. missionNamespace setVariable ["WFBE_C_HANGAR", "WarfareBAirport"];//--- Hangar classname to be used. missionNamespace setVariable ["WFBE_C_HANGAR_BUY_DIR", 0];//--- Hangar buy direction. missionNamespace setVariable ["WFBE_C_HANGAR_BUY_DISTANCE", 60];//--- Hangar buy distance. missionNamespace setVariable ["WFBE_C_HANGAR_RDIR", 180];//--- Camp placement direction.Private ["_side"]; _side = "WEST"; //--- Generic. missionNamespace setVariable [Format["WFBE_%1CREW", _side], 'CDF_Soldier_Crew']; missionNamespace setVariable [Format["WFBE_%1PILOT", _side], 'CDF_Soldier_Pilot']; missionNamespace setVariable [Format["WFBE_%1SOLDIER", _side], 'CDF_Soldier']; //--- Flag texture. missionNamespace setVariable [Format["WFBE_%1FLAG", _side], '\ca\ca_e\data\flag_cdf_co.paa']; missionNamespace setVariable [Format["WFBE_%1AMBULANCES", _side], ['BMP2_Ambul_CDF']]; missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCKS", _side], ['UralRepair_CDF']]; missionNamespace setVariable [Format["WFBE_%1SALVAGETRUCK", _side], ['WarfareSalvageTruck_CDF']]; missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCKS", _side], ['WarfareSupplyTruck_CDF']]; missionNamespace setVariable [Format["WFBE_%1UAV", _side], 'MQ9PredatorB']; //--- Radio Announcers. missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers", _side], ['WFHQ_RU0','WFHQ_RU1','WFHQ_RU2']]; missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers_Config", _side], 'RadioProtocolRU']; //--- Paratroopers. missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL1", _side],['CDF_Soldier_TL','CDF_Soldier_RPG','CDF_Soldier','CDF_Soldier','CDF_Soldier_AR','CDF_Soldier_Medic']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL2", _side],['CDF_Soldier_TL','CDF_Soldier_RPG','CDF_Soldier_RPG','CDF_Soldier_RPG','CDF_Soldier_Strela','CDF_Soldier_MG','CDF_Soldier_Medic','CDF_Soldier_Spotter','CDF_Soldier_Sniper']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL3", _side],['CDF_Soldier_TL','CDF_Soldier_RPG','CDF_Soldier_RPG','CDF_Soldier_RPG','CDF_Soldier_RPG','CDF_Soldier_Strela','CDF_Soldier_Strela','CDF_Soldier','CDF_Soldier_GL','CDF_Soldier_Medic','CDF_Soldier_Sniper','CDF_Soldier','CDF_Soldier_Marksman']]; missionNamespace setVariable [Format["WFBE_%1PARACARGO", _side], 'Mi17_CDF']; //--- Paratroopers, Vehicle. missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCK", _side], 'UralRepair_CDF'];//--- Repair Truck model. missionNamespace setVariable [Format["WFBE_%1STARTINGVEHICLES", _side], ['BMP2_Ambul_CDF','Ural_CDF']];//--- Starting Vehicles. missionNamespace setVariable [Format["WFBE_%1PARAAMMO", _side], ['RUBasicAmmunitionBox','RUBasicWeaponsBox','RULaunchersBox']];//--- Supply Paradropping, Dropped Ammunition. missionNamespace setVariable [Format["WFBE_%1PARAVEHICARGO", _side], 'BRDM2_CDF'];//--- Supply Paradropping, Dropped Vehicle. missionNamespace setVariable [Format["WFBE_%1PARAVEHI", _side], 'Mi17_CDF'];//--- Supply Paradropping, Vehicle missionNamespace setVariable [Format["WFBE_%1PARACHUTE", _side], 'ParachuteMediumWest'];//--- Supply Paradropping, Parachute Model. missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCK", _side], 'WarfareSupplyTruck_CDF'];//--- Supply Truck model. missionNamespace setVariable [Format["WFBE_%1_WORKER", _side], ["Worker2","Worker4"]];//--- Workers model. //--- Server only. if (isServer) then { //--- Patrols. missionNamespace setVariable [Format["WFBE_%1_PATROL_LIGHT", _side], [ ['CDF_Soldier_TL','CDF_Soldier_MG','CDF_Soldier_Sniper','CDF_Soldier_Medic'], ['CDF_Soldier_TL','CDF_Soldier_AR','CDF_Soldier_GL','CDF_Soldier_RPG','CDF_Soldier'], ['UAZ_MG_CDF','UAZ_AGS30_CDF'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_MEDIUM", _side], [ ['BRDM2_CDF','BRDM2_ATGM_CDF'], ['Ural_CDF','CDF_Soldier_TL','CDF_Soldier_RPG','CDF_Soldier_MG','CDF_Soldier_RPG'], ['BMP2_CDF','CDF_Soldier_Strela','CDF_Soldier_Strela','CDF_Soldier_Medic'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_HEAVY", _side], [ ['T72_CDF','BMP2_CDF'], ['T72_CDF','T72_CDF'], ['BMP2_CDF','BMP2_CDF','CDF_Soldier_TL','CDF_Soldier_MG','CDF_Soldier_Marksman','CDF_Soldier_Medic','CDF_Soldier_RPG','CDF_Soldier_RPG','CDF_Soldier'], ['BMP2_CDF','CDF_Soldier_TL','CDF_Soldier_Medic','CDF_Soldier_GL','CDF_Soldier','CDF_Soldier_AR'] ]]; //--- Base Patrols. if ((missionNamespace getVariable "WFBE_C_BASE_PATROLS_INFANTRY") > 0) then { missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_0", _side],['CDF_Soldier_TL','CDF_Soldier','CDF_Soldier','CDF_Soldier_AR','CDF_Soldier_GL','CDF_Soldier_MG']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_1", _side],['CDF_Soldier_TL','CDF_Soldier','CDF_Soldier','CDF_Soldier_MG','CDF_Soldier_RPG','CDF_Soldier_Medic']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_2", _side],['CDF_Soldier_TL','CDF_Soldier','CDF_Soldier','CDF_Soldier_Marksman','CDF_Soldier_Strela','CDF_Soldier_Sniper']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_3", _side],['CDF_Soldier_TL','CDF_Soldier','CDF_Soldier_AR','CDF_Soldier_RPG','CDF_Soldier_RPG','CDF_Soldier_GL']]; }; //--- AI Loadouts [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_0", _side], [ [['AKS_74_kobra','RPG18','Makarov','Binocular','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','RPG18','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','RPG18','Makarov']], [['AKS_74_U','RPG18','Makarov','Binocular','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','RPG18','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_U','RPG18','Makarov']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_1", _side], [ [['AKS_74_kobra','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7V','PG7V','PG7V','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','RPG7V','Makarov']], [['AKS_74_kobra','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7V','PG7V','PG7V','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','RPG7V','Makarov']], [['SVD','MakarovSD','Binocular','NVGoggles','ItemRadio','ItemMap'], ['10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','HandGrenade_East','HandGrenade_East','8Rnd_9x18_MakarovSD','8Rnd_9x18_MakarovSD','8Rnd_9x18_MakarovSD','8Rnd_9x18_MakarovSD'], ['SVD','MakarovSD']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_2", _side], [ [['AKS_74_pso','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VL','PG7VL','PG7VL','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_pso','RPG7V','Makarov']], [['AKS_74_pso','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VL','PG7VL','PG7VL','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_pso','RPG7V','Makarov']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_3", _side], [ [['AK_74_GL','RPG7V','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VL','PG7VL','PG7VL','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25'], ['AK_74_GL','RPG7V']], [['AK_74_GL','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VL','PG7VL','PG7VL','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25'], ['AK_74_GL','RPG7V','Makarov']] ]]; }; //--- Client only. if (local player) then { //--- Default Faction (Buy Menu), this is the faction name defined in core_xxx.sqf files. missionNamespace setVariable [Format["WFBE_%1DEFAULTFACTION", _side], 'CDF']; //--- Import the needed Gear (Available from the gear menu), multiple gear can be used. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_CDF.sqf"; }; //--- Default Loadout [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_DefaultGear", _side], [ ['AKS_74_kobra','Makarov','Binocular','NVGoggles','ItemCompass','ItemMap','ItemRadio','ItemWatch'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','HandGrenade_East','HandGrenade_East','HandGrenade_East','SmokeShellRed','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','Makarov'] ]]; //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_CDF.sqf"; //--- Squads. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Squads\Squad_CDF.sqf"; //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_CDF.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_CDF.sqf"; if (WF_A2_CombinedOps) then { //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_CO_CDF.sqf"; } else { //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_CDF.sqf"; };Private ["_side"]; _side = "GUER"; //--- Generic. missionNamespace setVariable [Format["WFBE_%1CREW", _side], 'GUE_Soldier_Crew']; missionNamespace setVariable [Format["WFBE_%1PILOT", _side], 'GUE_Soldier_1']; missionNamespace setVariable [Format["WFBE_%1SOLDIER", _side], 'GUE_Soldier_1']; //--- Flag texture. missionNamespace setVariable [Format["WFBE_%1FLAG", _side], '\ca\data\Flag_napa_co.paa']; missionNamespace setVariable [Format["WFBE_%1AMBULANCES", _side], ['V3S_TK_GUE_EP1','V3S_Gue']]; missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCKS", _side], ['WarfareRepairTruck_Gue','V3S_Repair_TK_GUE_EP1']]; missionNamespace setVariable [Format["WFBE_%1SALVAGETRUCK", _side], ['WarfareSalvageTruck_Gue','V3S_Salvage_TK_GUE_EP1']]; missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCKS", _side], ['WarfareSupplyTruck_Gue','V3S_Supply_TK_GUE_EP1']]; //--- Radio Announcers. missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers", _side], ['WFHQ_CZ0','WFHQ_CZ1','WFHQ_CZ2']]; missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers_Config", _side], 'RadioProtocolCZ']; //--- Paratroopers. missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL1", _side],['GUE_Soldier_CO','GUE_Soldier_AT','GUE_Soldier_2','GUE_Soldier_3','GUE_Soldier_AR','GUE_Soldier_Medic']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL2", _side],['GUE_Soldier_CO','GUE_Soldier_AT','GUE_Soldier_AT','GUE_Soldier_AT','GUE_Soldier_AA','GUE_Soldier_MG','GUE_Soldier_Medic','GUE_Soldier_Scout','GUE_Soldier_Sniper']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL3", _side],['GUE_Soldier_CO','GUE_Soldier_AT','GUE_Soldier_AT','GUE_Soldier_AT','GUE_Soldier_AT','GUE_Soldier_AA','GUE_Soldier_AA','GUE_Soldier_AR','GUE_Soldier_Medic','GUE_Soldier_Scout','GUE_Soldier_AT','GUE_Soldier_Sniper']]; missionNamespace setVariable [Format["WFBE_%1PARACARGO", _side], 'Mi17_Civilian']; //--- Paratroopers, Vehicle. missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCK", _side], 'WarfareRepairTruck_Gue'];//--- Repair Truck model. missionNamespace setVariable [Format["WFBE_%1STARTINGVEHICLES", _side], ['TT650_Gue','V3S_Gue','Offroad_DSHKM_Gue']];//--- Starting Vehicles. missionNamespace setVariable [Format["WFBE_%1PARAAMMO", _side], ['RUBasicAmmunitionBox','RUBasicWeaponsBox','RULaunchersBox']];//--- Supply Paradropping, Dropped Ammunition. missionNamespace setVariable [Format["WFBE_%1PARAVEHICARGO", _side], 'BRDM2_Gue'];//--- Supply Paradropping, Dropped Vehicle. missionNamespace setVariable [Format["WFBE_%1PARAVEHI", _side], 'Mi17_Civilian'];//--- Supply Paradropping, Vehicle missionNamespace setVariable [Format["WFBE_%1PARACHUTE", _side], 'ParachuteC'];//--- Supply Paradropping, Parachute Model. missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCK", _side], 'WarfareSupplyTruck_Gue'];//--- Supply Truck model. missionNamespace setVariable [Format["WFBE_%1_WORKER", _side], ["Worker3","Worker1"]];//--- Workers model. //--- Server only. if (isServer) then { //--- Patrols. missionNamespace setVariable [Format["WFBE_%1_PATROL_LIGHT", _side], [ ['GUE_Soldier_1','GUE_Soldier_MG','GUE_Soldier_Sniper','GUE_Soldier_Medic'], ['GUE_Soldier_CO','GUE_Soldier_AR','GUE_Soldier_3','GUE_Soldier_AT','GUE_Soldier_2'], ['Offroad_DSHKM_Gue','Offroad_SPG9_Gue'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_MEDIUM", _side], [ ['BRDM2_GUE','BRDM2_GUE'], ['V3S_GUE','GUE_Soldier_CO','GUE_Soldier_AT','GUE_Soldier_MG','GUE_Soldier_AT'], ['BMP2_GUE','GUE_Soldier_AA','GUE_Soldier_AA','GUE_Soldier_Medic'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_HEAVY", _side], [ ['BMP2_GUE','BMP2_GUE'], ['T72_GUE','T72_GUE'], ['GUE_Soldier_Sniper','GUE_Soldier_Scout','GUE_Soldier_Sniper'] ]]; //--- Base Patrols. if ((missionNamespace getVariable "WFBE_C_BASE_PATROLS_INFANTRY") > 0) then { missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_0", _side],['GUE_Soldier_CO','GUE_Soldier_1','GUE_Soldier_1','GUE_Soldier_AR','GUE_Soldier_GL','GUE_Soldier_MG']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_1", _side],['GUE_Soldier_CO','GUE_Soldier_1','GUE_Soldier_1','GUE_Soldier_MG','GUE_Soldier_AT','GUE_Soldier_Medic']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_2", _side],['GUE_Soldier_CO','GUE_Soldier_1','GUE_Soldier_1','GUE_Soldier_AT','GUE_Soldier_AA','GUE_Soldier_Sniper']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_3", _side],['GUE_Soldier_CO','GUE_Soldier_1','GUE_Soldier_AR','GUE_Soldier_AT','GUE_Soldier_AT','GUE_Soldier_GL']]; }; //--- AI Loadouts [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_0", _side], [ [['AKS_74_kobra','RPG18','Makarov','Binocular','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','RPG18','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','RPG18','Makarov']], [['AKS_74_U','RPG18','Makarov','Binocular','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','RPG18','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_U','RPG18','Makarov']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_1", _side], [ [['AKS_74_kobra','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7V','PG7V','PG7V','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','RPG7V','Makarov']], [['AKS_74_kobra','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7V','PG7V','PG7V','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','RPG7V','Makarov']], [['SVD','MakarovSD','Binocular','NVGoggles','ItemRadio','ItemMap'], ['10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','HandGrenade_East','HandGrenade_East','8Rnd_9x18_MakarovSD','8Rnd_9x18_MakarovSD','8Rnd_9x18_MakarovSD','8Rnd_9x18_MakarovSD'], ['SVD','MakarovSD']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_2", _side], [ [['AKS_74_pso','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VL','PG7VL','PG7VL','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_pso','RPG7V','Makarov']], [['AKS_74_pso','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VL','PG7VL','PG7VL','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_pso','RPG7V','Makarov']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_3", _side], [ [['AK_74_GL','RPG7V','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VL','PG7VL','PG7VL','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25'], ['AK_74_GL','RPG7V']], [['AK_74_GL','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VL','PG7VL','PG7VL','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25'], ['AK_74_GL','RPG7V','Makarov']] ]]; }; //--- Client only. if (local player) then { //--- Default Faction (Buy Menu), this is the faction name defined in core_xxx.sqf files. missionNamespace setVariable [Format["WFBE_%1DEFAULTFACTION", _side], 'Guerilla']; //--- Import the needed Gear (Available from the gear menu), multiple gear can be used. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_GUE.sqf"; if (WF_A2_CombinedOps) then { (_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_TKGUE.sqf"; }; }; //--- Default Loadout [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_DefaultGear", _side], [ ['AKS_74_kobra','Makarov','Binocular','NVGoggles','ItemCompass','ItemMap','ItemRadio','ItemWatch'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','HandGrenade_East','HandGrenade_East','HandGrenade_East','SmokeShellRed','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','Makarov'] ]]; if (WF_A2_CombinedOps) then { //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_CO_GUE.sqf"; //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_CO_GUE.sqf"; //--- Squads. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Squads\Squad_GUE.sqf"; //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_CO_GUE.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_CO_GUE.sqf"; } else { //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_GUE.sqf"; //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_GUE.sqf"; //--- Squads. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Squads\Squad_GUE.sqf"; //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_GUE.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_GUE.sqf"; };Private ["_side"]; _side = "EAST"; //--- Generic. missionNamespace setVariable [Format["WFBE_%1CREW", _side], 'Ins_Soldier_Crew']; missionNamespace setVariable [Format["WFBE_%1PILOT", _side], 'Ins_Soldier_Pilot']; missionNamespace setVariable [Format["WFBE_%1SOLDIER", _side], 'Ins_Soldier_1']; //--- Flag texture. missionNamespace setVariable [Format["WFBE_%1FLAG", _side], '\Ca\Data\flag_chdkz_co.paa']; missionNamespace setVariable [Format["WFBE_%1AMBULANCES", _side], ['BMP2_Ambul_INS']]; missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCKS", _side], ['UralRepair_INS']]; missionNamespace setVariable [Format["WFBE_%1SALVAGETRUCK", _side], ['WarfareSalvageTruck_INS']]; missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCKS", _side], ['WarfareSupplyTruck_INS']]; missionNamespace setVariable [Format["WFBE_%1UAV", _side], 'Pchela1T']; //--- Radio Announcers. missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers", _side], ['WFHQ_CZ0','WFHQ_CZ1','WFHQ_CZ2']]; missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers_Config", _side], 'RadioProtocolCZ']; //--- Paratroopers. missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL1", _side],['USMC_Soldier_SL','USMC_Soldier_LAT','USMC_Soldier','USMC_Soldier2','USMC_Soldier_AR','USMC_Soldier_Medic']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL2", _side],['USMC_Soldier_SL','USMC_Soldier_AT','USMC_Soldier_AT','USMC_Soldier_AT','USMC_Soldier_AA','USMC_Soldier_MG','USMC_Soldier_Medic','USMC_SoldierS_Spotter','USMC_SoldierS_Sniper']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL3", _side],['FR_Assault_R','USMC_Soldier_HAT','USMC_Soldier_HAT','USMC_Soldier_HAT','USMC_Soldier_HAT','USMC_Soldier_AA','USMC_Soldier_AA','FR_AR','FR_AC','USMC_Soldier_Medic','FR_Marksman','USMC_Soldier_AT','USMC_SoldierS_Sniper']]; missionNamespace setVariable [Format["WFBE_%1PARACARGO", _side], 'Mi17_Ins']; //--- Paratroopers, Vehicle. missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCK", _side], 'UralRepair_INS'];//--- Repair Truck model. missionNamespace setVariable [Format["WFBE_%1STARTINGVEHICLES", _side], ['BMP2_Ambul_INS','Ural_INS']];//--- Starting Vehicles. missionNamespace setVariable [Format["WFBE_%1PARAAMMO", _side], ['RUBasicAmmunitionBox','RUBasicWeaponsBox','RULaunchersBox']];//--- Supply Paradropping, Dropped Ammunition. missionNamespace setVariable [Format["WFBE_%1PARAVEHICARGO", _side], 'BRDM2_INS'];//--- Supply Paradropping, Dropped Vehicle. missionNamespace setVariable [Format["WFBE_%1PARAVEHI", _side], 'Mi17_Ins'];//--- Supply Paradropping, Vehicle missionNamespace setVariable [Format["WFBE_%1PARACHUTE", _side], 'ParachuteMediumEast'];//--- Supply Paradropping, Parachute Model. missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCK", _side], 'WarfareSupplyTruck_INS'];//--- Supply Truck model. missionNamespace setVariable [Format["WFBE_%1_WORKER", _side], ["Worker3","Worker1"]];//--- Workers model. //--- Server only. if (isServer) then { //--- Patrols. missionNamespace setVariable [Format["WFBE_%1_PATROL_LIGHT", _side], [ ['Ins_Commander','Ins_Soldier_MG','Ins_Soldier_Sniper','Ins_Soldier_Medic'], ['Ins_Commander','Ins_Soldier_AR','Ins_Soldier_GL','Ins_Soldier_AT','Ins_Soldier_1'], ['UAZ_MG_INS','UAZ_SPG9_INS'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_MEDIUM", _side], [ ['BRDM2_INS','BRDM2_ATGM_INS'], ['Ural_INS','Ins_Commander','Ins_Soldier_AT','Ins_Soldier_MG','Ins_Soldier_AT'], ['BMP2_INS','Ins_Soldier_AA','Ins_Soldier_AA','Ins_Soldier_Medic'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_HEAVY", _side], [ ['T72_INS','BMP2_INS'], ['T72_INS','T72_INS'], ['BMP2_INS','BMP2_INS','Ins_Commander','Ins_Soldier_MG','Ins_Soldier_Sniper','Ins_Soldier_Medic','Ins_Soldier_AT','Ins_Soldier_AT','Ins_Soldier_1'], ['BMP2_INS','Ins_Commander','Ins_Soldier_Medic','Ins_Soldier_GL','Ins_Soldier_1','Ins_Soldier_AR'] ]]; //--- Base Patrols. if ((missionNamespace getVariable "WFBE_C_BASE_PATROLS_INFANTRY") > 0) then { missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_0", _side],['Ins_Commander','Ins_Soldier_1','Ins_Soldier_1','Ins_Soldier_AR','Ins_Soldier_GL','Ins_Soldier_MG']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_1", _side],['Ins_Commander','Ins_Soldier_1','Ins_Soldier_1','Ins_Soldier_MG','Ins_Soldier_AT','Ins_Soldier_Medic']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_2", _side],['Ins_Commander','Ins_Soldier_1','Ins_Soldier_1','Ins_Soldier_AT','Ins_Soldier_AA','Ins_Soldier_Sniper']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_3", _side],['Ins_Commander','Ins_Soldier_1','Ins_Soldier_AR','Ins_Soldier_AT','Ins_Soldier_AT','Ins_Soldier_GL']]; }; //--- AI Loadouts [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_0", _side], [ [['AKS_74_kobra','RPG18','Makarov','Binocular','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','RPG18','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','RPG18','Makarov']], [['AKS_74_U','RPG18','Makarov','Binocular','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','RPG18','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_U','RPG18','Makarov']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_1", _side], [ [['AKS_74_kobra','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7V','PG7V','PG7V','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','RPG7V','Makarov']], [['AKS_74_kobra','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7V','PG7V','PG7V','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','RPG7V','Makarov']], [['SVD','MakarovSD','Binocular','NVGoggles','ItemRadio','ItemMap'], ['10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','HandGrenade_East','HandGrenade_East','8Rnd_9x18_MakarovSD','8Rnd_9x18_MakarovSD','8Rnd_9x18_MakarovSD','8Rnd_9x18_MakarovSD'], ['SVD','MakarovSD']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_2", _side], [ [['AKS_74_pso','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VL','PG7VL','PG7VL','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_pso','RPG7V','Makarov']], [['AKS_74_pso','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VL','PG7VL','PG7VL','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_pso','RPG7V','Makarov']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_3", _side], [ [['AK_74_GL','RPG7V','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VL','PG7VL','PG7VL','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25'], ['AK_74_GL','RPG7V']], [['AK_74_GL','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VL','PG7VL','PG7VL','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25'], ['AK_74_GL','RPG7V','Makarov']] ]]; }; //--- Client only. if (local player) then { //--- Default Faction (Buy Menu), this is the faction name defined in core_xxx.sqf files. missionNamespace setVariable [Format["WFBE_%1DEFAULTFACTION", _side], 'Insurgents']; //--- Import the needed Gear (Available from the gear menu), multiple gear can be used. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_INS.sqf"; }; //--- Default Loadout [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_DefaultGear", _side], [ ['AKS_74_kobra','Makarov','Binocular','NVGoggles','ItemCompass','ItemMap','ItemRadio','ItemWatch'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','HandGrenade_East','HandGrenade_East','HandGrenade_East','SmokeShellRed','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','Makarov'] ]]; //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_INS.sqf"; //--- Squads. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Squads\Squad_INS.sqf"; //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_INS.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_INS.sqf"; if (WF_A2_CombinedOps) then { //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_CO_INS.sqf"; } else { //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_INS.sqf"; };Private ["_side"]; _side = "WEST"; //--- Generic. missionNamespace setVariable [Format["WFBE_%1CREW", _side], 'OFrP_Soldier_Inf_Crew']; missionNamespace setVariable [Format["WFBE_%1PILOT", _side], 'OFrP_Soldier_Pilot1_ADA']; missionNamespace setVariable [Format["WFBE_%1SOLDIER", _side], 'OFrP_Soldier_Inf']; //--- Flag texture. missionNamespace setVariable [Format["WFBE_%1FLAG", _side], '\ca\ca_e\data\flag_nato_co.paa']; missionNamespace setVariable [Format["WFBE_%1AMBULANCES", _side], ['OFrP_VAB_SAN','OFrP_VAB_SAN_desert','OFrP_VAB_SAN_UN','OFrP_Puma_RESCO']]; missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCKS", _side], ['OFrP_GBC180_lot7']]; missionNamespace setVariable [Format["WFBE_%1SALVAGETRUCK", _side], ['WarfareSalvageTruck_USMC','MtvrSalvage_DES_EP1']]; missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCKS", _side], ['WarfareSupplyTruck_USMC','MtvrSupply_DES_EP1']]; missionNamespace setVariable [Format["WFBE_%1UAV", _side], 'MQ9PredatorB_US_EP1']; //--- Radio Announcers. missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers", _side], ['WFHQ_EN0_EP1','WFHQ_EN1_EP1','WFHQ_EN2_EP1','WFHQ_EN4_EP1','WFHQ_EN5_EP1']]; missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers_Config", _side], 'RadioProtocol_EP1_EN']; //--- Paratroopers. missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL1", _side],['OFrP_Soldier_Inf_TeamLeader','OFrP_Soldier_Inf_ABL','OFrP_Soldier_Inf','OFrP_Soldier_Inf','OFrP_Soldier_Inf_Minimi','OFrP_Soldier_Inf_Medic']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL2", _side],['OFrP_Soldier_Inf_TeamLeader','OFrP_Soldier_Inf_LRAC89','OFrP_Soldier_Inf_LRAC89','OFrP_Soldier_Inf_LRAC89','OFrP_Soldier_Inf_Stinger','OFrP_Soldier_Inf_Minimi','OFrP_Soldier_Inf_Medic','OFrP_Soldier_Inf_SniperFRF2','OFrP_Soldier_Inf_SniperFRF2']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL3", _side],['OFrP_Soldier_CoS_TeamLeader','OFrP_Soldier_Inf_ERYX','OFrP_Soldier_Inf_ERYX','OFrP_Soldier_Inf_ERYX','OFrP_Soldier_Inf_ERYX','OFrP_Soldier_Inf_Stinger','OFrP_Soldier_Inf_Stinger','OFrP_Soldier_CoS_Minimi','OFrP_Soldier_CoS_Saboteur','OFrP_Soldier_Inf_Medic','OFrP_Soldier_COS_SniperFRF2','OFrP_Soldier_Inf_LRAC89','OFrP_Soldier_Inf_Scout']]; missionNamespace setVariable [Format["WFBE_%1PARACARGO", _side], 'OFrP_Transall_T'];//--- Paratroopers, Vehicle. missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCK", _side], 'OFrP_GBC180_lot7'];//--- Repair Truck model. missionNamespace setVariable [Format["WFBE_%1STARTINGVEHICLES", _side], ['OFrP_VAB_SAN_desert','OFrP_TRM2000']];//--- Starting Vehicles. missionNamespace setVariable [Format["WFBE_%1PARAAMMO", _side], ['OFrP_25Rnd_556x45_ammoBox','OFrP_30Rnd_556x45_ammoBox','OFrP_200Rnd_556x45_ammoBox','OFrP_FamasF1_ammoBox','OFrP_FRF2_ammoBox','OFrP_ABL_ammoBox','OFrP_Eryx_ammoBox','OFrP_APILAS_ammoBox','OFrP_LRAC_ammoBox','OFrP_Charges_ammoBox']];//--- Supply Paradropping, Dropped Ammunition. missionNamespace setVariable [Format["WFBE_%1PARAVEHICARGO", _side], 'OFrP_VBL_desert'];//--- Supply Paradropping, Dropped Vehicle. missionNamespace setVariable [Format["WFBE_%1PARAVEHI", _side], 'OFrP_Caracal'];//--- Supply Paradropping, Vehicle missionNamespace setVariable [Format["WFBE_%1PARACHUTE", _side], 'ParachuteMediumWest_EP1'];//--- Supply Paradropping, Parachute Model. missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCK", _side], 'MtvrSupply_DES_EP1'];//--- Supply Truck model. missionNamespace setVariable [Format["WFBE_%1_WORKER", _side], ["TK_CIV_Worker02_EP1"]];//--- Workers model. //--- Server only. if (isServer) then { //--- Patrols. missionNamespace setVariable [Format["WFBE_%1_PATROL_LIGHT", _side], [ ['OFrP_Soldier_Inf_TeamLeader','OFrP_Soldier_Inf_Minimi','OFrP_Soldier_Inf_SniperFRF2','OFrP_Soldier_Inf_Medic'], ['OFrP_Soldier_Inf_TeamLeader','OFrP_Soldier_Inf_Minimi','OFrP_Soldier_Inf_Grenadier','OFrP_Soldier_Inf_LRAC89','OFrP_Soldier_Inf'], ['OFrP_VBL_127_desert','OFrP_VBL_ANF1_desert'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_MEDIUM", _side], [ ['OFrP_VAB_TOP127_desert','OFrP_VAB_Mephisto_desert'], ['OFrP_TRM2000','OFrP_Soldier_Inf_TeamLeader','OFrP_Soldier_Inf_LRAC89','OFrP_Soldier_Inf_Minimi','OFrP_Soldier_Inf_LRAC89'], ['OFrP_VBCI_vci','OFrP_Soldier_Inf_Stinger','OFrP_Soldier_Inf_Stinger','OFrP_Soldier_Inf_Medic'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_HEAVY", _side], [ ['OFrP_VBCI_vci','OFrP_VBCI_vci'], ['OFrP_Leclerc_desert','OFrP_Leclerc_desert'], ['OFrP_VBCI_vci','OFrP_VBCI_vci','OFrP_Soldier_Inf_TeamLeader','OFrP_Soldier_Inf_Minimi','OFrP_Soldier_Inf_Scout','OFrP_Soldier_Inf_Medic','OFrP_Soldier_Inf_ERYX','US_Soldier_AHAT_EP1','OFrP_Soldier_Inf'], ['OFrP_VAB_TOP127_desert','OFrP_Soldier_Inf_TeamLeader','OFrP_Soldier_Inf_Medic','OFrP_Soldier_Inf_Grenadier','OFrP_Soldier_Inf','OFrP_Soldier_Inf_Minimi'] ]]; //--- Base Patrols. if ((missionNamespace getVariable "WFBE_C_BASE_PATROLS_INFANTRY") > 0) then { missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_0", _side],['OFrP_Soldier_Inf_TeamLeader','OFrP_Soldier_Inf','OFrP_Soldier_Inf','OFrP_Soldier_Inf_Minimi','OFrP_Soldier_Inf_Grenadier','OFrP_Soldier_Inf_Minimi']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_1", _side],['OFrP_Soldier_Inf_TeamLeader','OFrP_Soldier_Inf','OFrP_Soldier_Inf','OFrP_Soldier_Inf_Minimi','OFrP_Soldier_Inf_ABL','OFrP_Soldier_Inf_Medic']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_2", _side],['OFrP_Soldier_Inf_TeamLeader','OFrP_Soldier_Inf','OFrP_Soldier_Inf','OFrP_Soldier_Inf_LRAC89','OFrP_Soldier_Inf_Stinger','OFrP_Soldier_Inf_SniperFRF2']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_3", _side],['OFrP_Soldier_Inf_TeamLeader','OFrP_Soldier_Inf','OFrP_Soldier_Inf_Minimi','OFrP_Soldier_Inf_ERYX','OFrP_Soldier_Inf_ABL','OFrP_Soldier_Inf_Grenadier']]; }; //--- AI Loadouts [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_0", _side], [ [['OFrP_FAMAS_F1','OFrP_ABL','OFrP_PAMAS','OFrP_Binocular_Vector','ItemRadio','ItemMap'], ['OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_1Rnd_84_ABL','15Rnd_9x19_M9','15Rnd_9x19_M9','15Rnd_9x19_M9','15Rnd_9x19_M9'], ['OFrP_FAMAS_F1','OFrP_ABL','OFrP_PAMAS']], [['OFrP_HK_416','OFrP_ABL','OFrP_PAMAS','OFrP_Binocular_Vector','ItemRadio','ItemMap'], ['30rnd_9x19_MP5','30rnd_9x19_MP5','30rnd_9x19_MP5','30rnd_9x19_MP5','30rnd_9x19_MP5','30rnd_9x19_MP5','OFrP_1Rnd_84_ABL','15Rnd_9x19_M9','15Rnd_9x19_M9','15Rnd_9x19_M9','15Rnd_9x19_M9'], ['OFrP_HK_416','OFrP_ABL','OFrP_PAMAS']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_1", _side], [ [['OFrP_FAMAS_G2','OFrP_ABL','OFrP_PAMAS','OFrP_Binocular_Vector','NVGoggles','ItemRadio','ItemMap'], ['OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_1Rnd_84_ABL','15Rnd_9x19_M9','15Rnd_9x19_M9','15Rnd_9x19_M9','15Rnd_9x19_M9'], ['OFrP_FAMAS_G2','OFrP_ABL','OFrP_PAMAS']], [['OFrP_HK_416_EOTech','OFrP_ABL','OFrP_PAMAS','OFrP_Binocular_Vector','NVGoggles','ItemRadio','ItemMap'], ['30rnd_9x19_MP5','30rnd_9x19_MP5','30rnd_9x19_MP5','30rnd_9x19_MP5','30rnd_9x19_MP5','30rnd_9x19_MP5','OFrP_1Rnd_84_ABL','15Rnd_9x19_M9','15Rnd_9x19_M9','15Rnd_9x19_M9','15Rnd_9x19_M9'], ['OFrP_HK_416_EOTech','OFrP_ABL','OFrP_PAMAS']], [['OFrP_FRF2_J8','OFrP_PAMAS_SD','OFrP_Binocular_Vector','NVGoggles','ItemRadio','ItemMap'], ['OFrP_762x51_10cp','OFrP_762x51_10cp','OFrP_762x51_10cp','OFrP_762x51_10cp','OFrP_762x51_10cp','OFrP_762x51_10cp','OFrP_762x51_10cp','OFrP_762x51_10cp','OFrP_762x51_10cp','OFrP_762x51_10cp','HandGrenade_West','HandGrenade_West','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD'], ['OFrP_FRF2_J8','OFrP_PAMAS_SD']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_2", _side], [ [['OFrP_FAMAS_F1_EOTech','OFrP_LRAC','OFrP_PAMAS','OFrP_Binocular_Vector','NVGoggles','ItemRadio','ItemMap'], ['OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_1Rnd_89_LRAC','OFrP_1Rnd_89_LRAC','15Rnd_9x19_M9','15Rnd_9x19_M9','15Rnd_9x19_M9','15Rnd_9x19_M9'], ['OFrP_FAMAS_F1_EOTech','OFrP_LRAC','OFrP_PAMAS']], [['OFrP_HK_416','OFrP_LRAC','OFrP_PAMAS','OFrP_Binocular_Vector','NVGoggles','ItemRadio','ItemMap'], ['30rnd_9x19_MP5','30rnd_9x19_MP5','30rnd_9x19_MP5','30rnd_9x19_MP5','30rnd_9x19_MP5','30rnd_9x19_MP5','OFrP_1Rnd_89_LRAC','OFrP_1Rnd_89_LRAC','15Rnd_9x19_M9','15Rnd_9x19_M9','15Rnd_9x19_M9','15Rnd_9x19_M9'], ['OFrP_HK_416','OFrP_LRAC','OFrP_PAMAS']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_3", _side], [ [['OFrP_FAMAS_F1_EOTech_M203','OFrP_LRAC','OFrP_Binocular_Vector','NVGoggles','ItemRadio','ItemMap'], ['OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_1Rnd_89_LRAC','OFrP_1Rnd_89_LRAC','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203'], ['OFrP_FAMAS_F1_EOTech_M203','OFrP_LRAC']], [['OFrP_FAMAS_F1_J4_M203','OFrP_ERYX','OFrP_PAMAS','OFrP_Binocular_Vector','NVGoggles','ItemRadio','ItemMap'], ['OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_1Rnd_136_ERYX','15Rnd_9x19_M9','15Rnd_9x19_M9','15Rnd_9x19_M9','15Rnd_9x19_M9','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203'], ['OFrP_FAMAS_F1_J4_M203','OFrP_ERYX','OFrP_PAMAS']] ]]; }; //--- Client only. if (local player) then { //--- Default Faction (Buy Menu), this is the faction name defined in core_xxx.sqf files. missionNamespace setVariable [Format["WFBE_%1DEFAULTFACTION", _side], 'OFrP']; //--- Import the needed Gear (Available from the gear menu), multiple gear can be used. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_OFrP.sqf"; }; //--- Default Loadout [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_DefaultGear", _side], [ ['OFrP_FAMAS_F1','OFrP_PAMAS','OFrP_Binocular_Vector','NVGoggles','ItemCompass','ItemMap','ItemRadio','ItemWatch'], ['OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','OFrP_556x45_25cp','HandGrenade_West','HandGrenade_West','HandGrenade_West','SmokeShellBlue','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD'], ['OFrP_FAMAS_F1','OFrP_PAMAS'] ]]; //--- Squads. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Squads\Squad_OFrP.sqf"; if (WF_A2_CombinedOps) then { //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_CO_OFrP.sqf"; //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_CO_OFrP.sqf"; //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_CO_OFrP.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_CO_US.sqf"; } else { //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_OA_OFrP.sqf"; //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_OA_OFrP.sqf"; //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_OA_OFrP.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_OA_US.sqf"; };Private ["_side"]; _side = "GUER"; //--- Generic. missionNamespace setVariable [Format["WFBE_%1CREW", _side], "Soldier_Crew_PMC"]; missionNamespace setVariable [Format["WFBE_%1PILOT", _side], "Soldier_Pilot_PMC"]; missionNamespace setVariable [Format["WFBE_%1SOLDIER", _side], "Soldier_PMC"]; //--- Flag texture. missionNamespace setVariable [Format["WFBE_%1FLAG", _side], '\ca\ca_e\data\flag_tkg_co.paa']; missionNamespace setVariable [Format["WFBE_%1AMBULANCES", _side], ['V3S_TK_GUE_EP1','V3S_Gue']]; missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCKS", _side], ['WarfareRepairTruck_Gue','V3S_Repair_TK_GUE_EP1']]; missionNamespace setVariable [Format["WFBE_%1SALVAGETRUCK", _side], ['WarfareSalvageTruck_Gue','V3S_Salvage_TK_GUE_EP1']]; missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCKS", _side], ['WarfareSupplyTruck_Gue','V3S_Supply_TK_GUE_EP1']]; //--- Radio Announcers. missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers", _side], ['WFHQ_EN0_EP1','WFHQ_EN1_EP1','WFHQ_EN2_EP1','WFHQ_EN4_EP1','WFHQ_EN5_EP1']]; missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers_Config", _side], 'RadioProtocol_EP1_EN']; //--- Paratroopers. missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL1", _side],['Soldier_TL_PMC','Soldier_AT_PMC','Soldier_Bodyguard_M4_PMC','Soldier_AT_PMC','Soldier_MG_PKM_PMC','Soldier_Medic_PMC']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL2", _side],['Soldier_TL_PMC','Soldier_AT_PMC','Soldier_AT_PMC','Soldier_AT_PMC','Soldier_AA_PMC','Soldier_MG_PMC','Soldier_Medic_PMC','Soldier_Sniper_PMC','Soldier_Sniper_PMC']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL3", _side],['Soldier_TL_PMC','Soldier_AT_PMC','Soldier_AT_PMC','Soldier_AT_PMC','Soldier_AT_PMC','Soldier_AT_PMC','Soldier_AA_PMC','Soldier_AA_PMC','Soldier_Bodyguard_AA12_PMC','Soldier_Bodyguard_M4_PMC','Soldier_Sniper_PMC','Soldier_Sniper_PMC']]; missionNamespace setVariable [Format["WFBE_%1PARACARGO", _side], 'Ka60_PMC'];//--- Paratroopers, Vehicle. missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCK", _side], 'V3S_Repair_TK_GUE_EP1'];//--- Repair Truck model. missionNamespace setVariable [Format["WFBE_%1STARTINGVEHICLES", _side], ['V3S_TK_GUE_EP1','Offroad_DSHKM_TK_GUE_EP1']];//--- Starting Vehicles. missionNamespace setVariable [Format["WFBE_%1PARAAMMO", _side], ['TKBasicAmmunitionBox_EP1','TKBasicWeapons_EP1','TKLaunchers_EP1']];//--- Supply Paradropping, Dropped Ammunition. missionNamespace setVariable [Format["WFBE_%1PARAVEHICARGO", _side], 'SUV_PMC'];//--- Supply Paradropping, Dropped Vehicle. missionNamespace setVariable [Format["WFBE_%1PARAVEHI", _side], 'Ka60_PMC'];//--- Supply Paradropping, Vehicle missionNamespace setVariable [Format["WFBE_%1PARACHUTE", _side], 'ParachuteMediumEast_EP1'];//--- Supply Paradropping, Parachute Model. missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCK", _side], 'V3S_Supply_TK_GUE_EP1'];//--- Supply Truck model. missionNamespace setVariable [Format["WFBE_%1_WORKER", _side], ["TK_CIV_Worker01_EP1"]];//--- Workers model. //--- Server only. if (isServer) then { //--- Patrols. missionNamespace setVariable [Format["WFBE_%1_PATROL_LIGHT", _side], [ ['Soldier_PMC','Soldier_MG_PKM_PMC','Soldier_Sniper_PMC','Soldier_Medic_PMC'], ['Soldier_TL_PMC','Soldier_MG_PMC','Soldier_M4A3_PMC','Soldier_AT_PMC','Soldier_GL_PMC'], ['ArmoredSUV_PMC','ArmoredSUV_PMC'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_MEDIUM", _side], [ ['BTR40_MG_TK_GUE_EP1','Ural_ZU23_TK_GUE_EP1'], ['SUV_PMC','Soldier_TL_PMC','Soldier_AT_PMC','Soldier_Bodyguard_AA12_PMC'], ['BTR40_MG_TK_GUE_EP1','Soldier_AA_PMC','Soldier_AA_PMC','Soldier_Medic_PMC'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_HEAVY", _side], [ ['T34_TK_GUE_EP1','T34_TK_GUE_EP1'], ['T55_TK_GUE_EP1','T55_TK_GUE_EP1'], ['Ka60_GL_PMC','Soldier_TL_PMC','Soldier_AT_PMC','Soldier_Bodyguard_M4_PMC','Soldier_Bodyguard_M4_PMC'] ]]; //--- Base Patrols. if ((missionNamespace getVariable "WFBE_C_BASE_PATROLS_INFANTRY") > 0) then { missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_0", _side],['Soldier_TL_PMC','Soldier_Bodyguard_M4_PMC','Soldier_GL_PMC','Soldier_MG_PKM_PMC','Soldier_GL_PMC','Soldier_MG_PMC']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_1", _side],['Soldier_TL_PMC','Soldier_Bodyguard_AA12_PMC','Soldier_Bodyguard_M4_PMC','Soldier_MG_PMC','Soldier_AT_PMC','Soldier_Medic_PMC']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_2", _side],['Soldier_TL_PMC','Soldier_Bodyguard_M4_PMC','Soldier_Bodyguard_AA12_PMC','Soldier_AT_PMC','Soldier_AA_PMC','Soldier_Sniper_PMC']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_3", _side],['Soldier_TL_PMC','Soldier_Bodyguard_M4_PMC','Soldier_MG_PKM_PMC','Soldier_AT_PMC','Soldier_AT_PMC','Soldier_M4A3_PMC']]; }; //--- AI Loadouts [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_0", _side], [ [['AKS_74_kobra','RPG18','Makarov','Binocular','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','RPG18','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','RPG18','Makarov']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_1", _side], [ [['m8_carbine_pmc','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','PG7V','PG7V','PG7V','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['m8_carbine_pmc','RPG7V','Makarov']], [['m8_compact_pmc','M9SD','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','HandGrenade_West','HandGrenade_West','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['m8_compact_pmc','M9SD']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_2", _side], [ [['m8_sharpshooter','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','PG7VL','PG7VL','PG7VL','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['m8_sharpshooter','RPG7V','Makarov']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_3", _side], [ [['m8_carbineGL','RPG7V','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','PG7VL','PG7VL','PG7VL','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203'], ['m8_carbineGL','RPG7V']], [['m8_carbineGL','M47Launcher_EP1','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','Dragon_EP1','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203'], ['m8_carbineGL','M47Launcher_EP1','Makarov']] ]]; }; //--- Client only. if (local player) then { //--- Default Faction (Buy Menu), this is the faction name defined in core_xxx.sqf files. missionNamespace setVariable [Format["WFBE_%1DEFAULTFACTION", _side], 'PMC']; //--- Import the needed Gear (Available from the gear menu), multiple gear can be used. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_PMC.sqf"; (_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_TKGUE.sqf"; }; //--- Default Loadout [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_DefaultGear", _side], [ ['AKS_74_kobra','Makarov','Binocular','NVGoggles','ItemCompass','ItemMap','ItemRadio','ItemWatch'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','HandGrenade_East','HandGrenade_East','HandGrenade_East','SmokeShellRed','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','Makarov'] ]]; //--- Squads. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Squads\Squad_OA_TKGUE.sqf"; if (WF_A2_CombinedOps) then { //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_CO_GUE.sqf"; //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_CO_GUE.sqf"; //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_CO_GUE.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_CO_GUE.sqf"; } else { //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_OA_TKGUE.sqf"; //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_OA_TKGUE.sqf"; //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_OA_TKGUE.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_OA_TKGUE.sqf"; };Private ["_side"]; _side = "EAST"; //--- Generic. missionNamespace setVariable [Format["WFBE_%1CREW", _side], 'RU_Soldier_Crew']; missionNamespace setVariable [Format["WFBE_%1PILOT", _side], 'RU_Soldier_Pilot']; missionNamespace setVariable [Format["WFBE_%1SOLDIER", _side], 'RU_Soldier']; //--- Flag texture. missionNamespace setVariable [Format["WFBE_%1FLAG", _side], '\Ca\Data\flag_rus_co.paa']; missionNamespace setVariable [Format["WFBE_%1AMBULANCES", _side], ['GAZ_Vodnik_MedEvac','M113Ambul_TK_EP1','Mi17_medevac_RU','M113Ambul_TK_EP1']]; missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCKS", _side], ['KamazRepair','UralRepair_TK_EP1']]; missionNamespace setVariable [Format["WFBE_%1SALVAGETRUCK", _side], ['WarfareSalvageTruck_RU','UralSalvage_TK_EP1']]; missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCKS", _side], ['WarfareSupplyTruck_RU','UralSupply_TK_EP1']]; missionNamespace setVariable [Format["WFBE_%1UAV", _side], 'Pchela1T']; //--- Radio Announcers. missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers", _side], ['WFHQ_RU0','WFHQ_RU1','WFHQ_RU2']]; missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers_Config", _side], 'RadioProtocolRU']; //--- Paratroopers. missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL1", _side],['RU_Soldier_SL','RU_Soldier_LAT','RU_Soldier','RU_Soldier2','RU_Soldier_AR','RU_Soldier_Medic']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL2", _side],['RU_Soldier_SL','RU_Soldier_AT','RU_Soldier_AT','RU_Soldier_AT','RU_Soldier_AA','RU_Soldier_MG','RU_Soldier_Medic','RU_Soldier_Marksman','RUS_Soldier_Marksman']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL3", _side],['MVD_Soldier_TL','RU_Soldier_HAT','RU_Soldier_HAT','RU_Soldier_HAT','RU_Soldier_HAT','RU_Soldier_HAT','RU_Soldier_AA','RU_Soldier_AA','MVD_Soldier_MG','RUS_Commander','MVD_Soldier_Sniper','RUS_Soldier_Marksman']]; missionNamespace setVariable [Format["WFBE_%1PARACARGO", _side], 'Mi17_Ins'];//--- Paratroopers, Vehicle. missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCK", _side], 'KamazRepair'];//--- Repair Truck model. missionNamespace setVariable [Format["WFBE_%1STARTINGVEHICLES", _side], ['GAZ_Vodnik_MedEvac','Kamaz']];//--- Starting Vehicles. missionNamespace setVariable [Format["WFBE_%1PARAAMMO", _side], ['RUBasicAmmunitionBox','RUBasicWeaponsBox','RULaunchersBox']];//--- Supply Paradropping, Dropped Ammunition. missionNamespace setVariable [Format["WFBE_%1PARAVEHICARGO", _side], 'UAZ_RU'];//--- Supply Paradropping, Dropped Vehicle. missionNamespace setVariable [Format["WFBE_%1PARAVEHI", _side], 'Mi17_Ins'];//--- Supply Paradropping, Vehicle missionNamespace setVariable [Format["WFBE_%1PARACHUTE", _side], 'ParachuteMediumEast'];//--- Supply Paradropping, Parachute Model. missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCK", _side], 'WarfareSupplyTruck_RU'];//--- Supply Truck model. missionNamespace setVariable [Format["WFBE_%1_WORKER", _side], ["Worker3","Worker1"]];//--- Workers model. //--- Server only. if (isServer) then { //--- Patrols. missionNamespace setVariable [Format["WFBE_%1_PATROL_LIGHT", _side], [ ['RU_Soldier_TL','RU_Soldier_MG','RU_Soldier_Sniper','RU_Soldier_Medic'], ['RU_Soldier_TL','RU_Soldier_AR','RU_Soldier_GL','RU_Soldier_LAT','RU_Soldier'], ['GAZ_Vodnik_HMG','GAZ_Vodnik'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_MEDIUM", _side], [ ['BTR90','BTR90'], ['Kamaz','RU_Soldier_TL','RU_Soldier_AT','RU_Soldier_MG','RU_Soldier_LAT'], ['BMP3','RU_Soldier_AA','RU_Soldier_AA','RU_Soldier_Medic'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_HEAVY", _side], [ ['T72_RU','BMP3'], ['T72_RU','T72_RU'], ['BMP3','BMP3','RU_Soldier_TL','RU_Soldier_MG','RU_Soldier_Marksman','RU_Soldier_Medic','RU_Soldier_AT','RU_Soldier_HAT','RU_Soldier'], ['BTR90','RU_Soldier_TL','RU_Soldier_Medic','RU_Soldier_GL','RU_Soldier','RU_Soldier_AR'] ]]; //--- Base Patrols. if ((missionNamespace getVariable "WFBE_C_BASE_PATROLS_INFANTRY") > 0) then { missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_0", _side],['RU_Soldier_SL','RU_Soldier','RU_Soldier','RU_Soldier_AR','RU_Soldier_GL','RU_Soldier_MG']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_1", _side],['RU_Soldier_SL','RU_Soldier','RU_Soldier','RU_Soldier_MG','RU_Soldier_AT','RU_Soldier_Medic']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_2", _side],['RU_Soldier_SL','RU_Soldier','RU_Soldier','RU_Soldier_AT','RU_Soldier_AA','RU_Soldier_Marksman']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_3", _side],['RU_Soldier_SL','RU_Soldier','RU_Soldier_AR','RU_Soldier_HAT','RU_Soldier_AT','RU_Soldier_GL']]; }; //--- AI Loadouts [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_0", _side], [ [['AK_107_kobra','RPG18','Makarov','Binocular','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','RPG18','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AK_107_kobra','RPG18','Makarov']], [['AKS_74_U','RPG18','Makarov','Binocular','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','RPG18','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_U','RPG18','Makarov']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_1", _side], [ [['AK_107_kobra','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7V','PG7V','PG7V','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AK_107_kobra','RPG7V','Makarov']], [['AK_107_kobra','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7V','PG7V','PG7V','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AK_107_kobra','RPG7V','Makarov']], [['SVD','MakarovSD','Binocular','NVGoggles','ItemRadio','ItemMap'], ['10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','HandGrenade_East','HandGrenade_East','8Rnd_9x18_MakarovSD','8Rnd_9x18_MakarovSD','8Rnd_9x18_MakarovSD','8Rnd_9x18_MakarovSD'], ['SVD','MakarovSD']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_2", _side], [ [['AK_107_pso','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VL','PG7VL','PG7VL','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AK_107_pso','RPG7V','Makarov']], [['AK_107_pso','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VL','PG7VL','PG7VL','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AK_107_pso','RPG7V','Makarov']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_3", _side], [ [['AK_107_GL_pso','RPG7V','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VR','PG7VR','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25'], ['AK_107_GL_pso','RPG7V']], [['AK_107_GL_pso','MetisLauncher','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','AT13','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25'], ['AK_107_GL_pso','MetisLauncher','Makarov']] ]]; }; //--- Client only. if (local player) then { //--- Default Faction (Buy Menu), this is the faction name defined in core_xxx.sqf files. missionNamespace setVariable [Format["WFBE_%1DEFAULTFACTION", _side], 'Russians']; //--- Import the needed Gear (Available from the gear menu), multiple gear can be used. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_RU.sqf"; if (WF_A2_CombinedOps) then { (_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_TKA.sqf"; }; }; //--- Default Loadout [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_DefaultGear", _side], [ ['AK_107_kobra','Makarov','Binocular','NVGoggles','ItemCompass','ItemMap','ItemRadio','ItemWatch'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','HandGrenade_East','HandGrenade_East','HandGrenade_East','SmokeShellRed','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AK_107_kobra','Makarov'] ]]; //--- Squads. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Squads\Squad_RU.sqf"; if (WF_A2_CombinedOps) then { //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_CO_RU.sqf"; //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_CO_RU.sqf"; //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_CO_RU.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_CO_RU.sqf"; } else { //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_RU.sqf"; //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_RU.sqf"; //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_RU.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_RU.sqf"; };Private ["_side"]; _side = "EAST"; //--- Generic. missionNamespace setVariable [Format["WFBE_%1CREW", _side], 'TK_Soldier_Crew_EP1']; missionNamespace setVariable [Format["WFBE_%1PILOT", _side], 'TK_Soldier_Pilot_EP1']; missionNamespace setVariable [Format["WFBE_%1SOLDIER", _side], 'TK_Soldier_EP1']; //--- Flag texture. missionNamespace setVariable [Format["WFBE_%1FLAG", _side], '\Ca\ca_e\Data\flag_tka_co.paa']; missionNamespace setVariable [Format["WFBE_%1AMBULANCES", _side], ['GAZ_Vodnik_MedEvac','M113Ambul_TK_EP1','Mi17_medevac_RU','M113Ambul_TK_EP1']]; missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCKS", _side], ['KamazRepair','UralRepair_TK_EP1']]; missionNamespace setVariable [Format["WFBE_%1SALVAGETRUCK", _side], ['WarfareSalvageTruck_RU','UralSalvage_TK_EP1']]; missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCKS", _side], ['WarfareSupplyTruck_RU','UralSupply_TK_EP1']]; //--- Radio Announcers. missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers", _side], ['WFHQ_TK0_EP1','WFHQ_TK1_EP1','WFHQ_TK2_EP1','WFHQ_TK3_EP1','WFHQ_TK4_EP1']]; missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers_Config", _side], 'RadioProtocol_EP1_TK']; //--- Paratroopers. missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL1", _side],['TK_Soldier_SL_EP1','TK_Soldier_LAT_EP1','TK_Soldier_EP1','TK_Soldier_LAT_EP1','TK_Soldier_AR_EP1','TK_Soldier_Medic_EP1']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL2", _side],['TK_Soldier_SL_EP1','TK_Soldier_AT_EP1','TK_Soldier_AT_EP1','TK_Soldier_AT_EP1','TK_Soldier_AA_EP1','TK_Soldier_MG_EP1','TK_Soldier_Medic_EP1','TK_Soldier_Sniper_EP1','TK_Soldier_Spotter_EP1']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL3", _side],['TK_Special_Forces_TL_EP1','TK_Soldier_HAT_EP1','TK_Soldier_HAT_EP1','TK_Soldier_HAT_EP1','TK_Soldier_HAT_EP1','TK_Soldier_HAT_EP1','TK_Soldier_AA_EP1','TK_Soldier_AA_EP1','TK_Special_Forces_MG_EP1','TK_Special_Forces_EP1','TK_Special_Forces_EP1','TK_Special_Forces_EP1']]; missionNamespace setVariable [Format["WFBE_%1PARACARGO", _side], 'Mi17_TK_EP1'];//--- Paratroopers, Vehicle. missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCK", _side], 'UralRepair_TK_EP1'];//--- Repair Truck model. missionNamespace setVariable [Format["WFBE_%1STARTINGVEHICLES", _side], ['M113Ambul_TK_EP1','V3S_TK_EP1']];//--- Starting Vehicles. missionNamespace setVariable [Format["WFBE_%1PARAAMMO", _side], ['TKBasicAmmunitionBox_EP1','TKBasicWeapons_EP1','TKLaunchers_EP1']];//--- Supply Paradropping, Dropped Ammunition. missionNamespace setVariable [Format["WFBE_%1PARAVEHICARGO", _side], 'UAZ_Unarmed_TK_EP1'];//--- Supply Paradropping, Dropped Vehicle. missionNamespace setVariable [Format["WFBE_%1PARAVEHI", _side], 'Mi17_TK_EP1'];//--- Supply Paradropping, Vehicle missionNamespace setVariable [Format["WFBE_%1PARACHUTE", _side], 'ParachuteMediumEast_EP1'];//--- Supply Paradropping, Parachute Model. missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCK", _side], 'UralSupply_TK_EP1'];//--- Supply Truck model. missionNamespace setVariable [Format["WFBE_%1_WORKER", _side], ["TK_CIV_Worker01_EP1"]];//--- Workers model. //--- Server only. if (isServer) then { //--- Patrols. missionNamespace setVariable [Format["WFBE_%1_PATROL_LIGHT", _side], [ ['TK_Soldier_SL_EP1','TK_Soldier_MG_EP1','TK_Soldier_Sniper_EP1','TK_Soldier_Medic_EP1'], ['TK_Soldier_SL_EP1','TK_Soldier_AR_EP1','TK_Soldier_GL_EP1','TK_Soldier_LAT_EP1','TK_Soldier_EP1'], ['LandRover_MG_TK_EP1','LandRover_SPG9_TK_EP1'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_MEDIUM", _side], [ ['BRDM2_TK_EP1','BRDM2_ATGM_TK_EP1'], ['V3S_TK_EP1','TK_Soldier_SL_EP1','TK_Soldier_AT_EP1','TK_Soldier_MG_EP1','TK_Soldier_LAT_EP1'], ['BMP2_TK_EP1','TK_Soldier_AA_EP1','TK_Soldier_AA_EP1','TK_Soldier_Medic_EP1'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_HEAVY", _side], [ ['T72_TK_EP1','BMP2_TK_EP1'], ['T55_TK_EP1','T72_TK_EP1'], ['BMP2_TK_EP1','BMP2_TK_EP1','TK_Soldier_SL_EP1','TK_Soldier_MG_EP1','TK_Soldier_Sniper_EP1','TK_Soldier_Medic_EP1','TK_Soldier_AT_EP1','TK_Soldier_HAT_EP1','TK_Soldier_EP1'], ['M113_TK_EP1','TK_Soldier_SL_EP1','TK_Soldier_Medic_EP1','TK_Soldier_GL_EP1','TK_Soldier_EP1','TK_Soldier_AR_EP1'] ]]; //--- Base Patrols. if ((missionNamespace getVariable "WFBE_C_BASE_PATROLS_INFANTRY") > 0) then { missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_0", _side],['TK_Soldier_SL_EP1','TK_Soldier_EP1','TK_Soldier_EP1','TK_Soldier_AR_EP1','TK_Soldier_GL_EP1','TK_Soldier_MG_EP1']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_1", _side],['TK_Soldier_SL_EP1','TK_Soldier_EP1','TK_Soldier_EP1','TK_Soldier_MG_EP1','TK_Soldier_AT_EP1','TK_Soldier_Medic_EP1']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_2", _side],['TK_Soldier_SL_EP1','TK_Soldier_EP1','TK_Soldier_EP1','TK_Soldier_AT_EP1','RU_Soldier_AA','TK_Soldier_Sniper_EP1']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_3", _side],['TK_Soldier_SL_EP1','TK_Soldier_EP1','TK_Soldier_AR_EP1','TK_Soldier_AT_EP1','TK_Soldier_AT_EP1','TK_Soldier_GL_EP1']]; }; //--- AI Loadouts [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_0", _side], [ [['AKS_74_kobra','RPG18','Makarov','Binocular','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','RPG18','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','RPG18','Makarov']], [['AKS_74_U','RPG18','Makarov','Binocular','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','RPG18','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_U','RPG18','Makarov']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_1", _side], [ [['AKS_74_kobra','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7V','PG7V','PG7V','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','RPG7V','Makarov']], [['AKS_74_kobra','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7V','PG7V','PG7V','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','RPG7V','Makarov']], [['SVD','MakarovSD','Binocular','NVGoggles','ItemRadio','ItemMap'], ['10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','HandGrenade_East','HandGrenade_East','8Rnd_9x18_MakarovSD','8Rnd_9x18_MakarovSD','8Rnd_9x18_MakarovSD','8Rnd_9x18_MakarovSD'], ['SVD','MakarovSD']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_2", _side], [ [['AKS_74_pso','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VL','PG7VL','PG7VL','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_pso','RPG7V','Makarov']], [['AKS_74_pso','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VL','PG7VL','PG7VL','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_pso','RPG7V','Makarov']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_3", _side], [ [['AK_74_GL_kobra','RPG7V','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VR','PG7VR','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25'], ['AK_74_GL_kobra','RPG7V']], [['AK_74_GL_kobra','MetisLauncher','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','AT13','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25'], ['AK_74_GL_kobra','MetisLauncher','Makarov']] ]]; }; //--- Client only. if (local player) then { //--- Default Faction (Buy Menu), this is the faction name defined in core_xxx.sqf files. missionNamespace setVariable [Format["WFBE_%1DEFAULTFACTION", _side], 'Takistani Army']; //--- Import the needed Gear (Available from the gear menu), multiple gear can be used. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_TKA.sqf"; if (WF_A2_CombinedOps) then { (_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_RU.sqf"; }; }; //--- Default Loadout [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_DefaultGear", _side], [ ['AKS_74_kobra','Makarov','Binocular','NVGoggles','ItemCompass','ItemMap','ItemRadio','ItemWatch'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','HandGrenade_East','HandGrenade_East','HandGrenade_East','SmokeShellRed','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','Makarov'] ]]; if (WF_A2_CombinedOps) then { //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_CO_RU.sqf"; //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_CO_RU.sqf"; //--- Squads. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Squads\Squad_RU.sqf"; //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_CO_RU.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_CO_RU.sqf"; } else { //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_OA_TKA.sqf"; //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_OA_TKA.sqf"; //--- Squads. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Squads\Squad_OA_TKA.sqf"; //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_OA_TKA.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_OA_TKA.sqf"; };Private ["_side"]; _side = "GUER"; //--- Generic. missionNamespace setVariable [Format["WFBE_%1CREW", _side], 'TK_GUE_Soldier_EP1']; missionNamespace setVariable [Format["WFBE_%1PILOT", _side], 'TK_GUE_Soldier_EP1']; missionNamespace setVariable [Format["WFBE_%1SOLDIER", _side], 'TK_GUE_Soldier_EP1']; //--- Flag texture. missionNamespace setVariable [Format["WFBE_%1FLAG", _side], '\ca\ca_e\data\flag_tkg_co.paa']; missionNamespace setVariable [Format["WFBE_%1AMBULANCES", _side], ['V3S_TK_GUE_EP1','V3S_Gue']]; missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCKS", _side], ['WarfareRepairTruck_Gue','V3S_Repair_TK_GUE_EP1']]; missionNamespace setVariable [Format["WFBE_%1SALVAGETRUCK", _side], ['WarfareSalvageTruck_Gue','V3S_Salvage_TK_GUE_EP1']]; missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCKS", _side], ['WarfareSupplyTruck_Gue','V3S_Supply_TK_GUE_EP1']]; //--- Radio Announcers. missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers", _side], ['WFHQ_TK0_EP1','WFHQ_TK1_EP1','WFHQ_TK2_EP1','WFHQ_TK3_EP1','WFHQ_TK4_EP1']]; missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers_Config", _side], 'RadioProtocol_EP1_TK']; //--- Paratroopers. missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL1", _side],['TK_GUE_Warlord_EP1','TK_GUE_Soldier_AT_EP1','TK_GUE_Soldier_EP1','TK_GUE_Soldier_AT_EP1','TK_GUE_Soldier_AR_EP1','TK_GUE_Bonesetter_EP1']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL2", _side],['TK_GUE_Warlord_EP1','TK_GUE_Soldier_AT_EP1','TK_GUE_Soldier_AT_EP1','TK_GUE_Soldier_AT_EP1','TK_GUE_Soldier_AA_EP1','TK_GUE_Soldier_MG_EP1','TK_GUE_Bonesetter_EP1','TK_GUE_Soldier_Sniper_EP1','TK_GUE_Soldier_Sniper_EP1']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL3", _side],['TK_GUE_Warlord_EP1','TK_GUE_Soldier_AT_EP1','TK_GUE_Soldier_AT_EP1','TK_GUE_Soldier_AT_EP1','TK_GUE_Soldier_AT_EP1','TK_GUE_Soldier_AT_EP1','TK_GUE_Soldier_AA_EP1','TK_GUE_Soldier_AA_EP1','TK_GUE_Soldier_4_EP1','TK_GUE_Soldier_5_EP1','TK_GUE_Soldier_Sniper_EP1','TK_GUE_Soldier_Sniper_EP1']]; missionNamespace setVariable [Format["WFBE_%1PARACARGO", _side], 'UH1H_TK_GUE_EP1'];//--- Paratroopers, Vehicle. missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCK", _side], 'V3S_Repair_TK_GUE_EP1'];//--- Repair Truck model. missionNamespace setVariable [Format["WFBE_%1STARTINGVEHICLES", _side], ['V3S_TK_GUE_EP1','Offroad_DSHKM_TK_GUE_EP1']];//--- Starting Vehicles. missionNamespace setVariable [Format["WFBE_%1PARAAMMO", _side], ['TKBasicAmmunitionBox_EP1','TKBasicWeapons_EP1','TKLaunchers_EP1']];//--- Supply Paradropping, Dropped Ammunition. missionNamespace setVariable [Format["WFBE_%1PARAVEHICARGO", _side], 'BTR40_TK_GUE_EP1'];//--- Supply Paradropping, Dropped Vehicle. missionNamespace setVariable [Format["WFBE_%1PARAVEHI", _side], 'UH1H_TK_GUE_EP1'];//--- Supply Paradropping, Vehicle missionNamespace setVariable [Format["WFBE_%1PARACHUTE", _side], 'ParachuteMediumEast_EP1'];//--- Supply Paradropping, Parachute Model. missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCK", _side], 'V3S_Supply_TK_GUE_EP1'];//--- Supply Truck model. missionNamespace setVariable [Format["WFBE_%1_WORKER", _side], ["TK_CIV_Worker01_EP1"]];//--- Workers model. //--- Server only. if (isServer) then { //--- Patrols. missionNamespace setVariable [Format["WFBE_%1_PATROL_LIGHT", _side], [ ['TK_GUE_Soldier_EP1','TK_GUE_Soldier_MG_EP1','TK_GUE_Soldier_Sniper_EP1','TK_GUE_Bonesetter_EP1'], ['TK_GUE_Warlord_EP1','TK_GUE_Soldier_AR_EP1','TK_GUE_Soldier_3_EP1','TK_GUE_Soldier_AT_EP1','TK_GUE_Soldier_4_EP1'], ['Offroad_DSHKM_TK_GUE_EP1','Offroad_SPG9_TK_GUE_EP1'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_MEDIUM", _side], [ ['BTR40_MG_TK_GUE_EP1','Ural_ZU23_TK_GUE_EP1'], ['V3S_TK_GUE_EP1','TK_GUE_Warlord_EP1','TK_GUE_Soldier_AT_EP1','TK_GUE_Soldier_MG_EP1','TK_GUE_Soldier_HAT_EP1'], ['BTR40_MG_TK_GUE_EP1','TK_GUE_Soldier_AA_EP1','TK_GUE_Soldier_AA_EP1','TK_GUE_Bonesetter_EP1'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_HEAVY", _side], [ ['T34_TK_GUE_EP1','T34_TK_GUE_EP1'], ['T55_TK_GUE_EP1','T55_TK_GUE_EP1'], ['TK_GUE_Soldier_Sniper_EP1','TK_GUE_Soldier_5_EP1','TK_GUE_Soldier_Sniper_EP1'] ]]; //--- Base Patrols. if ((missionNamespace getVariable "WFBE_C_BASE_PATROLS_INFANTRY") > 0) then { missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_0", _side],['TK_GUE_Warlord_EP1','TK_GUE_Soldier_EP1','TK_GUE_Soldier_4_EP1','TK_GUE_Soldier_AR_EP1','TK_GUE_Soldier_4_EP1','TK_GUE_Soldier_MG_EP1']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_1", _side],['TK_GUE_Warlord_EP1','TK_GUE_Soldier_2_EP1','TK_GUE_Soldier_EP1','TK_GUE_Soldier_MG_EP1','TK_GUE_Soldier_AT_EP1','TK_GUE_Bonesetter_EP1']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_2", _side],['TK_GUE_Warlord_EP1','TK_GUE_Soldier_EP1','TK_GUE_Soldier_3_EP1','TK_GUE_Soldier_AT_EP1','TK_GUE_Soldier_AA_EP1','TK_GUE_Soldier_Sniper_EP1']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_3", _side],['TK_GUE_Warlord_EP1','TK_GUE_Soldier_EP1','TK_GUE_Soldier_AR_EP1','TK_GUE_Soldier_AT_EP1','TK_GUE_Soldier_AT_EP1','TK_GUE_Soldier_5_EP1']]; }; //--- AI Loadouts [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_0", _side], [ [['AKS_74_kobra','RPG18','Makarov','Binocular','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','RPG18','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','RPG18','Makarov']], [['AKS_74_U','RPG18','Makarov','Binocular','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','RPG18','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_U','RPG18','Makarov']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_1", _side], [ [['AKS_74_kobra','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7V','PG7V','PG7V','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','RPG7V','Makarov']], [['AKS_74_kobra','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7V','PG7V','PG7V','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','RPG7V','Makarov']], [['SVD','MakarovSD','Binocular','NVGoggles','ItemRadio','ItemMap'], ['10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','10Rnd_762x54_SVD','HandGrenade_East','HandGrenade_East','8Rnd_9x18_MakarovSD','8Rnd_9x18_MakarovSD','8Rnd_9x18_MakarovSD','8Rnd_9x18_MakarovSD'], ['SVD','MakarovSD']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_2", _side], [ [['AKS_74_pso','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VL','PG7VL','PG7VL','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_pso','RPG7V','Makarov']], [['AKS_74_pso','RPG7V','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VL','PG7VL','PG7VL','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_pso','RPG7V','Makarov']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_3", _side], [ [['AK_74_GL_kobra','RPG7V','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','PG7VR','PG7VR','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25'], ['AK_74_GL_kobra','RPG7V']], [['AK_74_GL_kobra','MetisLauncher','Makarov','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','AT13','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25','1Rnd_HE_GP25'], ['AK_74_GL_kobra','MetisLauncher','Makarov']] ]]; }; //--- Client only. if (local player) then { //--- Default Faction (Buy Menu), this is the faction name defined in core_xxx.sqf files. missionNamespace setVariable [Format["WFBE_%1DEFAULTFACTION", _side], 'Takistani Guerilla']; //--- Import the needed Gear (Available from the gear menu), multiple gear can be used. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_TKGUE.sqf"; if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_PMC") > 0) then {(_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_PMC.sqf"}; }; //--- Default Loadout [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_DefaultGear", _side], [ ['AKS_74_kobra','Makarov','Binocular','NVGoggles','ItemCompass','ItemMap','ItemRadio','ItemWatch'], ['30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','30Rnd_545x39_AK','HandGrenade_East','HandGrenade_East','HandGrenade_East','SmokeShellRed','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov','8Rnd_9x18_Makarov'], ['AKS_74_kobra','Makarov'] ]]; //--- Squads. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Squads\Squad_OA_TKGUE.sqf"; if (WF_A2_CombinedOps) then { //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_CO_GUE.sqf"; //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_CO_GUE.sqf"; //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_CO_GUE.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_CO_GUE.sqf"; } else { //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_OA_TKGUE.sqf"; //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_OA_TKGUE.sqf"; //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_OA_TKGUE.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_OA_TKGUE.sqf"; };Private ["_side"]; _side = "WEST"; //--- Generic. missionNamespace setVariable [Format["WFBE_%1CREW", _side], 'US_Soldier_Crew_EP1']; missionNamespace setVariable [Format["WFBE_%1PILOT", _side], 'US_Soldier_Pilot_EP1']; missionNamespace setVariable [Format["WFBE_%1SOLDIER", _side], 'US_Soldier_EP1']; //--- Flag texture. missionNamespace setVariable [Format["WFBE_%1FLAG", _side], '\Ca\ca_e\Data\flag_us_co.paa']; missionNamespace setVariable [Format["WFBE_%1AMBULANCES", _side], ['HMMWV_Ambulance','HMMWV_Ambulance_DES_EP1','UH60M_MEV_EP1','M1133_MEV_EP1']]; missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCKS", _side], ['MtvrRepair','MtvrRepair_DES_EP1']]; missionNamespace setVariable [Format["WFBE_%1SALVAGETRUCK", _side], ['WarfareSalvageTruck_USMC','MtvrSalvage_DES_EP1']]; missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCKS", _side], ['WarfareSupplyTruck_USMC','MtvrSupply_DES_EP1']]; missionNamespace setVariable [Format["WFBE_%1UAV", _side], 'MQ9PredatorB_US_EP1']; //--- Radio Announcers. missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers", _side], ['WFHQ_EN0_EP1','WFHQ_EN1_EP1','WFHQ_EN2_EP1','WFHQ_EN4_EP1','WFHQ_EN5_EP1']]; missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers_Config", _side], 'RadioProtocol_EP1_EN']; //--- Paratroopers. missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL1", _side],['US_Soldier_SL_EP1','US_Soldier_LAT_EP1','US_Soldier_EP1','US_Soldier_EP1','US_Soldier_AR_EP1','US_Soldier_Medic_EP1']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL2", _side],['US_Soldier_SL_EP1','US_Soldier_AT_EP1','US_Soldier_AT_EP1','US_Soldier_AT_EP1','US_Soldier_AA_EP1','US_Soldier_MG_EP1','US_Soldier_Medic_EP1','US_Soldier_Spotter_EP1','US_Soldier_Sniper_EP1']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL3", _side],['US_Delta_Force_TL_EP1','US_Soldier_HAT_EP1','US_Soldier_HAT_EP1','US_Soldier_HAT_EP1','US_Soldier_HAT_EP1','US_Soldier_AA_EP1','US_Soldier_AA_EP1','US_Delta_Force_AR_EP1','US_Delta_Force_Assault_EP1','US_Soldier_Medic_EP1','US_Delta_Force_M14_EP1','US_Soldier_AT_EP1','US_Soldier_Marksman_EP1']]; missionNamespace setVariable [Format["WFBE_%1PARACARGO", _side], 'C130J_US_EP1'];//--- Paratroopers, Vehicle. missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCK", _side], 'MtvrRepair_DES_EP1'];//--- Repair Truck model. missionNamespace setVariable [Format["WFBE_%1STARTINGVEHICLES", _side], ['HMMWV_Ambulance_DES_EP1','MTVR_DES_EP1']];//--- Starting Vehicles. missionNamespace setVariable [Format["WFBE_%1PARAAMMO", _side], ['USBasicAmmunitionBox_EP1','USBasicWeapons_EP1','USLaunchers_EP1']];//--- Supply Paradropping, Dropped Ammunition. missionNamespace setVariable [Format["WFBE_%1PARAVEHICARGO", _side], 'HMMWV_DES_EP1'];//--- Supply Paradropping, Dropped Vehicle. missionNamespace setVariable [Format["WFBE_%1PARAVEHI", _side], 'CH_47F_EP1'];//--- Supply Paradropping, Vehicle missionNamespace setVariable [Format["WFBE_%1PARACHUTE", _side], 'ParachuteMediumWest_EP1'];//--- Supply Paradropping, Parachute Model. missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCK", _side], 'MtvrSupply_DES_EP1'];//--- Supply Truck model. missionNamespace setVariable [Format["WFBE_%1_WORKER", _side], ["TK_CIV_Worker02_EP1"]];//--- Workers model. //--- Server only. if (isServer) then { //--- Patrols. missionNamespace setVariable [Format["WFBE_%1_PATROL_LIGHT", _side], [ ['US_Soldier_TL_EP1','US_Soldier_MG_EP1','US_Soldier_Sniper_EP1','US_Soldier_Medic_EP1'], ['US_Soldier_TL_EP1','US_Soldier_AR_EP1','US_Soldier_GL_EP1','US_Soldier_AT_EP1','US_Soldier_EP1'], ['HMMWV_M1151_M2_DES_EP1','HMMWV_MK19_DES_EP1'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_MEDIUM", _side], [ ['M1126_ICV_M2_EP1','M1135_ATGMV_EP1'], ['MTVR_DES_EP1','US_Soldier_TL_EP1','US_Soldier_AT_EP1','US_Soldier_MG_EP1','US_Soldier_AT_EP1'], ['M2A3_EP1','US_Soldier_AA_EP1','US_Soldier_AA_EP1','US_Soldier_Medic_EP1'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_HEAVY", _side], [ ['M2A3_EP1','M2A3_EP1'], ['M1A1_US_DES_EP1','M1A1_US_DES_EP1'], ['M2A3_EP1','M2A3_EP1','US_Soldier_TL_EP1','US_Soldier_MG_EP1','US_Soldier_Marksman_EP1','US_Soldier_Medic_EP1','US_Soldier_HAT_EP1','US_Soldier_AHAT_EP1','US_Soldier_EP1'], ['M1126_ICV_M2_EP1','US_Soldier_TL_EP1','US_Soldier_Medic_EP1','US_Soldier_GL_EP1','US_Soldier_EP1','US_Soldier_AR_EP1'] ]]; //--- Base Patrols. if ((missionNamespace getVariable "WFBE_C_BASE_PATROLS_INFANTRY") > 0) then { missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_0", _side],['US_Soldier_SL_EP1','US_Soldier_EP1','US_Soldier_EP1','US_Soldier_AR_EP1','US_Soldier_GL_EP1','US_Soldier_MG_EP1']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_1", _side],['US_Soldier_SL_EP1','US_Soldier_EP1','US_Soldier_EP1','US_Soldier_MG_EP1','US_Soldier_LAT_EP1','US_Soldier_Medic_EP1']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_2", _side],['US_Soldier_SL_EP1','US_Soldier_EP1','US_Soldier_EP1','US_Soldier_AT_EP1','US_Soldier_AA_EP1','US_Soldier_Sniper_EP1']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_3", _side],['US_Soldier_SL_EP1','US_Soldier_EP1','US_Soldier_AR_EP1','US_Soldier_HAT_EP1','US_Soldier_LAT_EP1','US_Soldier_GL_EP1']]; }; //--- AI Loadouts [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_0", _side], [ [['SCAR_L_CQC','M136','Colt1911','Binocular','ItemRadio','ItemMap'], ['30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','M136','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911'], ['SCAR_L_CQC','M136','Colt1911']], [['G36C_camo','M136','Colt1911','Binocular','ItemRadio','ItemMap'], ['30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','M136','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911'], ['G36C_camo','M136','Colt1911']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_1", _side], [ [['M4A3_CCO_EP1','M136','Colt1911','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','M136','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911'], ['M4A3_CCO_EP1','M136','Colt1911']], [['G36K_camo','M136','Colt1911','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','M136','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911'], ['G36K_camo','M136','Colt1911']], [['M14_EP1','M9SD','Binocular','NVGoggles','ItemRadio','ItemMap'], ['20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','HandGrenade_West','HandGrenade_West','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD'], ['M14_EP1','M9SD']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_2", _side], [ [['SCAR_L_STD_HOLO','MAAWS','Colt1911','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','MAAWS_HEAT','MAAWS_HEAT','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911'], ['SCAR_L_STD_HOLO','MAAWS','Colt1911']], [['G36C_camo','MAAWS','Colt1911','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','MAAWS_HEAT','MAAWS_HEAT','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911'], ['G36C_camo','MAAWS','Colt1911']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_3", _side], [ [['SCAR_L_CQC_EGLM_Holo','MAAWS','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','MAAWS_HEAT','MAAWS_HEAT','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203'], ['SCAR_L_CQC_EGLM_Holo','MAAWS']], [['SCAR_H_STD_EGLM_Spect','Javelin','Colt1911','Binocular','NVGoggles','ItemRadio','ItemMap'], ['20Rnd_762x51_SB_SCAR','20Rnd_762x51_SB_SCAR','20Rnd_762x51_SB_SCAR','20Rnd_762x51_SB_SCAR','20Rnd_762x51_SB_SCAR','20Rnd_762x51_SB_SCAR','Javelin','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203'], ['SCAR_H_STD_EGLM_Spect','Javelin','Colt1911']] ]]; }; //--- Client only. if (local player) then { //--- Default Faction (Buy Menu), this is the faction name defined in core_xxx.sqf files. missionNamespace setVariable [Format["WFBE_%1DEFAULTFACTION", _side], 'US']; //--- Import the needed Gear (Available from the gear menu), multiple gear can be used. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_US.sqf"; if (WF_A2_CombinedOps) then { (_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_USMC.sqf"; }; if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_BAF") > 0) then {(_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_BAF.sqf"}; }; //--- Default Loadout [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_DefaultGear", _side], [ ['SCAR_L_CQC','M9','Binocular','NVGoggles','ItemCompass','ItemMap','ItemRadio','ItemWatch'], ['30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','HandGrenade_West','HandGrenade_West','HandGrenade_West','SmokeShellBlue','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD'], ['SCAR_L_CQC','M9'] ]]; //--- Squads. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Squads\Squad_OA_US.sqf"; if (WF_A2_CombinedOps) then { //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_CO_US.sqf"; //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_CO_US.sqf"; //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_CO_US.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_CO_US.sqf"; } else { //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_OA_US.sqf"; //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_OA_US.sqf"; //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_OA_US.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_OA_US.sqf"; };Private ["_side"]; _side = "WEST"; //--- Generic. missionNamespace setVariable [Format["WFBE_%1CREW", _side], 'USMC_Soldier_Crew']; missionNamespace setVariable [Format["WFBE_%1PILOT", _side], 'USMC_Soldier_Pilot']; missionNamespace setVariable [Format["WFBE_%1SOLDIER", _side], 'USMC_Soldier']; //--- Flag texture. missionNamespace setVariable [Format["WFBE_%1FLAG", _side], '\Ca\Data\flag_usa_co.paa']; missionNamespace setVariable [Format["WFBE_%1AMBULANCES", _side], ['HMMWV_Ambulance','HMMWV_Ambulance_DES_EP1','UH60M_MEV_EP1','M1133_MEV_EP1']]; missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCKS", _side], ['MtvrRepair','MtvrRepair_DES_EP1']]; missionNamespace setVariable [Format["WFBE_%1SALVAGETRUCK", _side], ['WarfareSalvageTruck_USMC','MtvrSalvage_DES_EP1']]; missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCKS", _side], ['WarfareSupplyTruck_USMC','MtvrSupply_DES_EP1']]; missionNamespace setVariable [Format["WFBE_%1UAV", _side], 'MQ9PredatorB']; //--- Radio Announcers. missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers", _side], ['WFHQ_EN0','WFHQ_EN1','WFHQ_EN2']]; missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers_Config", _side], 'RadioProtocolEN']; //--- Paratroopers. missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL1", _side],['USMC_Soldier_SL','USMC_Soldier_LAT','USMC_Soldier','USMC_Soldier2','USMC_Soldier_AR','USMC_Soldier_Medic']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL2", _side],['USMC_Soldier_SL','USMC_Soldier_AT','USMC_Soldier_AT','USMC_Soldier_AT','USMC_Soldier_AA','USMC_Soldier_MG','USMC_Soldier_Medic','USMC_SoldierS_Spotter','USMC_SoldierS_Sniper']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL3", _side],['FR_Assault_R','USMC_Soldier_HAT','USMC_Soldier_HAT','USMC_Soldier_HAT','USMC_Soldier_HAT','USMC_Soldier_AA','USMC_Soldier_AA','FR_AR','FR_AC','USMC_Soldier_Medic','FR_Marksman','USMC_Soldier_AT','USMC_SoldierS_Sniper']]; missionNamespace setVariable [Format["WFBE_%1PARACARGO", _side], 'C130J']; //--- Paratroopers, Vehicle. missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCK", _side], 'MtvrRepair'];//--- Repair Truck model. missionNamespace setVariable [Format["WFBE_%1STARTINGVEHICLES", _side], ['HMMWV_Ambulance','MTVR']];//--- Starting Vehicles. missionNamespace setVariable [Format["WFBE_%1PARAAMMO", _side], ['USBasicAmmunitionBox','USBasicWeaponsBox','USLaunchersBox']];//--- Supply Paradropping, Dropped Ammunition. missionNamespace setVariable [Format["WFBE_%1PARAVEHICARGO", _side], 'HMMWV'];//--- Supply Paradropping, Dropped Vehicle. missionNamespace setVariable [Format["WFBE_%1PARAVEHI", _side], 'MH60S'];//--- Supply Paradropping, Vehicle missionNamespace setVariable [Format["WFBE_%1PARACHUTE", _side], 'ParachuteMediumWest'];//--- Supply Paradropping, Parachute Model. missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCK", _side], 'WarfareSupplyTruck_USMC'];//--- Supply Truck model. missionNamespace setVariable [Format["WFBE_%1_WORKER", _side], ["Worker2","Worker4"]];//--- Workers model. //--- Server only. if (isServer) then { //--- Patrols. missionNamespace setVariable [Format["WFBE_%1_PATROL_LIGHT", _side], [ ['USMC_Soldier_TL','USMC_Soldier_MG','USMC_SoldierS_Sniper','USMC_Soldier_Medic'], ['USMC_Soldier_TL','USMC_Soldier_AR','USMC_Soldier_GL','USMC_Soldier_LAT','USMC_Soldier'], ['HMMWV_M2','HMMWV_MK19'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_MEDIUM", _side], [ ['LAV25','LAV25'], ['MTVR','USMC_Soldier_TL','USMC_Soldier_AT','USMC_Soldier_MG','USMC_Soldier_LAT'], ['AAV','USMC_Soldier_AA','USMC_Soldier_AA','USMC_Soldier_Medic'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_HEAVY", _side], [ ['M1A1','AAV'], ['M1A1','M1A1'], ['AAV','AAV','USMC_Soldier_TL','USMC_Soldier_MG','USMC_SoldierM_Marksman','USMC_Soldier_Medic','USMC_Soldier_AT','USMC_Soldier_HAT','USMC_Soldier'], ['LAV25','USMC_Soldier_TL','USMC_Soldier_Medic','USMC_Soldier_GL','USMC_Soldier','USMC_Soldier_AR'] ]]; //--- Base Patrols. if ((missionNamespace getVariable "WFBE_C_BASE_PATROLS_INFANTRY") > 0) then { missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_0", _side],['USMC_Soldier_SL','USMC_Soldier','USMC_Soldier','USMC_Soldier_AR','USMC_Soldier_GL','USMC_Soldier_MG']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_1", _side],['USMC_Soldier_SL','USMC_Soldier','USMC_Soldier','USMC_Soldier_MG','USMC_Soldier_LAT','USMC_Soldier_Medic']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_2", _side],['USMC_Soldier_SL','USMC_Soldier','USMC_Soldier','USMC_Soldier_AT','USMC_Soldier_AA','USMC_SoldierS_Sniper']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_3", _side],['USMC_Soldier_SL','USMC_Soldier','USMC_Soldier_AR','USMC_Soldier_HAT','USMC_Soldier_LAT','USMC_Soldier_GL']]; }; //--- AI Loadouts [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_0", _side], [ [['m16a4_acg','M136','Colt1911','Binocular','ItemRadio','ItemMap'], ['30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','M136','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911'], ['m16a4_acg','M136','Colt1911']], [['G36C','M136','Colt1911','Binocular','ItemRadio','ItemMap'], ['30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','M136','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911'], ['G36C','M136','Colt1911']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_1", _side], [ [['M4A1_Aim_camo','M136','Colt1911','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','M136','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911'], ['M4A1_Aim_camo','M136','Colt1911']], [['G36K','M136','Colt1911','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','M136','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911'], ['G36K','M136','Colt1911']], [['DMR','M9SD','Binocular','NVGoggles','ItemRadio','ItemMap'], ['20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','HandGrenade_West','HandGrenade_West','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD'], ['DMR','M9SD']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_2", _side], [ [['M4A1_Aim_camo','SMAW','Colt1911','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','SMAW_HEAA','SMAW_HEAA','SMAW_HEDP','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911'], ['M4A1_Aim_camo','SMAW','Colt1911']], [['G36C','SMAW','Colt1911','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','SMAW_HEAA','SMAW_HEAA','SMAW_HEDP','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911'], ['G36C','SMAW','Colt1911']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_3", _side], [ [['M4A1_HWS_GL','SMAW','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','SMAW_HEAA','SMAW_HEAA','SMAW_HEDP','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203'], ['M4A1_HWS_GL','SMAW']], [['M4A1_HWS_GL_camo','Javelin','Colt1911','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','Javelin','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203'], ['M4A1_HWS_GL_camo','Javelin','Colt1911']] ]]; }; //--- Client only. if (local player) then { //--- Default Faction (Buy Menu), this is the faction name defined in core_xxx.sqf files. missionNamespace setVariable [Format["WFBE_%1DEFAULTFACTION", _side], 'USMC']; //--- Import the needed Gear (Available from the gear menu), multiple gear can be used. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_USMC.sqf"; if (WF_A2_CombinedOps) then { (_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_US.sqf"; }; }; //--- Default Loadout [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_DefaultGear", _side], [ ['M4A1_Aim','M9','Binocular','NVGoggles','ItemCompass','ItemMap','ItemRadio','ItemWatch'], ['30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','HandGrenade_West','HandGrenade_West','HandGrenade_West','SmokeShellBlue','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD'], ['M4A1_Aim','M9'] ]]; if (WF_A2_CombinedOps) then { //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_CO_US.sqf"; //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_CO_US.sqf"; //--- Squads. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Squads\Squad_USMC.sqf"; //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_CO_US.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_CO_US.sqf"; } else { //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_USMC.sqf"; //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_USMC.sqf"; //--- Squads. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Squads\Squad_USMC.sqf"; //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_USMC.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_USMC.sqf"; };/* This config file is used with WF_Camo, required CO */ Private ["_side"]; _side = "WEST"; //--- Generic. missionNamespace setVariable [Format["WFBE_%1CREW", _side], 'USMC_Soldier_Crew']; missionNamespace setVariable [Format["WFBE_%1PILOT", _side], 'USMC_Soldier_Pilot']; missionNamespace setVariable [Format["WFBE_%1SOLDIER", _side], 'USMC_Soldier']; //--- Flag texture. missionNamespace setVariable [Format["WFBE_%1FLAG", _side], '\Ca\ca_e\Data\flag_us_co.paa']; missionNamespace setVariable [Format["WFBE_%1AMBULANCES", _side], ['HMMWV_Ambulance','HMMWV_Ambulance_DES_EP1','UH60M_MEV_EP1','M1133_MEV_EP1']]; missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCKS", _side], ['MtvrRepair','MtvrRepair_DES_EP1']]; missionNamespace setVariable [Format["WFBE_%1SALVAGETRUCK", _side], ['WarfareSalvageTruck_USMC','MtvrSalvage_DES_EP1']]; missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCKS", _side], ['WarfareSupplyTruck_USMC','MtvrSupply_DES_EP1']]; missionNamespace setVariable [Format["WFBE_%1UAV", _side], 'MQ9PredatorB_US_EP1']; //--- Radio Announcers. missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers", _side], ['WFHQ_EN0_EP1','WFHQ_EN1_EP1','WFHQ_EN2_EP1','WFHQ_EN4_EP1','WFHQ_EN5_EP1']]; missionNamespace setVariable [Format ["WFBE_%1_RadioAnnouncers_Config", _side], 'RadioProtocol_EP1_EN']; //--- Paratroopers. missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL1", _side],['USMC_Soldier_SL','USMC_Soldier_LAT','USMC_Soldier','USMC_Soldier2','USMC_Soldier_AR','USMC_Soldier_Medic']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL2", _side],['USMC_Soldier_SL','USMC_Soldier_AT','USMC_Soldier_AT','USMC_Soldier_AT','USMC_Soldier_AA','USMC_Soldier_MG','USMC_Soldier_Medic','USMC_SoldierS_Spotter','USMC_SoldierS_Sniper']]; missionNamespace setVariable [Format["WFBE_%1PARACHUTELEVEL3", _side],['FR_Assault_R','USMC_Soldier_HAT','USMC_Soldier_HAT','USMC_Soldier_HAT','USMC_Soldier_HAT','USMC_Soldier_AA','USMC_Soldier_AA','FR_AR','FR_AC','USMC_Soldier_Medic','FR_Marksman','USMC_Soldier_AT','USMC_SoldierS_Sniper']]; missionNamespace setVariable [Format["WFBE_%1PARACARGO", _side], 'C130J']; //--- Paratroopers, Vehicle. missionNamespace setVariable [Format["WFBE_%1REPAIRTRUCK", _side], 'MtvrRepair'];//--- Repair Truck model. missionNamespace setVariable [Format["WFBE_%1STARTINGVEHICLES", _side], ['HMMWV_Ambulance','MTVR']];//--- Starting Vehicles. missionNamespace setVariable [Format["WFBE_%1PARAAMMO", _side], ['USBasicAmmunitionBox','USBasicWeaponsBox','USLaunchersBox']];//--- Supply Paradropping, Dropped Ammunition. missionNamespace setVariable [Format["WFBE_%1PARAVEHICARGO", _side], 'HMMWV'];//--- Supply Paradropping, Dropped Vehicle. missionNamespace setVariable [Format["WFBE_%1PARAVEHI", _side], 'MH60S'];//--- Supply Paradropping, Vehicle missionNamespace setVariable [Format["WFBE_%1PARACHUTE", _side], 'ParachuteMediumWest'];//--- Supply Paradropping, Parachute Model. missionNamespace setVariable [Format["WFBE_%1SUPPLYTRUCK", _side], 'WarfareSupplyTruck_USMC'];//--- Supply Truck model. missionNamespace setVariable [Format["WFBE_%1_WORKER", _side], ["Worker2","Worker4"]];//--- Workers model. //--- Server only. if (isServer) then { //--- Patrols. missionNamespace setVariable [Format["WFBE_%1_PATROL_LIGHT", _side], [ ['USMC_Soldier_TL','USMC_Soldier_MG','USMC_SoldierS_Sniper','USMC_Soldier_Medic'], ['USMC_Soldier_TL','USMC_Soldier_AR','USMC_Soldier_GL','USMC_Soldier_LAT','USMC_Soldier'], ['HMMWV_M2','HMMWV_MK19'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_MEDIUM", _side], [ ['LAV25','LAV25'], ['MTVR','USMC_Soldier_TL','USMC_Soldier_AT','USMC_Soldier_MG','USMC_Soldier_LAT'], ['AAV','USMC_Soldier_AA','USMC_Soldier_AA','USMC_Soldier_Medic'] ]]; missionNamespace setVariable [Format["WFBE_%1_PATROL_HEAVY", _side], [ ['M1A1','AAV'], ['M1A1','M1A1'], ['AAV','AAV','USMC_Soldier_TL','USMC_Soldier_MG','USMC_SoldierM_Marksman','USMC_Soldier_Medic','USMC_Soldier_AT','USMC_Soldier_HAT','USMC_Soldier'], ['LAV25','USMC_Soldier_TL','USMC_Soldier_Medic','USMC_Soldier_GL','USMC_Soldier','USMC_Soldier_AR'] ]]; //--- Base Patrols. if ((missionNamespace getVariable "WFBE_C_BASE_PATROLS_INFANTRY") > 0) then { missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_0", _side],['USMC_Soldier_SL','USMC_Soldier','USMC_Soldier','USMC_Soldier_AR','USMC_Soldier_GL','USMC_Soldier_MG']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_1", _side],['USMC_Soldier_SL','USMC_Soldier','USMC_Soldier','USMC_Soldier_MG','USMC_Soldier_LAT','USMC_Soldier_Medic']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_2", _side],['USMC_Soldier_SL','USMC_Soldier','USMC_Soldier','USMC_Soldier_AT','USMC_Soldier_AA','USMC_SoldierS_Sniper']]; missionNamespace setVariable [Format["WFBE_%1BASEPATROLS_3", _side],['USMC_Soldier_SL','USMC_Soldier','USMC_Soldier_AR','USMC_Soldier_HAT','USMC_Soldier_LAT','USMC_Soldier_GL']]; }; //--- AI Loadouts [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_0", _side], [ [['SCAR_L_CQC','M136','Colt1911','Binocular','ItemRadio','ItemMap'], ['30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','M136','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911'], ['SCAR_L_CQC','M136','Colt1911']], [['G36C_camo','M136','Colt1911','Binocular','ItemRadio','ItemMap'], ['30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','M136','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911'], ['G36C_camo','M136','Colt1911']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_1", _side], [ [['M4A3_CCO_EP1','M136','Colt1911','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','M136','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911'], ['M4A3_CCO_EP1','M136','Colt1911']], [['G36K_camo','M136','Colt1911','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','M136','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911'], ['G36K_camo','M136','Colt1911']], [['M14_EP1','M9SD','Binocular','NVGoggles','ItemRadio','ItemMap'], ['20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','20Rnd_762x51_DMR','HandGrenade_West','HandGrenade_West','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD'], ['M14_EP1','M9SD']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_2", _side], [ [['SCAR_L_STD_HOLO','MAAWS','Colt1911','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','MAAWS_HEAT','MAAWS_HEAT','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911'], ['SCAR_L_STD_HOLO','MAAWS','Colt1911']], [['G36C_camo','MAAWS','Colt1911','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','30Rnd_556x45_G36','MAAWS_HEAT','MAAWS_HEAT','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911'], ['G36C_camo','MAAWS','Colt1911']] ]]; missionNamespace setVariable [Format["WFBE_%1_AI_Loadout_3", _side], [ [['SCAR_L_CQC_EGLM_Holo','MAAWS','Binocular','NVGoggles','ItemRadio','ItemMap'], ['30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','MAAWS_HEAT','MAAWS_HEAT','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203'], ['SCAR_L_CQC_EGLM_Holo','MAAWS']], [['SCAR_H_STD_EGLM_Spect','Javelin','Colt1911','Binocular','NVGoggles','ItemRadio','ItemMap'], ['20Rnd_762x51_SB_SCAR','20Rnd_762x51_SB_SCAR','20Rnd_762x51_SB_SCAR','20Rnd_762x51_SB_SCAR','20Rnd_762x51_SB_SCAR','20Rnd_762x51_SB_SCAR','Javelin','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','7Rnd_45ACP_1911','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203','1Rnd_HE_M203'], ['SCAR_H_STD_EGLM_Spect','Javelin','Colt1911']] ]]; }; //--- Client only. if (local player) then { //--- Default Faction (Buy Menu), this is the faction name defined in core_xxx.sqf files. missionNamespace setVariable [Format["WFBE_%1DEFAULTFACTION", _side], 'US']; //--- Import the needed Gear (Available from the gear menu), multiple gear can be used. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_US.sqf"; (_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_USMC.sqf"; if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_BAF") > 0) then {(_side) Call Compile preprocessFileLineNumbers "Common\Config\Loadout\Loadout_BAF.sqf"}; }; //--- Default Loadout [weapons, magazines, eligible muzzles, {backpack}, {backpack content}]. missionNamespace setVariable [Format["WFBE_%1_DefaultGear", _side], [ ['SCAR_L_CQC','M9','Binocular','NVGoggles','ItemCompass','ItemMap','ItemRadio','ItemWatch'], ['30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','30Rnd_556x45_Stanag','HandGrenade_West','HandGrenade_West','HandGrenade_West','SmokeShellBlue','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD','15Rnd_9x19_M9SD'], ['SCAR_L_CQC','M9'] ]]; //--- Artillery. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Artillery\Artillery_CO_US.sqf"; //--- Squads. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Squads\Squad_USMC.sqf"; if (WF_A2_CombinedOps) then { //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_CO_US.sqf"; //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_CO_US.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_CO_US.sqf"; } else { //--- Units. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Units\Units_USMC.sqf"; //--- Structures. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Structures\Structures_USMC.sqf"; //--- Upgrades. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Upgrades_USMC.sqf"; };/* Use this file if you wish to set quickly a faction's groups */ Private ['_aiTeamTemplates','_aiTeamTemplateName','_aiTeamTemplateRequires','_aiTeamTypes','_aiTeamUpgrades','_blacklist','_cfgFaction','_faction','_side']; _side = _this select 0; _faction = _this select 1; _blacklist = if (count _this > 2) then {_this select 2} else {[]}; _cfgFaction = configFile >> "CfgGroups" >> _side >> _faction; if !(isClass _cfgFaction) exitWith {["ERROR", Format ["Squads_SetFactionGroups.sqf: Entry (configFile >> '%3' >> '%4') is not a valid group config.", _side,_faction]] Call WFBE_CO_FNC_LogContent}; _aiTeamTemplates = []; _aiTeamTemplateName = []; _aiTeamTemplateRequires = []; _aiTeamTypes = []; _aiTeamUpgrades = []; //--- Iterate through the faction's config and grab the group along with it's properties. for "_i" from 0 to ((count _cfgFaction) - 1) do { Private ["_classKind"]; _classKind = _cfgFaction select _i; if (isClass _classKind) then { Private ["_nameKind"]; _nameKind = getText (_classKind >> "name"); for "_j" from 0 to ((count _classKind) - 1) do { Private ["_classType"]; _classType = _classKind select _j; if (isClass _classType && !(configName(_classType) in _blacklist)) then { Private ["_factoryPool","_groupUnits","_levels","_nameGroup","_require"]; _nameGroup = getText (_classType >> "name"); _aiTeamTemplateName = _aiTeamTemplateName + [Format ["%1 - %2",_nameKind,_nameGroup]]; _groupUnits = []; _require = [false, false, false, false]; _levels = [0,0,0,0]; for "_k" from 0 to ((count _classType) - 1) do { Private ["_classUnit"]; _classUnit = _classType select _k; if (isClass _classUnit) then { Private ["_unit"]; _unit = getText (_classUnit >> "vehicle"); _groupUnits = _groupUnits + [_unit]; _get = missionNamespace getVariable _unit; if !(isNil "_get") then { _type = _get select QUERYUNITFACTORY; _upgrade = _get select QUERYUNITUPGRADE; _require set [_type, true]; _levels set [_type, _upgrade]; } else { ["ERROR", Format ["Squads_SetFactionGroups.sqf: Unit [%1] is not defined in the Core files.", _unit]] Call WFBE_CO_FNC_LogContent; /* TODO, Attempt to define*/ }; }; }; _factoryPool = switch (configName _classKind) do { case "Infantry": {0}; case "Motorized": {1}; case "Mechanized": {2}; case "Armor": {2}; case "Air": {3}; default {0}; }; _aiTeamTypes = _aiTeamTypes + [_factoryPool]; _aiTeamUpgrades = _aiTeamUpgrades + [_levels]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [_require]; _aiTeamTemplates = _aiTeamTemplates + [_groupUnits]; }; }; }; }; [_aiTeamTemplates, _aiTeamTemplateName, _aiTeamTemplateRequires, _aiTeamTypes, _aiTeamUpgrades]Private ['_aiTeamTemplateRequires','_aiTeamTemplateName','_aiTeamTemplates','_aiTeamTypes','_aiTeamUpgrades','_return','_side','_u']; _side = _this; //--- Overall Dump. _return = ["West", "CDF"] Call Compile preprocessFile "Common\Config\Core_Squads\Squads_GetFactionGroups.sqf"; _aiTeamTemplates = _return select 0; _aiTeamTemplateName = _return select 1; _aiTeamTemplateRequires = _return select 2; _aiTeamTypes = _return select 3; _aiTeamUpgrades = _return select 4; //--- Custom Groups. _u = ["BMP2_CDF"]; _u = _u + ["BMP2_CDF"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Armor - APC Platoon"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTypes = _aiTeamTypes + [2]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[false,false,true,false]]; _aiTeamUpgrades = _aiTeamUpgrades + [[0,0,2,0]]; _u = ["ZSU_CDF"]; _u = _u + ["ZSU_CDF"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Armor - AA Platoon"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTypes = _aiTeamTypes + [2]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[false,false,true,false]]; _aiTeamUpgrades = _aiTeamUpgrades + [[0,0,1,0]]; _u = ["Mi17_CDF"]; _u = _u + ["CDF_Soldier_Medic"]; _u = _u + ["CDF_Soldier_MG"]; _u = _u + ["CDF_Soldier_AR"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier_Spotter"]; _u = _u + ["CDF_Soldier"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Air - Mi-8 Infantry Squadron"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTypes = _aiTeamTypes + [3]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[false,false,false,true]]; _aiTeamUpgrades = _aiTeamUpgrades + [[1,0,0,0]]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATES", _side], _aiTeamTemplates]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATEREQUIRES", _side], _aiTeamTemplateRequires]; missionNamespace setVariable [Format["WFBE_%1AITEAMTYPES", _side], _aiTeamTypes]; missionNamespace setVariable [Format["WFBE_%1AITEAMUPGRADES", _side], _aiTeamUpgrades]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATEDESCRIPTIONS", _side], _aiTeamTemplateName];Private ['_aiTeamTemplateRequires','_aiTeamTemplateName','_aiTeamTemplates','_aiTeamTypes','_aiTeamUpgrades','_return','_side','_u']; _side = _this; //--- Overall Dump. _return = ["Guerrila", "GUE"] Call Compile preprocessFile "Common\Config\Core_Squads\Squads_GetFactionGroups.sqf"; _aiTeamTemplates = _return select 0; _aiTeamTemplateName = _return select 1; _aiTeamTemplateRequires = _return select 2; _aiTeamTypes = _return select 3; _aiTeamUpgrades = _return select 4; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATES", _side], _aiTeamTemplates]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATEREQUIRES", _side], _aiTeamTemplateRequires]; missionNamespace setVariable [Format["WFBE_%1AITEAMTYPES", _side], _aiTeamTypes]; missionNamespace setVariable [Format["WFBE_%1AITEAMUPGRADES", _side], _aiTeamUpgrades]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATEDESCRIPTIONS", _side], _aiTeamTemplateName];Private ['_aiTeamTemplateRequires','_aiTeamTemplateName','_aiTeamTemplates','_aiTeamTypes','_aiTeamUpgrades','_return','_side','_u']; _side = _this; //--- Overall Dump. _return = ["East", "INS"] Call Compile preprocessFile "Common\Config\Core_Squads\Squads_GetFactionGroups.sqf"; _aiTeamTemplates = _return select 0; _aiTeamTemplateName = _return select 1; _aiTeamTemplateRequires = _return select 2; _aiTeamTypes = _return select 3; _aiTeamUpgrades = _return select 4; //--- Custom Groups. _u = ["BMP2_INS"]; _u = _u + ["BMP2_INS"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Armor - APC Platoon"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTypes = _aiTeamTypes + [2]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[false,false,true,false]]; _aiTeamUpgrades = _aiTeamUpgrades + [[0,0,2,0]]; _u = ["ZSU_INS"]; _u = _u + ["ZSU_INS"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Armor - AA Platoon"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTypes = _aiTeamTypes + [2]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[false,false,true,false]]; _aiTeamUpgrades = _aiTeamUpgrades + [[0,0,1,0]]; _u = ["Mi17_Ins"]; _u = _u + ["Ins_Soldier_Medic"]; _u = _u + ["Ins_Soldier_MG"]; _u = _u + ["Ins_Soldier_AR"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_Sniper"]; _u = _u + ["Ins_Soldier_1"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Air - Mi-8 Infantry Squadron"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTypes = _aiTeamTypes + [3]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[false,false,false,true]]; _aiTeamUpgrades = _aiTeamUpgrades + [[1,0,0,0]]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATES", _side], _aiTeamTemplates]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATEREQUIRES", _side], _aiTeamTemplateRequires]; missionNamespace setVariable [Format["WFBE_%1AITEAMTYPES", _side], _aiTeamTypes]; missionNamespace setVariable [Format["WFBE_%1AITEAMUPGRADES", _side], _aiTeamUpgrades]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATEDESCRIPTIONS", _side], _aiTeamTemplateName];Private ['_aiTeamTemplateRequires','_aiTeamTemplateName','_aiTeamTemplates','_aiTeamTypes','_aiTeamUpgrades','_return','_side','_u']; _side = _this; //--- Overall Dump. _return = ["East", "BIS_TK", ["TK_An2Flight"]] Call Compile preprocessFile "Common\Config\Core_Squads\Squads_GetFactionGroups.sqf"; _aiTeamTemplates = _return select 0; _aiTeamTemplateName = _return select 1; _aiTeamTemplateRequires = _return select 2; _aiTeamTypes = _return select 3; _aiTeamUpgrades = _return select 4; //--- Custom Groups. _u = ["BMP2_TK_EP1"]; _u = _u + ["BMP2_TK_EP1"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Armor - IFV Platoon (Light)"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[false,false,true,false]]; _aiTeamTypes = _aiTeamTypes + [2]; _aiTeamUpgrades = _aiTeamUpgrades + [[0,0,0,0]]; _u = ["ZSU_TK_EP1"]; _u = _u + ["ZSU_TK_EP1"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Armor - Anti Air Platoon"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[false,false,true,false]]; _aiTeamTypes = _aiTeamTypes + [2]; _aiTeamUpgrades = _aiTeamUpgrades + [[0,0,1,0]]; _u = ["Mi17_TK_EP1"]; _u = _u + ["TK_Soldier_SL_EP1"]; _u = _u + ["TK_Soldier_AA_EP1"]; _u = _u + ["TK_Soldier_AA_EP1"]; _u = _u + ["TK_Soldier_LAT_EP1"]; _u = _u + ["TK_Soldier_LAT_EP1"]; _u = _u + ["TK_Soldier_MG_EP1"]; _u = _u + ["TK_Soldier_MG_EP1"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Air - Infantry Mi-17 Squadron"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[true,false,false,true]]; _aiTeamTypes = _aiTeamTypes + [3]; _aiTeamUpgrades = _aiTeamUpgrades + [[2,0,0,0]]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATES", _side], _aiTeamTemplates]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATEREQUIRES", _side], _aiTeamTemplateRequires]; missionNamespace setVariable [Format["WFBE_%1AITEAMTYPES", _side], _aiTeamTypes]; missionNamespace setVariable [Format["WFBE_%1AITEAMUPGRADES", _side], _aiTeamUpgrades]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATEDESCRIPTIONS", _side], _aiTeamTemplateName];Private ['_aiTeamTemplateRequires','_aiTeamTemplateName','_aiTeamTemplates','_aiTeamTypes','_aiTeamUpgrades','_return','_side','_u']; _side = _this; //--- Overall Dump. _return = ["Guerrila", "BIS_TK_GUE"] Call Compile preprocessFile "Common\Config\Core_Squads\Squads_GetFactionGroups.sqf"; _aiTeamTemplates = _return select 0; _aiTeamTemplateName = _return select 1; _aiTeamTemplateRequires = _return select 2; _aiTeamTypes = _return select 3; _aiTeamUpgrades = _return select 4; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATES", _side], _aiTeamTemplates]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATEREQUIRES", _side], _aiTeamTemplateRequires]; missionNamespace setVariable [Format["WFBE_%1AITEAMTYPES", _side], _aiTeamTypes]; missionNamespace setVariable [Format["WFBE_%1AITEAMUPGRADES", _side], _aiTeamUpgrades]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATEDESCRIPTIONS", _side], _aiTeamTemplateName];Private ['_aiTeamTemplateRequires','_aiTeamTemplateName','_aiTeamTemplates','_aiTeamTypes','_aiTeamUpgrades','_return','_side','_u']; _side = _this; //--- Overall Dump. _return = ["West", "BIS_US", ["US_AH6XFlight","US_C130JFlight","US_MQ9Flight"]] Call Compile preprocessFile "Common\Config\Core_Squads\Squads_GetFactionGroups.sqf"; _aiTeamTemplates = _return select 0; _aiTeamTemplateName = _return select 1; _aiTeamTemplateRequires = _return select 2; _aiTeamTypes = _return select 3; _aiTeamUpgrades = _return select 4; //--- Custom Groups. _u = ["M2A2_EP1"]; _u = _u + ["M2A2_EP1"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Armor - APC Platoon (Bradley)"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[false,false,true,false]]; _aiTeamTypes = _aiTeamTypes + [2]; _aiTeamUpgrades = _aiTeamUpgrades + [[0,0,1,0]]; _u = ["M6_EP1"]; _u = _u + ["M6_EP1"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Armor - Anti-Air Platoon"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[false,false,true,false]]; _aiTeamTypes = _aiTeamTypes + [2]; _aiTeamUpgrades = _aiTeamUpgrades + [[0,0,3,0]]; _u = ["CH_47F_EP1"]; _u = _u + ["US_Soldier_TL_EP1"]; _u = _u + ["US_Soldier_AR_EP1"]; _u = _u + ["US_Soldier_LAT_EP1"]; _u = _u + ["US_Soldier_Medic_EP1"]; _u = _u + ["US_Soldier_EP1"]; _u = _u + ["US_Soldier_EP1"]; _u = _u + ["US_Soldier_EP1"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Air - Infantry CH-47F Squadron"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[true,false,false,true]]; _aiTeamTypes = _aiTeamTypes + [3]; _aiTeamUpgrades = _aiTeamUpgrades + [[0,0,0,0]]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATES", _side], _aiTeamTemplates]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATEREQUIRES", _side], _aiTeamTemplateRequires]; missionNamespace setVariable [Format["WFBE_%1AITEAMTYPES", _side], _aiTeamTypes]; missionNamespace setVariable [Format["WFBE_%1AITEAMUPGRADES", _side], _aiTeamUpgrades]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATEDESCRIPTIONS", _side], _aiTeamTemplateName];Private ['_aiTeamTemplateRequires','_aiTeamTemplateName','_aiTeamTemplates','_aiTeamTypes','_aiTeamUpgrades','_return','_side','_u']; _side = _this; //--- Overall Dump. _return = ["West", "OFrP"] Call Compile preprocessFile "Common\Config\Core_Squads\Squads_GetFactionGroups.sqf"; _aiTeamTemplates = _return select 0; _aiTeamTemplateName = _return select 1; _aiTeamTemplateRequires = _return select 2; _aiTeamTypes = _return select 3; _aiTeamUpgrades = _return select 4; //--- Custom Groups. _u = ["OFrP_Leclerc_desert"]; _u = _u + ["OFrP_Leclerc_desert"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Armor - Leclerc Section"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[false,false,true,false]]; _aiTeamTypes = _aiTeamTypes + [2]; _aiTeamUpgrades = _aiTeamUpgrades + [[0,0,1,0]]; _u = ["OFrP_Puma_CE"]; _u = _u + ["OFrP_Soldier_Inf_TeamLeader"]; _u = _u + ["OFrP_Soldier_Inf_Minimi"]; _u = _u + ["OFrP_Soldier_Inf_ABL"]; _u = _u + ["OFrP_Soldier_Inf_Medic"]; _u = _u + ["OFrP_Soldier_Inf"]; _u = _u + ["OFrP_Soldier_Inf"]; _u = _u + ["OFrP_Soldier_Inf"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Air - Infantry Puma Squadron"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[true,false,false,true]]; _aiTeamTypes = _aiTeamTypes + [3]; _aiTeamUpgrades = _aiTeamUpgrades + [[0,0,0,1]]; _u = ["OFrP_Caracal"]; _u = _u + ["OFrP_Soldier_Inf_TeamLeader"]; _u = _u + ["OFrP_Soldier_Inf_Minimi"]; _u = _u + ["OFrP_Soldier_Inf_LRAC89"]; _u = _u + ["OFrP_Soldier_Inf_Medic"]; _u = _u + ["OFrP_Soldier_Inf"]; _u = _u + ["OFrP_Soldier_Inf"]; _u = _u + ["OFrP_Soldier_Inf"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Air - Infantry Caracal Squadron"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[true,false,false,true]]; _aiTeamTypes = _aiTeamTypes + [3]; _aiTeamUpgrades = _aiTeamUpgrades + [[2,0,0,0]]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATES", _side], _aiTeamTemplates]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATEREQUIRES", _side], _aiTeamTemplateRequires]; missionNamespace setVariable [Format["WFBE_%1AITEAMTYPES", _side], _aiTeamTypes]; missionNamespace setVariable [Format["WFBE_%1AITEAMUPGRADES", _side], _aiTeamUpgrades]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATEDESCRIPTIONS", _side], _aiTeamTemplateName];Private ['_aiTeamTemplateRequires','_aiTeamTemplateName','_aiTeamTemplates','_aiTeamTypes','_aiTeamUpgrades','_return','_side','_u']; _side = _this; //--- Overall Dump. _return = ["East", "RU", ["RU_Pchela1TSquadron","RU_Ka52Squadron"]] Call Compile preprocessFile "Common\Config\Core_Squads\Squads_GetFactionGroups.sqf"; _aiTeamTemplates = _return select 0; _aiTeamTemplateName = _return select 1; _aiTeamTemplateRequires = _return select 2; _aiTeamTypes = _return select 3; _aiTeamUpgrades = _return select 4; //--- Custom Groups. _u = ["2S6M_Tunguska"]; _u = _u + ["2S6M_Tunguska"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Armor - Anti Air Platoon"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[false,false,true,false]]; _aiTeamTypes = _aiTeamTypes + [2]; _aiTeamUpgrades = _aiTeamUpgrades + [[0,0,3,0]]; _u = ["T72_RU"]; _u = _u + ["T72_RU"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Armor - Tank Platoon (Light)"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[false,false,true,false]]; _aiTeamTypes = _aiTeamTypes + [2]; _aiTeamUpgrades = _aiTeamUpgrades + [[0,0,1,0]]; _u = ["Mi17_Ins"]; _u = _u + ["MVD_Soldier_TL"]; _u = _u + ["MVD_Soldier_GL"]; _u = _u + ["MVD_Soldier_MG"]; _u = _u + ["MVD_Soldier_MG"]; _u = _u + ["MVD_Soldier_Marksman"]; _u = _u + ["MVD_Soldier_AT"]; _u = _u + ["MVD_Soldier_AT"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Air - Infantry Mi-8 Squadron"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[true,false,false,true]]; _aiTeamTypes = _aiTeamTypes + [3]; _aiTeamUpgrades = _aiTeamUpgrades + [[2,0,0,0]]; _u = ["Mi17_rockets_RU"]; _u = _u + ["RU_Soldier_TL"]; _u = _u + ["RU_Soldier_AA"]; _u = _u + ["RU_Soldier_LAT"]; _u = _u + ["RU_Soldier_LAT"]; _u = _u + ["RU_Soldier_MG"]; _u = _u + ["RU_Soldier_MG"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Air - Infantry Mi-8 Squadron (Rockets)"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[true,false,false,true]]; _aiTeamTypes = _aiTeamTypes + [3]; _aiTeamUpgrades = _aiTeamUpgrades + [[2,0,0,1]]; if ((missionNamespace getVariable "WFBE_C_UNITS_KAMOV_DISABLED") == 0) then { _u = ["Ka52Black"]; _u = _u + ["Ka52"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Air - Ka-52 Squadron"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[false,false,false,true]]; _aiTeamTypes = _aiTeamTypes + [3]; _aiTeamUpgrades = _aiTeamUpgrades + [[0,0,0,3]]; }; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATES", _side], _aiTeamTemplates]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATEREQUIRES", _side], _aiTeamTemplateRequires]; missionNamespace setVariable [Format["WFBE_%1AITEAMTYPES", _side], _aiTeamTypes]; missionNamespace setVariable [Format["WFBE_%1AITEAMUPGRADES", _side], _aiTeamUpgrades]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATEDESCRIPTIONS", _side], _aiTeamTemplateName];Private ['_aiTeamTemplateRequires','_aiTeamTemplateName','_aiTeamTemplates','_aiTeamTypes','_aiTeamUpgrades','_return','_side','_u']; _side = _this; //--- Overall Dump. _return = ["West", "USMC", ["USMC_MQ9Squadron","USMC_FRTeam_Razor"]] Call Compile preprocessFile "Common\Config\Core_Squads\Squads_GetFactionGroups.sqf"; _aiTeamTemplates = _return select 0; _aiTeamTemplateName = _return select 1; _aiTeamTemplateRequires = _return select 2; _aiTeamTypes = _return select 3; _aiTeamUpgrades = _return select 4; //--- Custom Groups. _u = ["M1A1"]; _u = _u + ["M1A1"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Armor - M1A1 Section"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[false,false,true,false]]; _aiTeamTypes = _aiTeamTypes + [2]; _aiTeamUpgrades = _aiTeamUpgrades + [[0,0,1,0]]; _u = ["UH1Y"]; _u = _u + ["USMC_Soldier_TL"]; _u = _u + ["USMC_Soldier_AR"]; _u = _u + ["USMC_Soldier_LAT"]; _u = _u + ["USMC_Soldier_Medic"]; _u = _u + ["USMC_Soldier"]; _u = _u + ["USMC_Soldier"]; _u = _u + ["USMC_Soldier"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Air - Infantry UH1Y Squadron"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[true,false,false,true]]; _aiTeamTypes = _aiTeamTypes + [3]; _aiTeamUpgrades = _aiTeamUpgrades + [[0,0,0,1]]; _u = ["MH60S"]; _u = _u + ["USMC_Soldier_TL"]; _u = _u + ["USMC_Soldier_MG"]; _u = _u + ["USMC_Soldier_AT"]; _u = _u + ["USMC_Soldier_Medic"]; _u = _u + ["USMC_Soldier"]; _u = _u + ["USMC_Soldier"]; _u = _u + ["USMC_Soldier"]; _aiTeamTemplateName = _aiTeamTemplateName + ["Air - Infantry MH-60S Squadron"]; _aiTeamTemplates = _aiTeamTemplates + [_u]; _aiTeamTemplateRequires = _aiTeamTemplateRequires + [[true,false,false,true]]; _aiTeamTypes = _aiTeamTypes + [3]; _aiTeamUpgrades = _aiTeamUpgrades + [[2,0,0,0]]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATES", _side], _aiTeamTemplates]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATEREQUIRES", _side], _aiTeamTemplateRequires]; missionNamespace setVariable [Format["WFBE_%1AITEAMTYPES", _side], _aiTeamTypes]; missionNamespace setVariable [Format["WFBE_%1AITEAMUPGRADES", _side], _aiTeamUpgrades]; missionNamespace setVariable [Format["WFBE_%1AITEAMTEMPLATEDESCRIPTIONS", _side], _aiTeamTemplateName];Private ['_c','_count','_d','_dir','_dis','_n','_s','_side','_t','_v']; _side = _this; /* Root Definition */ _MHQ = "BMP2_HQ_CDF"; _HQ = "BMP2_HQ_CDF_unfolded"; _BAR = "CDF_WarfareBBarracks"; _LVF = "CDF_WarfareBLightFactory"; _CC = "CDF_WarfareBUAVterminal"; _HEAVY = "CDF_WarfareBHeavyFactory"; _AIR = "CDF_WarfareBAircraftFactory"; _SP = "CDF_WarfareBVehicleServicePoint"; _AAR = "CDF_WarfareBAntiAirRadar"; /* Mash used after being deployed */ missionNamespace setVariable [Format["WFBE_%1FARP", _side], 'Camp']; /* Construction Crates */ missionNamespace setVariable [Format["WFBE_%1CONSTRUCTIONSITE", _side], 'CDF_WarfareBContructionSite']; /* Structures */ _v = ["Headquarters"]; _n = [_HQ]; _d = [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = [missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_COST_DEPLOY"]; _t = [if (WF_Debug) then {1} else {30}]; _s = ["HQSite"]; _dis = [15]; _dir = [0]; _v = _v + ["Barracks"]; _n = _n + [_BAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [200]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [18]; _dir = _dir + [90]; _v = _v + ["Light"]; _n = _n + [_LVF]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [600]; _t = _t + [if (WF_Debug) then {1} else {90}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["CommandCenter"]; _n = _n + [_CC]; _d = _d + [localize "STR_WF_CommandCenter"]; _c = _c + [1200]; _t = _t + [if (WF_Debug) then {1} else {110}]; _s = _s + ["SmallSite"]; _dis = _dis + [20]; _dir = _dir + [90]; _v = _v + ["Heavy"]; _n = _n + [_HEAVY]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [2800]; _t = _t + [if (WF_Debug) then {1} else {130}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["Aircraft"]; _n = _n + [_AIR]; _d = _d + [localize "STR_WF_AircraftFactory"]; _c = _c + [4400]; _t = _t + [if (WF_Debug) then {1} else {150}]; _s = _s + ["SmallSite"]; _dis = _dis + [31]; _dir = _dir + [90]; _v = _v + ["ServicePoint"]; _n = _n + [_SP]; _d = _d + [localize "STR_WF_MAIN_ServicePoint"]; _c = _c + [700]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [21]; _dir = _dir + [90]; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_ANTIAIRRADAR") > 0) then { _v = _v + ["AARadar"]; _n = _n + [_AAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [3200]; _t = _t + [if (WF_Debug) then {1} else {280}]; _s = _s + ["MediumSite"]; _dis = _dis + [21]; _dir = _dir + [90]; }; for [{_count = count _v - 1},{_count >= 0},{_count = _count - 1}] do { missionNamespace setVariable [Format["WFBE_%1%2TYPE",_side,_v select _count],_count]; }; { missionNamespace setVariable [Format ["%1%2",_side, _x select 0], _x select 1]; } forEach [["HQ",_HQ],["BAR",_BAR],["LVF",_LVF],["CC",_CC],["HEAVY",_HEAVY],["SP",_SP],["AAR",_AAR]]; missionNamespace setVariable [Format["WFBE_%1MHQNAME", _side], _MHQ]; missionNamespace setVariable [Format["WFBE_%1STRUCTURES", _side], _v]; missionNamespace setVariable [Format["WFBE_%1STRUCTURENAMES", _side], _n]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDESCRIPTIONS", _side], _d]; missionNamespace setVariable [Format["WFBE_%1STRUCTURECOSTS", _side], _c]; missionNamespace setVariable [Format["WFBE_%1STRUCTURETIMES", _side], _t]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDISTANCES", _side], _dis]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDIRECTIONS", _side], _dir]; missionNamespace setVariable [Format["WFBE_%1STRUCTURESCRIPTS", _side], _s]; /* Defenses */ _n = ["CDF_WarfareBMGNest_PK"]; _n = _n + ["DSHkM_Mini_TriPod_CDF"]; _n = _n + ["DSHKM_CDF"]; _n = _n + ["SearchLight_CDF"]; _n = _n + ["AGS_CDF"]; _n = _n + ["SPG9_CDF"]; _n = _n + ["ZU23_CDF"]; _n = _n + ["2b14_82mm_CDF"]; _n = _n + ["D30_CDF"]; _n = _n + ["Land_HBarrier3"]; _n = _n + ["Land_HBarrier5"]; _n = _n + ["Land_HBarrier_large"]; _n = _n + ["Base_WarfareBBarrier5x"]; _n = _n + ["Base_WarfareBBarrier10x"]; _n = _n + ["Base_WarfareBBarrier10xTall"]; _n = _n + ["MASH"]; _n = _n + ["Land_Ind_SawMillPen"]; _n = _n + ["Land_fort_bagfence_long"]; _n = _n + ["Land_fort_bagfence_corner"]; _n = _n + ["Land_fort_bagfence_round"]; _n = _n + ["Land_fortified_nest_small"]; _n = _n + ["Land_fortified_nest_big"]; _n = _n + ["Land_Fort_Watchtower"]; _n = _n + ["Land_fort_rampart"]; _n = _n + ["Land_fort_artillery_nest"]; _n = _n + ["Hhedgehog_concreteBig"]; _n = _n + ["Hedgehog"]; _n = _n + ["Land_CamoNet_NATO"]; _n = _n + ["Land_CamoNetVar_NATO"]; _n = _n + ["Land_CamoNetB_NATO"]; _n = _n + ["Sign_Danger"]; _n = _n + ["HeliH"]; _n = _n + ["Fort_RazorWire"]; _n = _n + ["Land_Ind_IlluminantTower"]; _n = _n + ["Land_Campfire"]; _n = _n + ["RUOrdnanceBox"]; _n = _n + ["RUVehicleBox"]; _n = _n + ["RUBasicAmmunitionBox"]; _n = _n + ["RUBasicWeaponsBox"]; _n = _n + ["RULaunchersBox"]; _n = _n + ["RUSpecialWeaponsBox"]; /* Class used for AI, AI will attempt to build those */ missionNamespace setVariable [Format["WFBE_%1DEFENSES_MG", _side], ['DSHKM_CDF']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_GL", _side], ['AGS_CDF']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_AAPOD", _side], ['ZU23_CDF']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_ATPOD", _side], ['SPG9_CDF']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_CANNON", _side], ['D30_CDF']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MASH", _side], ['MASH']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MORTAR", _side], ['2b14_82mm_CDF']]; missionNamespace setVariable [Format["WFBE_%1DEFENSENAMES", _side], _n];Private ['_c','_count','_d','_dir','_dis','_n','_s','_side','_t','_v']; _side = _this; /* Root Definition */ _MHQ = "BMP2_HQ_CDF"; _HQ = "BMP2_HQ_CDF_unfolded"; _BAR = "CDF_WarfareBBarracks"; _LVF = "CDF_WarfareBLightFactory"; _CC = "CDF_WarfareBUAVterminal"; _HEAVY = "CDF_WarfareBHeavyFactory"; _AIR = "CDF_WarfareBAircraftFactory"; _SP = "CDF_WarfareBVehicleServicePoint"; _AAR = "CDF_WarfareBAntiAirRadar"; /* Mash used after being deployed */ missionNamespace setVariable [Format["WFBE_%1FARP", _side], 'Camp']; /* Construction Crates */ missionNamespace setVariable [Format["WFBE_%1CONSTRUCTIONSITE", _side], 'CDF_WarfareBContructionSite']; /* Structures */ _v = ["Headquarters"]; _n = [_HQ]; _d = [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = [missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_COST_DEPLOY"]; _t = [if (WF_Debug) then {1} else {30}]; _s = ["HQSite"]; _dis = [15]; _dir = [0]; _v = _v + ["Barracks"]; _n = _n + [_BAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [200]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [18]; _dir = _dir + [90]; _v = _v + ["Light"]; _n = _n + [_LVF]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [600]; _t = _t + [if (WF_Debug) then {1} else {90}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["CommandCenter"]; _n = _n + [_CC]; _d = _d + [localize "STR_WF_CommandCenter"]; _c = _c + [1200]; _t = _t + [if (WF_Debug) then {1} else {110}]; _s = _s + ["SmallSite"]; _dis = _dis + [20]; _dir = _dir + [90]; _v = _v + ["Heavy"]; _n = _n + [_HEAVY]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [2800]; _t = _t + [if (WF_Debug) then {1} else {130}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["Aircraft"]; _n = _n + [_AIR]; _d = _d + [localize "STR_WF_AircraftFactory"]; _c = _c + [4400]; _t = _t + [if (WF_Debug) then {1} else {150}]; _s = _s + ["SmallSite"]; _dis = _dis + [31]; _dir = _dir + [90]; _v = _v + ["ServicePoint"]; _n = _n + [_SP]; _d = _d + [localize "STR_WF_MAIN_ServicePoint"]; _c = _c + [700]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [21]; _dir = _dir + [90]; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_ANTIAIRRADAR") > 0) then { _v = _v + ["AARadar"]; _n = _n + [_AAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [3200]; _t = _t + [if (WF_Debug) then {1} else {280}]; _s = _s + ["MediumSite"]; _dis = _dis + [21]; _dir = _dir + [90]; }; for [{_count = count _v - 1},{_count >= 0},{_count = _count - 1}] do { missionNamespace setVariable [Format["WFBE_%1%2TYPE",_side,_v select _count],_count]; }; { missionNamespace setVariable [Format ["%1%2",_side, _x select 0], _x select 1]; } forEach [["HQ",_HQ],["BAR",_BAR],["LVF",_LVF],["CC",_CC],["HEAVY",_HEAVY],["SP",_SP],["AAR",_AAR]]; missionNamespace setVariable [Format["WFBE_%1MHQNAME", _side], _MHQ]; missionNamespace setVariable [Format["WFBE_%1STRUCTURES", _side], _v]; missionNamespace setVariable [Format["WFBE_%1STRUCTURENAMES", _side], _n]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDESCRIPTIONS", _side], _d]; missionNamespace setVariable [Format["WFBE_%1STRUCTURECOSTS", _side], _c]; missionNamespace setVariable [Format["WFBE_%1STRUCTURETIMES", _side], _t]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDISTANCES", _side], _dis]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDIRECTIONS", _side], _dir]; missionNamespace setVariable [Format["WFBE_%1STRUCTURESCRIPTS", _side], _s]; /* Defenses */ _n = ["CDF_WarfareBMGNest_PK"]; _n = _n + ["DSHkM_Mini_TriPod_CDF"]; _n = _n + ["DSHKM_CDF"]; _n = _n + ["SearchLight_CDF"]; _n = _n + ["AGS_CDF"]; _n = _n + ["SPG9_CDF"]; _n = _n + ["ZU23_CDF"]; _n = _n + ["2b14_82mm_CDF"]; _n = _n + ["D30_CDF"]; _n = _n + ["Land_HBarrier3"]; _n = _n + ["Land_HBarrier5"]; _n = _n + ["Land_HBarrier_large"]; _n = _n + ["Base_WarfareBBarrier5x"]; _n = _n + ["Base_WarfareBBarrier10x"]; _n = _n + ["Base_WarfareBBarrier10xTall"]; _n = _n + ["MASH_EP1"]; _n = _n + ["Land_Ind_SawMillPen"]; _n = _n + ["Land_fort_bagfence_long"]; _n = _n + ["Land_fort_bagfence_corner"]; _n = _n + ["Land_fort_bagfence_round"]; _n = _n + [if (WF_Camo) then {"Land_fortified_nest_small"} else {"Land_fortified_nest_small_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_fort_rampart"} else {"Land_fort_rampart_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_fort_artillery_nest"} else {"Land_fort_artillery_nest_EP1"}]; _n = _n + ["Hhedgehog_concreteBig"]; _n = _n + ["Hedgehog_EP1"]; _n = _n + [if (WF_Camo) then {"Land_CamoNet_NATO"} else {"Land_CamoNet_NATO_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_CamoNetVar_NATO"} else {"Land_CamoNetVar_NATO_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_CamoNetB_NATO"} else {"Land_CamoNetB_NATO_EP1"}]; _n = _n + ["Sign_Danger"]; _n = _n + ["HeliH"]; _n = _n + ["Fort_RazorWire"]; _n = _n + ["Land_Ind_IlluminantTower"]; _n = _n + ["Concrete_Wall_EP1"]; _n = _n + ["Land_Campfire"]; _n = _n + ["RUOrdnanceBox"]; _n = _n + ["RUVehicleBox"]; _n = _n + ["RUBasicAmmunitionBox"]; _n = _n + ["RUBasicWeaponsBox"]; _n = _n + ["RULaunchersBox"]; _n = _n + ["RUSpecialWeaponsBox"]; /* Class used for AI, AI will attempt to build those */ missionNamespace setVariable [Format["WFBE_%1DEFENSES_MG", _side], ['DSHKM_CDF']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_GL", _side], ['AGS_CDF']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_AAPOD", _side], ['ZU23_CDF']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_ATPOD", _side], ['SPG9_CDF']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_CANNON", _side], ['D30_CDF']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MASH", _side], ['MASH']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MORTAR", _side], ['2b14_82mm_CDF']]; missionNamespace setVariable [Format["WFBE_%1DEFENSENAMES", _side], _n];Private ['_c','_count','_d','_dir','_dis','_n','_s','_side','_t','_v']; _side = _this; /* Root Definition */ _MHQ = "BRDM2_HQ_Gue"; _HQ = "BRDM2_HQ_Gue_unfolded"; _BAR = if (WF_Camo) then {"Gue_WarfareBBarracks"} else {"TK_GUE_WarfareBBarracks_EP1"}; _LVF = if (WF_Camo) then {"Gue_WarfareBLightFactory"} else {"TK_GUE_WarfareBLightFactory_EP1"}; _CC = if (WF_Camo) then {"GUE_WarfareBUAVterminal"} else {"TK_GUE_WarfareBUAVterminal_EP1"}; _HEAVY = if (WF_Camo) then {"Gue_WarfareBHeavyFactory"} else {"TK_GUE_WarfareBHeavyFactory_EP1"}; _AIR = if (WF_Camo) then {"GUE_WarfareBAircraftFactory"} else {"TK_GUE_WarfareBAircraftFactory_EP1"}; _SP = if (WF_Camo) then {"GUE_WarfareBVehicleServicePoint"} else {"TK_GUE_WarfareBVehicleServicePoint_EP1"}; _AAR = if (WF_Camo) then {"Gue_WarfareBAntiAirRadar"} else {"TK_GUE_WarfareBAntiAirRadar_EP1"}; /* Mash used after being deployed */ missionNamespace setVariable [Format["WFBE_%1FARP", _side], 'CampEast']; /* Construction Crates */ missionNamespace setVariable [Format["WFBE_%1CONSTRUCTIONSITE", _side], 'Gue_WarfareBContructionSite']; /* Structures */ _v = ["Headquarters"]; _n = [_HQ]; _d = [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = [missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_COST_DEPLOY"]; _t = [if (WF_Debug) then {1} else {30}]; _s = ["HQSite"]; _dis = [15]; _dir = [0]; _v = _v + ["Barracks"]; _n = _n + [_BAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [200]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [18]; _dir = _dir + [90]; _v = _v + ["Light"]; _n = _n + [_LVF]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [600]; _t = _t + [if (WF_Debug) then {1} else {90}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["CommandCenter"]; _n = _n + [_CC]; _d = _d + [localize "STR_WF_CommandCenter"]; _c = _c + [1200]; _t = _t + [if (WF_Debug) then {1} else {110}]; _s = _s + ["SmallSite"]; _dis = _dis + [20]; _dir = _dir + [90]; _v = _v + ["Heavy"]; _n = _n + [_HEAVY]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [2800]; _t = _t + [if (WF_Debug) then {1} else {130}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["Aircraft"]; _n = _n + [_AIR]; _d = _d + [localize "STR_WF_AircraftFactory"]; _c = _c + [4400]; _t = _t + [if (WF_Debug) then {1} else {150}]; _s = _s + ["SmallSite"]; _dis = _dis + [31]; _dir = _dir + [90]; _v = _v + ["ServicePoint"]; _n = _n + [_SP]; _d = _d + [localize "STR_WF_MAIN_ServicePoint"]; _c = _c + [700]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [21]; _dir = _dir + [90]; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_ANTIAIRRADAR") > 0) then { _v = _v + ["AARadar"]; _n = _n + [_AAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [3200]; _t = _t + [if (WF_Debug) then {1} else {280}]; _s = _s + ["MediumSite"]; _dis = _dis + [21]; _dir = _dir + [90]; }; for [{_count = count _v - 1},{_count >= 0},{_count = _count - 1}] do { missionNamespace setVariable [Format["WFBE_%1%2TYPE",_side,_v select _count],_count]; }; { missionNamespace setVariable [Format ["%1%2",_side, _x select 0], _x select 1]; } forEach [["HQ",_HQ],["BAR",_BAR],["LVF",_LVF],["CC",_CC],["HEAVY",_HEAVY],["SP",_SP],["AAR",_AAR]]; missionNamespace setVariable [Format["WFBE_%1MHQNAME", _side], _MHQ]; missionNamespace setVariable [Format["WFBE_%1STRUCTURES", _side], _v]; missionNamespace setVariable [Format["WFBE_%1STRUCTURENAMES", _side], _n]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDESCRIPTIONS", _side], _d]; missionNamespace setVariable [Format["WFBE_%1STRUCTURECOSTS", _side], _c]; missionNamespace setVariable [Format["WFBE_%1STRUCTURETIMES", _side], _t]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDISTANCES", _side], _dis]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDIRECTIONS", _side], _dir]; missionNamespace setVariable [Format["WFBE_%1STRUCTURESCRIPTS", _side], _s]; /* Defenses */ _n = ["WarfareBMGNest_PK_TK_GUE_EP1"]; _n = _n + ["SearchLight_TK_GUE_EP1"]; _n = _n + ["DSHkM_Mini_TriPod_TK_GUE_EP1"]; _n = _n + ["DSHKM_TK_GUE_EP1"]; _n = _n + ["AGS_TK_GUE_EP1"]; _n = _n + ["SPG9_TK_GUE_EP1"]; _n = _n + ["ZU23_TK_GUE_EP1"]; _n = _n + ["2b14_82mm_TK_GUE_EP1"]; _n = _n + ["D30_TK_GUE_EP1"]; _n = _n + ["Land_HBarrier3"]; _n = _n + ["Land_HBarrier5"]; _n = _n + ["Land_HBarrier_large"]; _n = _n + ["TK_WarfareBBarrier5x_EP1"]; _n = _n + ["TK_WarfareBBarrier10x_EP1"]; _n = _n + ["TK_WarfareBBarrier10xTall_EP1"]; _n = _n + ["MASH_EP1"]; _n = _n + ["Land_Ind_SawMillPen"]; _n = _n + ["Land_fort_bagfence_long"]; _n = _n + ["Land_fort_bagfence_corner"]; _n = _n + ["Land_fort_bagfence_round"]; _n = _n + ["Land_fortified_nest_small_EP1"]; _n = _n + ["Land_fort_rampart_EP1"]; _n = _n + ["Land_fort_artillery_nest_EP1"]; _n = _n + ["Hhedgehog_concreteBig"]; _n = _n + ["Hedgehog_EP1"]; _n = _n + ["Land_CamoNet_EAST_EP1"]; _n = _n + ["Land_CamoNetVar_EAST_EP1"]; _n = _n + ["Land_CamoNetB_EAST_EP1"]; _n = _n + ["Sign_Danger"]; _n = _n + ["HeliH"]; _n = _n + ["Fort_RazorWire"]; _n = _n + ["Concrete_Wall_EP1"]; _n = _n + ["Land_Campfire"]; _n = _n + ["TKOrdnanceBox_EP1"]; _n = _n + ["TKVehicleBox_EP1"]; _n = _n + ["TKBasicAmmunitionBox_EP1"]; _n = _n + ["TKBasicWeapons_EP1"]; _n = _n + ["TKLaunchers_EP1"]; _n = _n + ["TKSpecialWeapons_EP1"]; /* Class used for AI, AI will attempt to build those */ missionNamespace setVariable [Format["WFBE_%1DEFENSES_MG", _side], ['DSHKM_Gue']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_GL", _side], ['DSHKM_Gue']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_AAPOD", _side], ['ZU23_Gue']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_ATPOD", _side], ['SPG9_Gue']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_CANNON", _side], ['SPG9_Gue']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MASH", _side], ['MASH']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MORTAR", _side], ['2b14_82mm_TK_GUE_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSENAMES", _side], _n];Private ['_c','_count','_d','_dir','_dis','_n','_s','_side','_t','_v']; _side = _this; /* Root Definition */ _MHQ = "BMP2_HQ_INS"; _HQ = "BMP2_HQ_INS_unfolded"; _BAR = "Ins_WarfareBBarracks"; _LVF = "Ins_WarfareBLightFactory"; _CC = "INS_WarfareBUAVterminal"; _HEAVY = "Ins_WarfareBHeavyFactory"; _AIR = "INS_WarfareBAircraftFactory"; _SP = "INS_WarfareBVehicleServicePoint"; _AAR = "INS_WarfareBAntiAirRadar"; /* Mash used after being deployed */ missionNamespace setVariable [Format["WFBE_%1FARP", _side], 'CampEast']; /* Construction Crates */ missionNamespace setVariable [Format["WFBE_%1CONSTRUCTIONSITE", _side], 'Ins_WarfareBContructionSite']; /* Structures */ _v = ["Headquarters"]; _n = [_HQ]; _d = [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = [missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_COST_DEPLOY"]; _t = [if (WF_Debug) then {1} else {30}]; _s = ["HQSite"]; _dis = [15]; _dir = [0]; _v = _v + ["Barracks"]; _n = _n + [_BAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [200]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [18]; _dir = _dir + [90]; _v = _v + ["Light"]; _n = _n + [_LVF]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [600]; _t = _t + [if (WF_Debug) then {1} else {90}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["CommandCenter"]; _n = _n + [_CC]; _d = _d + [localize "STR_WF_CommandCenter"]; _c = _c + [1200]; _t = _t + [if (WF_Debug) then {1} else {110}]; _s = _s + ["SmallSite"]; _dis = _dis + [20]; _dir = _dir + [90]; _v = _v + ["Heavy"]; _n = _n + [_HEAVY]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [2800]; _t = _t + [if (WF_Debug) then {1} else {130}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["Aircraft"]; _n = _n + [_AIR]; _d = _d + [localize "STR_WF_AircraftFactory"]; _c = _c + [4400]; _t = _t + [if (WF_Debug) then {1} else {150}]; _s = _s + ["SmallSite"]; _dis = _dis + [31]; _dir = _dir + [90]; _v = _v + ["ServicePoint"]; _n = _n + [_SP]; _d = _d + [localize "STR_WF_MAIN_ServicePoint"]; _c = _c + [700]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [21]; _dir = _dir + [90]; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_ANTIAIRRADAR") > 0) then { _v = _v + ["AARadar"]; _n = _n + [_AAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [3200]; _t = _t + [if (WF_Debug) then {1} else {280}]; _s = _s + ["MediumSite"]; _dis = _dis + [21]; _dir = _dir + [90]; }; for [{_count = count _v - 1},{_count >= 0},{_count = _count - 1}] do { missionNamespace setVariable [Format["WFBE_%1%2TYPE",_side,_v select _count],_count]; }; { missionNamespace setVariable [Format ["%1%2",_side, _x select 0], _x select 1]; } forEach [["HQ",_HQ],["BAR",_BAR],["LVF",_LVF],["CC",_CC],["HEAVY",_HEAVY],["SP",_SP],["AAR",_AAR]]; missionNamespace setVariable [Format["WFBE_%1MHQNAME", _side], _MHQ]; missionNamespace setVariable [Format["WFBE_%1STRUCTURES", _side], _v]; missionNamespace setVariable [Format["WFBE_%1STRUCTURENAMES", _side], _n]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDESCRIPTIONS", _side], _d]; missionNamespace setVariable [Format["WFBE_%1STRUCTURECOSTS", _side], _c]; missionNamespace setVariable [Format["WFBE_%1STRUCTURETIMES", _side], _t]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDISTANCES", _side], _dis]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDIRECTIONS", _side], _dir]; missionNamespace setVariable [Format["WFBE_%1STRUCTURESCRIPTS", _side], _s]; /* Defenses */ _n = ["Ins_WarfareBMGNest_PK"]; _n = _n + ["SearchLight_INS"]; _n = _n + ["DSHkM_Mini_TriPod"]; _n = _n + ["DSHKM_Ins"]; _n = _n + ["AGS_Ins"]; _n = _n + ["SPG9_Ins"]; _n = _n + ["ZU23_Ins"]; _n = _n + ["2b14_82mm_INS"]; _n = _n + ["D30_Ins"]; _n = _n + ["Land_HBarrier3"]; _n = _n + ["Land_HBarrier5"]; _n = _n + ["Land_HBarrier_large"]; _n = _n + ["Base_WarfareBBarrier5x"]; _n = _n + ["Base_WarfareBBarrier10x"]; _n = _n + ["Base_WarfareBBarrier10xTall"]; _n = _n + ["MASH_EP1"]; _n = _n + ["Land_Ind_SawMillPen"]; _n = _n + ["Land_fort_bagfence_long"]; _n = _n + ["Land_fort_bagfence_corner"]; _n = _n + ["Land_fort_bagfence_round"]; _n = _n + [if (WF_Camo) then {"Land_fortified_nest_small"} else {"Land_fortified_nest_small_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_fort_rampart"} else {"Land_fort_rampart_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_fort_artillery_nest"} else {"Land_fort_artillery_nest_EP1"}]; _n = _n + ["Hhedgehog_concreteBig"]; _n = _n + ["Hedgehog_EP1"]; _n = _n + [if (WF_Camo) then {"Land_CamoNet_EAST"} else {"Land_CamoNet_EAST_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_CamoNetVar_EAST"} else {"Land_CamoNetVar_EAST_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_CamoNetB_EAST"} else {"Land_CamoNetB_EAST_EP1"}]; _n = _n + ["Sign_Danger"]; _n = _n + ["HeliH"]; _n = _n + ["Fort_RazorWire"]; _n = _n + ["Land_Ind_IlluminantTower"]; _n = _n + ["Concrete_Wall_EP1"]; _n = _n + ["Land_Campfire"]; _n = _n + ["RUOrdnanceBox"]; _n = _n + ["RUVehicleBox"]; _n = _n + ["RUBasicAmmunitionBox"]; _n = _n + ["RUBasicWeaponsBox"]; _n = _n + ["RULaunchersBox"]; _n = _n + ["RUSpecialWeaponsBox"]; /* Class used for AI, AI will attempt to build those */ missionNamespace setVariable [Format["WFBE_%1DEFENSES_MG", _side], ['DSHKM_Ins']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_GL", _side], ['AGS_Ins']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_AAPOD", _side], ['ZU23_Ins']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_ATPOD", _side], ['SPG9_Ins']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_CANNON", _side], ['D30_Ins']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MASH", _side], ['MASH']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MORTAR", _side], ['2b14_82mm_INS']]; missionNamespace setVariable [Format["WFBE_%1DEFENSENAMES", _side], _n];Private ['_c','_count','_d','_dir','_dis','_n','_s','_side','_t','_v']; _side = _this; /* Root Definition */ _MHQ = if (WF_Camo) then {'LAV25_HQ'} else {'M1130_CV_EP1'}; _HQ = if (WF_Camo) then {"LAV25_HQ_unfolded"} else {"M1130_HQ_unfolded_EP1"}; _BAR = if (WF_Camo) then {"USMC_WarfareBBarracks"} else {"US_WarfareBBarracks_EP1"}; _LVF = if (WF_Camo) then {"USMC_WarfareBLightFactory"} else {"US_WarfareBLightFactory_EP1"}; _CC = if (WF_Camo) then {"USMC_WarfareBUAVterminal"} else {"US_WarfareBUAVterminal_EP1"}; _HEAVY = if (WF_Camo) then {"USMC_WarfareBHeavyFactory"} else {"US_WarfareBHeavyFactory_EP1"}; _AIR = if (WF_Camo) then {"USMC_WarfareBAircraftFactory"} else {"US_WarfareBAircraftFactory_EP1"}; _SP = if (WF_Camo) then {"USMC_WarfareBVehicleServicePoint"} else {"US_WarfareBVehicleServicePoint_EP1"}; _AAR = if (WF_Camo) then {"USMC_WarfareBAntiAirRadar"} else {"US_WarfareBAntiAirRadar_EP1"}; /* Mash used after being deployed */ missionNamespace setVariable [Format["WFBE_%1FARP", _side], 'Camp_EP1']; /* Construction Crates */ missionNamespace setVariable [Format["WFBE_%1CONSTRUCTIONSITE", _side], 'US_WarfareBContructionSite_EP1']; /* Structures */ _v = ["Headquarters"]; _n = [_HQ]; _d = [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = [missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_COST_DEPLOY"]; _t = [if (WF_Debug) then {1} else {30}]; _s = ["HQSite"]; _dis = [15]; _dir = [0]; _v = _v + ["Barracks"]; _n = _n + [_BAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [200]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [18]; _dir = _dir + [90]; _v = _v + ["Light"]; _n = _n + [_LVF]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [600]; _t = _t + [if (WF_Debug) then {1} else {90}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["CommandCenter"]; _n = _n + [_CC]; _d = _d + [localize "STR_WF_CommandCenter"]; _c = _c + [1200]; _t = _t + [if (WF_Debug) then {1} else {110}]; _s = _s + ["SmallSite"]; _dis = _dis + [20]; _dir = _dir + [90]; _v = _v + ["Heavy"]; _n = _n + [_HEAVY]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [2800]; _t = _t + [if (WF_Debug) then {1} else {130}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["Aircraft"]; _n = _n + [_AIR]; _d = _d + [localize "STR_WF_AircraftFactory"]; _c = _c + [4400]; _t = _t + [if (WF_Debug) then {1} else {150}]; _s = _s + ["SmallSite"]; _dis = _dis + [31]; _dir = _dir + [90]; _v = _v + ["ServicePoint"]; _n = _n + [_SP]; _d = _d + [localize "STR_WF_MAIN_ServicePoint"]; _c = _c + [700]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [21]; _dir = _dir + [90]; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_ANTIAIRRADAR") > 0) then { _v = _v + ["AARadar"]; _n = _n + [_AAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [3200]; _t = _t + [if (WF_Debug) then {1} else {280}]; _s = _s + ["MediumSite"]; _dis = _dis + [21]; _dir = _dir + [90]; }; for [{_count = count _v - 1},{_count >= 0},{_count = _count - 1}] do { missionNamespace setVariable [Format["WFBE_%1%2TYPE",_side,_v select _count],_count]; }; { missionNamespace setVariable [Format ["%1%2",_side, _x select 0], _x select 1]; } forEach [["HQ",_HQ],["BAR",_BAR],["LVF",_LVF],["CC",_CC],["HEAVY",_HEAVY],["SP",_SP],["AAR",_AAR]]; missionNamespace setVariable [Format["WFBE_%1MHQNAME", _side], _MHQ]; missionNamespace setVariable [Format["WFBE_%1STRUCTURES", _side], _v]; missionNamespace setVariable [Format["WFBE_%1STRUCTURENAMES", _side], _n]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDESCRIPTIONS", _side], _d]; missionNamespace setVariable [Format["WFBE_%1STRUCTURECOSTS", _side], _c]; missionNamespace setVariable [Format["WFBE_%1STRUCTURETIMES", _side], _t]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDISTANCES", _side], _dis]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDIRECTIONS", _side], _dir]; missionNamespace setVariable [Format["WFBE_%1STRUCTURESCRIPTS", _side], _s]; /* Defenses */ _n = ["WarfareBMGNest_M240_US_EP1"]; _n = _n + ["M2HD_mini_TriPod_US_EP1"]; _n = _n + ["SearchLight_US_EP1"]; _n = _n + ["M2StaticMG_US_EP1"]; _n = _n + ["MK19_TriPod_US_EP1"]; _n = _n + ["OFrP_Milan_Launcher_Static"]; _n = _n + ["Stinger_Pod_US_EP1"]; _n = _n + ["M252_US_EP1"]; _n = _n + ["M119_US_EP1"]; _n = _n + ["Land_HBarrier3"]; _n = _n + ["Land_HBarrier5"]; _n = _n + ["Land_HBarrier_large"]; _n = _n + ["US_WarfareBBarrier5x_EP1"]; _n = _n + ["US_WarfareBBarrier10x_EP1"]; _n = _n + ["US_WarfareBBarrier10xTall_EP1"]; _n = _n + ["MASH_EP1"]; _n = _n + ["Land_Ind_SawMillPen"]; _n = _n + ["Land_fort_bagfence_long"]; _n = _n + ["Land_fort_bagfence_corner"]; _n = _n + ["Land_fort_bagfence_round"]; _n = _n + [if (WF_Camo) then {"Land_fortified_nest_small"} else {"Land_fortified_nest_small_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_fort_rampart"} else {"Land_fort_rampart_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_fort_artillery_nest"} else {"Land_fort_artillery_nest_EP1"}]; _n = _n + ["Hhedgehog_concreteBig"]; _n = _n + ["Hedgehog_EP1"]; _n = _n + [if (WF_Camo) then {"Land_CamoNet_NATO"} else {"Land_CamoNet_NATO_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_CamoNetVar_NATO"} else {"Land_CamoNetVar_NATO_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_CamoNetB_NATO"} else {"Land_CamoNetB_NATO_EP1"}]; _n = _n + ["Sign_Danger"]; _n = _n + ["HeliH"]; _n = _n + ["Fort_RazorWire"]; _n = _n + ["Land_Ind_IlluminantTower"]; _n = _n + ["Concrete_Wall_EP1"]; _n = _n + ["Land_Campfire"]; _n = _n + ["USOrdnanceBox_EP1"]; _n = _n + ["USVehicleBox_EP1"]; _n = _n + ["USBasicAmmunitionBox_EP1"]; _n = _n + ["USBasicWeapons_EP1"]; _n = _n + ["USLaunchers_EP1"]; _n = _n + ["USSpecialWeapons_EP1"]; /* Class used for AI, AI will attempt to build those */ missionNamespace setVariable [Format["WFBE_%1DEFENSES_MG", _side], ['M2StaticMG_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_GL", _side], ['MK19_TriPod_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_AAPOD", _side], ['Stinger_Pod_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_ATPOD", _side], ['OFrP_Milan_Launcher_Static']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_CANNON", _side], ['M119_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MASH", _side], ['MASH_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MORTAR", _side], ['M252_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSENAMES", _side], _n];Private ['_c','_count','_d','_dir','_dis','_n','_s','_side','_t','_v']; _side = _this; /* Root Definition */ _MHQ = "BTR90_HQ"; _HQ = "BTR90_HQ_unfolded"; _BAR = if (WF_Camo) then {"RU_WarfareBBarracks"} else {"TK_WarfareBBarracks_EP1"}; _LVF = if (WF_Camo) then {"RU_WarfareBLightFactory"} else {"TK_WarfareBLightFactory_EP1"}; _CC = if (WF_Camo) then {"RU_WarfareBUAVterminal"} else {"TK_WarfareBUAVterminal_EP1"}; _HEAVY = if (WF_Camo) then {"RU_WarfareBHeavyFactory"} else {"TK_WarfareBHeavyFactory_EP1"}; _AIR = if (WF_Camo) then {"RU_WarfareBAircraftFactory"} else {"TK_WarfareBAircraftFactory_EP1"}; _SP = if (WF_Camo) then {"RU_WarfareBVehicleServicePoint"} else {"TK_WarfareBVehicleServicePoint_EP1"}; _AAR = if (WF_Camo) then {"RU_WarfareBAntiAirRadar"} else {"TK_WarfareBAntiAirRadar_EP1"}; /* Mash used after being deployed */ missionNamespace setVariable [Format["WFBE_%1FARP", _side], 'CampEast_EP1']; /* Construction Crates */ missionNamespace setVariable [Format["WFBE_%1CONSTRUCTIONSITE", _side], 'TK_WarfareBContructionSite_EP1']; /* Structures */ _v = ["Headquarters"]; _n = [_HQ]; _d = [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = [missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_COST_DEPLOY"]; _t = [if (WF_Debug) then {1} else {30}]; _s = ["HQSite"]; _dis = [15]; _dir = [0]; _v = _v + ["Barracks"]; _n = _n + [_BAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [200]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [18]; _dir = _dir + [90]; _v = _v + ["Light"]; _n = _n + [_LVF]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [600]; _t = _t + [if (WF_Debug) then {1} else {90}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["CommandCenter"]; _n = _n + [_CC]; _d = _d + [localize "STR_WF_CommandCenter"]; _c = _c + [1200]; _t = _t + [if (WF_Debug) then {1} else {110}]; _s = _s + ["SmallSite"]; _dis = _dis + [20]; _dir = _dir + [90]; _v = _v + ["Heavy"]; _n = _n + [_HEAVY]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [2800]; _t = _t + [if (WF_Debug) then {1} else {130}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["Aircraft"]; _n = _n + [_AIR]; _d = _d + [localize "STR_WF_AircraftFactory"]; _c = _c + [4400]; _t = _t + [if (WF_Debug) then {1} else {150}]; _s = _s + ["SmallSite"]; _dis = _dis + [31]; _dir = _dir + [90]; _v = _v + ["ServicePoint"]; _n = _n + [_SP]; _d = _d + [localize "STR_WF_MAIN_ServicePoint"]; _c = _c + [700]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [21]; _dir = _dir + [90]; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_ANTIAIRRADAR") > 0) then { _v = _v + ["AARadar"]; _n = _n + [_AAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [3200]; _t = _t + [if (WF_Debug) then {1} else {280}]; _s = _s + ["MediumSite"]; _dis = _dis + [21]; _dir = _dir + [90]; }; for [{_count = count _v - 1},{_count >= 0},{_count = _count - 1}] do { missionNamespace setVariable [Format["WFBE_%1%2TYPE",_side,_v select _count],_count]; }; { missionNamespace setVariable [Format ["%1%2",_side, _x select 0], _x select 1]; } forEach [["HQ",_HQ],["BAR",_BAR],["LVF",_LVF],["CC",_CC],["HEAVY",_HEAVY],["SP",_SP],["AAR",_AAR]]; missionNamespace setVariable [Format["WFBE_%1MHQNAME", _side], _MHQ]; missionNamespace setVariable [Format["WFBE_%1STRUCTURES", _side], _v]; missionNamespace setVariable [Format["WFBE_%1STRUCTURENAMES", _side], _n]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDESCRIPTIONS", _side], _d]; missionNamespace setVariable [Format["WFBE_%1STRUCTURECOSTS", _side], _c]; missionNamespace setVariable [Format["WFBE_%1STRUCTURETIMES", _side], _t]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDISTANCES", _side], _dis]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDIRECTIONS", _side], _dir]; missionNamespace setVariable [Format["WFBE_%1STRUCTURESCRIPTS", _side], _s]; /* Defenses */ _n = ["RU_WarfareBMGNest_PK"]; _n = _n + ["SearchLight_TK_EP1"]; _n = _n + ["KORD_TK_EP1"]; _n = _n + ["KORD_high_TK_EP1"]; _n = _n + ["AGS_TK_EP1"]; _n = _n + ["SPG9_TK_INS_EP1"]; _n = _n + ["Metis_TK_EP1"]; _n = _n + ["Igla_AA_pod_TK_EP1"]; _n = _n + ["ZU23_TK_EP1"]; _n = _n + ["2b14_82mm_TK_EP1"]; _n = _n + ["D30_TK_EP1"]; _n = _n + ["Land_HBarrier3"]; _n = _n + ["Land_HBarrier5"]; _n = _n + ["Land_HBarrier_large"]; _n = _n + ["TK_WarfareBBarrier5x_EP1"]; _n = _n + ["TK_WarfareBBarrier10x_EP1"]; _n = _n + ["TK_WarfareBBarrier10xTall_EP1"]; _n = _n + ["MASH_EP1"]; _n = _n + ["Land_Ind_SawMillPen"]; _n = _n + ["Land_fort_bagfence_long"]; _n = _n + ["Land_fort_bagfence_corner"]; _n = _n + ["Land_fort_bagfence_round"]; _n = _n + [if (WF_Camo) then {"Land_fortified_nest_small"} else {"Land_fortified_nest_small_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_fort_rampart"} else {"Land_fort_rampart_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_fort_artillery_nest"} else {"Land_fort_artillery_nest_EP1"}]; _n = _n + ["Hhedgehog_concreteBig"]; _n = _n + ["Hedgehog_EP1"]; _n = _n + [if (WF_Camo) then {"Land_CamoNet_EAST"} else {"Land_CamoNet_EAST_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_CamoNetVar_EAST"} else {"Land_CamoNetVar_EAST_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_CamoNetB_EAST"} else {"Land_CamoNetB_EAST_EP1"}]; _n = _n + ["Sign_Danger"]; _n = _n + ["HeliH"]; _n = _n + ["Fort_RazorWire"]; _n = _n + ["Land_Ind_IlluminantTower"]; _n = _n + ["Concrete_Wall_EP1"]; _n = _n + ["Land_Campfire"]; _n = _n + ["RUOrdnanceBox"]; _n = _n + ["RUVehicleBox"]; _n = _n + ["RUBasicAmmunitionBox"]; _n = _n + ["RUBasicWeaponsBox"]; _n = _n + ["RULaunchersBox"]; _n = _n + ["RUSpecialWeaponsBox"]; /* Class used for AI, AI will attempt to build those */ missionNamespace setVariable [Format["WFBE_%1DEFENSES_MG", _side], ['KORD_high_TK_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_GL", _side], ['AGS_TK_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_AAPOD", _side], ['Igla_AA_pod_TK_EP1','ZU23_TK_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_ATPOD", _side], ['Metis_TK_EP1','SPG9_TK_INS_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_CANNON", _side], ['D30_TK_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MASH", _side], ['MASH_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MORTAR", _side], ['2b14_82mm_TK_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSENAMES", _side], _n];Private ['_c','_count','_d','_dir','_dis','_n','_s','_side','_t','_v']; _side = _this; /* Root Definition */ _MHQ = if (WF_Camo) then {'LAV25_HQ'} else {'M1130_CV_EP1'}; _HQ = if (WF_Camo) then {"LAV25_HQ_unfolded"} else {"M1130_HQ_unfolded_EP1"}; _BAR = if (WF_Camo) then {"USMC_WarfareBBarracks"} else {"US_WarfareBBarracks_EP1"}; _LVF = if (WF_Camo) then {"USMC_WarfareBLightFactory"} else {"US_WarfareBLightFactory_EP1"}; _CC = if (WF_Camo) then {"USMC_WarfareBUAVterminal"} else {"US_WarfareBUAVterminal_EP1"}; _HEAVY = if (WF_Camo) then {"USMC_WarfareBHeavyFactory"} else {"US_WarfareBHeavyFactory_EP1"}; _AIR = if (WF_Camo) then {"USMC_WarfareBAircraftFactory"} else {"US_WarfareBAircraftFactory_EP1"}; _SP = if (WF_Camo) then {"USMC_WarfareBVehicleServicePoint"} else {"US_WarfareBVehicleServicePoint_EP1"}; _AAR = if (WF_Camo) then {"USMC_WarfareBAntiAirRadar"} else {"US_WarfareBAntiAirRadar_EP1"}; /* Mash used after being deployed */ missionNamespace setVariable [Format["WFBE_%1FARP", _side], 'Camp_EP1']; /* Construction Crates */ missionNamespace setVariable [Format["WFBE_%1CONSTRUCTIONSITE", _side], 'US_WarfareBContructionSite_EP1']; /* Structures */ _v = ["Headquarters"]; _n = [_HQ]; _d = [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = [missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_COST_DEPLOY"]; _t = [if (WF_Debug) then {1} else {30}]; _s = ["HQSite"]; _dis = [15]; _dir = [0]; _v = _v + ["Barracks"]; _n = _n + [_BAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [200]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [18]; _dir = _dir + [90]; _v = _v + ["Light"]; _n = _n + [_LVF]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [600]; _t = _t + [if (WF_Debug) then {1} else {90}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["CommandCenter"]; _n = _n + [_CC]; _d = _d + [localize "STR_WF_CommandCenter"]; _c = _c + [1200]; _t = _t + [if (WF_Debug) then {1} else {110}]; _s = _s + ["SmallSite"]; _dis = _dis + [20]; _dir = _dir + [90]; _v = _v + ["Heavy"]; _n = _n + [_HEAVY]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [2800]; _t = _t + [if (WF_Debug) then {1} else {130}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["Aircraft"]; _n = _n + [_AIR]; _d = _d + [localize "STR_WF_AircraftFactory"]; _c = _c + [4400]; _t = _t + [if (WF_Debug) then {1} else {150}]; _s = _s + ["SmallSite"]; _dis = _dis + [31]; _dir = _dir + [90]; _v = _v + ["ServicePoint"]; _n = _n + [_SP]; _d = _d + [localize "STR_WF_MAIN_ServicePoint"]; _c = _c + [700]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [21]; _dir = _dir + [90]; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_ANTIAIRRADAR") > 0) then { _v = _v + ["AARadar"]; _n = _n + [_AAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [3200]; _t = _t + [if (WF_Debug) then {1} else {280}]; _s = _s + ["MediumSite"]; _dis = _dis + [21]; _dir = _dir + [90]; }; for [{_count = count _v - 1},{_count >= 0},{_count = _count - 1}] do { missionNamespace setVariable [Format["WFBE_%1%2TYPE",_side,_v select _count],_count]; }; { missionNamespace setVariable [Format ["%1%2",_side, _x select 0], _x select 1]; } forEach [["HQ",_HQ],["BAR",_BAR],["LVF",_LVF],["CC",_CC],["HEAVY",_HEAVY],["SP",_SP],["AAR",_AAR]]; missionNamespace setVariable [Format["WFBE_%1MHQNAME", _side], _MHQ]; missionNamespace setVariable [Format["WFBE_%1STRUCTURES", _side], _v]; missionNamespace setVariable [Format["WFBE_%1STRUCTURENAMES", _side], _n]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDESCRIPTIONS", _side], _d]; missionNamespace setVariable [Format["WFBE_%1STRUCTURECOSTS", _side], _c]; missionNamespace setVariable [Format["WFBE_%1STRUCTURETIMES", _side], _t]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDISTANCES", _side], _dis]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDIRECTIONS", _side], _dir]; missionNamespace setVariable [Format["WFBE_%1STRUCTURESCRIPTS", _side], _s]; /* Defenses */ _n = ["WarfareBMGNest_M240_US_EP1"]; _n = _n + ["M2HD_mini_TriPod_US_EP1"]; _n = _n + ["SearchLight_US_EP1"]; _n = _n + ["M2StaticMG_US_EP1"]; if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_BAF") > 0) then { _n = _n + ["BAF_GPMG_Minitripod_W"]; _n = _n + ["BAF_GMG_Tripod_W"]; _n = _n + ["BAF_L2A1_Minitripod_W"]; _n = _n + ["BAF_L2A1_Tripod_W"]; }; _n = _n + ["MK19_TriPod_US_EP1"]; _n = _n + ["TOW_TriPod_US_EP1"]; _n = _n + ["Stinger_Pod_US_EP1"]; _n = _n + ["M252_US_EP1"]; _n = _n + ["M119_US_EP1"]; _n = _n + ["Land_HBarrier3"]; _n = _n + ["Land_HBarrier5"]; _n = _n + ["Land_HBarrier_large"]; _n = _n + ["US_WarfareBBarrier5x_EP1"]; _n = _n + ["US_WarfareBBarrier10x_EP1"]; _n = _n + ["US_WarfareBBarrier10xTall_EP1"]; _n = _n + ["MASH_EP1"]; _n = _n + ["Land_Ind_SawMillPen"]; _n = _n + ["Land_fort_bagfence_long"]; _n = _n + ["Land_fort_bagfence_corner"]; _n = _n + ["Land_fort_bagfence_round"]; _n = _n + [if (WF_Camo) then {"Land_fortified_nest_small"} else {"Land_fortified_nest_small_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_fort_rampart"} else {"Land_fort_rampart_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_fort_artillery_nest"} else {"Land_fort_artillery_nest_EP1"}]; _n = _n + ["Hhedgehog_concreteBig"]; _n = _n + ["Hedgehog_EP1"]; _n = _n + [if (WF_Camo) then {"Land_CamoNet_NATO"} else {"Land_CamoNet_NATO_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_CamoNetVar_NATO"} else {"Land_CamoNetVar_NATO_EP1"}]; _n = _n + [if (WF_Camo) then {"Land_CamoNetB_NATO"} else {"Land_CamoNetB_NATO_EP1"}]; _n = _n + ["Sign_Danger"]; _n = _n + ["HeliH"]; _n = _n + ["Fort_RazorWire"]; _n = _n + ["Land_Ind_IlluminantTower"]; _n = _n + ["Concrete_Wall_EP1"]; _n = _n + ["Land_Campfire"]; _n = _n + ["USOrdnanceBox_EP1"]; _n = _n + ["USVehicleBox_EP1"]; _n = _n + ["USBasicAmmunitionBox_EP1"]; _n = _n + ["USBasicWeapons_EP1"]; _n = _n + ["USLaunchers_EP1"]; _n = _n + ["USSpecialWeapons_EP1"]; /* Class used for AI, AI will attempt to build those */ missionNamespace setVariable [Format["WFBE_%1DEFENSES_MG", _side], ['M2StaticMG_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_GL", _side], ['MK19_TriPod_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_AAPOD", _side], ['Stinger_Pod_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_ATPOD", _side], ['TOW_TriPod_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_CANNON", _side], ['M119_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MASH", _side], ['MASH_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MORTAR", _side], ['M252_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSENAMES", _side], _n];Private ['_c','_count','_d','_dir','_dis','_n','_s','_side','_t','_v']; _side = _this; /* Root Definition */ _MHQ = "BRDM2_HQ_Gue"; _HQ = "BRDM2_HQ_Gue_unfolded"; _BAR = "Gue_WarfareBBarracks"; _LVF = "Gue_WarfareBLightFactory"; _CC = "GUE_WarfareBUAVterminal"; _HEAVY = "Gue_WarfareBHeavyFactory"; _AIR = "GUE_WarfareBAircraftFactory"; _SP = "GUE_WarfareBVehicleServicePoint"; _AAR = "Gue_WarfareBAntiAirRadar"; /* Mash used after being deployed */ missionNamespace setVariable [Format["WFBE_%1FARP", _side], 'CampEast']; /* Construction Crates */ missionNamespace setVariable [Format["WFBE_%1CONSTRUCTIONSITE", _side], 'Gue_WarfareBContructionSite']; /* Structures */ _v = ["Headquarters"]; _n = [_HQ]; _d = [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = [missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_COST_DEPLOY"]; _t = [if (WF_Debug) then {1} else {30}]; _s = ["HQSite"]; _dis = [15]; _dir = [0]; _v = _v + ["Barracks"]; _n = _n + [_BAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [200]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [18]; _dir = _dir + [90]; _v = _v + ["Light"]; _n = _n + [_LVF]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [600]; _t = _t + [if (WF_Debug) then {1} else {90}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["CommandCenter"]; _n = _n + [_CC]; _d = _d + [localize "STR_WF_CommandCenter"]; _c = _c + [1200]; _t = _t + [if (WF_Debug) then {1} else {110}]; _s = _s + ["SmallSite"]; _dis = _dis + [20]; _dir = _dir + [90]; _v = _v + ["Heavy"]; _n = _n + [_HEAVY]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [2800]; _t = _t + [if (WF_Debug) then {1} else {130}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["Aircraft"]; _n = _n + [_AIR]; _d = _d + [localize "STR_WF_AircraftFactory"]; _c = _c + [4400]; _t = _t + [if (WF_Debug) then {1} else {150}]; _s = _s + ["SmallSite"]; _dis = _dis + [31]; _dir = _dir + [90]; _v = _v + ["ServicePoint"]; _n = _n + [_SP]; _d = _d + [localize "STR_WF_MAIN_ServicePoint"]; _c = _c + [700]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [21]; _dir = _dir + [90]; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_ANTIAIRRADAR") > 0) then { _v = _v + ["AARadar"]; _n = _n + [_AAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [3200]; _t = _t + [if (WF_Debug) then {1} else {280}]; _s = _s + ["MediumSite"]; _dis = _dis + [21]; _dir = _dir + [90]; }; for [{_count = count _v - 1},{_count >= 0},{_count = _count - 1}] do { missionNamespace setVariable [Format["WFBE_%1%2TYPE",_side,_v select _count],_count]; }; { missionNamespace setVariable [Format ["%1%2",_side, _x select 0], _x select 1]; } forEach [["HQ",_HQ],["BAR",_BAR],["LVF",_LVF],["CC",_CC],["HEAVY",_HEAVY],["SP",_SP],["AAR",_AAR]]; missionNamespace setVariable [Format["WFBE_%1MHQNAME", _side], _MHQ]; missionNamespace setVariable [Format["WFBE_%1STRUCTURES", _side], _v]; missionNamespace setVariable [Format["WFBE_%1STRUCTURENAMES", _side], _n]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDESCRIPTIONS", _side], _d]; missionNamespace setVariable [Format["WFBE_%1STRUCTURECOSTS", _side], _c]; missionNamespace setVariable [Format["WFBE_%1STRUCTURETIMES", _side], _t]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDISTANCES", _side], _dis]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDIRECTIONS", _side], _dir]; missionNamespace setVariable [Format["WFBE_%1STRUCTURESCRIPTS", _side], _s]; /* Defenses */ _n = ["GUE_WarfareBMGNest_PK"]; _n = _n + ["DSHKM_Gue"]; _n = _n + ["SearchLight_Gue"]; _n = _n + ["SPG9_Gue"]; _n = _n + ["ZU23_Gue"]; _n = _n + ["2b14_82mm_GUE"]; _n = _n + ["Land_HBarrier3"]; _n = _n + ["Land_HBarrier5"]; _n = _n + ["Land_HBarrier_large"]; _n = _n + ["Base_WarfareBBarrier5x"]; _n = _n + ["Base_WarfareBBarrier10x"]; _n = _n + ["Base_WarfareBBarrier10xTall"]; _n = _n + ["MASH"]; _n = _n + ["Land_Ind_SawMillPen"]; _n = _n + ["Land_fort_bagfence_long"]; _n = _n + ["Land_fort_bagfence_corner"]; _n = _n + ["Land_fort_bagfence_round"]; _n = _n + ["Land_fortified_nest_small"]; _n = _n + ["Land_fortified_nest_big"]; _n = _n + ["Land_Fort_Watchtower"]; _n = _n + ["Land_fort_rampart"]; _n = _n + ["Land_fort_artillery_nest"]; _n = _n + ["Hhedgehog_concreteBig"]; _n = _n + ["Hedgehog"]; _n = _n + ["Land_CamoNet_EAST"]; _n = _n + ["Land_CamoNetVar_EAST"]; _n = _n + ["Land_CamoNetB_EAST"]; _n = _n + ["Sign_Danger"]; _n = _n + ["HeliH"]; _n = _n + ["Fort_RazorWire"]; _n = _n + ["Land_Ind_IlluminantTower"]; _n = _n + ["Land_Campfire"]; _n = _n + ["RUOrdnanceBox"]; _n = _n + ["RUVehicleBox"]; _n = _n + ["RUBasicAmmunitionBox"]; _n = _n + ["RUBasicWeaponsBox"]; _n = _n + ["RULaunchersBox"]; _n = _n + ["RUSpecialWeaponsBox"]; /* Class used for AI, AI will attempt to build those */ missionNamespace setVariable [Format["WFBE_%1DEFENSES_MG", _side], ['DSHKM_Gue']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_GL", _side], ['DSHKM_Gue']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_AAPOD", _side], ['ZU23_Gue']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_ATPOD", _side], ['SPG9_Gue']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_CANNON", _side], ['SPG9_Gue']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MASH", _side], ['MASH']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MORTAR", _side], ['2b14_82mm_GUE']]; missionNamespace setVariable [Format["WFBE_%1DEFENSENAMES", _side], _n];Private ['_c','_count','_d','_dir','_dis','_n','_s','_side','_t','_v']; _side = _this; /* Root Definition */ _MHQ = "BMP2_HQ_INS"; _HQ = "BMP2_HQ_INS_unfolded"; _BAR = "Ins_WarfareBBarracks"; _LVF = "Ins_WarfareBLightFactory"; _CC = "INS_WarfareBUAVterminal"; _HEAVY = "Ins_WarfareBHeavyFactory"; _AIR = "INS_WarfareBAircraftFactory"; _SP = "INS_WarfareBVehicleServicePoint"; _AAR = "INS_WarfareBAntiAirRadar"; /* Mash used after being deployed */ missionNamespace setVariable [Format["WFBE_%1FARP", _side], 'CampEast']; /* Construction Crates */ missionNamespace setVariable [Format["WFBE_%1CONSTRUCTIONSITE", _side], 'Ins_WarfareBContructionSite']; /* Structures */ _v = ["Headquarters"]; _n = [_HQ]; _d = [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = [missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_COST_DEPLOY"]; _t = [if (WF_Debug) then {1} else {30}]; _s = ["HQSite"]; _dis = [15]; _dir = [0]; _v = _v + ["Barracks"]; _n = _n + [_BAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [200]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [18]; _dir = _dir + [90]; _v = _v + ["Light"]; _n = _n + [_LVF]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [600]; _t = _t + [if (WF_Debug) then {1} else {90}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["CommandCenter"]; _n = _n + [_CC]; _d = _d + [localize "STR_WF_CommandCenter"]; _c = _c + [1200]; _t = _t + [if (WF_Debug) then {1} else {110}]; _s = _s + ["SmallSite"]; _dis = _dis + [20]; _dir = _dir + [90]; _v = _v + ["Heavy"]; _n = _n + [_HEAVY]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [2800]; _t = _t + [if (WF_Debug) then {1} else {130}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["Aircraft"]; _n = _n + [_AIR]; _d = _d + [localize "STR_WF_AircraftFactory"]; _c = _c + [4400]; _t = _t + [if (WF_Debug) then {1} else {150}]; _s = _s + ["SmallSite"]; _dis = _dis + [31]; _dir = _dir + [90]; _v = _v + ["ServicePoint"]; _n = _n + [_SP]; _d = _d + [localize "STR_WF_MAIN_ServicePoint"]; _c = _c + [700]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [21]; _dir = _dir + [90]; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_ANTIAIRRADAR") > 0) then { _v = _v + ["AARadar"]; _n = _n + [_AAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [3200]; _t = _t + [if (WF_Debug) then {1} else {280}]; _s = _s + ["MediumSite"]; _dis = _dis + [21]; _dir = _dir + [90]; }; for [{_count = count _v - 1},{_count >= 0},{_count = _count - 1}] do { missionNamespace setVariable [Format["WFBE_%1%2TYPE",_side,_v select _count],_count]; }; { missionNamespace setVariable [Format ["%1%2",_side, _x select 0], _x select 1]; } forEach [["HQ",_HQ],["BAR",_BAR],["LVF",_LVF],["CC",_CC],["HEAVY",_HEAVY],["SP",_SP],["AAR",_AAR]]; missionNamespace setVariable [Format["WFBE_%1MHQNAME", _side], _MHQ]; missionNamespace setVariable [Format["WFBE_%1STRUCTURES", _side], _v]; missionNamespace setVariable [Format["WFBE_%1STRUCTURENAMES", _side], _n]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDESCRIPTIONS", _side], _d]; missionNamespace setVariable [Format["WFBE_%1STRUCTURECOSTS", _side], _c]; missionNamespace setVariable [Format["WFBE_%1STRUCTURETIMES", _side], _t]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDISTANCES", _side], _dis]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDIRECTIONS", _side], _dir]; missionNamespace setVariable [Format["WFBE_%1STRUCTURESCRIPTS", _side], _s]; /* Defenses */ _n = ["Ins_WarfareBMGNest_PK"]; _n = _n + ["SearchLight_INS"]; _n = _n + ["DSHkM_Mini_TriPod"]; _n = _n + ["DSHKM_Ins"]; _n = _n + ["AGS_Ins"]; _n = _n + ["SPG9_Ins"]; _n = _n + ["ZU23_Ins"]; _n = _n + ["2b14_82mm_INS"]; _n = _n + ["D30_Ins"]; _n = _n + ["Land_HBarrier3"]; _n = _n + ["Land_HBarrier5"]; _n = _n + ["Land_HBarrier_large"]; _n = _n + ["Base_WarfareBBarrier5x"]; _n = _n + ["Base_WarfareBBarrier10x"]; _n = _n + ["Base_WarfareBBarrier10xTall"]; _n = _n + ["MASH"]; _n = _n + ["Land_Ind_SawMillPen"]; _n = _n + ["Land_fort_bagfence_long"]; _n = _n + ["Land_fort_bagfence_corner"]; _n = _n + ["Land_fort_bagfence_round"]; _n = _n + ["Land_fortified_nest_small"]; _n = _n + ["Land_fortified_nest_big"]; _n = _n + ["Land_Fort_Watchtower"]; _n = _n + ["Land_fort_rampart"]; _n = _n + ["Land_fort_artillery_nest"]; _n = _n + ["Hhedgehog_concreteBig"]; _n = _n + ["Hedgehog"]; _n = _n + ["Land_CamoNet_EAST"]; _n = _n + ["Land_CamoNetVar_EAST"]; _n = _n + ["Land_CamoNetB_EAST"]; _n = _n + ["Sign_Danger"]; _n = _n + ["HeliH"]; _n = _n + ["Fort_RazorWire"]; _n = _n + ["Land_Ind_IlluminantTower"]; _n = _n + ["Land_Campfire"]; _n = _n + ["RUOrdnanceBox"]; _n = _n + ["RUVehicleBox"]; _n = _n + ["RUBasicAmmunitionBox"]; _n = _n + ["RUBasicWeaponsBox"]; _n = _n + ["RULaunchersBox"]; _n = _n + ["RUSpecialWeaponsBox"]; /* Class used for AI, AI will attempt to build those */ missionNamespace setVariable [Format["WFBE_%1DEFENSES_MG", _side], ['DSHKM_Ins']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_GL", _side], ['AGS_Ins']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_AAPOD", _side], ['ZU23_Ins']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_ATPOD", _side], ['SPG9_Ins']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_CANNON", _side], ['D30_Ins']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MASH", _side], ['MASH']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MORTAR", _side], ['2b14_82mm_INS']]; missionNamespace setVariable [Format["WFBE_%1DEFENSENAMES", _side], _n];Private ['_c','_count','_d','_dir','_dis','_n','_s','_side','_t','_v']; _side = _this; /* Root Definition */ _MHQ = "M1130_CV_EP1"; _HQ = "M1130_HQ_unfolded_EP1"; _BAR = "US_WarfareBBarracks_EP1"; _LVF = "US_WarfareBLightFactory_EP1"; _CC = "US_WarfareBUAVterminal_EP1"; _HEAVY = "US_WarfareBHeavyFactory_EP1"; _AIR = "US_WarfareBAircraftFactory_EP1"; _SP = "US_WarfareBVehicleServicePoint_EP1"; _AAR = "US_WarfareBAntiAirRadar_EP1"; /* Mash used after being deployed */ missionNamespace setVariable [Format["WFBE_%1FARP", _side], 'Camp_EP1']; /* Construction Crates */ missionNamespace setVariable [Format["WFBE_%1CONSTRUCTIONSITE", _side], 'US_WarfareBContructionSite_EP1']; /* Structures */ _v = ["Headquarters"]; _n = [_HQ]; _d = [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = [missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_COST_DEPLOY"]; _t = [if (WF_Debug) then {1} else {30}]; _s = ["HQSite"]; _dis = [15]; _dir = [0]; _v = _v + ["Barracks"]; _n = _n + [_BAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [200]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [18]; _dir = _dir + [90]; _v = _v + ["Light"]; _n = _n + [_LVF]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [600]; _t = _t + [if (WF_Debug) then {1} else {90}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["CommandCenter"]; _n = _n + [_CC]; _d = _d + [localize "STR_WF_CommandCenter"]; _c = _c + [1200]; _t = _t + [if (WF_Debug) then {1} else {110}]; _s = _s + ["SmallSite"]; _dis = _dis + [20]; _dir = _dir + [90]; _v = _v + ["Heavy"]; _n = _n + [_HEAVY]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [2800]; _t = _t + [if (WF_Debug) then {1} else {130}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["Aircraft"]; _n = _n + [_AIR]; _d = _d + [localize "STR_WF_AircraftFactory"]; _c = _c + [4400]; _t = _t + [if (WF_Debug) then {1} else {150}]; _s = _s + ["SmallSite"]; _dis = _dis + [31]; _dir = _dir + [90]; _v = _v + ["ServicePoint"]; _n = _n + [_SP]; _d = _d + [localize "STR_WF_MAIN_ServicePoint"]; _c = _c + [700]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [21]; _dir = _dir + [90]; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_ANTIAIRRADAR") > 0) then { _v = _v + ["AARadar"]; _n = _n + [_AAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [3200]; _t = _t + [if (WF_Debug) then {1} else {280}]; _s = _s + ["MediumSite"]; _dis = _dis + [21]; _dir = _dir + [90]; }; for [{_count = count _v - 1},{_count >= 0},{_count = _count - 1}] do { missionNamespace setVariable [Format["WFBE_%1%2TYPE",_side,_v select _count],_count]; }; { missionNamespace setVariable [Format ["%1%2",_side, _x select 0], _x select 1]; } forEach [["HQ",_HQ],["BAR",_BAR],["LVF",_LVF],["CC",_CC],["HEAVY",_HEAVY],["SP",_SP],["AAR",_AAR]]; missionNamespace setVariable [Format["WFBE_%1MHQNAME", _side], _MHQ]; missionNamespace setVariable [Format["WFBE_%1STRUCTURES", _side], _v]; missionNamespace setVariable [Format["WFBE_%1STRUCTURENAMES", _side], _n]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDESCRIPTIONS", _side], _d]; missionNamespace setVariable [Format["WFBE_%1STRUCTURECOSTS", _side], _c]; missionNamespace setVariable [Format["WFBE_%1STRUCTURETIMES", _side], _t]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDISTANCES", _side], _dis]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDIRECTIONS", _side], _dir]; missionNamespace setVariable [Format["WFBE_%1STRUCTURESCRIPTS", _side], _s]; /* Defenses */ _n = ["WarfareBMGNest_M240_US_EP1"]; _n = _n + ["M2HD_mini_TriPod_US_EP1"]; _n = _n + ["SearchLight_US_EP1"]; _n = _n + ["M2StaticMG_US_EP1"]; _n = _n + ["MK19_TriPod_US_EP1"]; _n = _n + ["OFrP_Milan_Launcher_Static"]; _n = _n + ["Stinger_Pod_US_EP1"]; _n = _n + ["M252_US_EP1"]; _n = _n + ["M119_US_EP1"]; _n = _n + ["Land_HBarrier3"]; _n = _n + ["Land_HBarrier5"]; _n = _n + ["Land_HBarrier_large"]; _n = _n + ["US_WarfareBBarrier5x_EP1"]; _n = _n + ["US_WarfareBBarrier10x_EP1"]; _n = _n + ["US_WarfareBBarrier10xTall_EP1"]; _n = _n + ["MASH_EP1"]; _n = _n + ["Land_fort_bagfence_long"]; _n = _n + ["Land_fort_bagfence_corner"]; _n = _n + ["Land_fort_bagfence_round"]; _n = _n + ["Land_fortified_nest_small_EP1"]; _n = _n + ["Land_fort_rampart_EP1"]; _n = _n + ["Land_fort_artillery_nest_EP1"]; _n = _n + ["Hhedgehog_concreteBig"]; _n = _n + ["Hedgehog_EP1"]; _n = _n + ["Land_CamoNet_NATO_EP1"]; _n = _n + ["Land_CamoNetVar_NATO_EP1"]; _n = _n + ["Land_CamoNetB_NATO_EP1"]; _n = _n + ["Sign_Danger"]; _n = _n + ["HeliH"]; _n = _n + ["Fort_RazorWire"]; _n = _n + ["Concrete_Wall_EP1"]; _n = _n + ["Land_Campfire"]; _n = _n + ["USOrdnanceBox_EP1"]; _n = _n + ["USVehicleBox_EP1"]; _n = _n + ["USBasicAmmunitionBox_EP1"]; _n = _n + ["USBasicWeapons_EP1"]; _n = _n + ["USLaunchers_EP1"]; _n = _n + ["USSpecialWeapons_EP1"]; /* Class used for AI, AI will attempt to build those */ missionNamespace setVariable [Format["WFBE_%1DEFENSES_MG", _side], ['M2StaticMG_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_GL", _side], ['MK19_TriPod_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_AAPOD", _side], ['Stinger_Pod_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_ATPOD", _side], ['OFrP_Milan_Launcher_Static']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_CANNON", _side], ['M119_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MASH", _side], ['MASH_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MORTAR", _side], ['M252_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSENAMES", _side], _n];Private ['_c','_count','_d','_dir','_dis','_n','_s','_side','_t','_v']; _side = _this; /* Root Definition */ _MHQ = "BMP2_HQ_TK_EP1"; _HQ = "BMP2_HQ_TK_unfolded_EP1"; _BAR = "TK_WarfareBBarracks_EP1"; _LVF = "TK_WarfareBLightFactory_EP1"; _CC = "TK_WarfareBUAVterminal_EP1"; _HEAVY = "TK_WarfareBHeavyFactory_EP1"; _AIR = "TK_WarfareBAircraftFactory_EP1"; _SP = "TK_WarfareBVehicleServicePoint_EP1"; _AAR = "TK_WarfareBAntiAirRadar_EP1"; /* Mash used after being deployed */ missionNamespace setVariable [Format["WFBE_%1FARP", _side], 'CampEast_EP1']; /* Construction Crates */ missionNamespace setVariable [Format["WFBE_%1CONSTRUCTIONSITE", _side], 'TK_WarfareBContructionSite_EP1']; /* Structures */ _v = ["Headquarters"]; _n = [_HQ]; _d = [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = [missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_COST_DEPLOY"]; _t = [if (WF_Debug) then {1} else {30}]; _s = ["HQSite"]; _dis = [15]; _dir = [0]; _v = _v + ["Barracks"]; _n = _n + [_BAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [200]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [18]; _dir = _dir + [90]; _v = _v + ["Light"]; _n = _n + [_LVF]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [600]; _t = _t + [if (WF_Debug) then {1} else {90}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["CommandCenter"]; _n = _n + [_CC]; _d = _d + [localize "STR_WF_CommandCenter"]; _c = _c + [1200]; _t = _t + [if (WF_Debug) then {1} else {110}]; _s = _s + ["SmallSite"]; _dis = _dis + [20]; _dir = _dir + [90]; _v = _v + ["Heavy"]; _n = _n + [_HEAVY]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [2800]; _t = _t + [if (WF_Debug) then {1} else {130}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["Aircraft"]; _n = _n + [_AIR]; _d = _d + [localize "STR_WF_AircraftFactory"]; _c = _c + [4400]; _t = _t + [if (WF_Debug) then {1} else {150}]; _s = _s + ["SmallSite"]; _dis = _dis + [31]; _dir = _dir + [90]; _v = _v + ["ServicePoint"]; _n = _n + [_SP]; _d = _d + [localize "STR_WF_MAIN_ServicePoint"]; _c = _c + [700]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [21]; _dir = _dir + [90]; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_ANTIAIRRADAR") > 0) then { _v = _v + ["AARadar"]; _n = _n + [_AAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [3200]; _t = _t + [if (WF_Debug) then {1} else {280}]; _s = _s + ["MediumSite"]; _dis = _dis + [21]; _dir = _dir + [90]; }; for [{_count = count _v - 1},{_count >= 0},{_count = _count - 1}] do { missionNamespace setVariable [Format["WFBE_%1%2TYPE",_side,_v select _count],_count]; }; { missionNamespace setVariable [Format ["%1%2",_side, _x select 0], _x select 1]; } forEach [["HQ",_HQ],["BAR",_BAR],["LVF",_LVF],["CC",_CC],["HEAVY",_HEAVY],["SP",_SP],["AAR",_AAR]]; missionNamespace setVariable [Format["WFBE_%1MHQNAME", _side], _MHQ]; missionNamespace setVariable [Format["WFBE_%1STRUCTURES", _side], _v]; missionNamespace setVariable [Format["WFBE_%1STRUCTURENAMES", _side], _n]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDESCRIPTIONS", _side], _d]; missionNamespace setVariable [Format["WFBE_%1STRUCTURECOSTS", _side], _c]; missionNamespace setVariable [Format["WFBE_%1STRUCTURETIMES", _side], _t]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDISTANCES", _side], _dis]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDIRECTIONS", _side], _dir]; missionNamespace setVariable [Format["WFBE_%1STRUCTURESCRIPTS", _side], _s]; /* Defenses */ _n = ["WarfareBMGNest_PK_TK_EP1"]; _n = _n + ["SearchLight_TK_EP1"]; _n = _n + ["KORD_TK_EP1"]; _n = _n + ["KORD_high_TK_EP1"]; _n = _n + ["AGS_TK_EP1"]; _n = _n + ["SPG9_TK_INS_EP1"]; _n = _n + ["Metis_TK_EP1"]; _n = _n + ["Igla_AA_pod_TK_EP1"]; _n = _n + ["ZU23_TK_EP1"]; _n = _n + ["2b14_82mm_TK_EP1"]; _n = _n + ["D30_TK_EP1"]; _n = _n + ["Land_HBarrier3"]; _n = _n + ["Land_HBarrier5"]; _n = _n + ["Land_HBarrier_large"]; _n = _n + ["TK_WarfareBBarrier5x_EP1"]; _n = _n + ["TK_WarfareBBarrier10x_EP1"]; _n = _n + ["TK_WarfareBBarrier10xTall_EP1"]; _n = _n + ["MASH_EP1"]; _n = _n + ["Land_fort_bagfence_long"]; _n = _n + ["Land_fort_bagfence_corner"]; _n = _n + ["Land_fort_bagfence_round"]; _n = _n + ["Land_fortified_nest_small_EP1"]; _n = _n + ["Land_fort_rampart_EP1"]; _n = _n + ["Land_fort_artillery_nest_EP1"]; _n = _n + ["Hhedgehog_concreteBig"]; _n = _n + ["Hedgehog_EP1"]; _n = _n + ["Land_CamoNet_EAST_EP1"]; _n = _n + ["Land_CamoNetVar_EAST_EP1"]; _n = _n + ["Land_CamoNetB_EAST_EP1"]; _n = _n + ["Sign_Danger"]; _n = _n + ["HeliH"]; _n = _n + ["Fort_RazorWire"]; _n = _n + ["Concrete_Wall_EP1"]; _n = _n + ["Land_Campfire"]; _n = _n + ["TKOrdnanceBox_EP1"]; _n = _n + ["TKVehicleBox_EP1"]; _n = _n + ["TKBasicAmmunitionBox_EP1"]; _n = _n + ["TKBasicWeapons_EP1"]; _n = _n + ["TKLaunchers_EP1"]; _n = _n + ["TKSpecialWeapons_EP1"]; /* Class used for AI, AI will attempt to build those */ missionNamespace setVariable [Format["WFBE_%1DEFENSES_MG", _side], ['KORD_high_TK_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_GL", _side], ['AGS_TK_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_AAPOD", _side], ['Igla_AA_pod_TK_EP1','ZU23_TK_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_ATPOD", _side], ['Metis_TK_EP1','SPG9_TK_INS_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_CANNON", _side], ['D30_TK_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MASH", _side], ['MASH_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MORTAR", _side], ['2b14_82mm_TK_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSENAMES", _side], _n];Private ['_c','_count','_d','_dir','_dis','_n','_s','_side','_t','_v']; _side = _this; /* Root Definition */ _MHQ = "BRDM2_HQ_TK_GUE_EP1"; _HQ = "BRDM2_HQ_TK_GUE_unfolded_EP1"; _BAR = "TK_GUE_WarfareBBarracks_EP1"; _LVF = "TK_GUE_WarfareBLightFactory_EP1"; _CC = "TK_GUE_WarfareBUAVterminal_EP1"; _HEAVY = "TK_GUE_WarfareBHeavyFactory_EP1"; _AIR = "TK_GUE_WarfareBAircraftFactory_EP1"; _SP = "TK_GUE_WarfareBVehicleServicePoint_EP1"; _AAR = "TK_GUE_WarfareBAntiAirRadar_EP1"; /* Mash used after being deployed */ missionNamespace setVariable [Format["WFBE_%1FARP", _side], 'CampEast_EP1']; /* Construction Crates */ missionNamespace setVariable [Format["WFBE_%1CONSTRUCTIONSITE", _side], 'TK_GUE_WarfareBContructionSite_EP1']; /* Structures */ _v = ["Headquarters"]; _n = [_HQ]; _d = [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = [missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_COST_DEPLOY"]; _t = [if (WF_Debug) then {1} else {30}]; _s = ["HQSite"]; _dis = [15]; _dir = [0]; _v = _v + ["Barracks"]; _n = _n + [_BAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [200]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [18]; _dir = _dir + [90]; _v = _v + ["Light"]; _n = _n + [_LVF]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [600]; _t = _t + [if (WF_Debug) then {1} else {90}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["CommandCenter"]; _n = _n + [_CC]; _d = _d + [localize "STR_WF_CommandCenter"]; _c = _c + [1200]; _t = _t + [if (WF_Debug) then {1} else {110}]; _s = _s + ["SmallSite"]; _dis = _dis + [20]; _dir = _dir + [90]; _v = _v + ["Heavy"]; _n = _n + [_HEAVY]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [2800]; _t = _t + [if (WF_Debug) then {1} else {130}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["Aircraft"]; _n = _n + [_AIR]; _d = _d + [localize "STR_WF_AircraftFactory"]; _c = _c + [4400]; _t = _t + [if (WF_Debug) then {1} else {150}]; _s = _s + ["SmallSite"]; _dis = _dis + [31]; _dir = _dir + [90]; _v = _v + ["ServicePoint"]; _n = _n + [_SP]; _d = _d + [localize "STR_WF_MAIN_ServicePoint"]; _c = _c + [700]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [21]; _dir = _dir + [90]; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_ANTIAIRRADAR") > 0) then { _v = _v + ["AARadar"]; _n = _n + [_AAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [3200]; _t = _t + [if (WF_Debug) then {1} else {280}]; _s = _s + ["MediumSite"]; _dis = _dis + [21]; _dir = _dir + [90]; }; for [{_count = count _v - 1},{_count >= 0},{_count = _count - 1}] do { missionNamespace setVariable [Format["WFBE_%1%2TYPE",_side,_v select _count],_count]; }; { missionNamespace setVariable [Format ["%1%2",_side, _x select 0], _x select 1]; } forEach [["HQ",_HQ],["BAR",_BAR],["LVF",_LVF],["CC",_CC],["HEAVY",_HEAVY],["SP",_SP],["AAR",_AAR]]; missionNamespace setVariable [Format["WFBE_%1MHQNAME", _side], _MHQ]; missionNamespace setVariable [Format["WFBE_%1STRUCTURES", _side], _v]; missionNamespace setVariable [Format["WFBE_%1STRUCTURENAMES", _side], _n]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDESCRIPTIONS", _side], _d]; missionNamespace setVariable [Format["WFBE_%1STRUCTURECOSTS", _side], _c]; missionNamespace setVariable [Format["WFBE_%1STRUCTURETIMES", _side], _t]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDISTANCES", _side], _dis]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDIRECTIONS", _side], _dir]; missionNamespace setVariable [Format["WFBE_%1STRUCTURESCRIPTS", _side], _s]; /* Defenses */ _n = ["WarfareBMGNest_PK_TK_GUE_EP1"]; _n = _n + ["SearchLight_TK_GUE_EP1"]; _n = _n + ["DSHkM_Mini_TriPod_TK_GUE_EP1"]; _n = _n + ["DSHKM_TK_GUE_EP1"]; _n = _n + ["AGS_TK_GUE_EP1"]; _n = _n + ["SPG9_TK_GUE_EP1"]; _n = _n + ["ZU23_TK_GUE_EP1"]; _n = _n + ["2b14_82mm_TK_GUE_EP1"]; _n = _n + ["D30_TK_GUE_EP1"]; _n = _n + ["Land_HBarrier3"]; _n = _n + ["Land_HBarrier5"]; _n = _n + ["Land_HBarrier_large"]; _n = _n + ["TK_WarfareBBarrier5x_EP1"]; _n = _n + ["TK_WarfareBBarrier10x_EP1"]; _n = _n + ["TK_WarfareBBarrier10xTall_EP1"]; _n = _n + ["MASH_EP1"]; _n = _n + ["Land_fort_bagfence_long"]; _n = _n + ["Land_fort_bagfence_corner"]; _n = _n + ["Land_fort_bagfence_round"]; _n = _n + ["Land_fortified_nest_small_EP1"]; _n = _n + ["Land_fort_rampart_EP1"]; _n = _n + ["Land_fort_artillery_nest_EP1"]; _n = _n + ["Hhedgehog_concreteBig"]; _n = _n + ["Hedgehog_EP1"]; _n = _n + ["Land_CamoNet_EAST_EP1"]; _n = _n + ["Land_CamoNetVar_EAST_EP1"]; _n = _n + ["Land_CamoNetB_EAST_EP1"]; _n = _n + ["Sign_Danger"]; _n = _n + ["HeliH"]; _n = _n + ["Fort_RazorWire"]; _n = _n + ["Concrete_Wall_EP1"]; _n = _n + ["Land_Campfire"]; _n = _n + ["TKOrdnanceBox_EP1"]; _n = _n + ["TKVehicleBox_EP1"]; _n = _n + ["TKBasicAmmunitionBox_EP1"]; _n = _n + ["TKBasicWeapons_EP1"]; _n = _n + ["TKLaunchers_EP1"]; _n = _n + ["TKSpecialWeapons_EP1"]; /* Class used for AI, AI will attempt to build those */ missionNamespace setVariable [Format["WFBE_%1DEFENSES_MG", _side], ['DSHKM_TK_GUE_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_GL", _side], ['AGS_TK_GUE_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_AAPOD", _side], ['ZU23_TK_GUE_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_ATPOD", _side], ['SPG9_TK_GUE_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_CANNON", _side], ['D30_TK_GUE_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MASH", _side], ['MASH_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MORTAR", _side], ['2b14_82mm_TK_GUE_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSENAMES", _side], _n];Private ['_c','_count','_d','_dir','_dis','_n','_s','_side','_t','_v']; _side = _this; /* Root Definition */ _MHQ = "M1130_CV_EP1"; _HQ = "M1130_HQ_unfolded_EP1"; _BAR = "US_WarfareBBarracks_EP1"; _LVF = "US_WarfareBLightFactory_EP1"; _CC = "US_WarfareBUAVterminal_EP1"; _HEAVY = "US_WarfareBHeavyFactory_EP1"; _AIR = "US_WarfareBAircraftFactory_EP1"; _SP = "US_WarfareBVehicleServicePoint_EP1"; _AAR = "US_WarfareBAntiAirRadar_EP1"; /* Mash used after being deployed */ missionNamespace setVariable [Format["WFBE_%1FARP", _side], 'Camp_EP1']; /* Construction Crates */ missionNamespace setVariable [Format["WFBE_%1CONSTRUCTIONSITE", _side], 'US_WarfareBContructionSite_EP1']; /* Structures */ _v = ["Headquarters"]; _n = [_HQ]; _d = [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = [missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_COST_DEPLOY"]; _t = [if (WF_Debug) then {1} else {30}]; _s = ["HQSite"]; _dis = [15]; _dir = [0]; _v = _v + ["Barracks"]; _n = _n + [_BAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [200]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [18]; _dir = _dir + [90]; _v = _v + ["Light"]; _n = _n + [_LVF]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [600]; _t = _t + [if (WF_Debug) then {1} else {90}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["CommandCenter"]; _n = _n + [_CC]; _d = _d + [localize "STR_WF_CommandCenter"]; _c = _c + [1200]; _t = _t + [if (WF_Debug) then {1} else {110}]; _s = _s + ["SmallSite"]; _dis = _dis + [20]; _dir = _dir + [90]; _v = _v + ["Heavy"]; _n = _n + [_HEAVY]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [2800]; _t = _t + [if (WF_Debug) then {1} else {130}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["Aircraft"]; _n = _n + [_AIR]; _d = _d + [localize "STR_WF_AircraftFactory"]; _c = _c + [4400]; _t = _t + [if (WF_Debug) then {1} else {150}]; _s = _s + ["SmallSite"]; _dis = _dis + [31]; _dir = _dir + [90]; _v = _v + ["ServicePoint"]; _n = _n + [_SP]; _d = _d + [localize "STR_WF_MAIN_ServicePoint"]; _c = _c + [700]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [21]; _dir = _dir + [90]; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_ANTIAIRRADAR") > 0) then { _v = _v + ["AARadar"]; _n = _n + [_AAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [3200]; _t = _t + [if (WF_Debug) then {1} else {280}]; _s = _s + ["MediumSite"]; _dis = _dis + [21]; _dir = _dir + [90]; }; for [{_count = count _v - 1},{_count >= 0},{_count = _count - 1}] do { missionNamespace setVariable [Format["WFBE_%1%2TYPE",_side,_v select _count],_count]; }; { missionNamespace setVariable [Format ["%1%2",_side, _x select 0], _x select 1]; } forEach [["HQ",_HQ],["BAR",_BAR],["LVF",_LVF],["CC",_CC],["HEAVY",_HEAVY],["SP",_SP],["AAR",_AAR]]; missionNamespace setVariable [Format["WFBE_%1MHQNAME", _side], _MHQ]; missionNamespace setVariable [Format["WFBE_%1STRUCTURES", _side], _v]; missionNamespace setVariable [Format["WFBE_%1STRUCTURENAMES", _side], _n]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDESCRIPTIONS", _side], _d]; missionNamespace setVariable [Format["WFBE_%1STRUCTURECOSTS", _side], _c]; missionNamespace setVariable [Format["WFBE_%1STRUCTURETIMES", _side], _t]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDISTANCES", _side], _dis]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDIRECTIONS", _side], _dir]; missionNamespace setVariable [Format["WFBE_%1STRUCTURESCRIPTS", _side], _s]; /* Defenses */ _n = ["WarfareBMGNest_M240_US_EP1"]; _n = _n + ["M2HD_mini_TriPod_US_EP1"]; _n = _n + ["SearchLight_US_EP1"]; _n = _n + ["M2StaticMG_US_EP1"]; if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_BAF") > 0) then { _n = _n + ["BAF_GPMG_Minitripod_W"]; _n = _n + ["BAF_GMG_Tripod_W"]; _n = _n + ["BAF_L2A1_Minitripod_W"]; _n = _n + ["BAF_L2A1_Tripod_W"]; }; _n = _n + ["MK19_TriPod_US_EP1"]; _n = _n + ["TOW_TriPod_US_EP1"]; _n = _n + ["Stinger_Pod_US_EP1"]; _n = _n + ["M252_US_EP1"]; _n = _n + ["M119_US_EP1"]; _n = _n + ["Land_HBarrier3"]; _n = _n + ["Land_HBarrier5"]; _n = _n + ["Land_HBarrier_large"]; _n = _n + ["US_WarfareBBarrier5x_EP1"]; _n = _n + ["US_WarfareBBarrier10x_EP1"]; _n = _n + ["US_WarfareBBarrier10xTall_EP1"]; _n = _n + ["MASH_EP1"]; _n = _n + ["Land_fort_bagfence_long"]; _n = _n + ["Land_fort_bagfence_corner"]; _n = _n + ["Land_fort_bagfence_round"]; _n = _n + ["Land_fortified_nest_small_EP1"]; _n = _n + ["Land_fort_rampart_EP1"]; _n = _n + ["Land_fort_artillery_nest_EP1"]; _n = _n + ["Hhedgehog_concreteBig"]; _n = _n + ["Hedgehog_EP1"]; _n = _n + ["Land_CamoNet_NATO_EP1"]; _n = _n + ["Land_CamoNetVar_NATO_EP1"]; _n = _n + ["Land_CamoNetB_NATO_EP1"]; _n = _n + ["Sign_Danger"]; _n = _n + ["HeliH"]; _n = _n + ["Fort_RazorWire"]; _n = _n + ["Concrete_Wall_EP1"]; _n = _n + ["Land_Campfire"]; _n = _n + ["USOrdnanceBox_EP1"]; _n = _n + ["USVehicleBox_EP1"]; _n = _n + ["USBasicAmmunitionBox_EP1"]; _n = _n + ["USBasicWeapons_EP1"]; _n = _n + ["USLaunchers_EP1"]; _n = _n + ["USSpecialWeapons_EP1"]; /* Class used for AI, AI will attempt to build those */ missionNamespace setVariable [Format["WFBE_%1DEFENSES_MG", _side], ['M2StaticMG_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_GL", _side], ['MK19_TriPod_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_AAPOD", _side], ['Stinger_Pod_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_ATPOD", _side], ['TOW_TriPod_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_CANNON", _side], ['M119_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MASH", _side], ['MASH_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MORTAR", _side], ['M252_US_EP1']]; missionNamespace setVariable [Format["WFBE_%1DEFENSENAMES", _side], _n];Private ['_c','_count','_d','_dir','_dis','_n','_s','_side','_t','_v']; _side = _this; /* Root Definition */ _MHQ = "BTR90_HQ"; _HQ = "BTR90_HQ_unfolded"; _BAR = "RU_WarfareBBarracks"; _LVF = "RU_WarfareBLightFactory"; _CC = "RU_WarfareBUAVterminal"; _HEAVY = "RU_WarfareBHeavyFactory"; _AIR = "RU_WarfareBAircraftFactory"; _SP = "RU_WarfareBVehicleServicePoint"; _AAR = "RU_WarfareBAntiAirRadar"; /* Mash used after being deployed */ missionNamespace setVariable [Format["WFBE_%1FARP", _side], 'CampEast']; /* Construction Crates */ missionNamespace setVariable [Format["WFBE_%1CONSTRUCTIONSITE", _side], 'RU_WarfareBContructionSite']; /* Structures */ _v = ["Headquarters"]; _n = [_HQ]; _d = [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = [missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_COST_DEPLOY"]; _t = [if (WF_Debug) then {1} else {30}]; _s = ["HQSite"]; _dis = [15]; _dir = [0]; _v = _v + ["Barracks"]; _n = _n + [_BAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [200]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [18]; _dir = _dir + [90]; _v = _v + ["Light"]; _n = _n + [_LVF]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [600]; _t = _t + [if (WF_Debug) then {1} else {90}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["CommandCenter"]; _n = _n + [_CC]; _d = _d + [localize "STR_WF_CommandCenter"]; _c = _c + [1200]; _t = _t + [if (WF_Debug) then {1} else {110}]; _s = _s + ["SmallSite"]; _dis = _dis + [20]; _dir = _dir + [90]; _v = _v + ["Heavy"]; _n = _n + [_HEAVY]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [2800]; _t = _t + [if (WF_Debug) then {1} else {130}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["Aircraft"]; _n = _n + [_AIR]; _d = _d + [localize "STR_WF_AircraftFactory"]; _c = _c + [4400]; _t = _t + [if (WF_Debug) then {1} else {150}]; _s = _s + ["SmallSite"]; _dis = _dis + [31]; _dir = _dir + [90]; _v = _v + ["ServicePoint"]; _n = _n + [_SP]; _d = _d + [localize "STR_WF_MAIN_ServicePoint"]; _c = _c + [700]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [21]; _dir = _dir + [90]; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_ANTIAIRRADAR") > 0) then { _v = _v + ["AARadar"]; _n = _n + [_AAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [3200]; _t = _t + [if (WF_Debug) then {1} else {280}]; _s = _s + ["MediumSite"]; _dis = _dis + [21]; _dir = _dir + [90]; }; for [{_count = count _v - 1},{_count >= 0},{_count = _count - 1}] do { missionNamespace setVariable [Format["WFBE_%1%2TYPE",_side,_v select _count],_count]; }; { missionNamespace setVariable [Format ["%1%2",_side, _x select 0], _x select 1]; } forEach [["HQ",_HQ],["BAR",_BAR],["LVF",_LVF],["CC",_CC],["HEAVY",_HEAVY],["SP",_SP],["AAR",_AAR]]; missionNamespace setVariable [Format["WFBE_%1MHQNAME", _side], _MHQ]; missionNamespace setVariable [Format["WFBE_%1STRUCTURES", _side], _v]; missionNamespace setVariable [Format["WFBE_%1STRUCTURENAMES", _side], _n]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDESCRIPTIONS", _side], _d]; missionNamespace setVariable [Format["WFBE_%1STRUCTURECOSTS", _side], _c]; missionNamespace setVariable [Format["WFBE_%1STRUCTURETIMES", _side], _t]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDISTANCES", _side], _dis]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDIRECTIONS", _side], _dir]; missionNamespace setVariable [Format["WFBE_%1STRUCTURESCRIPTS", _side], _s]; /* Defenses */ _n = ["RU_WarfareBMGNest_PK"]; _n = _n + ["SearchLight_RUS"]; _n = _n + ["KORD"]; _n = _n + ["KORD_high"]; _n = _n + ["AGS_RU"]; _n = _n + ["SPG9_Ins"]; _n = _n + ["Metis"]; _n = _n + ["Igla_AA_pod_East"]; _n = _n + ["ZU23_Ins"]; _n = _n + ["2b14_82mm"]; _n = _n + ["D30_RU"]; _n = _n + ["Land_HBarrier3"]; _n = _n + ["Land_HBarrier5"]; _n = _n + ["Land_HBarrier_large"]; _n = _n + ["Base_WarfareBBarrier5x"]; _n = _n + ["Base_WarfareBBarrier10x"]; _n = _n + ["Base_WarfareBBarrier10xTall"]; _n = _n + ["MASH"]; _n = _n + ["Land_Ind_SawMillPen"]; _n = _n + ["Land_fort_bagfence_long"]; _n = _n + ["Land_fort_bagfence_corner"]; _n = _n + ["Land_fort_bagfence_round"]; _n = _n + ["Land_fortified_nest_small"]; _n = _n + ["Land_fortified_nest_big"]; _n = _n + ["Land_Fort_Watchtower"]; _n = _n + ["Land_fort_rampart"]; _n = _n + ["Land_fort_artillery_nest"]; _n = _n + ["Hhedgehog_concreteBig"]; _n = _n + ["Hedgehog"]; _n = _n + ["Land_CamoNet_EAST"]; _n = _n + ["Land_CamoNetVar_EAST"]; _n = _n + ["Land_CamoNetB_EAST"]; _n = _n + ["Sign_Danger"]; _n = _n + ["HeliH"]; _n = _n + ["Fort_RazorWire"]; _n = _n + ["Land_Ind_IlluminantTower"]; _n = _n + ["Land_Campfire"]; _n = _n + ["RUOrdnanceBox"]; _n = _n + ["RUVehicleBox"]; _n = _n + ["RUBasicAmmunitionBox"]; _n = _n + ["RUBasicWeaponsBox"]; _n = _n + ["RULaunchersBox"]; _n = _n + ["RUSpecialWeaponsBox"]; /* Class used for AI, AI will attempt to build those */ missionNamespace setVariable [Format["WFBE_%1DEFENSES_MG", _side], ['KORD_high']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_GL", _side], ['AGS_RU']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_AAPOD", _side], ['Igla_AA_pod_East','ZU23_Ins']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_ATPOD", _side], ['Metis','SPG9_Ins']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_CANNON", _side], ['D30_RU']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MASH", _side], ['MASH']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MORTAR", _side], ['2b14_82mm']]; missionNamespace setVariable [Format["WFBE_%1DEFENSENAMES", _side], _n];Private ['_c','_count','_d','_dir','_dis','_n','_s','_side','_t','_v']; _side = _this; /* Root Definition */ _MHQ = "LAV25_HQ"; _HQ = "LAV25_HQ_unfolded"; _BAR = "USMC_WarfareBBarracks"; _LVF = "USMC_WarfareBLightFactory"; _CC = "USMC_WarfareBUAVterminal"; _HEAVY = "USMC_WarfareBHeavyFactory"; _AIR = "USMC_WarfareBAircraftFactory"; _SP = "USMC_WarfareBVehicleServicePoint"; _AAR = "USMC_WarfareBAntiAirRadar"; /* Mash used after being deployed */ missionNamespace setVariable [Format["WFBE_%1FARP", _side], 'Camp']; /* Construction Crates */ missionNamespace setVariable [Format["WFBE_%1CONSTRUCTIONSITE", _side], 'USMC_WarfareBContructionSite']; /* Structures */ _v = ["Headquarters"]; _n = [_HQ]; _d = [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = [missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_COST_DEPLOY"]; _t = [if (WF_Debug) then {1} else {30}]; _s = ["HQSite"]; _dis = [15]; _dir = [0]; _v = _v + ["Barracks"]; _n = _n + [_BAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [200]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [18]; _dir = _dir + [90]; _v = _v + ["Light"]; _n = _n + [_LVF]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [600]; _t = _t + [if (WF_Debug) then {1} else {90}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["CommandCenter"]; _n = _n + [_CC]; _d = _d + [localize "STR_WF_CommandCenter"]; _c = _c + [1200]; _t = _t + [if (WF_Debug) then {1} else {110}]; _s = _s + ["SmallSite"]; _dis = _dis + [20]; _dir = _dir + [90]; _v = _v + ["Heavy"]; _n = _n + [_HEAVY]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [2800]; _t = _t + [if (WF_Debug) then {1} else {130}]; _s = _s + ["MediumSite"]; _dis = _dis + [25]; _dir = _dir + [90]; _v = _v + ["Aircraft"]; _n = _n + [_AIR]; _d = _d + [localize "STR_WF_AircraftFactory"]; _c = _c + [4400]; _t = _t + [if (WF_Debug) then {1} else {150}]; _s = _s + ["SmallSite"]; _dis = _dis + [31]; _dir = _dir + [90]; _v = _v + ["ServicePoint"]; _n = _n + [_SP]; _d = _d + [localize "STR_WF_MAIN_ServicePoint"]; _c = _c + [700]; _t = _t + [if (WF_Debug) then {1} else {70}]; _s = _s + ["SmallSite"]; _dis = _dis + [21]; _dir = _dir + [90]; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_ANTIAIRRADAR") > 0) then { _v = _v + ["AARadar"]; _n = _n + [_AAR]; _d = _d + [getText (configFile >> "CfgVehicles" >> (_n select (count _n - 1)) >> "displayName")]; _c = _c + [3200]; _t = _t + [if (WF_Debug) then {1} else {280}]; _s = _s + ["MediumSite"]; _dis = _dis + [21]; _dir = _dir + [90]; }; for [{_count = count _v - 1},{_count >= 0},{_count = _count - 1}] do { missionNamespace setVariable [Format["WFBE_%1%2TYPE",_side,_v select _count],_count]; }; { missionNamespace setVariable [Format ["%1%2",_side, _x select 0], _x select 1]; } forEach [["HQ",_HQ],["BAR",_BAR],["LVF",_LVF],["CC",_CC],["HEAVY",_HEAVY],["SP",_SP],["AAR",_AAR]]; missionNamespace setVariable [Format["WFBE_%1MHQNAME", _side], _MHQ]; missionNamespace setVariable [Format["WFBE_%1STRUCTURES", _side], _v]; missionNamespace setVariable [Format["WFBE_%1STRUCTURENAMES", _side], _n]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDESCRIPTIONS", _side], _d]; missionNamespace setVariable [Format["WFBE_%1STRUCTURECOSTS", _side], _c]; missionNamespace setVariable [Format["WFBE_%1STRUCTURETIMES", _side], _t]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDISTANCES", _side], _dis]; missionNamespace setVariable [Format["WFBE_%1STRUCTUREDIRECTIONS", _side], _dir]; missionNamespace setVariable [Format["WFBE_%1STRUCTURESCRIPTS", _side], _s]; /* Defenses */ _n = ["USMC_WarfareBMGNest_M240"]; _n = _n + ["M2HD_mini_TriPod"]; _n = _n + ["M2StaticMG"]; _n = _n + ["SearchLight"]; _n = _n + ["MK19_TriPod"]; _n = _n + ["TOW_TriPod"]; _n = _n + ["Stinger_Pod"]; _n = _n + ["M252"]; _n = _n + ["M119"]; _n = _n + ["Land_HBarrier3"]; _n = _n + ["Land_HBarrier5"]; _n = _n + ["Land_HBarrier_large"]; _n = _n + ["Base_WarfareBBarrier5x"]; _n = _n + ["Base_WarfareBBarrier10x"]; _n = _n + ["Base_WarfareBBarrier10xTall"]; _n = _n + ["MASH"]; _n = _n + ["Land_Ind_SawMillPen"]; _n = _n + ["Land_fort_bagfence_long"]; _n = _n + ["Land_fort_bagfence_corner"]; _n = _n + ["Land_fort_bagfence_round"]; _n = _n + ["Land_fortified_nest_small"]; _n = _n + ["Land_fortified_nest_big"]; _n = _n + ["Land_Fort_Watchtower"]; _n = _n + ["Land_fort_rampart"]; _n = _n + ["Land_fort_artillery_nest"]; _n = _n + ["Hhedgehog_concreteBig"]; _n = _n + ["Hedgehog"]; _n = _n + ["Land_CamoNet_NATO"]; _n = _n + ["Land_CamoNetVar_NATO"]; _n = _n + ["Land_CamoNetB_NATO"]; _n = _n + ["Sign_Danger"]; _n = _n + ["HeliH"]; _n = _n + ["Fort_RazorWire"]; _n = _n + ["Land_Ind_IlluminantTower"]; _n = _n + ["Land_Campfire"]; _n = _n + ["USOrdnanceBox"]; _n = _n + ["USVehicleBox"]; _n = _n + ["USBasicAmmunitionBox"]; _n = _n + ["USBasicWeaponsBox"]; _n = _n + ["USLaunchersBox"]; _n = _n + ["USSpecialWeaponsBox"]; /* Class used for AI, AI will attempt to build those */ missionNamespace setVariable [Format["WFBE_%1DEFENSES_MG", _side], ['M2StaticMG']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_GL", _side], ['MK19_TriPod']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_AAPOD", _side], ['Stinger_Pod']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_ATPOD", _side], ['TOW_TriPod']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_CANNON", _side], ['M119']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MASH", _side], ['MASH']]; missionNamespace setVariable [Format["WFBE_%1DEFENSES_MORTAR", _side], ['M252']]; missionNamespace setVariable [Format["WFBE_%1DEFENSENAMES", _side], _n];Private ['_restriction_air','_side','_u']; _side = _this; _restriction_air = missionNamespace getVariable "WFBE_C_UNITS_RESTRICT_AIR"; _u = ['CDF_Soldier']; _u = _u + ['CDF_Soldier_Engineer']; _u = _u + ['CDF_Soldier_Light']; _u = _u + ['CDF_Soldier_GL']; _u = _u + ['CDF_Soldier_Militia']; _u = _u + ['CDF_Soldier_Medic']; _u = _u + ['CDF_Soldier_Sniper']; _u = _u + ['CDF_Soldier_Spotter']; _u = _u + ['CDF_Soldier_Marksman']; _u = _u + ['CDF_Soldier_RPG']; _u = _u + ['CDF_Soldier_Strela']; _u = _u + ['CDF_Soldier_AR']; _u = _u + ['CDF_Soldier_MG']; _u = _u + ['CDF_Soldier_TL']; _u = _u + ['CDF_Soldier_Officer']; _u = _u + ['CDF_Commander']; _u = _u + ['CDF_Soldier_Pilot']; _u = _u + ['CDF_Soldier_Crew']; missionNamespace setVariable [Format ["WFBE_%1BARRACKSUNITS", _side], _u]; if (local player) then {['BARRACKS', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['UAZ_CDF']; _u = _u + ['Ural_CDF']; _u = _u + ['WarfareSalvageTruck_CDF']; _u = _u + ['UralRepair_CDF']; _u = _u + ['UralReammo_CDF']; _u = _u + ['UralRefuel_CDF']; if ((missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM") == 0) then {_u = _u + ['WarfareSupplyTruck_CDF']}; _u = _u + ['UAZ_MG_CDF']; _u = _u + ['UAZ_AGS30_CDF']; _u = _u + ['BRDM2_CDF']; _u = _u + ['BRDM2_ATGM_CDF']; _u = _u + ['Ural_ZU23_CDF']; _u = _u + ['GRAD_CDF']; missionNamespace setVariable [Format ["WFBE_%1LIGHTUNITS", _side], _u]; if (local player) then {['LIGHT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['BMP2_Ambul_CDF']; _u = _u + ['ZSU_CDF']; _u = _u + ['BMP2_CDF']; _u = _u + ['T72_CDF']; missionNamespace setVariable [Format ["WFBE_%1HEAVYUNITS", _side], _u]; if (local player) then {['HEAVY', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['Mi17_CDF']; _u = _u + ['Mi17_medevac_CDF']; if (_restriction_air == 0 ||_restriction_air == 1) then { _u = _u + ['Mi24_D']; }; if (_restriction_air == 0) then { _u = _u + ['Su25_CDF']; }; missionNamespace setVariable [Format ["WFBE_%1AIRCRAFTUNITS", _side], _u]; if (local player) then {['AIRCRAFT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = []; if (_restriction_air == 0) then { _u = _u + ['Su25_CDF']; }; missionNamespace setVariable [Format ["WFBE_%1AIRPORTUNITS", _side], _u]; if (local player) then {['AIRPORT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ["MMT_Civ"]; _u = _u + ["TT650_Civ"]; _u = _u + ["Lada1"]; _u = _u + ["SkodaBlue"]; _u = _u + ["car_hatchback"]; _u = _u + ["datsun1_civil_1_open"]; _u = _u + ["V3S_Civ"]; if ((missionNamespace getVariable "WFBE_C_UNITS_TOWN_PURCHASE") > 0) then { _u = _u + [missionNamespace getVariable "WFBE_WESTSOLDIER"]; }; missionNamespace setVariable [Format ["WFBE_%1DEPOTUNITS", _side], _u]; if (local player) then {['DEPOT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'};Private ['_restriction_air','_side','_u']; _side = _this; _restriction_air = missionNamespace getVariable "WFBE_C_UNITS_RESTRICT_AIR"; _u = ['GUE_Soldier_1']; _u = _u + ['GUE_Soldier_2']; _u = _u + ['GUE_Soldier_3']; _u = _u + ['GUE_Soldier_GL']; _u = _u + ['GUE_Soldier_AT']; _u = _u + ['GUE_Soldier_AA']; _u = _u + ['GUE_Soldier_AR']; _u = _u + ['GUE_Soldier_MG']; _u = _u + ['GUE_Soldier_Sniper']; _u = _u + ['GUE_Soldier_Medic']; _u = _u + ['GUE_Soldier_Crew']; _u = _u + ['GUE_Soldier_Pilot']; _u = _u + ['GUE_Soldier_Scout']; _u = _u + ['GUE_Soldier_Sab']; _u = _u + ['GUE_Commander']; _u = _u + ['GUE_Worker2']; _u = _u + ['GUE_Woodlander3']; _u = _u + ['GUE_Villager3']; _u = _u + ['GUE_Woodlander2']; _u = _u + ['GUE_Woodlander1']; _u = _u + ['GUE_Villager4']; _u = _u + ['TK_GUE_Soldier_EP1']; _u = _u + ['TK_GUE_Soldier_2_EP1']; _u = _u + ['TK_GUE_Soldier_3_EP1']; _u = _u + ['TK_GUE_Soldier_4_EP1']; _u = _u + ['TK_GUE_Soldier_5_EP1']; _u = _u + ['TK_GUE_Soldier_AT_EP1']; _u = _u + ['TK_GUE_Soldier_AAT_EP1']; _u = _u + ['TK_GUE_Soldier_AA_EP1']; _u = _u + ['TK_GUE_Soldier_AR_EP1']; _u = _u + ['TK_GUE_Soldier_MG_EP1']; _u = _u + ['TK_GUE_Soldier_Sniper_EP1']; _u = _u + ['TK_GUE_Bonesetter_EP1']; _u = _u + ['TK_GUE_Soldier_HAT_EP1']; _u = _u + ['TK_GUE_Soldier_TL_EP1']; _u = _u + ['TK_GUE_Warlord_EP1']; if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_PMC") > 0) then { _u = _u + ['Soldier_AA_PMC']; _u = _u + ['Soldier_AT_PMC']; _u = _u + ['Soldier_Bodyguard_AA12_PMC']; _u = _u + ['Soldier_Bodyguard_M4_PMC']; _u = _u + ['Soldier_Crew_PMC']; _u = _u + ['Soldier_Engineer_PMC']; _u = _u + ['Soldier_GL_M16A2_PMC']; _u = _u + ['Soldier_GL_PMC']; _u = _u + ['Soldier_M4A3_PMC']; _u = _u + ['Soldier_Medic_PMC']; _u = _u + ['Soldier_MG_PKM_PMC']; _u = _u + ['Soldier_MG_PMC']; _u = _u + ['Soldier_Pilot_PMC']; _u = _u + ['Soldier_PMC']; _u = _u + ['Soldier_Sniper_KSVK_PMC']; _u = _u + ['Soldier_Sniper_PMC']; _u = _u + ['Soldier_TL_PMC']; }; missionNamespace setVariable [Format ["WFBE_%1BARRACKSUNITS", _side], _u]; if (local player) then {['BARRACKS', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['TT650_Gue']; _u = _u + ['V3S_Gue']; _u = _u + ['Pickup_PK_GUE']; _u = _u + ['Offroad_DSHKM_Gue']; _u = _u + ['Offroad_SPG9_Gue']; _u = _u + ['WarfareRepairTruck_Gue']; _u = _u + ['WarfareSalvageTruck_Gue']; _u = _u + ['WarfareReammoTruck_Gue']; if ((missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM") == 0) then {_u = _u + ['WarfareSupplyTruck_Gue']}; _u = _u + ['BRDM2_Gue']; _u = _u + ['Ural_ZU23_Gue']; _u = _u + ['V3S_TK_GUE_EP1']; _u = _u + ['V3S_Repair_TK_GUE_EP1']; _u = _u + ['V3S_Salvage_TK_GUE_EP1']; _u = _u + ['V3S_Reammo_TK_GUE_EP1']; _u = _u + ['V3S_Refuel_TK_GUE_EP1']; if ((missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM") == 0) then {_u = _u + ['V3S_Supply_TK_GUE_EP1']}; _u = _u + ['Pickup_PK_TK_GUE_EP1']; _u = _u + ['Offroad_DSHKM_TK_GUE_EP1']; _u = _u + ['Offroad_SPG9_TK_GUE_EP1']; _u = _u + ['BRDM2_TK_GUE_EP1']; _u = _u + ['BTR40_TK_GUE_EP1']; _u = _u + ['BTR40_MG_TK_GUE_EP1']; _u = _u + ['Ural_ZU23_TK_GUE_EP1']; if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_PMC") > 0) then { _u = _u + ['SUV_PMC']; _u = _u + ['ArmoredSUV_PMC']; }; missionNamespace setVariable [Format ["WFBE_%1LIGHTUNITS", _side], _u]; if (local player) then {['LIGHT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['BMP2_Gue']; _u = _u + ['T72_Gue']; _u = _u + ['T34_TK_GUE_EP1']; _u = _u + ['T55_TK_GUE_EP1']; missionNamespace setVariable [Format ["WFBE_%1HEAVYUNITS", _side], _u]; if (local player) then {['HEAVY', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['Mi17_Civilian']; _u = _u + ['UH1H_TK_GUE_EP1']; if (_restriction_air == 0 ||_restriction_air == 1) then { if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_PMC") > 0) then { _u = _u + ['Ka60_PMC']; _u = _u + ['Ka60_GL_PMC']; }; }; if (_restriction_air == 0) then { _u = _u + ['An2_1_TK_CIV_EP1']; _u = _u + ['An2_2_TK_CIV_EP1']; }; missionNamespace setVariable [Format ["WFBE_%1AIRCRAFTUNITS", _side], _u]; if (local player) then {['AIRCRAFT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = []; if (_restriction_air == 0) then { _u = _u + ['An2_1_TK_CIV_EP1']; _u = _u + ['An2_2_TK_CIV_EP1']; }; missionNamespace setVariable [Format ["WFBE_%1AIRPORTUNITS", _side], _u]; if (local player) then {['AIRPORT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ["MMT_Civ"]; _u = _u + ["TT650_Civ"]; _u = _u + ["Tractor"]; _u = _u + ["Lada2"]; _u = _u + ["LadaLM"]; _u = _u + ["SkodaRed"]; _u = _u + ["VWGolf"]; _u = _u + ["datsun1_civil_2_covered"]; _u = _u + ["hilux1_civil_2_covered"]; _u = _u + ["UralCivil"]; if ((missionNamespace getVariable "WFBE_C_UNITS_TOWN_PURCHASE") > 0) then { _u = _u + [missionNamespace getVariable "WFBE_GUERSOLDIER"]; }; missionNamespace setVariable [Format ["WFBE_%1DEPOTUNITS", _side], _u]; if (local player) then {['DEPOT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'};Private ['_restriction_air','_side','_u']; _side = _this; _restriction_air = missionNamespace getVariable "WFBE_C_UNITS_RESTRICT_AIR"; /* OFrP - Basic Infantry */ _u = ['OFrP_Soldier_Inf_TeamLeader']; _u = _u + ['OFrP_Soldier_Inf_Scout']; _u = _u + ['OFrP_Soldier_Inf_Medic']; _u = _u + ['OFrP_Soldier_Inf_Minimi']; _u = _u + ['OFrP_Soldier_Inf_ABL']; _u = _u + ['OFrP_Soldier_Inf_ERYX']; _u = _u + ['OFrP_Soldier_Inf_LRAC89']; _u = _u + ['OFrP_Soldier_Inf_Stinger']; _u = _u + ['OFrP_Soldier_Inf_Grenadier']; _u = _u + ['OFrP_Soldier_Inf_Laser']; _u = _u + ['OFrP_Soldier_Inf']; _u = _u + ['OFrP_Soldier_Inf_Radio']; _u = _u + ['OFrP_Soldier_Inf_SniperFRF2']; _u = _u + ['OFrP_Soldier_INF_TankCrew']; _u = _u + ['OFrP_Soldier_Inf_Crew']; _u = _u + ['OFrP_Soldier_OFF']; /*OFrP Pilot*/ _u = _u + ['OFrP_Soldier_T3_CIRAS_Pilot3_ALAT']; _u = _u + ['OFrP_Soldier_Pilot1_ADA']; /*OFrP Cos*/ _u = _u + ['OFrP_Soldier_CoS_TeamLeader']; _u = _u + ['OFrP_Soldier_CoS_Minimi']; _u = _u + ['OFrP_Soldier_CoS_Medic']; _u = _u + ['OFrP_Soldier_CoS_ABL']; _u = _u + ['OFrP_Soldier_CoS_ERYX']; _u = _u + ['OFrP_Soldier_CoS_Saboteur']; _u = _u + ['OFrP_Soldier_CoS_Laser']; _u = _u + ['OFrP_Soldier_CoS_Grenadier']; _u = _u + ['OFrP_Soldier_COS_Radio']; _u = _u + ['OFrP_Soldier_COS_SniperFRF2']; _u = _u + ['OFrP_Soldier_CoS']; /*OFrP Felin*/ _u = _u + ['OFrP_Soldier_FELIN_TeamLeader']; _u = _u + ['OFrP_Soldier_FELIN_Minimi']; _u = _u + ['OFrP_Soldier_FELIN_Medic']; _u = _u + ['OFrP_Soldier_FELIN_Grenadier']; _u = _u + ['OFrP_Soldier_FELIN_Optronic']; _u = _u + ['OFrP_Soldier_FELIN_Saboteur']; _u = _u + ['OFrP_Soldier_FELIN_ABL']; _u = _u + ['OFrP_Soldier_FELIN_Stinger']; _u = _u + ['OFrP_Soldier_FELIN_ERYX']; _u = _u + ['OFrP_Soldier_FELIN_Laser']; _u = _u + ['OFrP_Soldier_FELIN']; _u = _u + ['OFrP_Soldier_FELIN_SniperFRF2']; _u = _u + ['OFrP_Soldier_FELIN_Crew']; _u = _u + ['OFrP_Soldier_FELIN_TankCrew']; missionNamespace setVariable [Format ["WFBE_%1BARRACKSUNITS", _side], _u]; if (local player) then {['BARRACKS', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; /*OFrP Light */ _u = ['OFrP_P4']; _u = _u + ['OFrP_P4_b']; _u = _u + ['OFrP_P4_ANF1']; _u = _u + ['OFrP_P4_VPS']; _u = _u + ['OFrP_Hurricane']; _u = _u + ['OFrP_TRM2000']; _u = _u + ['OFrP_TRM2000_Fuel']; _u = _u + ['OFrP_GBC180']; _u = _u + ['OFrP_GBC180_APD']; //(Munitions) _u = _u + ['OFrP_GBC180_lot7']; _u = _u + ['MtvrSalvage_DES_EP1']; if ((missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM") == 0) then {_u = _u + ['MtvrSupply_DES_EP1']}; _u = _u + ['OFrP_VBL_desert']; _u = _u + ['OFrP_VBL_127_desert']; _u = _u + ['OFrP_VBL_ANF1_desert']; _u = _u + ['OFrP_VBL_Milan_desert']; _u = _u + ['OFrP_PVP']; _u = _u + ['OFrP_PVP_ANF1']; _u = _u + ['OFrP_PVP_WASP']; _u = _u + ['OFrP_PVP_WASP_MILAN']; _u = _u + ['OFrP_VAB_desert']; _u = _u + ['OFrP_VAB_SAN_desert']; _u = _u + ['OFrP_VAB_127_desert']; _u = _u + ['OFrP_VAB_TOP127_desert']; _u = _u + ['OFrP_VABT20_desert']; _u = _u + ['OFrP_VAB_Mephisto_desert']; _u = _u + ['OFrP_VAB_MILAN_desert']; _u = _u + ['OFrP_Aravis_desert']; _u = _u + ['OFrP_Aravis_TOP127_desert']; _u = _u + ['OFrP_Aravis_WASP_desert']; _u = _u + ['OFrP_Aravis_WASP_MILAN_desert']; missionNamespace setVariable [Format ["WFBE_%1LIGHTUNITS", _side], _u]; if (local player) then {['LIGHT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; /*Heavy Factory*/ _u = ['OFrP_VBCI_vci']; _u = _u + ['OFrP_10RC']; _u = _u + ['OFrP_10RCR']; _u = _u + ['OFrP_Leclerc_desert']; _u = _u + ['MLRS_DES_EP1']; missionNamespace setVariable [Format ["WFBE_%1HEAVYUNITS", _side], _u]; if (local player) then {['HEAVY', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; /*Air Factory*/ _u = ['OFrP_Puma_CE']; _u = _u + ['OFrP_Puma_RESCO']; _u = _u + ['OFrP_Puma_CE_Pirate']; _u = _u + ['OFrP_Caracal']; _u = _u + ['OFrP_Tiger_HAP_CE']; _u = _u + ['OFrP_Tiger_HAD_CE']; _u = _u + ['OFrP_Mirage_C']; _u = _u + ['OFrP_Mirage_5']; _u = _u + ['OFrP_Mirage_D_GBU12']; _u = _u + ['OFrP_Mirage_D_AS30L']; _u = _u + ['OFrP_Rafale_C1']; _u = _u + ['OFrP_Rafale_B1']; _u = _u + ['OFrP_Rafale_B1T']; _u = _u + ['OFrP_Transall_A']; missionNamespace setVariable [Format ["WFBE_%1AIRCRAFTUNITS", _side], _u]; if (local player) then {['AIRCRAFT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ["Old_bike_TK_CIV_EP1"]; _u = _u + ["MMT_Civ"]; _u = _u + ["Old_moto_TK_Civ_EP1"]; _u = _u + ["Lada1_TK_CIV_EP1"]; _u = _u + ["SkodaBlue"]; _u = _u + ["car_sedan"]; _u = _u + ["car_hatchback"]; _u = _u + ["Volha_1_TK_CIV_EP1"]; _u = _u + ["datsun1_civil_1_open"]; _u = _u + ["datsun1_civil_3_open"]; _u = _u + ["hilux1_civil_1_open"]; _u = _u + ["LandRover_TK_CIV_EP1"]; _u = _u + ["V3S_Open_TK_CIV_EP1"]; _u = _u + ["Ikarus_TK_CIV_EP1"]; if ((missionNamespace getVariable "WFBE_C_UNITS_TOWN_PURCHASE") > 0) then { _u = _u + ['OFrP_Soldier_Inf']; }; missionNamespace setVariable [Format ["WFBE_%1DEPOTUNITS", _side], _u]; if (local player) then {['DEPOT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'};Private ['_restriction_air','_side','_tiMode','_u']; _side = _this; _restriction_air = missionNamespace getVariable "WFBE_C_UNITS_RESTRICT_AIR"; _tiMode = missionNamespace getVariable "WFBE_C_GAMEPLAY_THERMAL_IMAGING"; _tiMode = if (_tiMode == 1 || _tiMode == 3) then {true} else {false}; //--- Russian Troops. _u = ['RU_Soldier']; _u = _u + ['RU_Soldier2']; _u = _u + ['RU_Soldier_LAT']; _u = _u + ['RU_Soldier_AT']; _u = _u + ['RU_Soldier_HAT']; _u = _u + ['RU_Soldier_AA']; _u = _u + ['RU_Soldier_AR']; _u = _u + ['RU_Soldier_MG']; _u = _u + ['RU_Soldier_GL']; _u = _u + ['RU_Soldier_Marksman']; _u = _u + ['RU_Soldier_Spotter']; _u = _u + ['RU_Soldier_Sniper']; _u = _u + ['RU_Soldier_SniperH']; _u = _u + ['RU_Soldier_Medic']; _u = _u + ['RU_Soldier_TL']; _u = _u + ['RU_Soldier_SL']; _u = _u + ['RU_Soldier_Crew']; _u = _u + ['RU_Soldier_Pilot']; _u = _u + ['RUS_Soldier1']; _u = _u + ['RUS_Soldier2']; _u = _u + ['RUS_Soldier_GL']; _u = _u + ['RUS_Soldier_Marksman']; _u = _u + ['RUS_Soldier3']; _u = _u + ['RUS_Soldier_TL']; _u = _u + ['MVD_Soldier_GL']; _u = _u + ['MVD_Soldier_MG']; _u = _u + ['MVD_Soldier_Marksman']; _u = _u + ['MVD_Soldier_AT']; _u = _u + ['MVD_Soldier_Sniper']; _u = _u + ['MVD_Soldier_TL']; //--- Takistan Troops. _u = _u + ['TK_Soldier_EP1']; _u = _u + ['TK_Soldier_B_EP1']; if (_tiMode) then { _u = _u + ['TK_Soldier_TWS_EP1']; }; _u = _u + ['TK_Soldier_Engineer_EP1']; _u = _u + ['TK_Soldier_LAT_EP1']; _u = _u + ['TK_Soldier_AAT_EP1']; _u = _u + ['TK_Soldier_AT_EP1']; _u = _u + ['TK_Soldier_HAT_EP1']; _u = _u + ['TK_Soldier_AA_EP1']; _u = _u + ['TK_Soldier_AR_EP1']; _u = _u + ['TK_Soldier_AMG_EP1']; _u = _u + ['TK_Soldier_MG_EP1']; _u = _u + ['TK_Soldier_GL_EP1']; _u = _u + ['TK_Soldier_Spotter_EP1']; _u = _u + ['TK_Soldier_Sniper_EP1']; _u = _u + ['TK_Soldier_SniperH_EP1']; _u = _u + ['TK_Soldier_Medic_EP1']; _u = _u + ['TK_Special_Forces_EP1']; _u = _u + ['TK_Special_Forces_TL_EP1']; _u = _u + ['TK_Special_Forces_MG_EP1']; _u = _u + ['TK_Soldier_Crew_EP1']; _u = _u + ['TK_Soldier_Pilot_EP1']; _u = _u + ['TK_Soldier_SL_EP1']; _u = _u + ['TK_Soldier_Officer_EP1']; missionNamespace setVariable [Format ["WFBE_%1BARRACKSUNITS", _side], _u]; if (local player) then {['BARRACKS', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['MMT_Civ']; _u = _u + ['TT650_Ins']; _u = _u + ['UAZ_Unarmed_TK_EP1']; _u = _u + ['UAZ_MG_TK_EP1']; _u = _u + ['UAZ_AGS30_TK_EP1']; _u = _u + ['UAZ_RU']; _u = _u + ['PBX']; _u = _u + ['UAZ_MG_INS']; _u = _u + ['UAZ_AGS30_RU']; _u = _u + ['UAZ_SPG9_INS']; _u = _u + ['LandRover_MG_TK_EP1']; _u = _u + ['LandRover_SPG9_TK_EP1']; _u = _u + ['SUV_TK_EP1']; _u = _u + ['Kamaz']; _u = _u + ['V3S_TK_EP1']; _u = _u + ['V3S_Open_TK_EP1']; _u = _u + ['UralRepair_TK_EP1']; _u = _u + ['UralReammo_TK_EP1']; _u = _u + ['UralRefuel_TK_EP1']; _u = _u + ['UralSalvage_TK_EP1']; if ((missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM") == 0) then {_u = _u + ['UralSupply_TK_EP1']}; _u = _u + ['KamazRepair']; _u = _u + ['WarfareReammoTruck_RU']; _u = _u + ['KamazRefuel']; _u = _u + ['WarfareSalvageTruck_RU']; if ((missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM") == 0) then {_u = _u + ['WarfareSupplyTruck_RU']}; _u = _u + ['M113Ambul_TK_EP1']; _u = _u + ['GAZ_Vodnik_MedEvac']; _u = _u + ['BRDM2_TK_EP1']; _u = _u + ['BRDM2_ATGM_TK_EP1']; _u = _u + ['BRDM2_INS']; _u = _u + ['BRDM2_ATGM_INS']; _u = _u + ['GAZ_Vodnik']; _u = _u + ['GAZ_Vodnik_HMG']; _u = _u + ['BTR60_TK_EP1']; _u = _u + ['Ural_ZU23_TK_EP1']; _u = _u + ['Ural_ZU23_INS']; _u = _u + ['BTR90']; _u = _u + ['GRAD_TK_EP1']; _u = _u + ['GRAD_RU']; if (modACE) then { _u = _u + ['ACE_BTR70_RU']; _u = _u + ['ACE_BTR70_RU_D']; _u = _u + ['ACE_BTR60_RU_D']; _u = _u + ['ACE_BRDM2_SA9_TK']; _u = _u + ['ACE_BRDM2_SA9_RU']; }; missionNamespace setVariable [Format ["WFBE_%1LIGHTUNITS", _side], _u]; if (local player) then {['LIGHT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['M113_TK_EP1']; _u = _u + ['BMP2_INS']; _u = _u + ['BMP2_TK_EP1']; _u = _u + ['BMP3']; _u = _u + ['ZSU_INS']; _u = _u + ['ZSU_TK_EP1']; _u = _u + ['T34_TK_EP1']; _u = _u + ['T55_TK_EP1']; _u = _u + ['T72_RU']; _u = _u + ['T72_TK_EP1']; _u = _u + ['T90']; _u = _u + ['2S6M_Tunguska']; if (modACE) then { _u = _u + ['ACE_T72B_RU']; _u = _u + ['ACE_T72BA_RU']; _u = _u + ['ACE_BMP2D_RU']; _u = _u + ['ACE_BMP2D_TK']; _u = _u + ['ACE_BMD_1_RU']; _u = _u + ['ACE_BMD_1P_RUS']; _u = _u + ['ACE_BMD_2K_RU']; _u = _u + ['ACE_BMD_2_INS']; }; missionNamespace setVariable [Format ["WFBE_%1HEAVYUNITS", _side], _u]; if (local player) then {['HEAVY', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['Mi17_Ins']; _u = _u + ['UH1H_TK_EP1']; if (_restriction_air == 0 ||_restriction_air == 1) then { _u = _u + ['Mi17_medevac_RU']; _u = _u + ['Mi17_rockets_RU']; _u = _u + ['Mi24_V']; _u = _u + ['Mi24_D_TK_EP1']; _u = _u + ['Mi24_P']; if ((missionNamespace getVariable "WFBE_C_UNITS_KAMOV_DISABLED") == 0) then { _u = _u + ['Ka52']; _u = _u + ['Ka52Black']; }; if (modACE) then { _u = _u + ['ACE_Mi24_V_FAB250_RU']; _u = _u + ['ACE_Mi24_V_UPK23_RU']; }; }; if (_restriction_air == 0) then { _u = _u + ['An2_TK_EP1']; _u = _u + ['L39_TK_EP1']; _u = _u + ['Su34']; _u = _u + ['Su25_TK_EP1']; _u = _u + ['Su25_Ins']; _u = _u + ['Su39']; if (modACE) then { _u = _u + ['ACE_Su27_CAP']; _u = _u + ['ACE_Su27_CASP']; _u = _u + ['ACE_Su27_CAS']; _u = _u + ['ACE_L39_TK_FAB250']; }; }; missionNamespace setVariable [Format ["WFBE_%1AIRCRAFTUNITS", _side], _u]; if (local player) then {['AIRCRAFT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = []; if (_restriction_air == 0) then { _u = _u + ['An2_TK_EP1']; _u = _u + ['L39_TK_EP1']; _u = _u + ['Su34']; _u = _u + ['Su25_TK_EP1']; _u = _u + ['Su25_Ins']; _u = _u + ['Su39']; }; missionNamespace setVariable [Format ["WFBE_%1AIRPORTUNITS", _side], _u]; if (local player) then {['AIRPORT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ["MMT_Civ"]; _u = _u + ["Old_bike_TK_CIV_EP1"]; _u = _u + ["TT650_Civ"]; _u = _u + ["Tractor"]; _u = _u + ["Lada2_TK_CIV_EP1"]; _u = _u + ["SkodaRed"]; _u = _u + ["VolhaLimo_TK_CIV_EP1"]; _u = _u + ["Volha_2_TK_CIV_EP1"]; _u = _u + ["VWGolf"]; _u = _u + ["datsun1_civil_2_covered"]; _u = _u + ["hilux1_civil_2_covered"]; _u = _u + ["S1203_TK_CIV_EP1"]; _u = _u + ["Ural_TK_CIV_EP1"]; if ((missionNamespace getVariable "WFBE_C_UNITS_TOWN_PURCHASE") > 0) then { _u = _u + [missionNamespace getVariable "WFBE_EASTSOLDIER"]; }; missionNamespace setVariable [Format ["WFBE_%1DEPOTUNITS", _side], _u]; if (local player) then {['DEPOT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'};Private ['_restriction_air','_side','_u']; _side = _this; _restriction_air = missionNamespace getVariable "WFBE_C_UNITS_RESTRICT_AIR"; _u = ['US_Soldier_Light_EP1']; _u = _u + ['US_Soldier_EP1']; _u = _u + ['US_Soldier_B_EP1']; _u = _u + ['US_Soldier_LAT_EP1']; _u = _u + ['US_Soldier_AT_EP1']; _u = _u + ['US_Soldier_HAT_EP1']; _u = _u + ['US_Soldier_AA_EP1']; _u = _u + ['US_Soldier_AR_EP1']; _u = _u + ['US_Soldier_MG_EP1']; _u = _u + ['US_Soldier_GL_EP1']; _u = _u + ['US_Soldier_Sniper_EP1']; _u = _u + ['US_Soldier_SniperH_EP1']; _u = _u + ['US_Soldier_Sniper_NV_EP1']; _u = _u + ['US_Soldier_Marksman_EP1']; _u = _u + ['US_Soldier_Medic_EP1']; _u = _u + ['US_Soldier_Engineer_EP1']; _u = _u + ['US_Soldier_AMG_EP1']; _u = _u + ['US_Soldier_AAR_EP1']; _u = _u + ['US_Soldier_AHAT_EP1']; _u = _u + ['US_Soldier_AAT_EP1']; _u = _u + ['US_Soldier_Spotter_EP1']; _u = _u + ['US_Soldier_TL_EP1']; _u = _u + ['US_Soldier_SL_EP1']; _u = _u + ['US_Soldier_Officer_EP1']; _u = _u + ['US_Soldier_Crew_EP1']; _u = _u + ['US_Soldier_Pilot_EP1']; _u = _u + ['US_Delta_Force_EP1']; _u = _u + ['US_Delta_Force_TL_EP1']; _u = _u + ['US_Delta_Force_Medic_EP1']; _u = _u + ['US_Delta_Force_Assault_EP1']; _u = _u + ['US_Delta_Force_SD_EP1']; _u = _u + ['US_Delta_Force_MG_EP1']; _u = _u + ['US_Delta_Force_AR_EP1']; _u = _u + ['US_Delta_Force_Night_EP1']; _u = _u + ['US_Delta_Force_Marksman_EP1']; _u = _u + ['US_Delta_Force_M14_EP1']; _u = _u + ['US_Delta_Force_Air_Controller_EP1']; //--- USMC Troops. _u = _u + ['USMC_Soldier']; _u = _u + ['USMC_Soldier2']; _u = _u + ['USMC_Soldier_LAT']; _u = _u + ['USMC_Soldier_AT']; _u = _u + ['USMC_Soldier_HAT']; _u = _u + ['USMC_Soldier_AA']; _u = _u + ['USMC_Soldier_AR']; _u = _u + ['USMC_Soldier_MG']; _u = _u + ['USMC_Soldier_GL']; _u = _u + ['USMC_SoldierS_Sniper']; _u = _u + ['USMC_SoldierS_SniperH']; _u = _u + ['USMC_SoldierM_Marksman']; _u = _u + ['USMC_Soldier_Medic']; _u = _u + ['USMC_SoldierS_Engineer']; _u = _u + ['USMC_SoldierS']; _u = _u + ['USMC_SoldierS_Spotter']; _u = _u + ['USMC_Soldier_TL']; _u = _u + ['USMC_Soldier_SL']; _u = _u + ['USMC_Soldier_Crew']; _u = _u + ['USMC_Soldier_Pilot']; _u = _u + ['FR_GL']; _u = _u + ['FR_Corpsman']; _u = _u + ['FR_TL']; _u = _u + ['FR_Assault_R']; _u = _u + ['FR_Assault_GL']; _u = _u + ['FR_AR']; _u = _u + ['FR_R']; _u = _u + ['FR_Sapper']; _u = _u + ['FR_AC']; _u = _u + ['FR_Marksman']; if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_BAF") > 0) then { //--- BAF MTP Camo. _u = _u + ['BAF_Soldier_AA_MTP']; _u = _u + ['BAF_Soldier_AAA_MTP']; _u = _u + ['BAF_Soldier_AAT_MTP']; _u = _u + ['BAF_Soldier_AHAT_MTP']; _u = _u + ['BAF_Soldier_AAR_MTP']; _u = _u + ['BAF_Soldier_AMG_MTP']; _u = _u + ['BAF_Soldier_AT_MTP']; _u = _u + ['BAF_Soldier_HAT_MTP']; _u = _u + ['BAF_Soldier_AR_MTP']; _u = _u + ['BAF_crewman_MTP']; _u = _u + ['BAF_Soldier_EN_MTP']; _u = _u + ['BAF_Soldier_GL_MTP']; _u = _u + ['BAF_Soldier_FAC_MTP']; _u = _u + ['BAF_Soldier_MG_MTP']; _u = _u + ['BAF_Soldier_scout_MTP']; _u = _u + ['BAF_Soldier_Marksman_MTP']; _u = _u + ['BAF_Soldier_Medic_MTP']; _u = _u + ['BAF_Soldier_Officer_MTP']; _u = _u + ['BAF_Pilot_MTP']; _u = _u + ['BAF_Soldier_MTP']; _u = _u + ['BAF_ASoldier_MTP']; _u = _u + ['BAF_Soldier_L_MTP']; _u = _u + ['BAF_Soldier_N_MTP']; _u = _u + ['BAF_Soldier_SL_MTP']; _u = _u + ['BAF_Soldier_SniperN_MTP']; _u = _u + ['BAF_Soldier_SniperH_MTP']; _u = _u + ['BAF_Soldier_Sniper_MTP']; _u = _u + ['BAF_Soldier_spotter_MTP']; _u = _u + ['BAF_Soldier_spotterN_MTP']; _u = _u + ['BAF_Soldier_TL_MTP']; //--- BAF Woodland Camo. _u = _u + ['BAF_Soldier_AA_W']; _u = _u + ['BAF_Soldier_AAA_W']; _u = _u + ['BAF_Soldier_AAT_W']; _u = _u + ['BAF_Soldier_AHAT_W']; _u = _u + ['BAF_Soldier_AAR_W']; _u = _u + ['BAF_Soldier_AMG_W']; _u = _u + ['BAF_Soldier_AT_W']; _u = _u + ['BAF_Soldier_HAT_W']; _u = _u + ['BAF_Soldier_AR_W']; _u = _u + ['BAF_crewman_W']; _u = _u + ['BAF_Soldier_EN_W']; _u = _u + ['BAF_Soldier_GL_W']; _u = _u + ['BAF_Soldier_FAC_W']; _u = _u + ['BAF_Soldier_MG_W']; _u = _u + ['BAF_Soldier_scout_W']; _u = _u + ['BAF_Soldier_Marksman_W']; _u = _u + ['BAF_Soldier_Medic_W']; _u = _u + ['BAF_Soldier_Officer_W']; _u = _u + ['BAF_Pilot_W']; _u = _u + ['BAF_Soldier_W']; _u = _u + ['BAF_ASoldier_W']; _u = _u + ['BAF_Soldier_L_W']; _u = _u + ['BAF_Soldier_N_W']; _u = _u + ['BAF_Soldier_SL_W']; _u = _u + ['BAF_Soldier_SniperN_W']; _u = _u + ['BAF_Soldier_SniperH_W']; _u = _u + ['BAF_Soldier_Sniper_W']; _u = _u + ['BAF_Soldier_spotter_W']; _u = _u + ['BAF_Soldier_spotterN_W']; _u = _u + ['BAF_Soldier_TL_W']; //--- BAF Desert Camo. _u = _u + ['BAF_Soldier_AA_DDPM']; _u = _u + ['BAF_Soldier_AAA_DDPM']; _u = _u + ['BAF_Soldier_AAT_DDPM']; _u = _u + ['BAF_Soldier_AHAT_DDPM']; _u = _u + ['BAF_Soldier_AAR_DDPM']; _u = _u + ['BAF_Soldier_AMG_DDPM']; _u = _u + ['BAF_Soldier_AT_DDPM']; _u = _u + ['BAF_Soldier_HAT_DDPM']; _u = _u + ['BAF_Soldier_AR_DDPM']; _u = _u + ['BAF_crewman_DDPM']; _u = _u + ['BAF_Soldier_EN_DDPM']; _u = _u + ['BAF_Soldier_GL_DDPM']; _u = _u + ['BAF_Soldier_FAC_DDPM']; _u = _u + ['BAF_Soldier_MG_DDPM']; _u = _u + ['BAF_Soldier_scout_DDPM']; _u = _u + ['BAF_Soldier_Marksman_DDPM']; _u = _u + ['BAF_Soldier_Medic_DDPM']; _u = _u + ['BAF_Soldier_Officer_DDPM']; _u = _u + ['BAF_Pilot_DDPM']; _u = _u + ['BAF_Soldier_DDPM']; _u = _u + ['BAF_ASoldier_DDPM']; _u = _u + ['BAF_Soldier_L_DDPM']; _u = _u + ['BAF_Soldier_N_DDPM']; _u = _u + ['BAF_Soldier_SL_DDPM']; _u = _u + ['BAF_Soldier_TL_DDPM']; }; missionNamespace setVariable [Format ["WFBE_%1BARRACKSUNITS", _side], _u]; if (local player) then {['BARRACKS', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['MMT_USMC']; _u = _u + ['M1030']; _u = _u + ['M1030_US_DES_EP1']; _u = _u + ['ATV_US_EP1']; _u = _u + ['Zodiac']; _u = _u + ['HMMWV_DES_EP1']; _u = _u + ['HMMWV_M1035_DES_EP1']; _u = _u + ['HMMWV_Terminal_EP1']; _u = _u + ['HMMWV_MK19_DES_EP1']; _u = _u + ['HMMWV_M998A2_SOV_DES_EP1']; _u = _u + ['HMMWV_M1151_M2_DES_EP1']; _u = _u + ['HMMWV_M998_crows_M2_DES_EP1']; _u = _u + ['HMMWV_M998_crows_MK19_DES_EP1']; _u = _u + ['HMMWV_TOW_DES_EP1']; _u = _u + ['HMMWV_Avenger_DES_EP1']; _u = _u + ['HMMWV_Ambulance_DES_EP1']; _u = _u + ['HMMWV']; _u = _u + ['HMMWV_M2']; _u = _u + ['HMMWV_Armored']; _u = _u + ['HMMWV_MK19']; _u = _u + ['HMMWV_TOW']; _u = _u + ['HMMWV_Avenger']; _u = _u + ['HMMWV_Ambulance']; _u = _u + ['MTVR_DES_EP1']; _u = _u + ['MtvrRepair_DES_EP1']; _u = _u + ['MtvrReammo_DES_EP1']; _u = _u + ['MtvrRefuel_DES_EP1']; _u = _u + ['MtvrSalvage_DES_EP1']; if ((missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM") == 0) then {_u = _u + ['MtvrSupply_DES_EP1']}; _u = _u + ['MTVR']; _u = _u + ['MtvrRepair']; _u = _u + ['WarfareReammoTruck_USMC']; _u = _u + ['MtvrRefuel']; _u = _u + ['WarfareSalvageTruck_USMC']; if ((missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM") == 0) then {_u = _u + ['WarfareSupplyTruck_USMC']}; _u = _u + ['RHIB']; _u = _u + ['RHIB2Turret']; _u = _u + ['LAV25']; _u = _u + ['M1126_ICV_M2_EP1']; _u = _u + ['M1126_ICV_mk19_EP1']; _u = _u + ['M1129_MC_EP1']; _u = _u + ['M1135_ATGMV_EP1']; _u = _u + ['M1128_MGS_EP1']; _u = _u + ['M1133_MEV_EP1']; if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_BAF") > 0) then { _u = _u + ['BAF_ATV_W']; _u = _u + ['BAF_Offroad_W']; _u = _u + ['BAF_Jackal2_GMG_W']; _u = _u + ['BAF_Jackal2_L2A1_W']; _u = _u + ['BAF_ATV_D']; _u = _u + ['BAF_Offroad_D']; _u = _u + ['BAF_Jackal2_GMG_D']; _u = _u + ['BAF_Jackal2_L2A1_D']; }; if (modACE) then { _u = _u + ['ACE_ATV_Honda']; _u = _u + ['ACE_HMMWV_MK19_USARMY']; _u = _u + ['ACE_HMMWV_USARMY']; _u = _u + ['ACE_HMMWV_GMV']; _u = _u + ['ACE_HMMWV_GMV_MK19']; _u = _u + ['ACE_HMMWV_M2_USARMY']; _u = _u + ['ACE_HMMWV_TOW_USARMY']; _u = _u + ['ACE_HMMWV_Ambulance_USARMY']; _u = _u + ['ACE_Truck5tOpen']; _u = _u + ['ACE_Truck5t']; _u = _u + ['ACE_Truck5tMGOpen']; _u = _u + ['ACE_Truck5tMG']; _u = _u + ['ACE_Truck5tRepair']; _u = _u + ['ACE_Truck5tReammo']; _u = _u + ['ACE_Truck5tRefuel']; _u = _u + ['ACE_Stryker_RV_SLAT_D']; _u = _u + ['ACE_Stryker_ICV_M2_SLAT']; _u = _u + ['ACE_Stryker_RV_SLAT']; _u = _u + ['ACE_Stryker_ICV_MK19_SLAT']; _u = _u + ['ACE_Stryker_TOW_MG_Slat']; _u = _u + ['ACE_Stryker_MGS_Slat']; }; missionNamespace setVariable [Format ["WFBE_%1LIGHTUNITS", _side], _u]; if (local player) then {['LIGHT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['AAV']; _u = _u + ['M2A2_EP1']; _u = _u + ['M2A3_EP1']; _u = _u + ['M1A1']; _u = _u + ['M1A1_US_DES_EP1']; _u = _u + ['MLRS']; _u = _u + ['MLRS_DES_EP1']; _u = _u + ['M1A2_TUSK_MG']; _u = _u + ['M1A2_US_TUSK_MG_EP1']; _u = _u + ['M6_EP1']; if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_BAF") > 0) then { _u = _u + ['BAF_FV510_W']; _u = _u + ['BAF_FV510_D']; }; if (modACE) then { _u = _u + ['ACE_M1A1HA_TUSK_DESERT']; _u = _u + ['ACE_M1A1HA_TUSK_CSAMM_DESERT']; _u = _u + ['ACE_M113A3_Ambul']; _u = _u + ['ACE_Vulcan']; _u = _u + ['ACE_M113A3']; _u = _u + ['ACE_M2A2_W']; _u = _u + ['ACE_M2A3_W']; _u = _u + ['ACE_M1A1_NATO']; _u = _u + ['ACE_M1A1HA_TUSK']; _u = _u + ['ACE_M1A1HA_TUSK_CSAMM']; _u = _u + ['ACE_M6A1_W']; }; missionNamespace setVariable [Format ["WFBE_%1HEAVYUNITS", _side], _u]; if (local player) then {['HEAVY', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['MH6J_EP1']; _u = _u + ['MH60S']; _u = _u + ['UH60M_EP1']; _u = _u + ['UH60M_MEV_EP1']; _u = _u + ['CH_47F_EP1']; if (_restriction_air == 0 || _restriction_air == 1) then { _u = _u + ['UH1Y']; _u = _u + ['AH6J_EP1']; if (modACE) then { _u = _u + ['ACE_AH6_GAU19_FLIR']; _u = _u + ['ACE_AH6J_DAGR_FLIR']; }; _u = _u + ['AH1Z']; _u = _u + ['AH64D_EP1']; }; if (_restriction_air == 0) then { _u = _u + ['MV22']; _u = _u + ['C130J_US_EP1']; _u = _u + ['F35B']; _u = _u + ['AV8B']; _u = _u + ['AV8B2']; _u = _u + ['A10_US_EP1']; }; if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_BAF") > 0) then { _u = _u + ['BAF_Merlin_HC3_D']; _u = _u + ['CH_47F_BAF']; if (_restriction_air == 0 || _restriction_air == 1) then { _u = _u + ['AW159_Lynx_BAF']; _u = _u + ['BAF_Apache_AH1_D']; }; }; missionNamespace setVariable [Format ["WFBE_%1AIRCRAFTUNITS", _side], _u]; if (local player) then {['AIRCRAFT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = []; if (_restriction_air == 0) then { _u = _u + ['MV22']; _u = _u + ['C130J_US_EP1']; _u = _u + ['F35B']; _u = _u + ['AV8B']; _u = _u + ['AV8B2']; _u = _u + ['A10_US_EP1']; }; missionNamespace setVariable [Format ["WFBE_%1AIRPORTUNITS", _side], _u]; if (local player) then {['AIRPORT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ["Old_bike_TK_CIV_EP1"]; _u = _u + ["MMT_Civ"]; _u = _u + ["Old_moto_TK_Civ_EP1"]; _u = _u + ["Lada1_TK_CIV_EP1"]; _u = _u + ["SkodaBlue"]; _u = _u + ["car_sedan"]; _u = _u + ["car_hatchback"]; _u = _u + ["Volha_1_TK_CIV_EP1"]; _u = _u + ["datsun1_civil_1_open"]; _u = _u + ["datsun1_civil_3_open"]; _u = _u + ["hilux1_civil_1_open"]; _u = _u + ["LandRover_TK_CIV_EP1"]; _u = _u + ["V3S_Open_TK_CIV_EP1"]; _u = _u + ["Ikarus_TK_CIV_EP1"]; if ((missionNamespace getVariable "WFBE_C_UNITS_TOWN_PURCHASE") > 0) then { _u = _u + [missionNamespace getVariable "WFBE_WESTSOLDIER"]; }; missionNamespace setVariable [Format ["WFBE_%1DEPOTUNITS", _side], _u]; if (local player) then {['DEPOT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'};Private ['_restriction_air','_side','_u']; _side = _this; _restriction_air = missionNamespace getVariable "WFBE_C_UNITS_RESTRICT_AIR"; _u = ['GUE_Soldier_1']; _u = _u + ['GUE_Soldier_2']; _u = _u + ['GUE_Soldier_3']; _u = _u + ['GUE_Soldier_GL']; _u = _u + ['GUE_Soldier_AT']; _u = _u + ['GUE_Soldier_AA']; _u = _u + ['GUE_Soldier_AR']; _u = _u + ['GUE_Soldier_MG']; _u = _u + ['GUE_Soldier_Sniper']; _u = _u + ['GUE_Soldier_Medic']; _u = _u + ['GUE_Soldier_Crew']; _u = _u + ['GUE_Soldier_Pilot']; _u = _u + ['GUE_Soldier_Scout']; _u = _u + ['GUE_Soldier_Sab']; _u = _u + ['GUE_Commander']; _u = _u + ['GUE_Worker2']; _u = _u + ['GUE_Woodlander3']; _u = _u + ['GUE_Villager3']; _u = _u + ['GUE_Woodlander2']; _u = _u + ['GUE_Woodlander1']; _u = _u + ['GUE_Villager4']; missionNamespace setVariable [Format ["WFBE_%1BARRACKSUNITS", _side], _u]; if (local player) then {['BARRACKS', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['TT650_Gue']; _u = _u + ['V3S_Gue']; _u = _u + ['Pickup_PK_GUE']; _u = _u + ['Offroad_DSHKM_Gue']; _u = _u + ['Offroad_SPG9_Gue']; _u = _u + ['WarfareRepairTruck_Gue']; if ((missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM") == 0) then {_u = _u + ['WarfareSalvageTruck_Gue']}; _u = _u + ['WarfareReammoTruck_Gue']; _u = _u + ['WarfareSupplyTruck_Gue']; _u = _u + ['BRDM2_Gue']; _u = _u + ['Ural_ZU23_Gue']; missionNamespace setVariable [Format ["WFBE_%1LIGHTUNITS", _side], _u]; if (local player) then {['LIGHT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['BMP2_Gue']; _u = _u + ['T72_Gue']; missionNamespace setVariable [Format ["WFBE_%1HEAVYUNITS", _side], _u]; if (local player) then {['HEAVY', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['Mi17_Civilian']; missionNamespace setVariable [Format ["WFBE_%1AIRCRAFTUNITS", _side], _u]; if (local player) then {['AIRCRAFT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = []; missionNamespace setVariable [Format ["WFBE_%1AIRPORTUNITS", _side], _u]; if (local player) then {['AIRPORT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ["MMT_Civ"]; _u = _u + ["TT650_Civ"]; _u = _u + ["Tractor"]; _u = _u + ["Lada2"]; _u = _u + ["LadaLM"]; _u = _u + ["SkodaRed"]; _u = _u + ["VWGolf"]; _u = _u + ["datsun1_civil_2_covered"]; _u = _u + ["hilux1_civil_2_covered"]; _u = _u + ["UralCivil"]; if ((missionNamespace getVariable "WFBE_C_UNITS_TOWN_PURCHASE") > 0) then { _u = _u + [missionNamespace getVariable "WFBE_GUERSOLDIER"]; }; missionNamespace setVariable [Format ["WFBE_%1DEPOTUNITS", _side], _u]; if (local player) then {['DEPOT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'};Private ['_restriction_air','_side','_u']; _side = _this; _restriction_air = missionNamespace getVariable "WFBE_C_UNITS_RESTRICT_AIR"; _u = ['Ins_Soldier_1']; _u = _u + ['Ins_Soldier_2']; _u = _u + ['Ins_Soldier_GL']; _u = _u + ['Ins_Soldier_CO']; _u = _u + ['Ins_Commander']; _u = _u + ['Ins_Soldier_Medic']; _u = _u + ['Ins_Soldier_AR']; _u = _u + ['Ins_Soldier_MG']; _u = _u + ['Ins_Soldier_AT']; _u = _u + ['Ins_Soldier_AA']; _u = _u + ['Ins_Soldier_Sniper']; _u = _u + ['Ins_Soldier_Sapper']; _u = _u + ['Ins_Soldier_Sab']; _u = _u + ['Ins_Soldier_Pilot']; _u = _u + ['Ins_Soldier_Crew']; missionNamespace setVariable [Format ["WFBE_%1BARRACKSUNITS", _side], _u]; if (local player) then {['BARRACKS', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['UAZ_INS']; _u = _u + ['Ural_INS']; _u = _u + ['WarfareSalvageTruck_INS']; _u = _u + ['UralRepair_INS']; _u = _u + ['UralReammo_INS']; _u = _u + ['UralRefuel_INS']; if ((missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM") == 0) then {_u = _u + ['WarfareSupplyTruck_INS']}; _u = _u + ['UAZ_MG_INS']; _u = _u + ['UAZ_AGS30_INS']; _u = _u + ['UAZ_SPG9_INS']; _u = _u + ['BRDM2_INS']; _u = _u + ['BRDM2_ATGM_INS']; _u = _u + ['Ural_ZU23_INS']; _u = _u + ['GRAD_INS']; missionNamespace setVariable [Format ["WFBE_%1LIGHTUNITS", _side], _u]; if (local player) then {['LIGHT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['BMP2_Ambul_INS']; _u = _u + ['ZSU_INS']; _u = _u + ['BMP2_INS']; _u = _u + ['T72_INS']; missionNamespace setVariable [Format ["WFBE_%1HEAVYUNITS", _side], _u]; if (local player) then {['HEAVY', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['Mi17_Ins']; _u = _u + ['Mi17_medevac_Ins']; if (_restriction_air == 0 ||_restriction_air == 1) then { _u = _u + ['Mi24_V']; }; if (_restriction_air == 0) then { _u = _u + ['Su25_Ins']; }; missionNamespace setVariable [Format ["WFBE_%1AIRCRAFTUNITS", _side], _u]; if (local player) then {['AIRCRAFT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = []; if (_restriction_air == 0) then { _u = _u + ['Su25_Ins']; }; missionNamespace setVariable [Format ["WFBE_%1AIRPORTUNITS", _side], _u]; if (local player) then {['AIRPORT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ["MMT_Civ"]; _u = _u + ["TT650_Civ"]; _u = _u + ["Lada2"]; _u = _u + ["LadaLM"]; _u = _u + ["SkodaRed"]; _u = _u + ["datsun1_civil_2_covered"]; _u = _u + ["UralCivil"]; if ((missionNamespace getVariable "WFBE_C_UNITS_TOWN_PURCHASE") > 0) then { _u = _u + [missionNamespace getVariable "WFBE_EASTSOLDIER"]; }; missionNamespace setVariable [Format ["WFBE_%1DEPOTUNITS", _side], _u]; if (local player) then {['DEPOT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'};Private ['_restriction_air','_side','_u']; _side = _this; _restriction_air = missionNamespace getVariable "WFBE_C_UNITS_RESTRICT_AIR"; /* OFrP - Basic Infantry */ _u = ['OFrP_Soldier_Inf_TeamLeader']; _u = _u + ['OFrP_Soldier_Inf_Scout']; _u = _u + ['OFrP_Soldier_Inf_Medic']; _u = _u + ['OFrP_Soldier_Inf_Minimi']; _u = _u + ['OFrP_Soldier_Inf_ABL']; _u = _u + ['OFrP_Soldier_Inf_ERYX']; _u = _u + ['OFrP_Soldier_Inf_LRAC89']; _u = _u + ['OFrP_Soldier_Inf_Stinger']; _u = _u + ['OFrP_Soldier_Inf_Grenadier']; _u = _u + ['OFrP_Soldier_Inf_Laser']; _u = _u + ['OFrP_Soldier_Inf']; _u = _u + ['OFrP_Soldier_Inf_Radio']; _u = _u + ['OFrP_Soldier_Inf_SniperFRF2']; _u = _u + ['OFrP_Soldier_INF_TankCrew']; _u = _u + ['OFrP_Soldier_Inf_Crew']; _u = _u + ['OFrP_Soldier_OFF']; /*OFrP Pilot*/ _u = _u + ['OFrP_Soldier_T3_CIRAS_Pilot3_ALAT']; _u = _u + ['OFrP_Soldier_Pilot1_ADA']; /*OFrP Cos*/ _u = _u + ['OFrP_Soldier_CoS_TeamLeader']; _u = _u + ['OFrP_Soldier_CoS_Minimi']; _u = _u + ['OFrP_Soldier_CoS_Medic']; _u = _u + ['OFrP_Soldier_CoS_ABL']; _u = _u + ['OFrP_Soldier_CoS_ERYX']; _u = _u + ['OFrP_Soldier_CoS_Saboteur']; _u = _u + ['OFrP_Soldier_CoS_Laser']; _u = _u + ['OFrP_Soldier_CoS_Grenadier']; _u = _u + ['OFrP_Soldier_COS_Radio']; _u = _u + ['OFrP_Soldier_COS_SniperFRF2']; _u = _u + ['OFrP_Soldier_CoS']; /*OFrP Felin*/ _u = _u + ['OFrP_Soldier_FELIN_TeamLeader']; _u = _u + ['OFrP_Soldier_FELIN_Minimi']; _u = _u + ['OFrP_Soldier_FELIN_Medic']; _u = _u + ['OFrP_Soldier_FELIN_Grenadier']; _u = _u + ['OFrP_Soldier_FELIN_Optronic']; _u = _u + ['OFrP_Soldier_FELIN_Saboteur']; _u = _u + ['OFrP_Soldier_FELIN_ABL']; _u = _u + ['OFrP_Soldier_FELIN_Stinger']; _u = _u + ['OFrP_Soldier_FELIN_ERYX']; _u = _u + ['OFrP_Soldier_FELIN_Laser']; _u = _u + ['OFrP_Soldier_FELIN']; _u = _u + ['OFrP_Soldier_FELIN_SniperFRF2']; _u = _u + ['OFrP_Soldier_FELIN_Crew']; _u = _u + ['OFrP_Soldier_FELIN_TankCrew']; missionNamespace setVariable [Format ["WFBE_%1BARRACKSUNITS", _side], _u]; if (local player) then {['BARRACKS', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; /*OFrP Light */ _u = ['OFrP_P4']; _u = _u + ['OFrP_P4_b']; _u = _u + ['OFrP_P4_ANF1']; _u = _u + ['OFrP_P4_VPS']; _u = _u + ['OFrP_Hurricane']; _u = _u + ['OFrP_TRM2000']; _u = _u + ['OFrP_TRM2000_Fuel']; _u = _u + ['OFrP_GBC180']; _u = _u + ['OFrP_GBC180_APD']; //(Munitions) _u = _u + ['OFrP_GBC180_lot7']; _u = _u + ['MtvrSalvage_DES_EP1']; if ((missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM") == 0) then {_u = _u + ['MtvrSupply_DES_EP1']}; _u = _u + ['OFrP_VBL_desert']; _u = _u + ['OFrP_VBL_127_desert']; _u = _u + ['OFrP_VBL_ANF1_desert']; _u = _u + ['OFrP_VBL_Milan_desert']; _u = _u + ['OFrP_PVP']; _u = _u + ['OFrP_PVP_ANF1']; _u = _u + ['OFrP_PVP_WASP']; _u = _u + ['OFrP_PVP_WASP_MILAN']; _u = _u + ['OFrP_VAB_desert']; _u = _u + ['OFrP_VAB_SAN_desert']; _u = _u + ['OFrP_VAB_127_desert']; _u = _u + ['OFrP_VAB_TOP127_desert']; _u = _u + ['OFrP_VABT20_desert']; _u = _u + ['OFrP_VAB_Mephisto_desert']; _u = _u + ['OFrP_VAB_MILAN_desert']; _u = _u + ['OFrP_Aravis_desert']; _u = _u + ['OFrP_Aravis_TOP127_desert']; _u = _u + ['OFrP_Aravis_WASP_desert']; _u = _u + ['OFrP_Aravis_WASP_MILAN_desert']; missionNamespace setVariable [Format ["WFBE_%1LIGHTUNITS", _side], _u]; if (local player) then {['LIGHT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; /*Heavy Factory*/ _u = ['OFrP_VBCI_vci']; _u = _u + ['OFrP_10RC']; _u = _u + ['OFrP_10RCR']; _u = _u + ['OFrP_Leclerc_desert']; _u = _u + ['MLRS_DES_EP1']; missionNamespace setVariable [Format ["WFBE_%1HEAVYUNITS", _side], _u]; if (local player) then {['HEAVY', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; /*Air Factory*/ _u = ['OFrP_Puma_CE']; _u = _u + ['OFrP_Puma_RESCO']; _u = _u + ['OFrP_Puma_CE_Pirate']; _u = _u + ['OFrP_Caracal']; _u = _u + ['OFrP_Tiger_HAP_CE']; _u = _u + ['OFrP_Tiger_HAD_CE']; _u = _u + ['OFrP_Mirage_C']; _u = _u + ['OFrP_Mirage_5']; _u = _u + ['OFrP_Mirage_D_GBU12']; _u = _u + ['OFrP_Mirage_D_AS30L']; _u = _u + ['OFrP_Rafale_C1']; _u = _u + ['OFrP_Rafale_B1']; _u = _u + ['OFrP_Rafale_B1T']; _u = _u + ['OFrP_Transall_A']; missionNamespace setVariable [Format ["WFBE_%1AIRCRAFTUNITS", _side], _u]; if (local player) then {['AIRCRAFT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ["MMT_Civ"]; _u = _u + ["TT650_Civ"]; _u = _u + ["Tractor"]; _u = _u + ["Lada2"]; _u = _u + ["LadaLM"]; _u = _u + ["SkodaRed"]; _u = _u + ["VWGolf"]; _u = _u + ["datsun1_civil_2_covered"]; _u = _u + ["hilux1_civil_2_covered"]; _u = _u + ["UralCivil"]; if ((missionNamespace getVariable "WFBE_C_UNITS_TOWN_PURCHASE") > 0) then { _u = _u + ['OFrP_Soldier_Inf']; }; missionNamespace setVariable [Format ["WFBE_%1DEPOTUNITS", _side], _u]; if (local player) then {['DEPOT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'};Private ['_restriction_air','_side','_tiMode','_u']; _side = _this; _restriction_air = missionNamespace getVariable "WFBE_C_UNITS_RESTRICT_AIR"; _tiMode = missionNamespace getVariable "WFBE_C_GAMEPLAY_THERMAL_IMAGING"; _tiMode = if (_tiMode == 1 || _tiMode == 3) then {true} else {false}; _u = ['TK_Soldier_EP1']; _u = _u + ['TK_Soldier_B_EP1']; if (_tiMode) then { _u = _u + ['TK_Soldier_TWS_EP1']; }; _u = _u + ['TK_Soldier_Engineer_EP1']; _u = _u + ['TK_Soldier_LAT_EP1']; _u = _u + ['TK_Soldier_AAT_EP1']; _u = _u + ['TK_Soldier_AT_EP1']; _u = _u + ['TK_Soldier_HAT_EP1']; _u = _u + ['TK_Soldier_AA_EP1']; _u = _u + ['TK_Soldier_AR_EP1']; _u = _u + ['TK_Soldier_AMG_EP1']; _u = _u + ['TK_Soldier_MG_EP1']; _u = _u + ['TK_Soldier_GL_EP1']; _u = _u + ['TK_Soldier_Spotter_EP1']; _u = _u + ['TK_Soldier_Sniper_EP1']; _u = _u + ['TK_Soldier_SniperH_EP1']; _u = _u + ['TK_Soldier_Medic_EP1']; _u = _u + ['TK_Special_Forces_EP1']; _u = _u + ['TK_Special_Forces_TL_EP1']; _u = _u + ['TK_Special_Forces_MG_EP1']; _u = _u + ['TK_Soldier_Crew_EP1']; _u = _u + ['TK_Soldier_Pilot_EP1']; _u = _u + ['TK_Soldier_SL_EP1']; _u = _u + ['TK_Soldier_Officer_EP1']; missionNamespace setVariable [Format ["WFBE_%1BARRACKSUNITS", _side], _u]; if (local player) then {['BARRACKS', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['TT650_TK_EP1']; _u = _u + ['UAZ_Unarmed_TK_EP1']; _u = _u + ['SUV_TK_EP1']; _u = _u + ['UAZ_MG_TK_EP1']; _u = _u + ['UAZ_AGS30_TK_EP1']; _u = _u + ['LandRover_MG_TK_EP1']; _u = _u + ['LandRover_SPG9_TK_EP1']; _u = _u + ['V3S_TK_EP1']; _u = _u + ['V3S_Open_TK_EP1']; _u = _u + ['UralRepair_TK_EP1']; _u = _u + ['UralReammo_TK_EP1']; _u = _u + ['UralRefuel_TK_EP1']; _u = _u + ['UralSalvage_TK_EP1']; if ((missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM") == 0) then {_u = _u + ['UralSupply_TK_EP1']}; _u = _u + ['M113Ambul_TK_EP1']; _u = _u + ['BRDM2_TK_EP1']; _u = _u + ['BRDM2_ATGM_TK_EP1']; _u = _u + ['BTR60_TK_EP1']; _u = _u + ['Ural_ZU23_TK_EP1']; _u = _u + ['GRAD_TK_EP1']; missionNamespace setVariable [Format ["WFBE_%1LIGHTUNITS", _side], _u]; if (local player) then {['LIGHT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['M113_TK_EP1']; _u = _u + ['BMP2_TK_EP1']; _u = _u + ['ZSU_TK_EP1']; _u = _u + ['T34_TK_EP1']; _u = _u + ['T55_TK_EP1']; _u = _u + ['T72_TK_EP1']; missionNamespace setVariable [Format ["WFBE_%1HEAVYUNITS", _side], _u]; if (local player) then {['HEAVY', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['Mi17_TK_EP1']; _u = _u + ['UH1H_TK_EP1']; if (_restriction_air == 0 ||_restriction_air == 1) then { _u = _u + ['Mi24_D_TK_EP1']; }; if (_restriction_air == 0) then { _u = _u + ['An2_TK_EP1']; _u = _u + ['L39_TK_EP1']; _u = _u + ['Su25_TK_EP1']; }; missionNamespace setVariable [Format ["WFBE_%1AIRCRAFTUNITS", _side], _u]; if (local player) then {['AIRCRAFT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = []; if (_restriction_air == 0) then { _u = _u + ['An2_TK_EP1']; _u = _u + ['L39_TK_EP1']; _u = _u + ['Su25_TK_EP1']; }; missionNamespace setVariable [Format ["WFBE_%1AIRPORTUNITS", _side], _u]; if (local player) then {['AIRPORT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ["Old_bike_TK_CIV_EP1"]; _u = _u + ["TT650_TK_CIV_EP1"]; _u = _u + ["Lada2_TK_CIV_EP1"]; _u = _u + ["VolhaLimo_TK_CIV_EP1"]; _u = _u + ["Volha_2_TK_CIV_EP1"]; _u = _u + ["Ural_TK_CIV_EP1"]; _u = _u + ["S1203_TK_CIV_EP1"]; if ((missionNamespace getVariable "WFBE_C_UNITS_TOWN_PURCHASE") > 0) then { _u = _u + [missionNamespace getVariable "WFBE_EASTSOLDIER"]; }; missionNamespace setVariable [Format ["WFBE_%1DEPOTUNITS", _side], _u]; if (local player) then {['DEPOT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'};Private ['_restriction_air','_side','_u']; _side = _this; _restriction_air = missionNamespace getVariable "WFBE_C_UNITS_RESTRICT_AIR"; _u = ['TK_GUE_Soldier_EP1']; _u = _u + ['TK_GUE_Soldier_2_EP1']; _u = _u + ['TK_GUE_Soldier_3_EP1']; _u = _u + ['TK_GUE_Soldier_4_EP1']; _u = _u + ['TK_GUE_Soldier_5_EP1']; _u = _u + ['TK_GUE_Soldier_AT_EP1']; _u = _u + ['TK_GUE_Soldier_AAT_EP1']; _u = _u + ['TK_GUE_Soldier_AA_EP1']; _u = _u + ['TK_GUE_Soldier_AR_EP1']; _u = _u + ['TK_GUE_Soldier_MG_EP1']; _u = _u + ['TK_GUE_Soldier_Sniper_EP1']; _u = _u + ['TK_GUE_Bonesetter_EP1']; _u = _u + ['TK_GUE_Soldier_HAT_EP1']; _u = _u + ['TK_GUE_Soldier_TL_EP1']; _u = _u + ['TK_GUE_Warlord_EP1']; if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_PMC") > 0) then { _u = _u + ['Soldier_AA_PMC']; _u = _u + ['Soldier_AT_PMC']; _u = _u + ['Soldier_Bodyguard_AA12_PMC']; _u = _u + ['Soldier_Bodyguard_M4_PMC']; _u = _u + ['Soldier_Crew_PMC']; _u = _u + ['Soldier_Engineer_PMC']; _u = _u + ['Soldier_GL_M16A2_PMC']; _u = _u + ['Soldier_GL_PMC']; _u = _u + ['Soldier_M4A3_PMC']; _u = _u + ['Soldier_Medic_PMC']; _u = _u + ['Soldier_MG_PKM_PMC']; _u = _u + ['Soldier_MG_PMC']; _u = _u + ['Soldier_Pilot_PMC']; _u = _u + ['Soldier_PMC']; _u = _u + ['Soldier_Sniper_KSVK_PMC']; _u = _u + ['Soldier_Sniper_PMC']; _u = _u + ['Soldier_TL_PMC']; }; missionNamespace setVariable [Format ["WFBE_%1BARRACKSUNITS", _side], _u]; if (local player) then {['BARRACKS', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['V3S_TK_GUE_EP1']; _u = _u + ['Pickup_PK_TK_GUE_EP1']; _u = _u + ['Offroad_DSHKM_TK_GUE_EP1']; _u = _u + ['Offroad_SPG9_TK_GUE_EP1']; _u = _u + ['V3S_Repair_TK_GUE_EP1']; _u = _u + ['V3S_Salvage_TK_GUE_EP1']; _u = _u + ['V3S_Reammo_TK_GUE_EP1']; _u = _u + ['V3S_Refuel_TK_GUE_EP1']; if ((missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM") == 0) then {_u = _u + ['V3S_Supply_TK_GUE_EP1']}; _u = _u + ['BRDM2_TK_GUE_EP1']; _u = _u + ['BTR40_TK_GUE_EP1']; _u = _u + ['BTR40_MG_TK_GUE_EP1']; _u = _u + ['Ural_ZU23_TK_GUE_EP1']; if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_PMC") > 0) then { _u = _u + ['SUV_PMC']; _u = _u + ['ArmoredSUV_PMC']; }; missionNamespace setVariable [Format ["WFBE_%1LIGHTUNITS", _side], _u]; if (local player) then {['LIGHT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['T34_TK_GUE_EP1']; _u = _u + ['T55_TK_GUE_EP1']; missionNamespace setVariable [Format ["WFBE_%1HEAVYUNITS", _side], _u]; if (local player) then {['HEAVY', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['UH1H_TK_GUE_EP1']; if (_restriction_air == 0 ||_restriction_air == 1) then { if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_PMC") > 0) then { _u = _u + ['Ka60_PMC']; _u = _u + ['Ka60_GL_PMC']; }; }; if (_restriction_air == 0) then { _u = _u + ['An2_1_TK_CIV_EP1']; _u = _u + ['An2_2_TK_CIV_EP1']; }; missionNamespace setVariable [Format ["WFBE_%1AIRCRAFTUNITS", _side], _u]; if (local player) then {['AIRCRAFT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = []; if (_restriction_air == 0) then { _u = _u + ['An2_1_TK_CIV_EP1']; _u = _u + ['An2_2_TK_CIV_EP1']; }; missionNamespace setVariable [Format ["WFBE_%1AIRPORTUNITS", _side], _u]; if (local player) then {['AIRPORT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ["Old_bike_TK_CIV_EP1"]; _u = _u + ["TT650_TK_CIV_EP1"]; _u = _u + ["Lada2_TK_CIV_EP1"]; _u = _u + ["VolhaLimo_TK_CIV_EP1"]; _u = _u + ["Volha_2_TK_CIV_EP1"]; _u = _u + ["Ural_TK_CIV_EP1"]; _u = _u + ["S1203_TK_CIV_EP1"]; if ((missionNamespace getVariable "WFBE_C_UNITS_TOWN_PURCHASE") > 0) then { _u = _u + [missionNamespace getVariable "WFBE_GUERSOLDIER"]; }; missionNamespace setVariable [Format ["WFBE_%1DEPOTUNITS", _side], _u]; if (local player) then {['DEPOT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'};Private ['_restriction_air','_side','_u']; _side = _this; _restriction_air = missionNamespace getVariable "WFBE_C_UNITS_RESTRICT_AIR"; _u = ['US_Soldier_Light_EP1']; _u = _u + ['US_Soldier_EP1']; _u = _u + ['US_Soldier_B_EP1']; _u = _u + ['US_Soldier_LAT_EP1']; _u = _u + ['US_Soldier_AT_EP1']; _u = _u + ['US_Soldier_HAT_EP1']; _u = _u + ['US_Soldier_AA_EP1']; _u = _u + ['US_Soldier_AR_EP1']; _u = _u + ['US_Soldier_MG_EP1']; _u = _u + ['US_Soldier_GL_EP1']; _u = _u + ['US_Soldier_Sniper_EP1']; _u = _u + ['US_Soldier_SniperH_EP1']; _u = _u + ['US_Soldier_Sniper_NV_EP1']; _u = _u + ['US_Soldier_Marksman_EP1']; _u = _u + ['US_Soldier_Medic_EP1']; _u = _u + ['US_Soldier_Engineer_EP1']; _u = _u + ['US_Soldier_AMG_EP1']; _u = _u + ['US_Soldier_AAR_EP1']; _u = _u + ['US_Soldier_AHAT_EP1']; _u = _u + ['US_Soldier_AAT_EP1']; _u = _u + ['US_Soldier_Spotter_EP1']; _u = _u + ['US_Soldier_TL_EP1']; _u = _u + ['US_Soldier_SL_EP1']; _u = _u + ['US_Soldier_Officer_EP1']; _u = _u + ['US_Soldier_Crew_EP1']; _u = _u + ['US_Soldier_Pilot_EP1']; _u = _u + ['US_Delta_Force_EP1']; _u = _u + ['US_Delta_Force_TL_EP1']; _u = _u + ['US_Delta_Force_Medic_EP1']; _u = _u + ['US_Delta_Force_Assault_EP1']; _u = _u + ['US_Delta_Force_SD_EP1']; _u = _u + ['US_Delta_Force_MG_EP1']; _u = _u + ['US_Delta_Force_AR_EP1']; _u = _u + ['US_Delta_Force_Night_EP1']; _u = _u + ['US_Delta_Force_Marksman_EP1']; _u = _u + ['US_Delta_Force_M14_EP1']; _u = _u + ['US_Delta_Force_Air_Controller_EP1']; if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_BAF") > 0) then { //--- BAF MTP Camo. _u = _u + ['BAF_Soldier_AA_MTP']; _u = _u + ['BAF_Soldier_AAA_MTP']; _u = _u + ['BAF_Soldier_AAT_MTP']; _u = _u + ['BAF_Soldier_AHAT_MTP']; _u = _u + ['BAF_Soldier_AAR_MTP']; _u = _u + ['BAF_Soldier_AMG_MTP']; _u = _u + ['BAF_Soldier_AT_MTP']; _u = _u + ['BAF_Soldier_HAT_MTP']; _u = _u + ['BAF_Soldier_AR_MTP']; _u = _u + ['BAF_crewman_MTP']; _u = _u + ['BAF_Soldier_EN_MTP']; _u = _u + ['BAF_Soldier_GL_MTP']; _u = _u + ['BAF_Soldier_FAC_MTP']; _u = _u + ['BAF_Soldier_MG_MTP']; _u = _u + ['BAF_Soldier_scout_MTP']; _u = _u + ['BAF_Soldier_Marksman_MTP']; _u = _u + ['BAF_Soldier_Medic_MTP']; _u = _u + ['BAF_Soldier_Officer_MTP']; _u = _u + ['BAF_Pilot_MTP']; _u = _u + ['BAF_Soldier_MTP']; _u = _u + ['BAF_ASoldier_MTP']; _u = _u + ['BAF_Soldier_L_MTP']; _u = _u + ['BAF_Soldier_N_MTP']; _u = _u + ['BAF_Soldier_SL_MTP']; _u = _u + ['BAF_Soldier_SniperN_MTP']; _u = _u + ['BAF_Soldier_SniperH_MTP']; _u = _u + ['BAF_Soldier_Sniper_MTP']; _u = _u + ['BAF_Soldier_spotter_MTP']; _u = _u + ['BAF_Soldier_spotterN_MTP']; _u = _u + ['BAF_Soldier_TL_MTP']; //--- BAF Woodland Camo _u = _u + ['BAF_Soldier_AA_W']; _u = _u + ['BAF_Soldier_AAA_W']; _u = _u + ['BAF_Soldier_AAT_W']; _u = _u + ['BAF_Soldier_AHAT_W']; _u = _u + ['BAF_Soldier_AAR_W']; _u = _u + ['BAF_Soldier_AMG_W']; _u = _u + ['BAF_Soldier_AT_W']; _u = _u + ['BAF_Soldier_HAT_W']; _u = _u + ['BAF_Soldier_AR_W']; _u = _u + ['BAF_crewman_W']; _u = _u + ['BAF_Soldier_EN_W']; _u = _u + ['BAF_Soldier_GL_W']; _u = _u + ['BAF_Soldier_FAC_W']; _u = _u + ['BAF_Soldier_MG_W']; _u = _u + ['BAF_Soldier_scout_W']; _u = _u + ['BAF_Soldier_Marksman_W']; _u = _u + ['BAF_Soldier_Medic_W']; _u = _u + ['BAF_Soldier_Officer_W']; _u = _u + ['BAF_Pilot_W']; _u = _u + ['BAF_Soldier_W']; _u = _u + ['BAF_ASoldier_W']; _u = _u + ['BAF_Soldier_L_W']; _u = _u + ['BAF_Soldier_N_W']; _u = _u + ['BAF_Soldier_SL_W']; _u = _u + ['BAF_Soldier_SniperN_W']; _u = _u + ['BAF_Soldier_SniperH_W']; _u = _u + ['BAF_Soldier_Sniper_W']; _u = _u + ['BAF_Soldier_spotter_W']; _u = _u + ['BAF_Soldier_spotterN_W']; _u = _u + ['BAF_Soldier_TL_W']; //--- BAF Desert Camo _u = _u + ['BAF_Soldier_AA_DDPM']; _u = _u + ['BAF_Soldier_AAA_DDPM']; _u = _u + ['BAF_Soldier_AAT_DDPM']; _u = _u + ['BAF_Soldier_AHAT_DDPM']; _u = _u + ['BAF_Soldier_AAR_DDPM']; _u = _u + ['BAF_Soldier_AMG_DDPM']; _u = _u + ['BAF_Soldier_AT_DDPM']; _u = _u + ['BAF_Soldier_HAT_DDPM']; _u = _u + ['BAF_Soldier_AR_DDPM']; _u = _u + ['BAF_crewman_DDPM']; _u = _u + ['BAF_Soldier_EN_DDPM']; _u = _u + ['BAF_Soldier_GL_DDPM']; _u = _u + ['BAF_Soldier_FAC_DDPM']; _u = _u + ['BAF_Soldier_MG_DDPM']; _u = _u + ['BAF_Soldier_scout_DDPM']; _u = _u + ['BAF_Soldier_Marksman_DDPM']; _u = _u + ['BAF_Soldier_Medic_DDPM']; _u = _u + ['BAF_Soldier_Officer_DDPM']; _u = _u + ['BAF_Pilot_DDPM']; _u = _u + ['BAF_Soldier_DDPM']; _u = _u + ['BAF_ASoldier_DDPM']; _u = _u + ['BAF_Soldier_L_DDPM']; _u = _u + ['BAF_Soldier_N_DDPM']; _u = _u + ['BAF_Soldier_SL_DDPM']; _u = _u + ['BAF_Soldier_TL_DDPM']; }; missionNamespace setVariable [Format ["WFBE_%1BARRACKSUNITS", _side], _u]; if (local player) then {['BARRACKS', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['M1030_US_DES_EP1']; _u = _u + ['ATV_US_EP1']; _u = _u + ['HMMWV_DES_EP1']; _u = _u + ['HMMWV_M1035_DES_EP1']; _u = _u + ['HMMWV_Terminal_EP1']; _u = _u + ['HMMWV_MK19_DES_EP1']; _u = _u + ['HMMWV_M998A2_SOV_DES_EP1']; _u = _u + ['HMMWV_M1151_M2_DES_EP1']; _u = _u + ['HMMWV_M998_crows_M2_DES_EP1']; _u = _u + ['HMMWV_M998_crows_MK19_DES_EP1']; _u = _u + ['HMMWV_TOW_DES_EP1']; _u = _u + ['HMMWV_Avenger_DES_EP1']; _u = _u + ['HMMWV_Ambulance_DES_EP1']; _u = _u + ['MTVR_DES_EP1']; _u = _u + ['MtvrRepair_DES_EP1']; _u = _u + ['MtvrReammo_DES_EP1']; _u = _u + ['MtvrRefuel_DES_EP1']; _u = _u + ['MtvrSalvage_DES_EP1']; _u = _u + ['M1126_ICV_M2_EP1']; _u = _u + ['M1126_ICV_mk19_EP1']; _u = _u + ['M1129_MC_EP1']; _u = _u + ['M1135_ATGMV_EP1']; _u = _u + ['M1128_MGS_EP1']; _u = _u + ['M1133_MEV_EP1']; if ((missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM") == 0) then {_u = _u + ['MtvrSupply_DES_EP1']}; if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_BAF") > 0) then { _u = _u + ['BAF_ATV_W']; _u = _u + ['BAF_Offroad_W']; _u = _u + ['BAF_Jackal2_GMG_W']; _u = _u + ['BAF_Jackal2_L2A1_W']; _u = _u + ['BAF_ATV_D']; _u = _u + ['BAF_Offroad_D']; _u = _u + ['BAF_Jackal2_GMG_D']; _u = _u + ['BAF_Jackal2_L2A1_D']; }; missionNamespace setVariable [Format ["WFBE_%1LIGHTUNITS", _side], _u]; if (local player) then {['LIGHT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['M2A2_EP1']; _u = _u + ['M2A3_EP1']; _u = _u + ['M1A1_US_DES_EP1']; _u = _u + ['MLRS_DES_EP1']; _u = _u + ['M1A2_US_TUSK_MG_EP1']; _u = _u + ['M6_EP1']; if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_BAF") > 0) then { _u = _u + ['BAF_FV510_W']; _u = _u + ['BAF_FV510_D']; }; missionNamespace setVariable [Format ["WFBE_%1HEAVYUNITS", _side], _u]; if (local player) then {['HEAVY', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['MH6J_EP1']; _u = _u + ['UH60M_EP1']; _u = _u + ['UH60M_MEV_EP1']; _u = _u + ['CH_47F_EP1']; if (_restriction_air == 0 || _restriction_air == 1) then { _u = _u + ['AH6J_EP1']; _u = _u + ['AH64D_EP1']; }; if (_restriction_air == 0) then { _u = _u + ['C130J_US_EP1']; _u = _u + ['A10_US_EP1']; }; if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_BAF") > 0) then { _u = _u + ['BAF_Merlin_HC3_D']; _u = _u + ['CH_47F_BAF']; if (_restriction_air == 0 || _restriction_air == 1) then { _u = _u + ['AW159_Lynx_BAF']; _u = _u + ['BAF_Apache_AH1_D']; }; }; missionNamespace setVariable [Format ["WFBE_%1AIRCRAFTUNITS", _side], _u]; if (local player) then {['AIRCRAFT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = []; if (_restriction_air == 0) then { _u = _u + ['C130J_US_EP1']; _u = _u + ['A10_US_EP1']; }; missionNamespace setVariable [Format ["WFBE_%1AIRPORTUNITS", _side], _u]; if (local player) then {['AIRPORT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ["Old_bike_TK_CIV_EP1"]; _u = _u + ["Old_moto_TK_Civ_EP1"]; _u = _u + ["Lada1_TK_CIV_EP1"]; _u = _u + ["Volha_1_TK_CIV_EP1"]; _u = _u + ["LandRover_TK_CIV_EP1"]; _u = _u + ["V3S_Open_TK_CIV_EP1"]; _u = _u + ["Ikarus_TK_CIV_EP1"]; if ((missionNamespace getVariable "WFBE_C_UNITS_TOWN_PURCHASE") > 0) then { _u = _u + [missionNamespace getVariable "WFBE_WESTSOLDIER"]; }; missionNamespace setVariable [Format ["WFBE_%1DEPOTUNITS", _side], _u]; if (local player) then {['DEPOT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'};Private ['_restriction_air','_side','_u']; _side = _this; _restriction_air = missionNamespace getVariable "WFBE_C_UNITS_RESTRICT_AIR"; _u = ['RU_Soldier']; _u = _u + ['RU_Soldier2']; _u = _u + ['RU_Soldier_LAT']; _u = _u + ['RU_Soldier_AT']; _u = _u + ['RU_Soldier_HAT']; _u = _u + ['RU_Soldier_AA']; _u = _u + ['RU_Soldier_AR']; _u = _u + ['RU_Soldier_MG']; _u = _u + ['RU_Soldier_GL']; _u = _u + ['RU_Soldier_Marksman']; _u = _u + ['RU_Soldier_Spotter']; _u = _u + ['RU_Soldier_Sniper']; _u = _u + ['RU_Soldier_SniperH']; _u = _u + ['RU_Soldier_Medic']; _u = _u + ['RU_Soldier_TL']; _u = _u + ['RU_Soldier_SL']; _u = _u + ['RU_Soldier_Crew']; _u = _u + ['RU_Soldier_Pilot']; _u = _u + ['RUS_Soldier1']; _u = _u + ['RUS_Soldier2']; _u = _u + ['RUS_Soldier_GL']; _u = _u + ['RUS_Soldier_Marksman']; _u = _u + ['RUS_Soldier3']; _u = _u + ['RUS_Soldier_TL']; _u = _u + ['MVD_Soldier_GL']; _u = _u + ['MVD_Soldier_MG']; _u = _u + ['MVD_Soldier_Marksman']; _u = _u + ['MVD_Soldier_AT']; _u = _u + ['MVD_Soldier_Sniper']; _u = _u + ['MVD_Soldier_TL']; missionNamespace setVariable [Format ["WFBE_%1BARRACKSUNITS", _side], _u]; if (local player) then {['BARRACKS', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['MMT_Civ']; _u = _u + ['TT650_Ins']; _u = _u + ['UAZ_RU']; _u = _u + ['PBX']; _u = _u + ['UAZ_MG_INS']; _u = _u + ['UAZ_AGS30_RU']; _u = _u + ['UAZ_SPG9_INS']; _u = _u + ['Kamaz']; _u = _u + ['KamazRepair']; _u = _u + ['WarfareReammoTruck_RU']; _u = _u + ['KamazRefuel']; _u = _u + ['WarfareSalvageTruck_RU']; if ((missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM") == 0) then {_u = _u + ['WarfareSupplyTruck_RU']}; _u = _u + ['GAZ_Vodnik_MedEvac']; _u = _u + ['BRDM2_INS']; _u = _u + ['BRDM2_ATGM_INS']; _u = _u + ['GAZ_Vodnik']; _u = _u + ['GAZ_Vodnik_HMG']; _u = _u + ['Ural_ZU23_INS']; _u = _u + ['BTR90']; _u = _u + ['GRAD_RU']; missionNamespace setVariable [Format ["WFBE_%1LIGHTUNITS", _side], _u]; if (local player) then {['LIGHT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['BMP2_INS']; _u = _u + ['BMP3']; _u = _u + ['ZSU_INS']; _u = _u + ['T72_RU']; _u = _u + ['T90']; _u = _u + ['2S6M_Tunguska']; missionNamespace setVariable [Format ["WFBE_%1HEAVYUNITS", _side], _u]; if (local player) then {['HEAVY', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['Mi17_Ins']; _u = _u + ['Mi17_medevac_RU']; if (_restriction_air == 0 ||_restriction_air == 1) then { _u = _u + ['Mi17_rockets_RU']; _u = _u + ['Mi24_V']; _u = _u + ['Mi24_P']; if ((missionNamespace getVariable "WFBE_C_UNITS_KAMOV_DISABLED") == 0) then { _u = _u + ['Ka52']; _u = _u + ['Ka52Black']; }; }; if (_restriction_air == 0) then { _u = _u + ['Su34']; _u = _u + ['Su25_Ins']; _u = _u + ['Su39']; }; missionNamespace setVariable [Format ["WFBE_%1AIRCRAFTUNITS", _side], _u]; if (local player) then {['AIRCRAFT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = []; if (_restriction_air == 0) then { _u = _u + ['Su34']; _u = _u + ['Su25_Ins']; _u = _u + ['Su39']; }; missionNamespace setVariable [Format ["WFBE_%1AIRPORTUNITS", _side], _u]; if (local player) then {['AIRPORT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ["MMT_Civ"]; _u = _u + ["TT650_Civ"]; _u = _u + ["Tractor"]; _u = _u + ["Lada2"]; _u = _u + ["LadaLM"]; _u = _u + ["SkodaRed"]; _u = _u + ["VWGolf"]; _u = _u + ["datsun1_civil_2_covered"]; _u = _u + ["hilux1_civil_2_covered"]; _u = _u + ["UralCivil"]; if ((missionNamespace getVariable "WFBE_C_UNITS_TOWN_PURCHASE") > 0) then { _u = _u + [missionNamespace getVariable "WFBE_EASTSOLDIER"]; }; missionNamespace setVariable [Format ["WFBE_%1DEPOTUNITS", _side], _u]; if (local player) then {['DEPOT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'};Private ['_restriction_air','_side','_u']; _side = _this; _restriction_air = missionNamespace getVariable "WFBE_C_UNITS_RESTRICT_AIR"; _u = ['USMC_Soldier']; _u = _u + ['USMC_Soldier2']; _u = _u + ['USMC_Soldier_LAT']; _u = _u + ['USMC_Soldier_AT']; _u = _u + ['USMC_Soldier_HAT']; _u = _u + ['USMC_Soldier_AA']; _u = _u + ['USMC_Soldier_AR']; _u = _u + ['USMC_Soldier_MG']; _u = _u + ['USMC_Soldier_GL']; _u = _u + ['USMC_SoldierS_Sniper']; _u = _u + ['USMC_SoldierS_SniperH']; _u = _u + ['USMC_SoldierM_Marksman']; _u = _u + ['USMC_Soldier_Medic']; _u = _u + ['USMC_SoldierS_Engineer']; _u = _u + ['USMC_SoldierS']; _u = _u + ['USMC_SoldierS_Spotter']; _u = _u + ['USMC_Soldier_TL']; _u = _u + ['USMC_Soldier_SL']; _u = _u + ['USMC_Soldier_Crew']; _u = _u + ['USMC_Soldier_Pilot']; _u = _u + ['FR_GL']; _u = _u + ['FR_Corpsman']; _u = _u + ['FR_Assault_R']; _u = _u + ['FR_Assault_GL']; _u = _u + ['FR_AR']; _u = _u + ['FR_TL']; _u = _u + ['FR_R']; _u = _u + ['FR_Sapper']; _u = _u + ['FR_AC']; _u = _u + ['FR_Marksman']; missionNamespace setVariable [Format ["WFBE_%1BARRACKSUNITS", _side], _u]; if (local player) then {['BARRACKS', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['MMT_USMC']; _u = _u + ['M1030']; _u = _u + ['HMMWV']; _u = _u + ['Zodiac']; _u = _u + ['HMMWV_M2']; _u = _u + ['HMMWV_Armored']; _u = _u + ['HMMWV_MK19']; _u = _u + ['HMMWV_TOW']; _u = _u + ['HMMWV_Avenger']; _u = _u + ['HMMWV_Ambulance']; _u = _u + ['MTVR']; _u = _u + ['MtvrRepair']; _u = _u + ['WarfareReammoTruck_USMC']; _u = _u + ['MtvrRefuel']; _u = _u + ['WarfareSalvageTruck_USMC']; if ((missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM") == 0) then {_u = _u + ['WarfareSupplyTruck_USMC']}; _u = _u + ['RHIB']; _u = _u + ['RHIB2Turret']; _u = _u + ['LAV25']; missionNamespace setVariable [Format ["WFBE_%1LIGHTUNITS", _side], _u]; if (local player) then {['LIGHT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['AAV']; _u = _u + ['M1A1']; _u = _u + ['MLRS']; _u = _u + ['M1A2_TUSK_MG']; missionNamespace setVariable [Format ["WFBE_%1HEAVYUNITS", _side], _u]; if (local player) then {['HEAVY', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ['MH60S']; if (_restriction_air == 0 ||_restriction_air == 1) then { _u = _u + ['UH1Y']; _u = _u + ['AH1Z']; _u = _u + ['AH64D']; }; if (_restriction_air == 0) then { _u = _u + ['MV22']; _u = _u + ['C130J']; _u = _u + ['F35B']; _u = _u + ['AV8B']; _u = _u + ['AV8B2']; _u = _u + ['A10']; }; missionNamespace setVariable [Format ["WFBE_%1AIRCRAFTUNITS", _side], _u]; if (local player) then {['AIRCRAFT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = []; if (_restriction_air == 0) then { _u = _u + ['MV22']; _u = _u + ['C130J']; _u = _u + ['F35B']; _u = _u + ['AV8B']; _u = _u + ['AV8B2']; _u = _u + ['A10']; }; missionNamespace setVariable [Format ["WFBE_%1AIRPORTUNITS", _side], _u]; if (local player) then {['AIRPORT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'}; _u = ["MMT_Civ"]; _u = _u + ["TT650_Civ"]; _u = _u + ["Lada1"]; _u = _u + ["SkodaBlue"]; _u = _u + ["car_sedan"]; _u = _u + ["car_hatchback"]; _u = _u + ["datsun1_civil_1_open"]; _u = _u + ["datsun1_civil_3_open"]; _u = _u + ["hilux1_civil_1_open"]; _u = _u + ["V3S_Civ"]; _u = _u + ["Ikarus"]; if ((missionNamespace getVariable "WFBE_C_UNITS_TOWN_PURCHASE") > 0) then { _u = _u + [missionNamespace getVariable "WFBE_WESTSOLDIER"]; }; missionNamespace setVariable [Format ["WFBE_%1DEPOTUNITS", _side], _u]; if (local player) then {['DEPOT', _side, _u] Call Compile preProcessFile 'Client\Init\Init_Faction.sqf'};//--- Auto Check the ai upgrade path for missing links. Private ["_add","_enabled","_levels","_missing","_orders","_values"]; _side = _this; _enabled = missionNamespace getVariable Format ["WFBE_C_UPGRADES_%1_ENABLED", _side]; _orders = missionNamespace getVariable Format ["WFBE_C_UPGRADES_%1_AI_ORDER", _side]; _levels = missionNamespace getVariable Format ["WFBE_C_UPGRADES_%1_LEVELS", _side]; _values = []; for '_i' from 0 to count(_levels)-1 do { [_values, []] Call WFBE_CO_FNC_ArrayPush; }; { _upgrade = _x select 0; _level = _x select 1; if (_enabled select _upgrade) then { if !(_level in (_values select _upgrade)) then {_values set [_upgrade, (_values select _upgrade) + [_level]]}; }; } forEach _orders; _add = []; for '_i' from 0 to count(_values)-1 do { if (_enabled select _i) then { _found = _values select _i; _level = _levels select _i; for '_j' from 1 to _level do { if !(_j in _found) then { [_add, [_i, _j]] Call WFBE_CO_FNC_ArrayPush; }; }; }; }; if (count _add > 0) then { missionNamespace setVariable [Format ["WFBE_C_UPGRADES_%1_AI_ORDER", _side], _orders + _add]; ["TRIVIAL", Format["Check_Upgrades.sqf: [%1] AI Commander upgrade order has been completed with [%2].", _side, _add]] Call WFBE_CO_FNC_LogContent; };//--- Dynamic Labels. _upgrade_paratroopers_xlabel = { Private ["_label","_levels"]; _levels = (missionNamespace getVariable Format ["WFBE_C_UPGRADES_%1_LEVELS", WFBE_Client_SideJoinedText]) select WFBE_UP_PARATROOPERS; _label = ""; for '_i' from 1 to _levels do { _label = _label + Format[" - Level %1: [%2] Units", _i, count(missionNamespace getVariable Format["WFBE_%1PARACHUTELEVEL%2", WFBE_Client_SideJoinedText, _i])]; if (_i < _levels) then {_label = _label + "
"}; }; _label }; _upgrade_supply_xlabel = { Private ["_label","_levels","_rates"]; _levels = (missionNamespace getVariable Format ["WFBE_C_UPGRADES_%1_LEVELS", WFBE_Client_SideJoinedText]) select WFBE_UP_SUPPLYRATE; _label = ""; _rates = if ((missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM") == 1) then {missionNamespace getVariable "WFBE_C_TOWNS_SUPPLY_LEVELS_TIME"} else {missionNamespace getVariable "WFBE_C_TOWNS_SUPPLY_LEVELS_TRUCK"}; for '_i' from 0 to _levels do { _label = _label + Format[" - Level %1: Increase supply of [%2]", _i, _rates select _i]; if (_i < _levels) then {_label = _label + "
"}; }; _label }; _upgrade_respawn_xlabel = { Private ["_label","_levels"]; _levels = (missionNamespace getVariable Format ["WFBE_C_UPGRADES_%1_LEVELS", WFBE_Client_SideJoinedText]) select WFBE_UP_RESPAWNRANGE; _label = ""; for '_i' from 0 to _levels do { _label = _label + Format[" - Level %1: [%2] Meters", _i, (missionNamespace getVariable "WFBE_C_RESPAWN_RANGES") select _i]; if (_i < _levels) then {_label = _label + "
"}; }; _label }; _upgrade_artillery_xlabel = { Private ["_label","_levels"]; _levels = (missionNamespace getVariable Format ["WFBE_C_UPGRADES_%1_LEVELS", WFBE_Client_SideJoinedText]) select WFBE_UP_ARTYTIMEOUT; _label = ""; for '_i' from 0 to _levels do { _label = _label + Format[" - Level %1: [%2] Seconds", _i, (missionNamespace getVariable "WFBE_C_ARTILLERY_INTERVALS") select _i]; if (_i < _levels) then {_label = _label + "
"}; }; _label }; //--- UI Labels missionNamespace setVariable [Format["WFBE_C_UPGRADES_LABELS"], [ localize 'strwfbarracks', localize 'strwflightfactory', localize 'strwfheavyfactory', localize 'strwfaircraftfactory', localize 'STR_WF_TACTICAL_Paratroop', localize 'str_dn_uav', localize 'STR_WF_UPGRADE_Supply', localize 'STR_WF_UPGRADE_RespawnRange', localize 'STR_WF_UPGRADE_Airlift', localize 'STR_WF_UPGRADE_Countermeasures', localize 'STR_WF_UPGRADE_ArtilleryUpgrade', localize 'STR_WF_ICBM', localize 'STR_WF_TACTICAL_FastTravel', localize 'STR_WF_UPGRADE_Gear', localize 'STR_WF_Ammo', 'EASA', localize 'STR_WF_TACTICAL_Paradrop', localize 'STR_WF_UPGRADE_ArtilleryAmmo', localize 'STR_WF_UPGRADE_IRS' ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_DESCRIPTIONS"], [ localize 'STR_WF_UPGRADE_barracks_Desc', localize 'STR_WF_UPGRADE_lightfactory_Desc', localize 'STR_WF_UPGRADE_heavyfactory_Desc', localize 'STR_WF_UPGRADE_aircraftfactory_Desc', Format[localize 'STR_WF_UPGRADE_Paratroop_Desc', Format["%1",[configFile >> 'CfgVehicles' >> (missionNamespace getVariable Format["WFBE_%1PARACARGO", WFBE_Client_SideJoinedText]), "displayName"] Call WFBE_CO_FNC_GetConfigEntry], call _upgrade_paratroopers_xlabel], localize 'STR_WF_UPGRADE_uav_Desc', Format[localize 'STR_WF_UPGRADE_Supply_Desc', call _upgrade_supply_xlabel], Format[localize 'STR_WF_UPGRADE_RespawnRange_Desc', call _upgrade_respawn_xlabel], localize 'STR_WF_UPGRADE_Airlift_Desc', localize 'STR_WF_UPGRADE_Countermeasures_Desc', Format[localize 'STR_WF_UPGRADE_ArtilleryUpgrade_Desc', call _upgrade_artillery_xlabel], localize 'STR_WF_UPGRADE_ICBM_Desc', localize 'STR_WF_UPGRADE_FastTravel_Desc', localize 'STR_WF_UPGRADE_Gear_Desc', localize 'STR_WF_UPGRADE_Ammo_Desc', localize 'STR_WF_UPGRADE_EASA_Desc', localize 'STR_WF_UPGRADE_Paradrop_Desc', localize 'STR_WF_UPGRADE_ArtilleryAmmo_Desc', localize 'STR_WF_UPGRADE_IRS_Desc' ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_IMAGES"], [ "Client\Images\upgrade_infantry.paa", "Client\Images\upgrade_light.paa", "Client\Images\upgrade_heavy.paa", "Client\Images\upgrade_air.paa", "", "", "Client\Images\upgrade_supply.paa", "", "", "", "", "", "", "", "", "", "", "", "" ]];Private ["_side"]; _side = _this; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_ENABLED", _side], [ true, //--- Barracks true, //--- Light true, //--- Heavy true, //--- Air true, //--- Paratroopers if (isNil{missionNamespace getVariable Format["WFBE_%1UAV", _side]}) then {false} else {true}, //--- UAV true, //--- Supply true, //--- Respawn Range true, //--- Airlift if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES") == 1) then {true} else {false}, //--- Custom Flares if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Time if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_ICBM") > 0) then {true} else {false}, //--- ICBM if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_FAST_TRAVEL") > 0) then {true} else {false}, //--- Fast Travel true, //--- Gear true, //--- Build Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_EASA") > 0) then {true} else {false}, //--- EASA true, //--- Supply Paradrop if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_IRSMOKE") > 0) then {true} else {false} //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_COSTS", _side], [ [[300,750],[900,2250],[1800,5500]], //--- Barracks [[800,1600],[1600,4500],[3200,7000]], //--- Light [[2500,5000],[5000,10000],[10000,20000]], //--- Heavy [[5000,10000],[12500,25000],[25000,50000]], //--- Air [[2000,8000],[3000,12000],[4000,24000]], //--- Paratroopers [[2500,5600]], //--- UAV [[2500,12500],[5000,27500],[15000,50000],[30000,100000]], //--- Supply [[500,2000],[1500,4000],[2500,7500]], //--- Respawn Range [[1000,4000]], //--- Airlift [[4500,14000]], //--- Custom Flares [[1200,3500],[1800,4400],[3000,9000]], //--- Artillery Time [[50000,250000]], //--- ICBM [[1500,5000]], //--- Fast Travel [[500,2500],[1500,5000],[2250,10000]], //--- Gear [[750,2250]], //--- Build Ammo [[4500,35000]], //--- EASA [[3000,10000]], //--- Supply Paradrop [[2500,5000],[3500,10000],[4500,15000]], //--- Artillery Ammo [[5000,25000]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LEVELS", _side], [ 3, //--- Barracks 3, //--- Light 3, //--- Heavy 3, //--- Air 3, //--- Paratroopers 1, //--- UAV 4, //--- Supply 3, //--- Respawn Range 1, //--- Airlift 1, //--- Custom Flares 3, //--- Artillery Time 1, //--- ICBM 1, //--- Fast Travel 3, //--- Gear 1, //--- Build Ammo 1, //--- EASA 1, //--- Supply Paradrop 3, //--- Artillery Ammo 1 //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LINKS", _side], [ [[],[WFBE_UP_GEAR,1],[WFBE_UP_GEAR,2]], //--- Barracks [[],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,3]], //--- Light [[],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Heavy [[],[WFBE_UP_HEAVY,2],[WFBE_UP_HEAVY,3]], //--- Air [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_AIR,1],[WFBE_UP_GEAR,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_AIR,2],[WFBE_UP_GEAR,2]], [[WFBE_UP_BARRACKS,3],[WFBE_UP_AIR,3],[WFBE_UP_GEAR,3]] ], //--- Paratroopers [[WFBE_UP_AIR,2]], //--- UAV [[],[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Supply [[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Respawn Range [[WFBE_UP_AIR,1]], //--- Airlift [[WFBE_UP_AIR,2]], //--- Custom Flares [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_LIGHT,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_LIGHT,2]], [[WFBE_UP_BARRACKS,3],[WFBE_UP_LIGHT,3]] ], //--- Artillery Time [[WFBE_UP_AIR,3]], //--- ICBM [ [[WFBE_UP_LIGHT,1],[WFBE_UP_SUPPLYRATE,1]] ], //--- Fast Travel [[WFBE_UP_BARRACKS,1],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,3]], //--- Gear [[WFBE_UP_GEAR,2]], //--- Build Ammo [[WFBE_UP_AIR,3]], //--- EASA [[WFBE_UP_AIRLIFT,1]], //--- Supply Paradrop [ [[WFBE_UP_GEAR,1],[WFBE_UP_HEAVY,1]], [[WFBE_UP_GEAR,2],[WFBE_UP_HEAVY,2]], [[WFBE_UP_GEAR,3],[WFBE_UP_HEAVY,3]] ], //--- Artillery Ammo [[WFBE_UP_HEAVY, 3]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_TIMES", _side], [ [30,60,90], //--- Barracks [40,70,100], //--- Light [50,80,110], //--- Heavy [60,90,120], //--- Air [35,55,75], //--- Paratroopers [60], //--- UAV [60,120,180,240], //--- Supply [30,60,90], //--- Respawn Range [45], //--- Airlift [100], //--- Custom Flares [40,80,120], //--- Artillery Time [300], //--- ICBM [60], //--- Fast Travel [25,50,75], //--- Gear [40], //--- Build Ammo [90], //--- EASA [50], //--- Supply Paradrop [60,120,180], //--- Artillery Ammo [120] //--- IR Smoke ]]; //todo, on commander missing link checkup, skip disabled upgrades. missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_AI_ORDER", _side], [ [WFBE_UP_BARRACKS,1], [WFBE_UP_GEAR,1], [WFBE_UP_LIGHT,1], [WFBE_UP_SUPPLYRATE,1], [WFBE_UP_BARRACKS,2], [WFBE_UP_GEAR,2], [WFBE_UP_LIGHT,2], [WFBE_UP_BARRACKS,3], [WFBE_UP_LIGHT,3], [WFBE_UP_RESPAWNRANGE,1], [WFBE_UP_SUPPLYRATE,2], [WFBE_UP_HEAVY,1], [WFBE_UP_HEAVY,2], [WFBE_UP_ARTYTIMEOUT,1], [WFBE_UP_SUPPLYRATE,3], [WFBE_UP_HEAVY,3], [WFBE_UP_ARTYTIMEOUT,2], [WFBE_UP_GEAR,3], [WFBE_UP_RESPAWNRANGE,2], [WFBE_UP_ARTYTIMEOUT,3], [WFBE_UP_AIR,1], [WFBE_UP_AIRLIFT,1], [WFBE_UP_RESPAWNRANGE,3], [WFBE_UP_AIR,2], [WFBE_UP_FLARESCM,1], [WFBE_UP_PARATROOPERS,1], [WFBE_UP_PARATROOPERS,2], [WFBE_UP_AIR,3], [WFBE_UP_UAV,1], [WFBE_UP_PARATROOPERS,3], [WFBE_UP_EASA,1], [WFBE_UP_SUPPLYPARADROP,1] ]]; //--- Check potential missing definition. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Check_Upgrades.sqf";Private ["_side"]; _side = _this; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_ENABLED", _side], [ true, //--- Barracks true, //--- Light true, //--- Heavy true, //--- Air true, //--- Paratroopers if (isNil{missionNamespace getVariable Format["WFBE_%1UAV", _side]}) then {false} else {true}, //--- UAV true, //--- Supply true, //--- Respawn Range true, //--- Airlift if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES") == 1) then {true} else {false}, //--- Custom Flares if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Time false, //--- ICBM if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_FAST_TRAVEL") > 0) then {true} else {false}, //--- Fast Travel true, //--- Gear true, //--- Build Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_EASA") > 0) then {true} else {false}, //--- EASA true, //--- Supply Paradrop if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_IRSMOKE") > 0) then {true} else {false} //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_COSTS", _side], [ [[300,750],[900,2250]], //--- Barracks [[800,1600],[1200,3500]], //--- Light [[2500,5000]], //--- Heavy [[5000,10000],[12500,25000]], //--- Air [[2000,8000],[3000,12000],[4000,24000]], //--- Paratroopers [[2500,5600]], //--- UAV [[2500,12500],[5000,27500],[15000,50000],[30000,100000]], //--- Supply [[500,2000],[1500,4000],[2500,7500]], //--- Respawn Range [[1000,4000]], //--- Airlift [[4500,14000]], //--- Custom Flares [[1200,3500],[1800,4400],[3000,9000]], //--- Artillery Time [[50000,250000]], //--- ICBM [[1500,5000]], //--- Fast Travel [[500,2500],[1500,5000],[2250,10000]], //--- Gear [[750,2250]], //--- Build Ammo [[4500,35000]], //--- EASA [[3000,10000]], //--- Supply Paradrop [[2500,5000],[3500,10000],[4500,15000]], //--- Artillery Ammo [[5000,25000]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LEVELS", _side], [ 2, //--- Barracks 2, //--- Light 1, //--- Heavy 2, //--- Air 3, //--- Paratroopers 1, //--- UAV 4, //--- Supply 3, //--- Respawn Range 1, //--- Airlift 1, //--- Custom Flares 3, //--- Artillery Time 1, //--- ICBM 1, //--- Fast Travel 3, //--- Gear 1, //--- Build Ammo 1, //--- EASA 1, //--- Supply Paradrop 3, //--- Artillery Ammo 1 //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LINKS", _side], [ [[],[WFBE_UP_GEAR,1]], //--- Barracks [[],[WFBE_UP_BARRACKS,2]], //--- Light [[]], //--- Heavy [[],[WFBE_UP_HEAVY,1]], //--- Air [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_AIR,1],[WFBE_UP_GEAR,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_AIR,2],[WFBE_UP_GEAR,2]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_AIR,2],[WFBE_UP_GEAR,3]] ], //--- Paratroopers [[WFBE_UP_AIR,2]], //--- UAV [[],[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,2]], //--- Supply [[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,2]], //--- Respawn Range [[WFBE_UP_AIR,1]], //--- Airlift [[WFBE_UP_AIR,2]], //--- Custom Flares [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_LIGHT,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_LIGHT,2]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_LIGHT,2]] ], //--- Artillery Time [[WFBE_UP_AIR,2]], //--- ICBM [ [[WFBE_UP_LIGHT,1],[WFBE_UP_SUPPLYRATE,1]] ], //--- Fast Travel [[WFBE_UP_BARRACKS,1],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,2]], //--- Gear [[WFBE_UP_GEAR,2]], //--- Build Ammo [[WFBE_UP_AIR,2]], //--- EASA [[WFBE_UP_AIRLIFT,1]], //--- Supply Paradrop [ [[WFBE_UP_GEAR,1],[WFBE_UP_HEAVY,1]], [[WFBE_UP_GEAR,2],[WFBE_UP_HEAVY,1]], [[WFBE_UP_GEAR,3],[WFBE_UP_HEAVY,1]] ], //--- Artillery Ammo [[WFBE_UP_HEAVY, 1]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_TIMES", _side], [ [30,60], //--- Barracks [40,70], //--- Light [50], //--- Heavy [60,90,120], //--- Air [35,55,75], //--- Paratroopers [60], //--- UAV [60,120,180,240], //--- Supply [30,60,90], //--- Respawn Range [45], //--- Airlift [100], //--- Custom Flares [40,80,120], //--- Artillery Time [300], //--- ICBM [60], //--- Fast Travel [25,50,75], //--- Gear [40], //--- Build Ammo [90], //--- EASA [50], //--- Supply Paradrop [60,120,180], //--- Artillery Ammo [120] //--- IR Smoke ]]; //todo, on commander missing link checkup, skip disabled upgrades. missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_AI_ORDER", _side], [ [WFBE_UP_BARRACKS,1], [WFBE_UP_GEAR,1], [WFBE_UP_LIGHT,1], [WFBE_UP_SUPPLYRATE,1], [WFBE_UP_BARRACKS,2], [WFBE_UP_GEAR,2], [WFBE_UP_LIGHT,2], [WFBE_UP_RESPAWNRANGE,1], [WFBE_UP_SUPPLYRATE,2], [WFBE_UP_HEAVY,1], [WFBE_UP_ARTYTIMEOUT,1], [WFBE_UP_SUPPLYRATE,3], [WFBE_UP_ARTYTIMEOUT,2], [WFBE_UP_GEAR,3], [WFBE_UP_RESPAWNRANGE,2], [WFBE_UP_ARTYTIMEOUT,3], [WFBE_UP_AIR,1], [WFBE_UP_AIRLIFT,1], [WFBE_UP_RESPAWNRANGE,3], [WFBE_UP_AIR,2], [WFBE_UP_FLARESCM,1], [WFBE_UP_PARATROOPERS,1], [WFBE_UP_PARATROOPERS,2], [WFBE_UP_UAV,1], [WFBE_UP_PARATROOPERS,3], [WFBE_UP_EASA,1], [WFBE_UP_SUPPLYPARADROP,1] ]]; //--- Check potential missing definition. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Check_Upgrades.sqf";Private ["_side"]; _side = _this; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_ENABLED", _side], [ true, //--- Barracks true, //--- Light true, //--- Heavy true, //--- Air true, //--- Paratroopers if (isNil{missionNamespace getVariable Format["WFBE_%1UAV", _side]}) then {false} else {true}, //--- UAV true, //--- Supply true, //--- Respawn Range true, //--- Airlift if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES") == 1) then {true} else {false}, //--- Custom Flares if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Time if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_ICBM") > 0) then {true} else {false}, //--- ICBM if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_FAST_TRAVEL") > 0) then {true} else {false}, //--- Fast Travel true, //--- Gear true, //--- Build Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_EASA") > 0) then {true} else {false}, //--- EASA true, //--- Supply Paradrop if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_IRSMOKE") > 0) then {true} else {false} //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_COSTS", _side], [ [[300,750],[700,2250],[1300,4500]], //--- Barracks [[800,1600],[1800,4500],[3500,8000]], //--- Light [[2500,5000],[5000,10000],[11000,20000]], //--- Heavy [[6000,10000],[15000,30000],[25000,50000]], //--- Air [[1500,7000],[2500,10000],[3500,22000]], //--- Paratroopers [[2000,5600]], //--- UAV [[2500,12500],[5000,27500],[15000,50000],[30000,100000]], //--- Supply [[500,2000],[1500,4000],[2500,7500]], //--- Respawn Range [[1000,4000]], //--- Airlift [[4500,14000]], //--- Custom Flares [[1200,3500],[1800,4400],[3500,9000]], //--- Artillery Time [[50000,250000]], //--- ICBM [[1500,5000]], //--- Fast Travel [[500,2500],[1500,5000],[2500,10000]], //--- Gear [[750,2250]], //--- Build Ammo [[4500,35000]], //--- EASA [[2000,10000]], //--- Supply Paradrop [[2500,5000],[3500,10000],[4500,15000]], //--- Artillery Ammo [[5000,25000]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LEVELS", _side], [ 3, //--- Barracks 3, //--- Light 3, //--- Heavy 3, //--- Air 3, //--- Paratroopers 1, //--- UAV 4, //--- Supply 3, //--- Respawn Range 1, //--- Airlift 1, //--- Custom Flares 3, //--- Artillery Time 1, //--- ICBM 1, //--- Fast Travel 3, //--- Gear 1, //--- Build Ammo 1, //--- EASA 1, //--- Supply Paradrop 3, //--- Artillery Ammo 1 //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LINKS", _side], [ [[],[WFBE_UP_GEAR,1],[WFBE_UP_GEAR,2]], //--- Barracks [[],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,3]], //--- Light [[],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Heavy [[],[WFBE_UP_HEAVY,2],[WFBE_UP_HEAVY,3]], //--- Air [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_AIR,1],[WFBE_UP_GEAR,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_AIR,2],[WFBE_UP_GEAR,2]], [[WFBE_UP_BARRACKS,3],[WFBE_UP_AIR,3],[WFBE_UP_GEAR,3]] ], //--- Paratroopers [[WFBE_UP_AIR,2]], //--- UAV [[],[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Supply [[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Respawn Range [[WFBE_UP_AIR,1]], //--- Airlift [[WFBE_UP_AIR,2]], //--- Custom Flares [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_LIGHT,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_LIGHT,2]], [[WFBE_UP_BARRACKS,3],[WFBE_UP_LIGHT,3]] ], //--- Artillery Time [[WFBE_UP_AIR,3]], //--- ICBM [ [[WFBE_UP_LIGHT,1],[WFBE_UP_SUPPLYRATE,1]] ], //--- Fast Travel [[WFBE_UP_BARRACKS,1],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,3]], //--- Gear [[WFBE_UP_GEAR,2]], //--- Build Ammo [[WFBE_UP_AIR,3]], //--- EASA [[WFBE_UP_AIRLIFT,1]], //--- Supply Paradrop [ [[WFBE_UP_GEAR,1],[WFBE_UP_HEAVY,1]], [[WFBE_UP_GEAR,2],[WFBE_UP_HEAVY,2]], [[WFBE_UP_GEAR,3],[WFBE_UP_HEAVY,3]] ], //--- Artillery Ammo [[WFBE_UP_HEAVY, 3]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_TIMES", _side], [ [30,60,90], //--- Barracks [40,70,100], //--- Light [50,80,110], //--- Heavy [60,90,120], //--- Air [35,55,75], //--- Paratroopers [60], //--- UAV [60,120,180,240], //--- Supply [30,60,90], //--- Respawn Range [45], //--- Airlift [100], //--- Custom Flares [40,80,120], //--- Artillery Time [300], //--- ICBM [60], //--- Fast Travel [25,50,75], //--- Gear [40], //--- Build Ammo [90], //--- EASA [50], //--- Supply Paradrop [60,120,180], //--- Artillery Ammo [120] //--- IR Smoke ]]; //todo, on commander missing link checkup, skip disabled upgrades. missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_AI_ORDER", _side], [ [WFBE_UP_BARRACKS,1], [WFBE_UP_GEAR,1], [WFBE_UP_LIGHT,1], [WFBE_UP_SUPPLYRATE,1], [WFBE_UP_BARRACKS,2], [WFBE_UP_GEAR,2], [WFBE_UP_LIGHT,2], [WFBE_UP_BARRACKS,3], [WFBE_UP_LIGHT,3], [WFBE_UP_RESPAWNRANGE,1], [WFBE_UP_SUPPLYRATE,2], [WFBE_UP_HEAVY,1], [WFBE_UP_HEAVY,2], [WFBE_UP_ARTYTIMEOUT,1], [WFBE_UP_SUPPLYRATE,3], [WFBE_UP_HEAVY,3], [WFBE_UP_ARTYTIMEOUT,2], [WFBE_UP_GEAR,3], [WFBE_UP_RESPAWNRANGE,2], [WFBE_UP_ARTYTIMEOUT,3], [WFBE_UP_AIR,1], [WFBE_UP_AIRLIFT,1], [WFBE_UP_RESPAWNRANGE,3], [WFBE_UP_AIR,2], [WFBE_UP_FLARESCM,1], [WFBE_UP_PARATROOPERS,1], [WFBE_UP_PARATROOPERS,2], [WFBE_UP_AIR,3], [WFBE_UP_UAV,1], [WFBE_UP_PARATROOPERS,3], [WFBE_UP_EASA,1], [WFBE_UP_SUPPLYPARADROP,1] ]]; //--- Check potential missing definition. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Check_Upgrades.sqf";Private ["_side"]; _side = _this; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_ENABLED", _side], [ true, //--- Barracks true, //--- Light true, //--- Heavy true, //--- Air true, //--- Paratroopers if (isNil{missionNamespace getVariable Format["WFBE_%1UAV", _side]}) then {false} else {true}, //--- UAV true, //--- Supply true, //--- Respawn Range true, //--- Airlift if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES") == 1) then {true} else {false}, //--- Custom Flares if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Time if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_ICBM") > 0) then {true} else {false}, //--- ICBM if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_FAST_TRAVEL") > 0) then {true} else {false}, //--- Fast Travel true, //--- Gear true, //--- Build Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_EASA") > 0) then {true} else {false}, //--- EASA true, //--- Supply Paradrop if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_IRSMOKE") > 0) then {true} else {false} //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_COSTS", _side], [ [[300,750],[900,2250],[1800,5500]], //--- Barracks [[800,1600],[1400,4500],[2500,7000]], //--- Light [[2250,5000],[4500,10000],[10000,20000]], //--- Heavy [[5000,10000],[12500,25000],[25000,50000]], //--- Air [[2000,8000],[3000,12000],[4000,24000]], //--- Paratroopers [[2500,5600]], //--- UAV [[2500,12500],[5000,27500],[15000,50000],[30000,100000]], //--- Supply [[500,2000],[1500,4000],[2500,7500]], //--- Respawn Range [[1000,4000]], //--- Airlift [[4500,14000]], //--- Custom Flares [[1200,3500],[1800,4400],[3500,9000]], //--- Artillery Time [[50000,250000]], //--- ICBM [[1500,5000]], //--- Fast Travel [[500,2500],[1500,5000],[2500,10000]], //--- Gear [[750,2250]], //--- Build Ammo [[4500,35000]], //--- EASA [[2500,10000]], //--- Supply Paradrop [[2500,5000],[3500,10000],[4500,15000]], //--- Artillery Ammo [[5000,25000]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LEVELS", _side], [ 3, //--- Barracks 3, //--- Light 3, //--- Heavy 3, //--- Air 3, //--- Paratroopers 1, //--- UAV 4, //--- Supply 3, //--- Respawn Range 1, //--- Airlift 1, //--- Custom Flares 3, //--- Artillery Time 1, //--- ICBM 1, //--- Fast Travel 3, //--- Gear 1, //--- Build Ammo 1, //--- EASA 1, //--- Supply Paradrop 3, //--- Artillery Ammo 1 //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LINKS", _side], [ [[],[WFBE_UP_GEAR,1],[WFBE_UP_GEAR,2]], //--- Barracks [[],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,3]], //--- Light [[],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Heavy [[],[WFBE_UP_HEAVY,2],[WFBE_UP_HEAVY,3]], //--- Air [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_AIR,1],[WFBE_UP_GEAR,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_AIR,2],[WFBE_UP_GEAR,2]], [[WFBE_UP_BARRACKS,3],[WFBE_UP_AIR,3],[WFBE_UP_GEAR,3]] ], //--- Paratroopers [[WFBE_UP_AIR,2]], //--- UAV [[],[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Supply [[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Respawn Range [[WFBE_UP_AIR,1]], //--- Airlift [[WFBE_UP_AIR,2]], //--- Custom Flares [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_LIGHT,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_LIGHT,2]], [[WFBE_UP_BARRACKS,3],[WFBE_UP_LIGHT,3]] ], //--- Artillery Time [[WFBE_UP_AIR,3]], //--- ICBM [ [[WFBE_UP_LIGHT,1],[WFBE_UP_SUPPLYRATE,1]] ], //--- Fast Travel [[WFBE_UP_BARRACKS,1],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,3]], //--- Gear [[WFBE_UP_GEAR,2]], //--- Build Ammo [[WFBE_UP_AIR,3]], //--- EASA [[WFBE_UP_AIRLIFT,1]], //--- Supply Paradrop [ [[WFBE_UP_GEAR,1],[WFBE_UP_HEAVY,1]], [[WFBE_UP_GEAR,2],[WFBE_UP_HEAVY,2]], [[WFBE_UP_GEAR,3],[WFBE_UP_HEAVY,3]] ], //--- Artillery Ammo [[WFBE_UP_HEAVY, 3]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_TIMES", _side], [ [30,60,90], //--- Barracks [40,70,100], //--- Light [50,80,110], //--- Heavy [60,90,120], //--- Air [35,55,75], //--- Paratroopers [60], //--- UAV [60,120,180,240], //--- Supply [30,60,90], //--- Respawn Range [45], //--- Airlift [100], //--- Custom Flares [40,80,120], //--- Artillery Time [300], //--- ICBM [60], //--- Fast Travel [25,50,75], //--- Gear [40], //--- Build Ammo [90], //--- EASA [50], //--- Supply Paradrop [60,120,180], //--- Artillery Ammo [120] //--- IR Smoke ]]; //todo, on commander missing link checkup, skip disabled upgrades. missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_AI_ORDER", _side], [ [WFBE_UP_BARRACKS,1], [WFBE_UP_GEAR,1], [WFBE_UP_LIGHT,1], [WFBE_UP_SUPPLYRATE,1], [WFBE_UP_BARRACKS,2], [WFBE_UP_GEAR,2], [WFBE_UP_LIGHT,2], [WFBE_UP_BARRACKS,3], [WFBE_UP_LIGHT,3], [WFBE_UP_RESPAWNRANGE,1], [WFBE_UP_SUPPLYRATE,2], [WFBE_UP_HEAVY,1], [WFBE_UP_HEAVY,2], [WFBE_UP_ARTYTIMEOUT,1], [WFBE_UP_SUPPLYRATE,3], [WFBE_UP_HEAVY,3], [WFBE_UP_ARTYTIMEOUT,2], [WFBE_UP_GEAR,3], [WFBE_UP_RESPAWNRANGE,2], [WFBE_UP_ARTYTIMEOUT,3], [WFBE_UP_AIR,1], [WFBE_UP_AIRLIFT,1], [WFBE_UP_RESPAWNRANGE,3], [WFBE_UP_AIR,2], [WFBE_UP_FLARESCM,1], [WFBE_UP_PARATROOPERS,1], [WFBE_UP_PARATROOPERS,2], [WFBE_UP_AIR,3], [WFBE_UP_UAV,1], [WFBE_UP_PARATROOPERS,3], [WFBE_UP_EASA,1], [WFBE_UP_SUPPLYPARADROP,1] ]]; //--- Check potential missing definition. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Check_Upgrades.sqf";Private ["_side"]; _side = _this; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_ENABLED", _side], [ true, //--- Barracks true, //--- Light true, //--- Heavy false, //--- Air true, //--- Paratroopers if (isNil{missionNamespace getVariable Format["WFBE_%1UAV", _side]}) then {false} else {true}, //--- UAV true, //--- Supply true, //--- Respawn Range true, //--- Airlift if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES") == 1) then {true} else {false}, //--- Custom Flares if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Time false, //--- ICBM if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_FAST_TRAVEL") > 0) then {true} else {false}, //--- Fast Travel true, //--- Gear true, //--- Build Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_EASA") > 0) then {true} else {false}, //--- EASA true, //--- Supply Paradrop if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_IRSMOKE") > 0) then {true} else {false} //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_COSTS", _side], [ [[300,750],[900,2250]], //--- Barracks [[800,1600],[1200,3500]], //--- Light [[2500,5000]], //--- Heavy [[5000,10000]], //--- Air [[2000,8000],[3000,12000],[4000,24000]], //--- Paratroopers [[2500,5600]], //--- UAV [[2500,12500],[5000,27500],[15000,50000],[30000,100000]], //--- Supply [[500,2000],[1500,4000],[2500,7500]], //--- Respawn Range [[1000,4000]], //--- Airlift [[4500,14000]], //--- Custom Flares [[1200,3500],[1800,4400],[3000,9000]], //--- Artillery Time [[50000,250000]], //--- ICBM [[1500,5000]], //--- Fast Travel [[500,2500],[1500,5000],[2250,10000]], //--- Gear [[750,2250]], //--- Build Ammo [[4500,35000]], //--- EASA [[3000,10000]], //--- Supply Paradrop [[2500,5000],[3500,10000],[4500,15000]], //--- Artillery Ammo [[5000,25000]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LEVELS", _side], [ 2, //--- Barracks 2, //--- Light 1, //--- Heavy 1, //--- Air 3, //--- Paratroopers 1, //--- UAV 4, //--- Supply 3, //--- Respawn Range 1, //--- Airlift 1, //--- Custom Flares 3, //--- Artillery Time 1, //--- ICBM 1, //--- Fast Travel 3, //--- Gear 1, //--- Build Ammo 1, //--- EASA 1, //--- Supply Paradrop 3, //--- Artillery Ammo 1 //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LINKS", _side], [ [[],[WFBE_UP_GEAR,1]], //--- Barracks [[],[WFBE_UP_BARRACKS,2]], //--- Light [[]], //--- Heavy [[],[WFBE_UP_HEAVY,1]], //--- Air [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_AIR,1],[WFBE_UP_GEAR,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_AIR,2],[WFBE_UP_GEAR,2]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_AIR,2],[WFBE_UP_GEAR,3]] ], //--- Paratroopers [[WFBE_UP_AIR,2]], //--- UAV [[],[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,2]], //--- Supply [[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,2]], //--- Respawn Range [[WFBE_UP_AIR,1]], //--- Airlift [[WFBE_UP_AIR,2]], //--- Custom Flares [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_LIGHT,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_LIGHT,2]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_LIGHT,2]] ], //--- Artillery Time [[WFBE_UP_AIR,2]], //--- ICBM [ [[WFBE_UP_LIGHT,1],[WFBE_UP_SUPPLYRATE,1]] ], //--- Fast Travel [[WFBE_UP_BARRACKS,1],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,2]], //--- Gear [[WFBE_UP_GEAR,2]], //--- Build Ammo [[]], //--- EASA [[WFBE_UP_AIRLIFT,1]], //--- Supply Paradrop [ [[WFBE_UP_GEAR,1],[WFBE_UP_HEAVY,1]], [[WFBE_UP_GEAR,2],[WFBE_UP_HEAVY,1]], [[WFBE_UP_GEAR,3],[WFBE_UP_HEAVY,1]] ], //--- Artillery Ammo [[WFBE_UP_HEAVY, 1]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_TIMES", _side], [ [30,60], //--- Barracks [40,70], //--- Light [50], //--- Heavy [60,90,120], //--- Air [35,55,75], //--- Paratroopers [60], //--- UAV [60,120,180,240], //--- Supply [30,60,90], //--- Respawn Range [45], //--- Airlift [100], //--- Custom Flares [40,80,120], //--- Artillery Time [300], //--- ICBM [60], //--- Fast Travel [25,50,75], //--- Gear [40], //--- Build Ammo [90], //--- EASA [50], //--- Supply Paradrop [60,120,180], //--- Artillery Ammo [120] //--- IR Smoke ]]; //todo, on commander missing link checkup, skip disabled upgrades. missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_AI_ORDER", _side], [ [WFBE_UP_BARRACKS,1], [WFBE_UP_GEAR,1], [WFBE_UP_LIGHT,1], [WFBE_UP_SUPPLYRATE,1], [WFBE_UP_BARRACKS,2], [WFBE_UP_GEAR,2], [WFBE_UP_LIGHT,2], [WFBE_UP_RESPAWNRANGE,1], [WFBE_UP_SUPPLYRATE,2], [WFBE_UP_HEAVY,1], [WFBE_UP_ARTYTIMEOUT,1], [WFBE_UP_SUPPLYRATE,3], [WFBE_UP_ARTYTIMEOUT,2], [WFBE_UP_GEAR,3], [WFBE_UP_RESPAWNRANGE,2], [WFBE_UP_ARTYTIMEOUT,3], [WFBE_UP_AIRLIFT,1], [WFBE_UP_RESPAWNRANGE,3], [WFBE_UP_PARATROOPERS,1], [WFBE_UP_PARATROOPERS,2], [WFBE_UP_UAV,1], [WFBE_UP_PARATROOPERS,3], [WFBE_UP_EASA,1], [WFBE_UP_SUPPLYPARADROP,1] ]]; //--- Check potential missing definition. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Check_Upgrades.sqf";Private ["_side"]; _side = _this; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_ENABLED", _side], [ true, //--- Barracks true, //--- Light true, //--- Heavy true, //--- Air true, //--- Paratroopers if (isNil{missionNamespace getVariable Format["WFBE_%1UAV", _side]}) then {false} else {true}, //--- UAV true, //--- Supply true, //--- Respawn Range true, //--- Airlift if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES") == 1) then {true} else {false}, //--- Custom Flares if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Time if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_ICBM") > 0) then {true} else {false}, //--- ICBM if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_FAST_TRAVEL") > 0) then {true} else {false}, //--- Fast Travel true, //--- Gear true, //--- Build Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_EASA") > 0) then {true} else {false}, //--- EASA true, //--- Supply Paradrop if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_IRSMOKE") > 0) then {true} else {false} //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_COSTS", _side], [ [[300,750],[900,2250],[1800,5500]], //--- Barracks [[800,1600],[1600,4500],[3200,7000]], //--- Light [[2500,5000],[5000,10000],[10000,20000]], //--- Heavy [[5000,10000],[12500,25000],[25000,50000]], //--- Air [[2000,8000],[3000,12000],[4000,24000]], //--- Paratroopers [[2500,5600]], //--- UAV [[2500,12500],[5000,27500],[15000,50000],[30000,100000]], //--- Supply [[500,2000],[1500,4000],[2500,7500]], //--- Respawn Range [[1000,4000]], //--- Airlift [[4500,14000]], //--- Custom Flares [[1200,3500],[1800,4400],[3000,9000]], //--- Artillery Time [[50000,250000]], //--- ICBM [[1500,5000]], //--- Fast Travel [[500,2500],[1500,5000],[2250,10000]], //--- Gear [[750,2250]], //--- Build Ammo [[4500,35000]], //--- EASA [[3000,10000]], //--- Supply Paradrop [[2500,5000],[3500,10000],[4500,15000]], //--- Artillery Ammo [[5000,25000]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LEVELS", _side], [ 3, //--- Barracks 3, //--- Light 3, //--- Heavy 3, //--- Air 3, //--- Paratroopers 1, //--- UAV 4, //--- Supply 3, //--- Respawn Range 1, //--- Airlift 1, //--- Custom Flares 3, //--- Artillery Time 1, //--- ICBM 1, //--- Fast Travel 3, //--- Gear 1, //--- Build Ammo 1, //--- EASA 1, //--- Supply Paradrop 3, //--- Artillery Ammo 1 //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LINKS", _side], [ [[],[WFBE_UP_GEAR,1],[WFBE_UP_GEAR,2]], //--- Barracks [[],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,3]], //--- Light [[],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Heavy [[],[WFBE_UP_HEAVY,2],[WFBE_UP_HEAVY,3]], //--- Air [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_AIR,1],[WFBE_UP_GEAR,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_AIR,2],[WFBE_UP_GEAR,2]], [[WFBE_UP_BARRACKS,3],[WFBE_UP_AIR,3],[WFBE_UP_GEAR,3]] ], //--- Paratroopers [[WFBE_UP_AIR,2]], //--- UAV [[],[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Supply [[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Respawn Range [[WFBE_UP_AIR,1]], //--- Airlift [[WFBE_UP_AIR,2]], //--- Custom Flares [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_LIGHT,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_LIGHT,2]], [[WFBE_UP_BARRACKS,3],[WFBE_UP_LIGHT,3]] ], //--- Artillery Time [[WFBE_UP_AIR,3]], //--- ICBM [ [[WFBE_UP_LIGHT,1],[WFBE_UP_SUPPLYRATE,1]] ], //--- Fast Travel [[WFBE_UP_BARRACKS,1],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,3]], //--- Gear [[WFBE_UP_GEAR,2]], //--- Build Ammo [[WFBE_UP_AIR,3]], //--- EASA [[WFBE_UP_AIRLIFT,1]], //--- Supply Paradrop [ [[WFBE_UP_GEAR,1],[WFBE_UP_HEAVY,1]], [[WFBE_UP_GEAR,2],[WFBE_UP_HEAVY,2]], [[WFBE_UP_GEAR,3],[WFBE_UP_HEAVY,3]] ], //--- Artillery Ammo [[WFBE_UP_HEAVY, 3]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_TIMES", _side], [ [30,60,90], //--- Barracks [40,70,100], //--- Light [50,80,110], //--- Heavy [60,90,120], //--- Air [35,55,75], //--- Paratroopers [60], //--- UAV [60,120,180,240], //--- Supply [30,60,90], //--- Respawn Range [45], //--- Airlift [100], //--- Custom Flares [40,80,120], //--- Artillery Time [300], //--- ICBM [60], //--- Fast Travel [25,50,75], //--- Gear [40], //--- Build Ammo [90], //--- EASA [50], //--- Supply Paradrop [60,120,180], //--- Artillery Ammo [120] //--- IR Smoke ]]; //todo, on commander missing link checkup, skip disabled upgrades. missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_AI_ORDER", _side], [ [WFBE_UP_BARRACKS,1], [WFBE_UP_GEAR,1], [WFBE_UP_LIGHT,1], [WFBE_UP_SUPPLYRATE,1], [WFBE_UP_BARRACKS,2], [WFBE_UP_GEAR,2], [WFBE_UP_LIGHT,2], [WFBE_UP_BARRACKS,3], [WFBE_UP_LIGHT,3], [WFBE_UP_RESPAWNRANGE,1], [WFBE_UP_SUPPLYRATE,2], [WFBE_UP_HEAVY,1], [WFBE_UP_HEAVY,2], [WFBE_UP_ARTYTIMEOUT,1], [WFBE_UP_SUPPLYRATE,3], [WFBE_UP_HEAVY,3], [WFBE_UP_ARTYTIMEOUT,2], [WFBE_UP_GEAR,3], [WFBE_UP_RESPAWNRANGE,2], [WFBE_UP_ARTYTIMEOUT,3], [WFBE_UP_AIR,1], [WFBE_UP_AIRLIFT,1], [WFBE_UP_RESPAWNRANGE,3], [WFBE_UP_AIR,2], [WFBE_UP_FLARESCM,1], [WFBE_UP_PARATROOPERS,1], [WFBE_UP_PARATROOPERS,2], [WFBE_UP_AIR,3], [WFBE_UP_UAV,1], [WFBE_UP_PARATROOPERS,3], [WFBE_UP_EASA,1], [WFBE_UP_SUPPLYPARADROP,1] ]]; //--- Check potential missing definition. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Check_Upgrades.sqf";Private ["_side"]; _side = _this; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_ENABLED", _side], [ true, //--- Barracks true, //--- Light true, //--- Heavy true, //--- Air true, //--- Paratroopers if (isNil{missionNamespace getVariable Format["WFBE_%1UAV", _side]}) then {false} else {true}, //--- UAV true, //--- Supply true, //--- Respawn Range true, //--- Airlift if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES") == 1) then {true} else {false}, //--- Custom Flares if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Time if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_ICBM") > 0) then {true} else {false}, //--- ICBM if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_FAST_TRAVEL") > 0) then {true} else {false}, //--- Fast Travel true, //--- Gear true, //--- Build Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_EASA") > 0) then {true} else {false}, //--- EASA true, //--- Supply Paradrop if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_IRSMOKE") > 0) then {true} else {false} //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_COSTS", _side], [ [[300,750],[700,2250],[1300,4500]], //--- Barracks [[800,1600],[1800,4500],[3500,8000]], //--- Light [[2500,5000],[5000,10000]], //--- Heavy [[6000,10000],[15000,30000],[25000,50000]], //--- Air [[1500,7000],[2500,10000],[3500,22000]], //--- Paratroopers [[2000,5600]], //--- UAV [[2500,12500],[5000,27500],[15000,50000],[30000,100000]], //--- Supply [[500,2000],[1500,4000],[2500,7500]], //--- Respawn Range [[1000,4000]], //--- Airlift [[4500,14000]], //--- Custom Flares [[1200,3500],[1800,4400],[3500,9000]], //--- Artillery Time [[50000,250000]], //--- ICBM [[1500,5000]], //--- Fast Travel [[500,2500],[1500,5000],[2500,10000]], //--- Gear [[750,2250]], //--- Build Ammo [[4500,35000]], //--- EASA [[2000,10000]], //--- Supply Paradrop [[2500,5000],[3500,10000],[4500,15000]], //--- Artillery Ammo [[5000,25000]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LEVELS", _side], [ 3, //--- Barracks 3, //--- Light 2, //--- Heavy 3, //--- Air 3, //--- Paratroopers 1, //--- UAV 4, //--- Supply 3, //--- Respawn Range 1, //--- Airlift 1, //--- Custom Flares 3, //--- Artillery Time 1, //--- ICBM 1, //--- Fast Travel 3, //--- Gear 1, //--- Build Ammo 1, //--- EASA 1, //--- Supply Paradrop 3, //--- Artillery Ammo 1 //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LINKS", _side], [ [[],[WFBE_UP_GEAR,1],[WFBE_UP_GEAR,2]], //--- Barracks [[],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,3]], //--- Light [[],[WFBE_UP_LIGHT,2]], //--- Heavy [[],[WFBE_UP_HEAVY,2],[WFBE_UP_HEAVY,2]], //--- Air [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_AIR,1],[WFBE_UP_GEAR,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_AIR,2],[WFBE_UP_GEAR,2]], [[WFBE_UP_BARRACKS,3],[WFBE_UP_AIR,3],[WFBE_UP_GEAR,3]] ], //--- Paratroopers [[WFBE_UP_AIR,2]], //--- UAV [[],[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Supply [[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Respawn Range [[WFBE_UP_AIR,1]], //--- Airlift [[WFBE_UP_AIR,2]], //--- Custom Flares [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_LIGHT,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_LIGHT,2]], [[WFBE_UP_BARRACKS,3],[WFBE_UP_LIGHT,3]] ], //--- Artillery Time [[WFBE_UP_AIR,3]], //--- ICBM [ [[WFBE_UP_LIGHT,1],[WFBE_UP_SUPPLYRATE,1]] ], //--- Fast Travel [[WFBE_UP_BARRACKS,1],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,3]], //--- Gear [[WFBE_UP_GEAR,2]], //--- Build Ammo [[WFBE_UP_AIR,3]], //--- EASA [[WFBE_UP_AIRLIFT,1]], //--- Supply Paradrop [ [[WFBE_UP_GEAR,1],[WFBE_UP_HEAVY,1]], [[WFBE_UP_GEAR,2],[WFBE_UP_HEAVY,2]], [[WFBE_UP_GEAR,3],[WFBE_UP_HEAVY,2]] ], //--- Artillery Ammo [[WFBE_UP_HEAVY, 2]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_TIMES", _side], [ [30,60,90], //--- Barracks [40,70,100], //--- Light [50,80], //--- Heavy [60,90,120], //--- Air [35,55,75], //--- Paratroopers [60], //--- UAV [60,120,180,240], //--- Supply [30,60,90], //--- Respawn Range [45], //--- Airlift [100], //--- Custom Flares [40,80,120], //--- Artillery Time [300], //--- ICBM [60], //--- Fast Travel [25,50,75], //--- Gear [40], //--- Build Ammo [90], //--- EASA [50], //--- Supply Paradrop [60,120,180], //--- Artillery Ammo [120] //--- IR Smoke ]]; //todo, on commander missing link checkup, skip disabled upgrades. missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_AI_ORDER", _side], [ [WFBE_UP_BARRACKS,1], [WFBE_UP_GEAR,1], [WFBE_UP_LIGHT,1], [WFBE_UP_SUPPLYRATE,1], [WFBE_UP_BARRACKS,2], [WFBE_UP_GEAR,2], [WFBE_UP_LIGHT,2], [WFBE_UP_BARRACKS,3], [WFBE_UP_LIGHT,3], [WFBE_UP_RESPAWNRANGE,1], [WFBE_UP_SUPPLYRATE,2], [WFBE_UP_HEAVY,1], [WFBE_UP_HEAVY,2], [WFBE_UP_ARTYTIMEOUT,1], [WFBE_UP_SUPPLYRATE,3], [WFBE_UP_ARTYTIMEOUT,2], [WFBE_UP_GEAR,3], [WFBE_UP_RESPAWNRANGE,2], [WFBE_UP_ARTYTIMEOUT,3], [WFBE_UP_AIR,1], [WFBE_UP_AIRLIFT,1], [WFBE_UP_RESPAWNRANGE,3], [WFBE_UP_AIR,2], [WFBE_UP_FLARESCM,1], [WFBE_UP_PARATROOPERS,1], [WFBE_UP_PARATROOPERS,2], [WFBE_UP_AIR,3], [WFBE_UP_UAV,1], [WFBE_UP_PARATROOPERS,3], [WFBE_UP_EASA,1], [WFBE_UP_SUPPLYPARADROP,1] ]]; //--- Check potential missing definition. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Check_Upgrades.sqf";Private ["_side"]; _side = _this; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_ENABLED", _side], [ true, //--- Barracks true, //--- Light true, //--- Heavy true, //--- Air true, //--- Paratroopers if (isNil{missionNamespace getVariable Format["WFBE_%1UAV", _side]}) then {false} else {true}, //--- UAV true, //--- Supply true, //--- Respawn Range true, //--- Airlift if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES") == 1) then {true} else {false}, //--- Custom Flares if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Time false, //--- ICBM if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_FAST_TRAVEL") > 0) then {true} else {false}, //--- Fast Travel true, //--- Gear true, //--- Build Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_EASA") > 0) then {true} else {false}, //--- EASA true, //--- Supply Paradrop if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_IRSMOKE") > 0) then {true} else {false} //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_COSTS", _side], [ [[300,750],[900,2250]], //--- Barracks [[800,1600],[1200,3500]], //--- Light [[2500,5000]], //--- Heavy [[5000,10000],[12500,25000]], //--- Air [[2000,8000],[3000,12000],[4000,24000]], //--- Paratroopers [[2500,5600]], //--- UAV [[2500,12500],[5000,27500],[15000,50000],[30000,100000]], //--- Supply [[500,2000],[1500,4000],[2500,7500]], //--- Respawn Range [[1000,4000]], //--- Airlift [[4500,14000]], //--- Custom Flares [[1200,3500],[1800,4400],[3000,9000]], //--- Artillery Time [[50000,250000]], //--- ICBM [[1500,5000]], //--- Fast Travel [[500,2500],[1500,5000],[2250,10000]], //--- Gear [[750,2250]], //--- Build Ammo [[4500,35000]], //--- EASA [[3000,10000]], //--- Supply Paradrop [[2500,5000],[3500,10000],[4500,15000]], //--- Artillery Ammo [[5000,25000]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LEVELS", _side], [ 2, //--- Barracks 2, //--- Light 1, //--- Heavy 2, //--- Air 3, //--- Paratroopers 1, //--- UAV 4, //--- Supply 3, //--- Respawn Range 1, //--- Airlift 1, //--- Custom Flares 3, //--- Artillery Time 1, //--- ICBM 1, //--- Fast Travel 3, //--- Gear 1, //--- Build Ammo 1, //--- EASA 1, //--- Supply Paradrop 3, //--- Artillery Ammo 1 //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LINKS", _side], [ [[],[WFBE_UP_GEAR,1]], //--- Barracks [[],[WFBE_UP_BARRACKS,2]], //--- Light [[]], //--- Heavy [[],[WFBE_UP_HEAVY,1]], //--- Air [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_AIR,1],[WFBE_UP_GEAR,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_AIR,2],[WFBE_UP_GEAR,2]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_AIR,2],[WFBE_UP_GEAR,3]] ], //--- Paratroopers [[WFBE_UP_AIR,2]], //--- UAV [[],[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,2]], //--- Supply [[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,2]], //--- Respawn Range [[WFBE_UP_AIR,1]], //--- Airlift [[WFBE_UP_AIR,2]], //--- Custom Flares [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_LIGHT,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_LIGHT,2]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_LIGHT,2]] ], //--- Artillery Time [[WFBE_UP_AIR,2]], //--- ICBM [ [[WFBE_UP_LIGHT,1],[WFBE_UP_SUPPLYRATE,1]] ], //--- Fast Travel [[WFBE_UP_BARRACKS,1],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,2]], //--- Gear [[WFBE_UP_GEAR,2]], //--- Build Ammo [[WFBE_UP_AIR,2]], //--- EASA [[WFBE_UP_AIRLIFT,1]], //--- Supply Paradrop [ [[WFBE_UP_GEAR,1],[WFBE_UP_HEAVY,1]], [[WFBE_UP_GEAR,2],[WFBE_UP_HEAVY,1]], [[WFBE_UP_GEAR,3],[WFBE_UP_HEAVY,1]] ], //--- Artillery Ammo [[WFBE_UP_HEAVY, 1]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_TIMES", _side], [ [30,60], //--- Barracks [40,70], //--- Light [50], //--- Heavy [60,90,120], //--- Air [35,55,75], //--- Paratroopers [60], //--- UAV [60,120,180,240], //--- Supply [30,60,90], //--- Respawn Range [45], //--- Airlift [100], //--- Custom Flares [40,80,120], //--- Artillery Time [300], //--- ICBM [60], //--- Fast Travel [25,50,75], //--- Gear [40], //--- Build Ammo [90], //--- EASA [50], //--- Supply Paradrop [60,120,180], //--- Artillery Ammo [120] //--- IR Smoke ]]; //todo, on commander missing link checkup, skip disabled upgrades. missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_AI_ORDER", _side], [ [WFBE_UP_BARRACKS,1], [WFBE_UP_GEAR,1], [WFBE_UP_LIGHT,1], [WFBE_UP_SUPPLYRATE,1], [WFBE_UP_BARRACKS,2], [WFBE_UP_GEAR,2], [WFBE_UP_LIGHT,2], [WFBE_UP_RESPAWNRANGE,1], [WFBE_UP_SUPPLYRATE,2], [WFBE_UP_HEAVY,1], [WFBE_UP_ARTYTIMEOUT,1], [WFBE_UP_SUPPLYRATE,3], [WFBE_UP_ARTYTIMEOUT,2], [WFBE_UP_GEAR,3], [WFBE_UP_RESPAWNRANGE,2], [WFBE_UP_ARTYTIMEOUT,3], [WFBE_UP_AIR,1], [WFBE_UP_AIRLIFT,1], [WFBE_UP_RESPAWNRANGE,3], [WFBE_UP_AIR,2], [WFBE_UP_FLARESCM,1], [WFBE_UP_PARATROOPERS,1], [WFBE_UP_PARATROOPERS,2], [WFBE_UP_UAV,1], [WFBE_UP_PARATROOPERS,3], [WFBE_UP_EASA,1], [WFBE_UP_SUPPLYPARADROP,1] ]]; //--- Check potential missing definition. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Check_Upgrades.sqf";Private ["_side"]; _side = _this; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_ENABLED", _side], [ true, //--- Barracks true, //--- Light true, //--- Heavy true, //--- Air true, //--- Paratroopers if (isNil{missionNamespace getVariable Format["WFBE_%1UAV", _side]}) then {false} else {true}, //--- UAV true, //--- Supply true, //--- Respawn Range true, //--- Airlift if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES") == 1) then {true} else {false}, //--- Custom Flares if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Time if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_ICBM") > 0) then {true} else {false}, //--- ICBM if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_FAST_TRAVEL") > 0) then {true} else {false}, //--- Fast Travel true, //--- Gear true, //--- Build Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_EASA") > 0) then {true} else {false}, //--- EASA true, //--- Supply Paradrop if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_IRSMOKE") > 0) then {true} else {false} //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_COSTS", _side], [ [[300,750],[700,2250],[1300,4500]], //--- Barracks [[800,1600],[1800,4500],[3500,8000]], //--- Light [[2500,5000],[5000,10000],[11000,20000]], //--- Heavy [[6000,10000],[15000,30000],[25000,50000]], //--- Air [[1500,7000],[2500,10000],[3500,22000]], //--- Paratroopers [[2000,5600]], //--- UAV [[2500,12500],[5000,27500],[15000,50000],[30000,100000]], //--- Supply [[500,2000],[1500,4000],[2500,7500]], //--- Respawn Range [[1000,4000]], //--- Airlift [[4500,14000]], //--- Custom Flares [[1200,3500],[1800,4400],[3500,9000]], //--- Artillery Time [[50000,250000]], //--- ICBM [[1500,5000]], //--- Fast Travel [[500,2500],[1500,5000],[2500,10000]], //--- Gear [[750,2250]], //--- Build Ammo [[4500,35000]], //--- EASA [[2000,10000]], //--- Supply Paradrop [[2500,5000],[3500,10000],[4500,15000]], //--- Artillery Ammo [[5000,25000]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LEVELS", _side], [ 3, //--- Barracks 3, //--- Light 3, //--- Heavy 3, //--- Air 3, //--- Paratroopers 1, //--- UAV 4, //--- Supply 3, //--- Respawn Range 1, //--- Airlift 1, //--- Custom Flares 3, //--- Artillery Time 1, //--- ICBM 1, //--- Fast Travel 3, //--- Gear 1, //--- Build Ammo 1, //--- EASA 1, //--- Supply Paradrop 3, //--- Artillery Ammo 1 //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LINKS", _side], [ [[],[WFBE_UP_GEAR,1],[WFBE_UP_GEAR,2]], //--- Barracks [[],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,3]], //--- Light [[],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Heavy [[],[WFBE_UP_HEAVY,2],[WFBE_UP_HEAVY,3]], //--- Air [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_AIR,1],[WFBE_UP_GEAR,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_AIR,2],[WFBE_UP_GEAR,2]], [[WFBE_UP_BARRACKS,3],[WFBE_UP_AIR,3],[WFBE_UP_GEAR,3]] ], //--- Paratroopers [[WFBE_UP_AIR,2]], //--- UAV [[],[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Supply [[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Respawn Range [[WFBE_UP_AIR,1]], //--- Airlift [[WFBE_UP_AIR,2]], //--- Custom Flares [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_LIGHT,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_LIGHT,2]], [[WFBE_UP_BARRACKS,3],[WFBE_UP_LIGHT,3]] ], //--- Artillery Time [[WFBE_UP_AIR,3]], //--- ICBM [ [[WFBE_UP_LIGHT,1],[WFBE_UP_SUPPLYRATE,1]] ], //--- Fast Travel [[WFBE_UP_BARRACKS,1],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,3]], //--- Gear [[WFBE_UP_GEAR,2]], //--- Build Ammo [[WFBE_UP_AIR,3]], //--- EASA [[WFBE_UP_AIRLIFT,1]], //--- Supply Paradrop [ [[WFBE_UP_GEAR,1],[WFBE_UP_HEAVY,1]], [[WFBE_UP_GEAR,2],[WFBE_UP_HEAVY,2]], [[WFBE_UP_GEAR,3],[WFBE_UP_HEAVY,3]] ], //--- Artillery Ammo [[WFBE_UP_HEAVY, 3]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_TIMES", _side], [ [30,60,90], //--- Barracks [40,70,100], //--- Light [50,80,110], //--- Heavy [60,90,120], //--- Air [35,55,75], //--- Paratroopers [60], //--- UAV [60,120,180,240], //--- Supply [30,60,90], //--- Respawn Range [45], //--- Airlift [100], //--- Custom Flares [40,80,120], //--- Artillery Time [300], //--- ICBM [60], //--- Fast Travel [25,50,75], //--- Gear [40], //--- Build Ammo [90], //--- EASA [50], //--- Supply Paradrop [60,120,180], //--- Artillery Ammo [120] //--- IR Smoke ]]; //todo, on commander missing link checkup, skip disabled upgrades. missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_AI_ORDER", _side], [ [WFBE_UP_BARRACKS,1], [WFBE_UP_GEAR,1], [WFBE_UP_LIGHT,1], [WFBE_UP_SUPPLYRATE,1], [WFBE_UP_BARRACKS,2], [WFBE_UP_GEAR,2], [WFBE_UP_LIGHT,2], [WFBE_UP_BARRACKS,3], [WFBE_UP_LIGHT,3], [WFBE_UP_RESPAWNRANGE,1], [WFBE_UP_SUPPLYRATE,2], [WFBE_UP_HEAVY,1], [WFBE_UP_HEAVY,2], [WFBE_UP_ARTYTIMEOUT,1], [WFBE_UP_SUPPLYRATE,3], [WFBE_UP_HEAVY,3], [WFBE_UP_ARTYTIMEOUT,2], [WFBE_UP_GEAR,3], [WFBE_UP_RESPAWNRANGE,2], [WFBE_UP_ARTYTIMEOUT,3], [WFBE_UP_AIR,1], [WFBE_UP_AIRLIFT,1], [WFBE_UP_RESPAWNRANGE,3], [WFBE_UP_AIR,2], [WFBE_UP_FLARESCM,1], [WFBE_UP_PARATROOPERS,1], [WFBE_UP_PARATROOPERS,2], [WFBE_UP_AIR,3], [WFBE_UP_UAV,1], [WFBE_UP_PARATROOPERS,3], [WFBE_UP_EASA,1], [WFBE_UP_SUPPLYPARADROP,1] ]]; //--- Check potential missing definition. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Check_Upgrades.sqf";Private ["_side"]; _side = _this; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_ENABLED", _side], [ true, //--- Barracks true, //--- Light true, //--- Heavy true, //--- Air true, //--- Paratroopers if (isNil{missionNamespace getVariable Format["WFBE_%1UAV", _side]}) then {false} else {true}, //--- UAV true, //--- Supply true, //--- Respawn Range true, //--- Airlift if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES") == 1) then {true} else {false}, //--- Custom Flares if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Time if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_ICBM") > 0) then {true} else {false}, //--- ICBM if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_FAST_TRAVEL") > 0) then {true} else {false}, //--- Fast Travel true, //--- Gear true, //--- Build Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_EASA") > 0) then {true} else {false}, //--- EASA true, //--- Supply Paradrop if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_IRSMOKE") > 0) then {true} else {false} //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_COSTS", _side], [ [[300,750],[700,2250],[1300,4500]], //--- Barracks [[800,1600],[1800,4500],[3500,8000]], //--- Light [[2500,5000],[5000,10000],[11000,20000]], //--- Heavy [[6000,10000],[15000,30000],[25000,50000]], //--- Air [[1500,7000],[2500,10000],[3500,22000]], //--- Paratroopers [[2000,5600]], //--- UAV [[2500,12500],[5000,27500],[15000,50000],[30000,100000]], //--- Supply [[500,2000],[1500,4000],[2500,7500]], //--- Respawn Range [[1000,4000]], //--- Airlift [[4500,14000]], //--- Custom Flares [[1200,3500],[1800,4400],[3500,9000]], //--- Artillery Time [[50000,250000]], //--- ICBM [[1500,5000]], //--- Fast Travel [[500,2500],[1500,5000],[2500,10000]], //--- Gear [[750,2250]], //--- Build Ammo [[4500,35000]], //--- EASA [[2000,10000]], //--- Supply Paradrop [[2500,5000],[3500,10000],[4500,15000]], //--- Artillery Ammo [[5000,25000]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LEVELS", _side], [ 3, //--- Barracks 3, //--- Light 3, //--- Heavy 3, //--- Air 3, //--- Paratroopers 1, //--- UAV 4, //--- Supply 3, //--- Respawn Range 1, //--- Airlift 1, //--- Custom Flares 3, //--- Artillery Time 1, //--- ICBM 1, //--- Fast Travel 3, //--- Gear 1, //--- Build Ammo 1, //--- EASA 1, //--- Supply Paradrop 3, //--- Artillery Ammo 1 //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LINKS", _side], [ [[],[WFBE_UP_GEAR,1],[WFBE_UP_GEAR,2]], //--- Barracks [[],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,3]], //--- Light [[],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Heavy [[],[WFBE_UP_HEAVY,2],[WFBE_UP_HEAVY,3]], //--- Air [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_AIR,1],[WFBE_UP_GEAR,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_AIR,2],[WFBE_UP_GEAR,2]], [[WFBE_UP_BARRACKS,3],[WFBE_UP_AIR,3],[WFBE_UP_GEAR,3]] ], //--- Paratroopers [[WFBE_UP_AIR,2]], //--- UAV [[],[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Supply [[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Respawn Range [[WFBE_UP_AIR,1]], //--- Airlift [[WFBE_UP_AIR,2]], //--- Custom Flares [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_LIGHT,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_LIGHT,2]], [[WFBE_UP_BARRACKS,3],[WFBE_UP_LIGHT,3]] ], //--- Artillery Time [[WFBE_UP_AIR,3]], //--- ICBM [ [[WFBE_UP_LIGHT,1],[WFBE_UP_SUPPLYRATE,1]] ], //--- Fast Travel [[WFBE_UP_BARRACKS,1],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,3]], //--- Gear [[WFBE_UP_GEAR,2]], //--- Build Ammo [[WFBE_UP_AIR,3]], //--- EASA [[WFBE_UP_AIRLIFT,1]], //--- Supply Paradrop [ [[WFBE_UP_GEAR,1],[WFBE_UP_HEAVY,1]], [[WFBE_UP_GEAR,2],[WFBE_UP_HEAVY,2]], [[WFBE_UP_GEAR,3],[WFBE_UP_HEAVY,3]] ], //--- Artillery Ammo [[WFBE_UP_HEAVY, 3]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_TIMES", _side], [ [30,60,90], //--- Barracks [40,70,100], //--- Light [50,80,110], //--- Heavy [60,90,120], //--- Air [35,55,75], //--- Paratroopers [60], //--- UAV [60,120,180,240], //--- Supply [30,60,90], //--- Respawn Range [45], //--- Airlift [100], //--- Custom Flares [40,80,120], //--- Artillery Time [300], //--- ICBM [60], //--- Fast Travel [25,50,75], //--- Gear [40], //--- Build Ammo [90], //--- EASA [50], //--- Supply Paradrop [60,120,180], //--- Artillery Ammo [120] //--- IR Smoke ]]; //todo, on commander missing link checkup, skip disabled upgrades. missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_AI_ORDER", _side], [ [WFBE_UP_BARRACKS,1], [WFBE_UP_GEAR,1], [WFBE_UP_LIGHT,1], [WFBE_UP_SUPPLYRATE,1], [WFBE_UP_BARRACKS,2], [WFBE_UP_GEAR,2], [WFBE_UP_LIGHT,2], [WFBE_UP_BARRACKS,3], [WFBE_UP_LIGHT,3], [WFBE_UP_RESPAWNRANGE,1], [WFBE_UP_SUPPLYRATE,2], [WFBE_UP_HEAVY,1], [WFBE_UP_HEAVY,2], [WFBE_UP_ARTYTIMEOUT,1], [WFBE_UP_SUPPLYRATE,3], [WFBE_UP_HEAVY,3], [WFBE_UP_ARTYTIMEOUT,2], [WFBE_UP_GEAR,3], [WFBE_UP_RESPAWNRANGE,2], [WFBE_UP_ARTYTIMEOUT,3], [WFBE_UP_AIR,1], [WFBE_UP_AIRLIFT,1], [WFBE_UP_RESPAWNRANGE,3], [WFBE_UP_AIR,2], [WFBE_UP_FLARESCM,1], [WFBE_UP_PARATROOPERS,1], [WFBE_UP_PARATROOPERS,2], [WFBE_UP_AIR,3], [WFBE_UP_UAV,1], [WFBE_UP_PARATROOPERS,3], [WFBE_UP_EASA,1], [WFBE_UP_SUPPLYPARADROP,1] ]]; //--- Check potential missing definition. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Check_Upgrades.sqf";Private ["_side"]; _side = _this; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_ENABLED", _side], [ true, //--- Barracks true, //--- Light true, //--- Heavy true, //--- Air true, //--- Paratroopers if (isNil{missionNamespace getVariable Format["WFBE_%1UAV", _side]}) then {false} else {true}, //--- UAV true, //--- Supply true, //--- Respawn Range true, //--- Airlift if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES") == 1) then {true} else {false}, //--- Custom Flares if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Time if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_ICBM") > 0) then {true} else {false}, //--- ICBM if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_FAST_TRAVEL") > 0) then {true} else {false}, //--- Fast Travel true, //--- Gear true, //--- Build Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_EASA") > 0) then {true} else {false}, //--- EASA true, //--- Supply Paradrop if ((missionNamespace getVariable "WFBE_C_ARTILLERY") > 0) then {true} else {false}, //--- Artillery Ammo if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_IRSMOKE") > 0) then {true} else {false} //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_COSTS", _side], [ [[300,750],[700,2250],[1300,4500]], //--- Barracks [[800,1600],[1800,4500],[3500,8000]], //--- Light [[2500,5000],[5000,10000],[11000,20000]], //--- Heavy [[6000,10000],[15000,30000],[25000,50000]], //--- Air [[1500,7000],[2500,10000],[3500,22000]], //--- Paratroopers [[2000,5600]], //--- UAV [[2500,12500],[5000,27500],[15000,50000],[30000,100000]], //--- Supply [[500,2000],[1500,4000],[2500,7500]], //--- Respawn Range [[1000,4000]], //--- Airlift [[4500,14000]], //--- Custom Flares [[1200,3500],[1800,4400],[3500,9000]], //--- Artillery Time [[50000,250000]], //--- ICBM [[1500,5000]], //--- Fast Travel [[500,2500],[1500,5000],[2500,10000]], //--- Gear [[750,2250]], //--- Build Ammo [[4500,35000]], //--- EASA [[2000,10000]], //--- Supply Paradrop [[2500,5000],[3500,10000],[4500,15000]], //--- Artillery Ammo [[5000,25000]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LEVELS", _side], [ 3, //--- Barracks 3, //--- Light 3, //--- Heavy 3, //--- Air 3, //--- Paratroopers 1, //--- UAV 4, //--- Supply 3, //--- Respawn Range 1, //--- Airlift 1, //--- Custom Flares 3, //--- Artillery Time 1, //--- ICBM 1, //--- Fast Travel 3, //--- Gear 1, //--- Build Ammo 1, //--- EASA 1, //--- Supply Paradrop 3, //--- Artillery Ammo 1 //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_LINKS", _side], [ [[],[WFBE_UP_GEAR,1],[WFBE_UP_GEAR,2]], //--- Barracks [[],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,3]], //--- Light [[],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Heavy [[],[WFBE_UP_HEAVY,2],[WFBE_UP_HEAVY,3]], //--- Air [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_AIR,1],[WFBE_UP_GEAR,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_AIR,2],[WFBE_UP_GEAR,2]], [[WFBE_UP_BARRACKS,3],[WFBE_UP_AIR,3],[WFBE_UP_GEAR,3]] ], //--- Paratroopers [[WFBE_UP_AIR,2]], //--- UAV [[],[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Supply [[WFBE_UP_LIGHT,1],[WFBE_UP_LIGHT,2],[WFBE_UP_LIGHT,3]], //--- Respawn Range [[WFBE_UP_AIR,1]], //--- Airlift [[WFBE_UP_AIR,2]], //--- Custom Flares [ [[WFBE_UP_BARRACKS,1],[WFBE_UP_LIGHT,1]], [[WFBE_UP_BARRACKS,2],[WFBE_UP_LIGHT,2]], [[WFBE_UP_BARRACKS,3],[WFBE_UP_LIGHT,3]] ], //--- Artillery Time [[WFBE_UP_AIR,3]], //--- ICBM [ [[WFBE_UP_LIGHT,1],[WFBE_UP_SUPPLYRATE,1]] ], //--- Fast Travel [[WFBE_UP_BARRACKS,1],[WFBE_UP_BARRACKS,2],[WFBE_UP_BARRACKS,3]], //--- Gear [[WFBE_UP_GEAR,2]], //--- Build Ammo [[WFBE_UP_AIR,3]], //--- EASA [[WFBE_UP_AIRLIFT,1]], //--- Supply Paradrop [ [[WFBE_UP_GEAR,1],[WFBE_UP_HEAVY,1]], [[WFBE_UP_GEAR,2],[WFBE_UP_HEAVY,2]], [[WFBE_UP_GEAR,3],[WFBE_UP_HEAVY,3]] ], //--- Artillery Ammo [[WFBE_UP_HEAVY, 3]] //--- IR Smoke ]]; missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_TIMES", _side], [ [30,60,90], //--- Barracks [40,70,100], //--- Light [50,80,110], //--- Heavy [60,90,120], //--- Air [35,55,75], //--- Paratroopers [60], //--- UAV [60,120,180,240], //--- Supply [30,60,90], //--- Respawn Range [45], //--- Airlift [100], //--- Custom Flares [40,80,120], //--- Artillery Time [300], //--- ICBM [60], //--- Fast Travel [25,50,75], //--- Gear [40], //--- Build Ammo [90], //--- EASA [50], //--- Supply Paradrop [60,120,180], //--- Artillery Ammo [120] //--- IR Smoke ]]; //todo, on commander missing link checkup, skip disabled upgrades. missionNamespace setVariable [Format["WFBE_C_UPGRADES_%1_AI_ORDER", _side], [ [WFBE_UP_BARRACKS,1], [WFBE_UP_GEAR,1], [WFBE_UP_LIGHT,1], [WFBE_UP_SUPPLYRATE,1], [WFBE_UP_BARRACKS,2], [WFBE_UP_GEAR,2], [WFBE_UP_LIGHT,2], [WFBE_UP_BARRACKS,3], [WFBE_UP_LIGHT,3], [WFBE_UP_RESPAWNRANGE,1], [WFBE_UP_SUPPLYRATE,2], [WFBE_UP_HEAVY,1], [WFBE_UP_HEAVY,2], [WFBE_UP_ARTYTIMEOUT,1], [WFBE_UP_SUPPLYRATE,3], [WFBE_UP_HEAVY,3], [WFBE_UP_ARTYTIMEOUT,2], [WFBE_UP_GEAR,3], [WFBE_UP_RESPAWNRANGE,2], [WFBE_UP_ARTYTIMEOUT,3], [WFBE_UP_AIR,1], [WFBE_UP_AIRLIFT,1], [WFBE_UP_RESPAWNRANGE,3], [WFBE_UP_AIR,2], [WFBE_UP_FLARESCM,1], [WFBE_UP_PARATROOPERS,1], [WFBE_UP_PARATROOPERS,2], [WFBE_UP_AIR,3], [WFBE_UP_UAV,1], [WFBE_UP_PARATROOPERS,3], [WFBE_UP_EASA,1], [WFBE_UP_SUPPLYPARADROP,1] ]]; //--- Check potential missing definition. (_side) Call Compile preprocessFileLineNumbers "Common\Config\Core_Upgrades\Check_Upgrades.sqf";/* Defenses Definition, define the available defenses. */ Private ["_c","_f","_faction","_k","_n","_o","_side","_t"]; _side = "WEST"; _faction = "CDF"; _c = []; //--- Classname _n = []; //--- Name. '' = auto generated. _o = []; //--- Price. _t = []; //--- Category _k = []; //--- Kind (Used for town defenses) //--- Defenses (Statics) _c = _c + ['CDF_WarfareBMGNest_PK']; _n = _n + ['']; _o = _o + [300]; _t = _t + ["Defense"]; _k = _k + ["MGNest"]; _c = _c + ['SearchLight_CDF']; _n = _n + ['']; _o = _o + [50]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['DSHkM_Mini_TriPod_CDF']; _n = _n + ['']; _o = _o + [150]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['DSHKM_CDF']; _n = _n + ['']; _o = _o + [200]; _t = _t + ["Defense"]; _k = _k + ["MG"]; _c = _c + ['AGS_CDF']; _n = _n + ['']; _o = _o + [600]; _t = _t + ["Defense"]; _k = _k + ["GL"]; _c = _c + ['SPG9_CDF']; _n = _n + ['']; _o = _o + [400]; _t = _t + ["Defense"]; _k = _k + ["AT"]; _c = _c + ['ZU23_CDF']; _n = _n + ['']; _o = _o + [600]; _t = _t + ["Defense"]; _k = _k + ["AA"]; _c = _c + ['2b14_82mm_CDF']; _n = _n + ['']; _o = _o + [1100]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['D30_CDF']; _n = _n + ['']; _o = _o + [1800]; _t = _t + ["Defense"]; _k = _k + ["Artillery"]; //--- Defenses management for towns. if (isServer) then {[_side, _c, _k] Call Compile preprocessFile "Common\Config\Config_Defenses_Towns.sqf"}; //--- Fortitications and rest. // [_faction, _c, _n, _o, _t] Call Compile preprocessFile "Common\Config\Config_Defenses.sqf";/* Defenses Definition, define the available defenses. */ Private ["_c","_f","_faction","_k","_n","_o","_side","_t"]; _side = "GUER"; _faction = "GUE"; _c = []; //--- Classname _n = []; //--- Name. '' = auto generated. _o = []; //--- Price. _t = []; //--- Category _k = []; //--- Kind (Used for town defenses) //--- Defenses (Statics) _c = _c + ['GUE_WarfareBMGNest_PK']; _n = _n + ['']; _o = _o + [300]; _t = _t + ["Defense"]; _k = _k + ["MGNest"]; _c = _c + ['SearchLight_Gue']; _n = _n + ['']; _o = _o + [50]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['DSHKM_Gue']; _n = _n + ['']; _o = _o + [200]; _t = _t + ["Defense"]; _k = _k + ["MG"]; _c = _c + ['SPG9_Gue']; _n = _n + ['']; _o = _o + [400]; _t = _t + ["Defense"]; _k = _k + ["AT"]; _c = _c + ['ZU23_Gue']; _n = _n + ['']; _o = _o + [600]; _t = _t + ["Defense"]; _k = _k + ["AA"]; _c = _c + ['2b14_82mm_GUE']; _n = _n + ['']; _o = _o + [1100]; _t = _t + ["Defense"]; _k = _k + [""]; //--- Defenses management for towns. if (isServer) then {[_side, _c, _k] Call Compile preprocessFile "Common\Config\Config_Defenses_Towns.sqf"}; //--- Fortitications and rest. // [_faction, _c, _n, _o, _t] Call Compile preprocessFile "Common\Config\Config_Defenses.sqf";/* Defenses Definition, define the available defenses. */ Private ["_c","_f","_faction","_k","_n","_o","_side","_t"]; _side = "EAST"; _faction = "INS"; _c = []; //--- Classname _n = []; //--- Name. '' = auto generated. _o = []; //--- Price. _t = []; //--- Category _k = []; //--- Kind (Used for town defenses) //--- Defenses (Statics) _c = _c + ['Ins_WarfareBMGNest_PK']; _n = _n + ['']; _o = _o + [300]; _t = _t + ["Defense"]; _k = _k + ["MGNest"]; _c = _c + ['SearchLight_INS']; _n = _n + ['']; _o = _o + [50]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['DSHkM_Mini_TriPod']; _n = _n + ['']; _o = _o + [150]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['DSHKM_Ins']; _n = _n + ['']; _o = _o + [200]; _t = _t + ["Defense"]; _k = _k + ["MG"]; _c = _c + ['AGS_Ins']; _n = _n + ['']; _o = _o + [600]; _t = _t + ["Defense"]; _k = _k + ["GL"]; _c = _c + ['SPG9_Ins']; _n = _n + ['']; _o = _o + [400]; _t = _t + ["Defense"]; _k = _k + ["AT"]; _c = _c + ['ZU23_Ins']; _n = _n + ['']; _o = _o + [600]; _t = _t + ["Defense"]; _k = _k + ["AA"]; _c = _c + ['2b14_82mm_INS']; _n = _n + ['']; _o = _o + [1100]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['D30_Ins']; _n = _n + ['']; _o = _o + [1800]; _t = _t + ["Defense"]; _k = _k + ["Artillery"]; //--- Defenses management for towns. if (isServer) then {[_side, _c, _k] Call Compile preprocessFile "Common\Config\Config_Defenses_Towns.sqf"}; //--- Fortitications and rest. // [_faction, _c, _n, _o, _t] Call Compile preprocessFile "Common\Config\Config_Defenses.sqf";/* Defenses Definition, define the available defenses. */ Private ["_c","_f","_faction","_k","_n","_o","_side","_t"]; _side = "WEST"; _faction = "US"; _c = []; //--- Classname _n = []; //--- Name. '' = auto generated. _o = []; //--- Price. _t = []; //--- Category _k = []; //--- Kind (Used for town defenses) //--- Defenses (Statics) _c = _c + ['WarfareBMGNest_M240_US_EP1']; _n = _n + ['']; _o = _o + [300]; _t = _t + ["Defense"]; _k = _k + ["MGNest"]; _c = _c + ['SearchLight_US_EP1']; _n = _n + ['']; _o = _o + [50]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['M2HD_mini_TriPod_US_EP1']; _n = _n + ['']; _o = _o + [150]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['M2StaticMG_US_EP1']; _n = _n + ['']; _o = _o + [200]; _t = _t + ["Defense"]; _k = _k + ["MG"]; _c = _c + ['MK19_TriPod_US_EP1']; _n = _n + ['']; _o = _o + [600]; _t = _t + ["Defense"]; _k = _k + ["GL"]; _c = _c + ['OFrP_Milan_Launcher_Static']; _n = _n + ['']; _o = _o + [650]; _t = _t + ["Defense"]; _k = _k + ["AT"]; _c = _c + ['Stinger_Pod_US_EP1']; _n = _n + ['']; _o = _o + [700]; _t = _t + ["Defense"]; _k = _k + ["AA"]; _c = _c + ['M252_US_EP1']; _n = _n + ['']; _o = _o + [1100]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['M119_US_EP1']; _n = _n + ['']; _o = _o + [1800]; _t = _t + ["Defense"]; _k = _k + ["Artillery"]; //--- Defenses management for towns. if (isServer) then {[_side, _c, _k] Call Compile preprocessFile "Common\Config\Config_Defenses_Towns.sqf"}; //--- Fortitications and rest. // [_faction, _c, _n, _o, _t] Call Compile preprocessFile "Common\Config\Config_Defenses.sqf";/* Defenses Definition, define the available defenses. */ Private ["_c","_f","_faction","_k","_n","_o","_side","_t"]; _side = "GUER"; _faction = "PMC"; _c = []; //--- Classname _n = []; //--- Name. '' = auto generated. _o = []; //--- Price. _t = []; //--- Category _k = []; //--- Kind (Used for town defenses) //--- Defenses (Statics) _c = _c + ['WarfareBMGNest_PK_TK_GUE_EP1']; _n = _n + ['']; _o = _o + [300]; _t = _t + ["Defense"]; _k = _k + ["MGNest"]; _c = _c + ['SearchLight_TK_GUE_EP1']; _n = _n + ['']; _o = _o + [50]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['DSHKM_TK_GUE_EP1']; _n = _n + ['']; _o = _o + [200]; _t = _t + ["Defense"]; _k = _k + ["MG"]; _c = _c + ['AGS_TK_GUE_EP1']; _n = _n + ['']; _o = _o + [600]; _t = _t + ["Defense"]; _k = _k + ["GL"]; _c = _c + ['SPG9_TK_GUE_EP1']; _n = _n + ['']; _o = _o + [400]; _t = _t + ["Defense"]; _k = _k + ["AT"]; _c = _c + ['ZU23_TK_GUE_EP1']; _n = _n + ['']; _o = _o + [600]; _t = _t + ["Defense"]; _k = _k + ["AA"]; _c = _c + ['2b14_82mm_TK_GUE_EP1']; _n = _n + ['']; _o = _o + [1100]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['D30_TK_GUE_EP1']; _n = _n + ['']; _o = _o + [1800]; _t = _t + ["Defense"]; _k = _k + ["Artillery"]; //--- Defenses management for towns. if (isServer) then {[_side, _c, _k] Call Compile preprocessFile "Common\Config\Config_Defenses_Towns.sqf"}; //--- Fortitications and rest. // [_faction, _c, _n, _o, _t] Call Compile preprocessFile "Common\Config\Config_Defenses.sqf";/* Defenses Definition, define the available defenses. */ Private ["_c","_f","_faction","_k","_n","_o","_side","_t"]; _side = "EAST"; _faction = "RU"; _c = []; //--- Classname _n = []; //--- Name. '' = auto generated. _o = []; //--- Price. _t = []; //--- Category _k = []; //--- Kind (Used for town defenses) //--- Defenses (Statics) _c = _c + ['RU_WarfareBMGNest_PK']; _n = _n + ['']; _o = _o + [300]; _t = _t + ["Defense"]; _k = _k + ["MGNest"]; _c = _c + ['SearchLight_RUS']; _n = _n + ['']; _o = _o + [50]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['KORD']; _n = _n + ['']; _o = _o + [150]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['KORD_high']; _n = _n + ['']; _o = _o + [200]; _t = _t + ["Defense"]; _k = _k + ["MG"]; _c = _c + ['AGS_RU']; _n = _n + ['']; _o = _o + [600]; _t = _t + ["Defense"]; _k = _k + ["GL"]; _c = _c + ['Metis']; _n = _n + ['']; _o = _o + [650]; _t = _t + ["Defense"]; _k = _k + ["AT"]; _c = _c + ['Igla_AA_pod_East']; _n = _n + ['']; _o = _o + [700]; _t = _t + ["Defense"]; _k = _k + ["AA"]; _c = _c + ['2b14_82mm']; _n = _n + ['']; _o = _o + [1100]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['D30_RU']; _n = _n + ['']; _o = _o + [1800]; _t = _t + ["Defense"]; _k = _k + ["Artillery"]; //--- Defenses management for towns. if (isServer) then {[_side, _c, _k] Call Compile preprocessFile "Common\Config\Config_Defenses_Towns.sqf"}; //--- Fortitications and rest. // [_faction, _c, _n, _o, _t] Call Compile preprocessFile "Common\Config\Config_Defenses.sqf";/* Defenses Definition, define the available defenses. */ Private ["_c","_f","_faction","_k","_n","_o","_side","_t"]; _side = "EAST"; _faction = "TKA"; _c = []; //--- Classname _n = []; //--- Name. '' = auto generated. _o = []; //--- Price. _t = []; //--- Category _k = []; //--- Kind (Used for town defenses) //--- Defenses (Statics) _c = _c + ['WarfareBMGNest_PK_TK_EP1']; _n = _n + ['']; _o = _o + [300]; _t = _t + ["Defense"]; _k = _k + ["MGNest"]; _c = _c + ['SearchLight_TK_EP1']; _n = _n + ['']; _o = _o + [50]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['KORD_TK_EP1']; _n = _n + ['']; _o = _o + [150]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['KORD_high_TK_EP1']; _n = _n + ['']; _o = _o + [200]; _t = _t + ["Defense"]; _k = _k + ["MG"]; _c = _c + ['AGS_TK_EP1']; _n = _n + ['']; _o = _o + [600]; _t = _t + ["Defense"]; _k = _k + ["GL"]; _c = _c + ['SPG9_TK_INS_EP1']; _n = _n + ['']; _o = _o + [400]; _t = _t + ["Defense"]; _k = _k + ["AT"]; _c = _c + ['Metis_TK_EP1']; _n = _n + ['']; _o = _o + [650]; _t = _t + ["Defense"]; _k = _k + ["AT"]; _c = _c + ['ZU23_TK_EP1']; _n = _n + ['']; _o = _o + [600]; _t = _t + ["Defense"]; _k = _k + ["AA"]; _c = _c + ['Igla_AA_pod_TK_EP1']; _n = _n + ['']; _o = _o + [700]; _t = _t + ["Defense"]; _k = _k + ["AA"]; _c = _c + ['2b14_82mm_TK_EP1']; _n = _n + ['']; _o = _o + [1100]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['D30_TK_EP1']; _n = _n + ['']; _o = _o + [1800]; _t = _t + ["Defense"]; _k = _k + ["Artillery"]; //--- Defenses management for towns. if (isServer) then {[_side, _c, _k] Call Compile preprocessFile "Common\Config\Config_Defenses_Towns.sqf"}; //--- Fortitications and rest. // [_faction, _c, _n, _o, _t] Call Compile preprocessFile "Common\Config\Config_Defenses.sqf";/* Defenses Definition, define the available defenses. */ Private ["_c","_f","_faction","_k","_n","_o","_side","_t"]; _side = "GUER"; _faction = "GUE"; _c = []; //--- Classname _n = []; //--- Name. '' = auto generated. _o = []; //--- Price. _t = []; //--- Category _k = []; //--- Kind (Used for town defenses) //--- Defenses (Statics) _c = _c + ['WarfareBMGNest_PK_TK_GUE_EP1']; _n = _n + ['']; _o = _o + [300]; _t = _t + ["Defense"]; _k = _k + ["MGNest"]; _c = _c + ['SearchLight_TK_GUE_EP1']; _n = _n + ['']; _o = _o + [50]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['DSHKM_TK_GUE_EP1']; _n = _n + ['']; _o = _o + [200]; _t = _t + ["Defense"]; _k = _k + ["MG"]; _c = _c + ['AGS_TK_GUE_EP1']; _n = _n + ['']; _o = _o + [600]; _t = _t + ["Defense"]; _k = _k + ["GL"]; _c = _c + ['SPG9_TK_GUE_EP1']; _n = _n + ['']; _o = _o + [400]; _t = _t + ["Defense"]; _k = _k + ["AT"]; _c = _c + ['ZU23_TK_GUE_EP1']; _n = _n + ['']; _o = _o + [600]; _t = _t + ["Defense"]; _k = _k + ["AA"]; _c = _c + ['2b14_82mm_TK_GUE_EP1']; _n = _n + ['']; _o = _o + [1100]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['D30_TK_GUE_EP1']; _n = _n + ['']; _o = _o + [1800]; _t = _t + ["Defense"]; _k = _k + ["Artillery"]; //--- Defenses management for towns. if (isServer) then {[_side, _c, _k] Call Compile preprocessFile "Common\Config\Config_Defenses_Towns.sqf"}; //--- Fortitications and rest. // [_faction, _c, _n, _o, _t] Call Compile preprocessFile "Common\Config\Config_Defenses.sqf";/* Defenses Definition, define the available defenses. */ Private ["_c","_f","_faction","_k","_n","_o","_side","_t"]; _side = "WEST"; _faction = "US"; _c = []; //--- Classname _n = []; //--- Name. '' = auto generated. _o = []; //--- Price. _t = []; //--- Category _k = []; //--- Kind (Used for town defenses) //--- Defenses (Statics) _c = _c + ['WarfareBMGNest_M240_US_EP1']; _n = _n + ['']; _o = _o + [300]; _t = _t + ["Defense"]; _k = _k + ["MGNest"]; _c = _c + ['SearchLight_US_EP1']; _n = _n + ['']; _o = _o + [50]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['M2HD_mini_TriPod_US_EP1']; _n = _n + ['']; _o = _o + [150]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['M2StaticMG_US_EP1']; _n = _n + ['']; _o = _o + [200]; _t = _t + ["Defense"]; _k = _k + ["MG"]; _c = _c + ['MK19_TriPod_US_EP1']; _n = _n + ['']; _o = _o + [600]; _t = _t + ["Defense"]; _k = _k + ["GL"]; _c = _c + ['TOW_TriPod_US_EP1']; _n = _n + ['']; _o = _o + [850]; _t = _t + ["Defense"]; _k = _k + ["AT"]; _c = _c + ['Stinger_Pod_US_EP1']; _n = _n + ['']; _o = _o + [700]; _t = _t + ["Defense"]; _k = _k + ["AA"]; _c = _c + ['M252_US_EP1']; _n = _n + ['']; _o = _o + [1100]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['M119_US_EP1']; _n = _n + ['']; _o = _o + [1800]; _t = _t + ["Defense"]; _k = _k + ["Artillery"]; //--- Defenses management for towns. if (isServer) then {[_side, _c, _k] Call Compile preprocessFile "Common\Config\Config_Defenses_Towns.sqf"}; //--- Fortitications and rest. // [_faction, _c, _n, _o, _t] Call Compile preprocessFile "Common\Config\Config_Defenses.sqf";/* Defenses Definition, define the available defenses. */ Private ["_c","_f","_faction","_k","_n","_o","_side","_t"]; _side = "WEST"; _faction = "USMC"; _c = []; //--- Classname _n = []; //--- Name. '' = auto generated. _o = []; //--- Price. _t = []; //--- Category _k = []; //--- Kind (Used for town defenses) //--- Defenses (Statics) _c = _c + ['USMC_WarfareBMGNest_M240']; _n = _n + ['']; _o = _o + [300]; _t = _t + ["Defense"]; _k = _k + ["MGNest"]; _c = _c + ['SearchLight']; _n = _n + ['']; _o = _o + [50]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['M2HD_mini_TriPod']; _n = _n + ['']; _o = _o + [150]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['M2StaticMG']; _n = _n + ['']; _o = _o + [200]; _t = _t + ["Defense"]; _k = _k + ["MG"]; _c = _c + ['MK19_TriPod']; _n = _n + ['']; _o = _o + [600]; _t = _t + ["Defense"]; _k = _k + ["GL"]; _c = _c + ['TOW_TriPod']; _n = _n + ['']; _o = _o + [850]; _t = _t + ["Defense"]; _k = _k + ["AT"]; _c = _c + ['Stinger_Pod']; _n = _n + ['']; _o = _o + [700]; _t = _t + ["Defense"]; _k = _k + ["AA"]; _c = _c + ['M252']; _n = _n + ['']; _o = _o + [1100]; _t = _t + ["Defense"]; _k = _k + [""]; _c = _c + ['M119']; _n = _n + ['']; _o = _o + [1800]; _t = _t + ["Defense"]; _k = _k + ["Artillery"]; //--- Defenses management for towns. if (isServer) then {[_side, _c, _k] Call Compile preprocessFile "Common\Config\Config_Defenses_Towns.sqf"}; //--- Fortitications and rest. // [_faction, _c, _n, _o, _t] Call Compile preprocessFile "Common\Config\Config_Defenses.sqf";_faction = "RU"; _u = [];//--- Magazine _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level //--- Magazines _u = _u + ["ACE_30Rnd_762x39_AP_AK47"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [7]; _z = _z + [3]; _u = _u + ["ACE_30Rnd_762x39_AP_S_AK47"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [7]; _z = _z + [0]; _u = _u + ["ACE_30Rnd_762x39_S_AK47"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [1]; _u = _u + ["ACE_30Rnd_762x39_SD_AK47"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [6]; _z = _z + [0]; _u = _u + ["ACE_30Rnd_762x39_T_AK47"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["ACE_40Rnd_762x39_AP_AK47"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [9]; _z = _z + [2]; _u = _u + ["ACE_40Rnd_762x39_AP_S_AK47"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [9]; _z = _z + [3]; _u = _u + ["ACE_75Rnd_762x39_SD_AK47"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [12]; _z = _z + [0]; _u = _u + ["ACE_75Rnd_762x39_B_AK47"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [2]; _u = _u + ["ACE_30Rnd_545x39_AP_AK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["ACE_30Rnd_545x39_EP_AK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [6]; _z = _z + [0]; _u = _u + ["ACE_30Rnd_545x39_T_AK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [8]; _z = _z + [1]; _u = _u + ["ACE_10Rnd_9x39_SP6_VSS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["ACE_20Rnd_9x39_SP6_VSS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["ACE_20Rnd_9x39_B_OC14"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [3]; _u = _u + ["ACE_20Rnd_9x39_B_SP6_OC14"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [17]; _z = _z + [2]; _u = _u + ["ACE_20Rnd_9x39_S_OC14"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [2]; _u = _u + ["ACE_20Rnd_9x39_S_SP6_OC14"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [17]; _z = _z + [0]; _u = _u + ["ACE_TBG7V_PGO7"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [125]; _z = _z + [2]; _u = _u + ["ACE_1Rnd_CS_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [17]; _z = _z + [2]; _u = _u + ["ACE_1Rnd_HE_GP25P"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [2]; _u = _u + ["ACE_RPG29_PG29"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [125]; _z = _z + [2]; _u = _u + ["ACE_RPG29_TBG29"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [150]; _z = _z + [2]; [_faction, _u, _p, _n, _o, _z] Call Compile preprocessFile "Common\Config\Config_Magazines.sqf"; _u = [];//--- Weapon _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level _m = [];//--- Magazines (-1 = auto, [x,y,z] = forced magazines) //--- Weapons _u = _u + ["ACE_AK103"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AK103_1P29"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [60]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AK103_GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [75]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["ACE_AK103_GL_1P29"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [85]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["ACE_AK103_GL_Kobra"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [85]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AK103_GL_PSO"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [125]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AK103_Kobra"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [60]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["ACE_AK103_PSO"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [80]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["ACE_AK104"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [60]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AK104_1P29"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [70]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["ACE_AK104_Kobra"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [70]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AK104_PSO"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [90]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["ACE_AK105"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [60]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AK105_1P29"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [70]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["ACE_AK105_Kobra"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [70]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AK105_PSO"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [90]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["ACE_AK74M_FL_F"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["ACE_AK74M_1P78_FL_F"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [60]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["ACE_AK74M_TWS_FL_F"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["ACE_AK74M_GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [75]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["ACE_AK74M_GL_1P78"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [85]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["ACE_AK74M_GL_TWS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [125]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["ACE_AK74M_GL_Kobra"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [85]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["ACE_AK74M_GL_NSPU"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [115]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["ACE_AK74M_GL_PSO"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [105]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["ACE_AK74M_GL_1P29"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [85]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AK74M_Kobra_FL_F"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [60]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["ACE_AK74M_NSPU_FL_F"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [80]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AK74M_PSO_FL_F"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [90]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["ACE_AK74M_SD_F"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [60]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AK74M_SD_1P78_F"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [70]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AK74M_SD_TWS_F"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [120]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AK74M_SD_NSPU_F"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [110]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AK74M_SD_PSO_F"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AKS74_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [75]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AKS74P"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AKS74P_1P29"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [60]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AKS74P_Kobra"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [60]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AKS74P_PSO"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [80]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AKS74P_GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [75]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AKS74P_GL_1P29"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [85]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AKS74P_GL_Kobra"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [85]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_AKS74P_GL_PSO"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [115]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_Val_Kobra"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [80]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_Val_PSO"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [90]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_Val"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_gr1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [60]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_gr1sp"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [70]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_gr1sd"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [80]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_gr1sdsp"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [90]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_oc14"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_oc14gl"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [75]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_oc14glsp"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [85]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_oc14sp"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [60]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_oc14sd"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [70]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_oc14sdsp"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [80]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SVD_Bipod"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [160]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_RPK74M"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [120]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_RPK74M_1P29"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [130]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_RMG"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [120]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_RPG22"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [130]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_RPG27"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [140]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_RPG29"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [130]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_RPG7V_PGO7"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [110]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_RPOM"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_GlassesGasMask_RU"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_Epinephrine"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_Morphine"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_Medkit"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_Bandage"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_GlassesTactical"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SpottingScope"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_GlassesLHD_glasses"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_GlassesBalaklavaOlive"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_Earplugs"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_GlassesLHD_glasses"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; [_faction, _u, _p, _n, _o, _z, _m] Call Compile preprocessFile "Common\Config\Config_Weapons.sqf";_faction = "ACE US"; _u = [];//--- Magazine _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level //--- Magazines _u = _u + ["ACE_5Rnd_127x99_B_TAC50"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [2]; _u = _u + ["ACE_5Rnd_127x99_S_TAC50"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [2]; _u = _u + ["ACE_5Rnd_127x99_T_TAC50"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [2]; _u = _u + ["ACE_5Rnd_25x59_HEDP_Barrett"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [45]; _z = _z + [3]; _u = _u + ["ACE_10Rnd_127x99_T_m107"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [2]; _u = _u + ["ACE_10Rnd_127x99_Raufoss_m107"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [3]; _u = _u + ["ACE_12Rnd_45ACP_USP"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["ACE_12Rnd_45ACP_USPSD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [8]; _z = _z + [1]; _u = _u + ["ACE_15Rnd_9x19_P226"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["ACE_15Rnd_9x19_P8"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["ACE_20Rnd_762x51_B_HK417"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [1]; _u = _u + ["ACE_20Rnd_762x51_T_HK417"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [1]; _u = _u + ["ACE_25Rnd_1143x23_B_UMP45"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["ACE_25Rnd_1143x23_S_UMP45"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [1]; _u = _u + ["ACE_30Rnd_556x45_T_G36"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["ACE_30Rnd_556x45_T_Stanag"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["ACE_40Rnd_B_46x30_MP7"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["ACE_100Rnd_556x45_T_M249"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [1]; _u = _u + ["ACE_200Rnd_556x45_T_M249"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [65]; _z = _z + [1]; _u = _u + ["ACE_HuntIR_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [2]; _u = _u + ["ACE_FlareIR_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [35]; _z = _z + [1]; [_faction, _u, _p, _n, _o, _z] Call Compile preprocessFile "Common\Config\Config_Magazines.sqf"; _u = [];//--- Weapon _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level _m = [];//--- Magazines (-1 = auto, [x,y,z] = forced magazines) //--- Weapons _u = _u + ["ACE_G36A2_Bipod_D"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_G36A1_AG36A1_D"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M60"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M240L"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M240L_M145"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_HK416_D10"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_HK416_D10_AIM"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_HK416_D10_COMPM3"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_HK416_D10_COMPM3_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_HK416_D10_Holo"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_HK416_D10_M320"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_HK416_D10_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_HK416_D14"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_HK416_D14_ACOG_PVS14"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_HK416_D14_COMPM3"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_HK416_D14_COMPM3_M320"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_HK416_D14_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_HK416_D14_TWS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_HK417_Eotech_4x"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_HK417_leupold"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_HK417_micro"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_HK417_Shortdot"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M4"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M4_ACOG"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M4_Aim"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M4_AIM_GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M4_Eotech"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M4_Eotech_GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M4_GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M4_RCO_GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M4A1_ACOG"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M4A1_ACOG_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M4A1_AIM_GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M4A1_AIM_GL_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M4A1_Aim_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M4A1_Eotech"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M4A1_GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M4A1_GL_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SOC_M4A1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SOC_M4A1_Aim"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SOC_M4A1_AIM_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SOC_M4A1_Eotech"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SOC_M4A1_Eotech_4x"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SOC_M4A1_GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SOC_M4A1_GL_13"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SOC_M4A1_GL_AIMPOINT"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SOC_M4A1_GL_EOTECH"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SOC_M4A1_GL_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SOC_M4A1_RCO_GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SOC_M4A1_SD_9"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SOC_M4A1_SHORTDOT"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SOC_M4A1_SHORTDOT_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SOC_M4A1_TWS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SPAS12"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_UMP45"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_UMP45_AIM"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_UMP45_AIM_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_UMP45_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_Mk12mod1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_Mk12mod1_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_MP5A4"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_MP5A5"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_MP5SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_MP7"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_MP7_RSAS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M109"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M110"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_M110_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_TAC50"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_TAC50_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_MG36_D"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_USP"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_USPSD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_P226"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_P8"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_Earplugs"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_GlassesBalaklava"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_GlassesGasMask_US"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_GlassesTactical"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_GlassesLHD_glasses"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_HuntIR_monitor"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_Javelin_CLU"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_SpottingScope"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_Kestrel4500"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_Epinephrine"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_Morphine"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_Medkit"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ACE_Bandage"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; [_faction, _u, _p, _n, _o, _z, _m] Call Compile preprocessFile "Common\Config\Config_Weapons.sqf"; _u = [];//--- Backpack _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level //--- Backpacks & Tripods _u = _u + ["ACE_M224TripodProxy"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _u = _u + ["ACE_M224Proxy"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _u = _u + ["ACE_VTAC_RUSH72_ACU"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _u = _u + ["ACE_BackPack_ACR_TT"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _u = _u + ["ACE_CharliePack_ACU"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _u = _u + ["ACE_CharliePack_ACU_Medic"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _u = _u + ["ACE_M252Proxy"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _u = _u + ["ACE_M252TripodProxy"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; [_faction, _u, _p, _n, _o, _z] Call Compile preprocessFile "Common\Config\Config_Backpack.sqf";_faction = "BAF"; _u = [];//--- Magazine _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level //--- Magazines _u = _u + ["5Rnd_127x99_AS50"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [3]; _u = _u + ["5Rnd_86x70_L115A1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [2]; _u = _u + ["30Rnd_556x45_Stanag"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["30Rnd_556x45_StanagSD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ["200Rnd_556x45_L110A1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [1]; _u = _u + ["NLAW"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [2]; _u = _u + ["BAF_L109A1_HE"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["BAF_ied_v1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["BAF_ied_v2"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [1]; _u = _u + ["BAF_ied_v3"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [40]; _z = _z + [2]; _u = _u + ["BAF_ied_v4"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [2]; [_faction, _u, _p, _n, _o, _z] Call Compile preprocessFile "Common\Config\Config_Magazines.sqf"; _u = [];//--- Weapon _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level _m = [];//--- Magazines (-1 = auto, [x,y,z] = forced magazines) //--- Weapons _u = _u + ["BAF_AS50_scoped"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [380]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["BAF_AS50_TWS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [580]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["BAF_LRR_scoped"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [290]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["BAF_LRR_scoped_W"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [270]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["BAF_L85A2_RIS_Holo"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [200]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["BAF_L85A2_UGL_Holo"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [215]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["BAF_L85A2_RIS_SUSAT"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [230]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["BAF_L85A2_UGL_SUSAT"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [245]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["BAF_L85A2_RIS_ACOG"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["BAF_L85A2_UGL_ACOG"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [260]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["BAF_L85A2_RIS_CWS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [385]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["BAF_L86A2_ACOG"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [270]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["BAF_L110A1_Aim"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [270]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["BAF_L7A2_GPMG"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [240]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["BAF_NLAW_Launcher"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [2]; _m = _m + [-1]; [_faction, _u, _p, _n, _o, _z, _m] Call Compile preprocessFile "Common\Config\Config_Weapons.sqf"; _u = [];//--- Backpack _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level //--- Backpacks & Tripods _u = _u + ["BAF_AssaultPack_ARAmmo"]; _p = _p + ['']; _n = _n + ['+(Ammo AR)']; _o = _o + [70]; _z = _z + [0]; _u = _u + ["BAF_AssaultPack_ATAmmo"]; _p = _p + ['']; _n = _n + ['+(Ammo AT)']; _o = _o + [70]; _z = _z + [0]; _u = _u + ["BAF_AssaultPack_FAC"]; _p = _p + ['']; _n = _n + ['+(Ammo FAC)']; _o = _o + [70]; _z = _z + [0]; _u = _u + ["BAF_AssaultPack_HAAAmmo"]; _p = _p + ['']; _n = _n + ['+(Ammo HAA)']; _o = _o + [70]; _z = _z + [0]; _u = _u + ["BAF_AssaultPack_HATAmmo"]; _p = _p + ['']; _n = _n + ['+(Ammo HAT)']; _o = _o + [70]; _z = _z + [0]; _u = _u + ["BAF_AssaultPack_LRRAmmo"]; _p = _p + ['']; _n = _n + ['+(Ammo LRR)']; _o = _o + [70]; _z = _z + [0]; _u = _u + ["BAF_AssaultPack_MGAmmo"]; _p = _p + ['']; _n = _n + ['+(Ammo MG)']; _o = _o + [70]; _z = _z + [0]; _u = _u + ["BAF_AssaultPack_RifleAmmo"]; _p = _p + ['']; _n = _n + ['+(Ammo)']; _o = _o + [70]; _z = _z + [0]; _u = _u + ["BAF_AssaultPack_special"]; _p = _p + ['']; _n = _n + ['+(Ammo Explosives)']; _o = _o + [70]; _z = _z + [0]; _u = _u + ["Tripod_Bag"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["BAF_L2A1_ACOG_minitripod_bag"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [270]; _z = _z + [1]; _u = _u + ["BAF_L2A1_ACOG_tripod_bag"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [0]; _u = _u + ["BAF_GPMG_Minitripod_D_bag"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [300]; _z = _z + [1]; _u = _u + ["BAF_GMG_ACOG_minitripod_bag"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [300]; _z = _z + [1]; [_faction, _u, _p, _n, _o, _z] Call Compile preprocessFile "Common\Config\Config_Backpack.sqf";_faction = "GUE"; _u = [];//--- Magazine _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level //--- Magazines _u = _u + ["5x_22_LR_17_HMR"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [2]; _z = _z + [0]; _u = _u + ["8Rnd_9x18_Makarov"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [2]; _z = _z + [0]; _u = _u + ["8Rnd_9x18_MakarovSD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [3]; _z = _z + [1]; _u = _u + ["10Rnd_762x54_SVD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["30Rnd_545x39_AK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["30Rnd_545x39_AKSD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [2]; _u = _u + ["30Rnd_762x39_AK47"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["75Rnd_545x39_RPK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["100Rnd_762x54_PK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["OG7"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [2]; _u = _u + ["PG7V"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; _u = _u + ["PG7VR"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [125]; _z = _z + [2]; _u = _u + ["PG7VL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [75]; _z = _z + [1]; _u = _u + ["Strela"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [1]; _u = _u + ["1Rnd_SMOKE_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["1Rnd_SMOKERED_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["1Rnd_SMOKEGREEN_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["1Rnd_SMOKEYELLOW_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; [_faction, _u, _p, _n, _o, _z] Call Compile preprocessFile "Common\Config\Config_Magazines.sqf"; _u = [];//--- Weapon _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level _m = [];//--- Magazines (-1 = auto, [x,y,z] = forced magazines) //--- Weapons _u = _u + ["AK_47_M"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [40]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AK_47_S"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AK_74"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [75]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AK_74_GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [85]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AKS_74_kobra"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [80]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AKS_74_pso"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [95]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["AKS_74_U"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [80]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AKS_74_UN_kobra"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [110]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["AKS_GOLD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["huntingrifle"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["PK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [150]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["RPK_74"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [125]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["SVD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [150]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["RPG7V"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [90]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["Strela"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [225]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["Makarov"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemCompass"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemGPS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemMap"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemRadio"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemWatch"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; [_faction, _u, _p, _n, _o, _z, _m] Call Compile preprocessFile "Common\Config\Config_Weapons.sqf";_faction = "OFrP"; _u = [];//--- Magazine _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level //--- Magazines _u = _u + ['OFrP_25Rnd_556x45']; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ['OFrP_25Rnd_556x45SD']; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ['OFrP_556x45_25cp']; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ['OFrP_556x45SD_25cp']; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ['OFrP_556x45_30cp']; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ['OFrP_556x45SD_30cp']; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _u = _u + ['OFrP_30Rnd_556x45']; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ['OFrP_30Rnd_556x45SD']; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _u = _u + ['30rnd_9x19_MP5']; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ['30rnd_9x19_MP5SD']; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ['OFrP_200Rnd_556x45']; _p = _p + ['']; _n = _n + ['']; _o = _o + [60]; _z = _z + [0]; _u = _u + ['OFrP_127x99_7cp']; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _u = _u + ['OFrP_127x99_7cp_APEI']; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _u = _u + ['OFrP_762x51_10cp']; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ['OFrP_1Rnd_84_ABL']; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _u = _u + ['OFrP_1Rnd_112_APILAS']; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [1]; _u = _u + ['OFrP_1Rnd_136_ERYX']; _p = _p + ['']; _n = _n + ['']; _o = _o + [400]; _z = _z + [3]; _u = _u + ['OFrP_1Rnd_89_LRAC']; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [2]; _u = _u + ['Stinger']; _p = _p + ['']; _n = _n + ['']; _o = _o + [150]; _z = _z + [2]; _u = _u + ['OFrP_Laserbatteries']; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [0]; _u = _u + ['15Rnd_9x19_M9']; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ['15Rnd_9x19_M9SD']; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ['HandGrenade_West']; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ['HandGrenade_Stone']; _p = _p + ['']; _n = _n + ['']; _o = _o + [1]; _z = _z + [0]; _u = _u + ['IR_Strobe_Target']; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _u = _u + ['IR_Strobe_uarker']; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [0]; _u = _u + ['SmokeShell']; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ['SmokeShellRed']; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ['SmokeShellGreen']; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ['SmokeShellBlue']; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ['SmokeShellYellow']; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ['SmokeShellOrange']; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ['SmokeShellPurple']; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ['FlareWhite_M203']; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ['FlareYellow_M203']; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ['FlareGreen_M203']; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ['FlareRed_M203']; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ['1Rnd_HE_M203']; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ['1Rnd_Smoke_M203']; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ['1Rnd_SmokeRed_M203']; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ['1Rnd_SmokeGreen_M203']; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ['1Rnd_SmokeYellow_M203']; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ['Mine']; _p = _p + ['']; _n = _n + ['']; _o = _o + [40]; _z = _z + [0]; _u = _u + ['OFrP_Charge_1000g_uag']; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _u = _u + ['OFrP_Charge_500g_uag']; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; [_faction, _u, _p, _n, _o, _z] Call Compile preprocessFile "Common\Config\Config_Magazines.sqf"; _u = [];//--- Weapon _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level _m = [];//--- Magazines (-1 = auto, [x,y,z] = forced magazines) //--- Weapons _u = _u + ['OFrP_PAMAS']; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_PAMAS_SD']; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1']; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_HG']; _p = _p + ['']; _n = _n + ['']; _o = _o + [115]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_acog']; _p = _p + ['']; _n = _n + ['']; _o = _o + [300]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_acog_hg']; _p = _p + ['']; _n = _n + ['']; _o = _o + [330]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_acog_SD']; _p = _p + ['']; _n = _n + ['']; _o = _o + [320]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_acog_SD_HG']; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_acog_M203']; _p = _p + ['']; _n = _n + ['']; _o = _o + [330]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_aim']; _p = _p + ['']; _n = _n + ['']; _o = _o + [115]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_aim_hg']; _p = _p + ['']; _n = _n + ['']; _o = _o + [130]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_aim_SD']; _p = _p + ['']; _n = _n + ['']; _o = _o + [135]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_aim_SD_HG']; _p = _p + ['']; _n = _n + ['']; _o = _o + [150]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_EOTech']; _p = _p + ['']; _n = _n + ['']; _o = _o + [200]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_EOTech_hg']; _p = _p + ['']; _n = _n + ['']; _o = _o + [225]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_EOTech_SD']; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_EOTech_SD_HG']; _p = _p + ['']; _n = _n + ['']; _o = _o + [275]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_EOTech_M203']; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_J4']; _p = _p + ['']; _n = _n + ['']; _o = _o + [300]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_J4_hg']; _p = _p + ['']; _n = _n + ['']; _o = _o + [330]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_J4_SD']; _p = _p + ['']; _n = _n + ['']; _o = _o + [320]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_J4_SD_HG']; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_F1_J4_M203']; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_G2']; _p = _p + ['']; _n = _n + ['']; _o = _o + [150]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_G2_hg']; _p = _p + ['']; _n = _n + ['']; _o = _o + [175]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_G2_EOTech']; _p = _p + ['']; _n = _n + ['']; _o = _o + [200]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_G2_EOTech_hg']; _p = _p + ['']; _n = _n + ['']; _o = _o + [225]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_G2_EOTech_SD']; _p = _p + ['']; _n = _n + ['']; _o = _o + [175]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_G2_EOTech_SD_HG']; _p = _p + ['']; _n = _n + ['']; _o = _o + [200]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_G2_EOTech_M203']; _p = _p + ['']; _n = _n + ['']; _o = _o + [225]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_FE_Optronic']; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_FE_Optronic_EOTech']; _p = _p + ['']; _n = _n + ['']; _o = _o + [375]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_FE_Optronic_M203']; _p = _p + ['']; _n = _n + ['']; _o = _o + [375]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_FE_Optronic_SD']; _p = _p + ['']; _n = _n + ['']; _o = _o + [375]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_FE_EOTech']; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ['OFrP_FAMAS_FE_EOTech_M203']; _p = _p + ['']; _n = _n + ['']; _o = _o + [275]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ['OFrP_HK_416']; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_HK_416_AIM']; _p = _p + ['']; _n = _n + ['']; _o = _o + [150]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_HK_416_AIM_HG']; _p = _p + ['']; _n = _n + ['']; _o = _o + [175]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_HK_416_AIM_M203']; _p = _p + ['']; _n = _n + ['']; _o = _o + [200]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_HK_416_AIM_SD']; _p = _p + ['']; _n = _n + ['']; _o = _o + [200]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_HK_416_EOTech']; _p = _p + ['']; _n = _n + ['']; _o = _o + [200]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_HK_416_EOTech_HG']; _p = _p + ['']; _n = _n + ['']; _o = _o + [225]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_HK_416_EOTech_M203']; _p = _p + ['']; _n = _n + ['']; _o = _o + [225]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_HK_416_EOTech_SD']; _p = _p + ['']; _n = _n + ['']; _o = _o + [225]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_HK_MP5']; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_HK_MP5_SD']; _p = _p + ['']; _n = _n + ['']; _o = _o + [75]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_Minimi_para']; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_Minimi_para_HG']; _p = _p + ['']; _n = _n + ['']; _o = _o + [275]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_Minimi_para_EOTech']; _p = _p + ['']; _n = _n + ['']; _o = _o + [275]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_Minimi_para_EOTech_HG']; _p = _p + ['']; _n = _n + ['']; _o = _o + [300]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ['OFrP_Minimi_para_Optronic']; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_Minimi_para_Optronic_HG']; _p = _p + ['']; _n = _n + ['']; _o = _o + [375]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_Minimi_para_Optronic_eotech']; _p = _p + ['']; _n = _n + ['']; _o = _o + [375]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_Minimi_para_Optronic_eotech_HG']; _p = _p + ['']; _n = _n + ['']; _o = _o + [400]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_HecateII']; _p = _p + ['']; _n = _n + ['']; _o = _o + [400]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_FRF2_J8']; _p = _p + ['']; _n = _n + ['']; _o = _o + [200]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_FRF2_Optronic']; _p = _p + ['']; _n = _n + ['']; _o = _o + [400]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_ABL']; _p = _p + ['']; _n = _n + ['']; _o = _o + [125]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_APILAS']; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ['OFrP_ERYX']; _p = _p + ['']; _n = _n + ['']; _o = _o + [700]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_LRAC']; _p = _p + ['']; _n = _n + ['']; _o = _o + [500]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ['Stinger']; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ['OFrP_Laserdesignator']; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ['OFrP_NVG']; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_NVG_Head']; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_Binocular_Vector']; _p = _p + ['']; _n = _n + ['']; _o = _o + [35]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ['OFrP_Binocular_JIMMR']; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemCompass"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemGPS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemMap"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemRadio"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemWatch"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; [_faction, _u, _p, _n, _o, _z, _m] Call Compile preprocessFile "Common\Config\Config_Weapons.sqf"; _u = [];//--- Backpack _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level //--- Backpacks & Tripods [_faction, _u, _p, _n, _o, _z] Call Compile preprocessFile "Common\Config\Config_Backpack.sqf";_faction = "PMC"; _u = [];//--- Magazine _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level //--- Magazines _u = _u + ["20Rnd_B_AA12_Pellets"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["20Rnd_B_AA12_74Slug"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [1]; _u = _u + ["20Rnd_B_AA12_HE"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [40]; _z = _z + [3]; _u = _u + ["30Rnd_556x45_G36"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["30Rnd_556x45_G36SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ["30Rnd_556x45_Stanag"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["30Rnd_556x45_StanagSD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ["100Rnd_556x45_BetaCMag"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [0]; [_faction, _u, _p, _n, _o, _z] Call Compile preprocessFile "Common\Config\Config_Magazines.sqf"; _u = [];//--- Weapon _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level _m = [];//--- Magazines (-1 = auto, [x,y,z] = forced magazines) //--- Weapons _u = _u + ["AA12_PMC"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [225]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["m8_carbine"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [220]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["m8_carbineGL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [235]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["m8_compact"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [225]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["m8_SAW"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["m8_sharpshooter"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [270]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["m8_carbine_pmc"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [230]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["m8_compact_pmc"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [235]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["m8_holo_sd"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["m8_tws"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [380]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["m8_tws_sd"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["ItemCompass"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemGPS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemMap"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemRadio"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemWatch"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; [_faction, _u, _p, _n, _o, _z, _m] Call Compile preprocessFile "Common\Config\Config_Weapons.sqf";_faction = "RU"; _u = [];//--- Magazine _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level //--- Magazines _u = _u + ["5Rnd_127x108_KSVK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [12]; _z = _z + [3]; _u = _u + ["8Rnd_9x18_Makarov"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [2]; _z = _z + [0]; _u = _u + ["8Rnd_9x18_MakarovSD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [3]; _z = _z + [1]; _u = _u + ["8Rnd_B_Saiga12_74Slug"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["10Rnd_762x54_SVD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["10Rnd_9x39_SP5_VSS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [8]; _z = _z + [2]; _u = _u + ["20Rnd_9x39_SP5_VSS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [16]; _z = _z + [3]; _u = _u + ["30Rnd_545x39_AK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["30Rnd_545x39_AKSD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [2]; _u = _u + ["30Rnd_762x39_AK47"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["64Rnd_9x19_Bizon"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [6]; _z = _z + [0]; _u = _u + ["64Rnd_9x19_SD_Bizon"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [8]; _z = _z + [1]; _u = _u + ["75Rnd_545x39_RPK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["100Rnd_762x54_PK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["AT13"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [800]; _z = _z + [3]; _u = _u + ["Igla"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [150]; _z = _z + [2]; _u = _u + ["OG7"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [2]; _u = _u + ["PG7V"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; _u = _u + ["PG7VR"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [125]; _z = _z + [2]; _u = _u + ["PG7VL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [75]; _z = _z + [1]; _u = _u + ["RPG18"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [40]; _z = _z + [0]; _u = _u + ["Strela"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [1]; _u = _u + ["HandGrenade_East"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["HandGrenade_Stone"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [1]; _z = _z + [0]; _u = _u + ["SmokeShell"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellRed"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellGreen"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellBlue"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellYellow"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellOrange"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellPurple"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareWhite_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareYellow_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareGreen_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareRed_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["1Rnd_HE_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ["1Rnd_HE_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["1Rnd_SMOKE_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["1Rnd_SMOKERED_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["1Rnd_SMOKEGREEN_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["1Rnd_SMOKEYELLOW_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["MineE"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [40]; _z = _z + [0]; _u = _u + ["PipeBomb"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; [_faction, _u, _p, _n, _o, _z] Call Compile preprocessFile "Common\Config\Config_Magazines.sqf"; _u = [];//--- Weapon _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level _m = [];//--- Magazines (-1 = auto, [x,y,z] = forced magazines) //--- Weapons _u = _u + ["AK_47_M"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [40]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AK_47_S"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AK_74"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [75]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AK_74_GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [85]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AK_107_kobra"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [110]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AK_107_GL_kobra"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [125]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AK_107_pso"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [120]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["AK_107_GL_pso"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [135]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["AKS_74_kobra"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [80]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AKS_74_pso"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [95]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["AKS_74_U"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [80]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AKS_74_UN_kobra"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [110]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["bizon"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [90]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["bizon_silenced"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [120]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["PK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [150]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ksvk"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["Pecheneg"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [200]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["RPK_74"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [125]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["Saiga12K"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [80]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["SVD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [150]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["SVD_CAMO"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [170]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["VSS_vintorez"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [175]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["Igla"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["MetisLauncher"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["RPG7V"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [90]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["RPG18"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["Strela"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [225]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["Makarov"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["MakarovSD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["ItemCompass"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemGPS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemMap"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemRadio"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemWatch"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; [_faction, _u, _p, _n, _o, _z, _m] Call Compile preprocessFile "Common\Config\Config_Weapons.sqf";_faction = "TKA"; _u = [];//--- Magazine _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level //--- Magazines _u = _u + ["5Rnd_127x108_KSVK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [12]; _z = _z + [3]; _u = _u + ["6Rnd_45ACP"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [4]; _z = _z + [0]; _u = _u + ["8Rnd_9x18_Makarov"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [2]; _z = _z + [0]; _u = _u + ["8Rnd_9x18_MakarovSD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [3]; _z = _z + [1]; _u = _u + ["8Rnd_B_Saiga12_Pellets"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["10Rnd_762x54_SVD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [1]; _u = _u + ["10Rnd_B_765x17_Ball"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [4]; _z = _z + [0]; _u = _u + ["10x_303"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [3]; _z = _z + [0]; _u = _u + ["20Rnd_762x51_FNFAL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["20Rnd_B_765x17_Ball"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [6]; _z = _z + [1]; _u = _u + ["20Rnd_9x39_SP5_VSS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [2]; _u = _u + ["30Rnd_545x39_AK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["30Rnd_545x39_AKSD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [2]; _u = _u + ["30Rnd_762x39_AK47"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [7]; _z = _z + [0]; _u = _u + ["30Rnd_762x39_SA58"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["30Rnd_9x19_UZI"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [1]; _u = _u + ["30Rnd_9x19_UZI_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [2]; _u = _u + ["75Rnd_545x39_RPK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["100Rnd_762x54_PK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [0]; _u = _u + ["100Rnd_762x54_PK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _u = _u + ["AT13"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [800]; _z = _z + [3]; _u = _u + ["Dragon_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [325]; _z = _z + [1]; _u = _u + ["Igla"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [150]; _z = _z + [2]; _u = _u + ["OG7"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [2]; _u = _u + ["PG7V"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; _u = _u + ["PG7VR"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [125]; _z = _z + [2]; _u = _u + ["PG7VL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [75]; _z = _z + [1]; _u = _u + ["RPG18"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [40]; _z = _z + [0]; _u = _u + ["Strela"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [1]; _u = _u + ["HandGrenade_East"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["HandGrenade_Stone"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [1]; _z = _z + [0]; _u = _u + ["SmokeShell"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellRed"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellGreen"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellBlue"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellYellow"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellOrange"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellPurple"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareWhite_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareYellow_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareGreen_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareRed_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["1Rnd_HE_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ["1Rnd_Smoke_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["1Rnd_SmokeRed_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["1Rnd_SmokeGreen_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["1Rnd_SmokeYellow_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["FlareWhite_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareYellow_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareGreen_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareRed_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["1Rnd_HE_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ["1Rnd_HE_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["1Rnd_SMOKE_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["1Rnd_SMOKERED_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["1Rnd_SMOKEGREEN_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["1Rnd_SMOKEYELLOW_GP25"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["MineE"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [40]; _z = _z + [0]; _u = _u + ["PipeBomb"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; [_faction, _u, _p, _n, _o, _z] Call Compile preprocessFile "Common\Config\Config_Magazines.sqf"; _u = [];//--- Weapon _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level _m = [];//--- Magazines (-1 = auto, [x,y,z] = forced magazines) //--- Weapons _u = _u + ["AK_47_M"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [40]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AK_47_S"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AK_74"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [75]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AK_74_GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [85]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AK_74_GL_kobra"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["AKS_74"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [70]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AKS_74_GOSHAWK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [180]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["AKS_74_kobra"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [80]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["AKS_74_NSPU"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [110]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["AKS_74_pso"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [95]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["AKS_74_U"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [80]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["FN_FAL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [110]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["FN_FAL_ANPVS4"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [140]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["ksvk"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["LeeEnfield"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["PK"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [150]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["RPK_74"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [125]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["Sa58P_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["Sa58V_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [110]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["Sa58V_RCO_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [135]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["Sa58V_CCO_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [145]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["SVD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [150]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["SVD_des_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [170]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["SVD_NSPU_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [200]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["Igla"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["MetisLauncher"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["M47Launcher_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["RPG7V"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [90]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["RPG18"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["Strela"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [225]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["Makarov"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["MakarovSD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["revolver_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["revolver_gold_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["Sa61_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["UZI_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [35]; _z = _z + [1]; _m = _m + [["30Rnd_9x19_UZI","30Rnd_9x19_UZI_SD"]]; _u = _u + ["UZI_SD_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [2]; _m = _m + [["30Rnd_9x19_UZI_SD"]]; _u = _u + ["Binocular"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["NVGoggles"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemCompass"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemGPS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemMap"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemRadio"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemWatch"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; [_faction, _u, _p, _n, _o, _z, _m] Call Compile preprocessFile "Common\Config\Config_Weapons.sqf"; _u = [];//--- Backpack _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level //--- Backpacks & Tripods _u = _u + ["TK_Assault_Pack_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [40]; _z = _z + [0]; _u = _u + ["TK_RPG_Backpack_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [0]; _u = _u + ["TK_ALICE_Pack_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; _u = _u + ["TK_ALICE_Pack_AmmoMG_EP1"]; _p = _p + ['']; _n = _n + ['+(Ammo MG)']; _o = _o + [50]; _z = _z + [0]; _u = _u + ["TK_ALICE_Pack_Explosives_EP1"]; _p = _p + ['']; _n = _n + ['+(Ammo Explosives)']; _o = _o + [50]; _z = _z + [1]; _u = _u + ["TKA_ALICE_Pack_Ammo_EP1"]; _p = _p + ['']; _n = _n + ['+(Ammo)']; _o = _o + [50]; _z = _z + [0]; _u = _u + ["TKG_ALICE_Pack_AmmoAK47_EP1"]; _p = _p + ['']; _n = _n + ['+(Ammo AK47)']; _o = _o + [50]; _z = _z + [0]; _u = _u + ["TKG_ALICE_Pack_AmmoAK74_EP1"]; _p = _p + ['']; _n = _n + ['+(Ammo AK74)']; _o = _o + [50]; _z = _z + [0]; _u = _u + ["TK_Assault_Pack_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [60]; _z = _z + [0]; _u = _u + ["TK_Assault_Pack_RPK_EP1"]; _p = _p + ['']; _n = _n + ['+(Ammo RPK)']; _o = _o + [60]; _z = _z + [0]; _u = _u + ["TKA_Assault_Pack_Ammo_EP1"]; _p = _p + ['']; _n = _n + ['+(Ammo)']; _o = _o + [60]; _z = _z + [0]; _u = _u + ["Tripod_Bag"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["KORD_TK_Bag_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [0]; _u = _u + ["DSHkM_Mini_TriPod_TK_GUE_Bag_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [0]; _u = _u + ["KORD_high_TK_Bag_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [325]; _z = _z + [0]; _u = _u + ["DSHKM_TK_GUE_Bag_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [325]; _z = _z + [0]; _u = _u + ["AGS_TK_Bag_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [600]; _z = _z + [1]; _u = _u + ["AGS_TK_GUE_Bag_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [600]; _z = _z + [1]; _u = _u + ["SPG9_TK_INS_Bag_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [450]; _z = _z + [2]; _u = _u + ["SPG9_TK_GUE_Bag_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [450]; _z = _z + [2]; _u = _u + ["Metis_TK_Bag_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [650]; _z = _z + [3]; _u = _u + ["2b14_82mm_TK_Bag_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [800]; _z = _z + [2]; _u = _u + ["2b14_82mm_TK_GUE_Bag_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [800]; _z = _z + [2]; [_faction, _u, _p, _n, _o, _z] Call Compile preprocessFile "Common\Config\Config_Backpack.sqf";_faction = "US"; _u = [];//--- Magazine _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level //--- Magazines _u = _u + ["5Rnd_762x51_M24"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["6Rnd_HE_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [60]; _z = _z + [0]; _u = _u + ["6Rnd_FlareWhite_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [0]; _u = _u + ["6Rnd_FlareGreen_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [0]; _u = _u + ["6Rnd_FlareRed_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [0]; _u = _u + ["6Rnd_FlareYellow_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [0]; _u = _u + ["6Rnd_Smoke_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [40]; _z = _z + [0]; _u = _u + ["6Rnd_SmokeRed_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [40]; _z = _z + [0]; _u = _u + ["6Rnd_SmokeGreen_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [40]; _z = _z + [0]; _u = _u + ["6Rnd_SmokeYellow_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [40]; _z = _z + [0]; _u = _u + ["7Rnd_45ACP_1911"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["8Rnd_B_Beneli_Pellets"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["10Rnd_127x99_m107"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _u = _u + ["15Rnd_9x19_M9"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["15Rnd_9x19_M9SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["17Rnd_9x19_glock17"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["20Rnd_762x51_B_SCAR"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ["20rnd_762x51_SB_SCAR"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [0]; _u = _u + ["20Rnd_762x51_DMR"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["20Rnd_556x45_Stanag"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["30Rnd_9x19_UZI"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["30Rnd_9x19_UZI_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["30Rnd_556x45_G36"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["30Rnd_556x45_G36SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ["30Rnd_556x45_Stanag"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["30Rnd_556x45_StanagSD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ["100Rnd_556x45_BetaCMag"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [0]; _u = _u + ["100Rnd_762x51_M240"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [35]; _z = _z + [0]; _u = _u + ["100Rnd_556x45_M249"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [0]; _u = _u + ["200Rnd_556x45_M249"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [60]; _z = _z + [0]; _u = _u + ["Laserbatteries"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [0]; _u = _u + ["M136"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _u = _u + ["MAAWS_HEAT"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [2]; _u = _u + ["MAAWS_HEDP"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [400]; _z = _z + [3]; _u = _u + ["Stinger"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [150]; _z = _z + [2]; _u = _u + ["Javelin"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [800]; _z = _z + [3]; _u = _u + ["HandGrenade_West"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["HandGrenade_Stone"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [1]; _z = _z + [0]; _u = _u + ["IR_Strobe_Target"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _u = _u + ["IR_Strobe_Marker"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [0]; _u = _u + ["SmokeShell"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellRed"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellGreen"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellBlue"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellYellow"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellOrange"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellPurple"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareWhite_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareYellow_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareGreen_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareRed_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["1Rnd_HE_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ["1Rnd_Smoke_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["1Rnd_SmokeRed_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["1Rnd_SmokeGreen_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["1Rnd_SmokeYellow_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["Mine"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [40]; _z = _z + [0]; _u = _u + ["PipeBomb"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; [_faction, _u, _p, _n, _o, _z] Call Compile preprocessFile "Common\Config\Config_Magazines.sqf"; _u = [];//--- Weapon _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level _m = [];//--- Magazines (-1 = auto, [x,y,z] = forced magazines) //--- Weapons _u = _u + ["G36A_camo"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [275]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["G36C_camo"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["G36_C_SD_camo"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [300]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["G36K_camo"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [260]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["M16A2"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [75]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["M16A2GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [90]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["M24_des_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [200]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["M60A4_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [175]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["m240_scoped_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [215]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["M249_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["M249_m145_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [265]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["M249_TWS_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [365]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["M4A1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [90]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["M4A3_CCO_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [115]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["M4A3_RCO_GL_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [130]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["m107"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [400]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["m107_TWS_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [600]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["Mk_48_DES_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["MG36_camo"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [240]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["M32_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [200]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["M79_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [75]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["Mk13_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [125]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["M14_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["M110_NVG_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["M110_TWS_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [450]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["SCAR_L_CQC"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [200]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["SCAR_L_CQC_Holo"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [210]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["SCAR_L_STD_Mk4CQT"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [240]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["SCAR_L_STD_EGLM_RCO"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["SCAR_L_CQC_EGLM_Holo"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [235]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["SCAR_L_STD_EGLM_TWS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [330]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["SCAR_L_STD_HOLO"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [200]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["SCAR_H_CQC_CCO"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["SCAR_H_CQC_CCO_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [270]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["SCAR_H_STD_EGLM_Spect"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [285]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["SCAR_H_LNG_Sniper"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [320]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["SCAR_H_LNG_Sniper_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [340]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["SCAR_H_STD_TWS_SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["Stinger"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["Javelin"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [900]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["Laserdesignator"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["M136"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [125]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["MAAWS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [500]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["Colt1911"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["M9"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["M9SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["glock17_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["Binocular"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["Binocular_Vector"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [35]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["NVGoggles"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemCompass"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemGPS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemMap"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemRadio"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemWatch"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; [_faction, _u, _p, _n, _o, _z, _m] Call Compile preprocessFile "Common\Config\Config_Weapons.sqf"; _u = [];//--- Backpack _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level //--- Backpacks & Tripods _u = _u + ["US_Assault_Pack_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; _u = _u + ["US_Assault_Pack_Ammo_EP1"]; _p = _p + ['']; _n = _n + ['+(Ammo)']; _o = _o + [50]; _z = _z + [0]; _u = _u + ["US_Assault_Pack_AmmoSAW_EP1"]; _p = _p + ['']; _n = _n + ['+(Ammo SAW)']; _o = _o + [50]; _z = _z + [0]; _u = _u + ["US_Assault_Pack_AT_EP1"]; _p = _p + ['']; _n = _n + ['+(Ammo AT)']; _o = _o + [50]; _z = _z + [0]; _u = _u + ["US_Assault_Pack_Explosives_EP1"]; _p = _p + ['']; _n = _n + ['+(Ammo Explosives)']; _o = _o + [50]; _z = _z + [0]; _u = _u + ["US_Patrol_Pack_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [60]; _z = _z + [0]; _u = _u + ["US_Patrol_Pack_Ammo_EP1"]; _p = _p + ['']; _n = _n + ['+(Ammo)']; _o = _o + [60]; _z = _z + [0]; _u = _u + ["US_Patrol_Pack_Specops_EP1"]; _p = _p + ['']; _n = _n + ['+(Ammo Specops)']; _o = _o + [60]; _z = _z + [2]; _u = _u + ["US_Backpack_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [70]; _z = _z + [1]; _u = _u + ["US_Backpack_AmmoMG_EP1"]; _p = _p + ['']; _n = _n + ['+(Ammo MG)']; _o = _o + [70]; _z = _z + [1]; _u = _u + ["US_Backpack_AT_EP1"]; _p = _p + ['']; _n = _n + ['+(Ammo AT)']; _o = _o + [70]; _z = _z + [2]; _u = _u + ["US_Backpack_Specops_EP1"]; _p = _p + ['']; _n = _n + ['+(Ammo Specops)']; _o = _o + [70]; _z = _z + [2]; _u = _u + ["Tripod_Bag"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["M2HD_mini_TriPod_US_Bag_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [0]; _u = _u + ["M2StaticMG_US_Bag_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [325]; _z = _z + [0]; _u = _u + ["MK19_TriPod_US_Bag_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [600]; _z = _z + [1]; _u = _u + ["TOW_TriPod_US_Bag_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [750]; _z = _z + [2]; _u = _u + ["M252_US_Bag_EP1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [800]; _z = _z + [1]; [_faction, _u, _p, _n, _o, _z] Call Compile preprocessFile "Common\Config\Config_Backpack.sqf";_faction = "USMC"; _u = [];//--- Magazine _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level //--- Magazines _u = _u + ["5Rnd_762x51_M24"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["7Rnd_45ACP_1911"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["8Rnd_B_Beneli_74Slug"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["10Rnd_127x99_m107"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _u = _u + ["15Rnd_9x19_M9"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["15Rnd_9x19_M9SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["20Rnd_762x51_DMR"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["20Rnd_556x45_Stanag"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["30Rnd_9x19_MP5"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["30Rnd_9x19_MP5SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["30Rnd_556x45_G36"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["30Rnd_556x45_G36SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ["30Rnd_556x45_Stanag"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _u = _u + ["30Rnd_556x45_StanagSD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ["100Rnd_556x45_BetaCMag"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [0]; _u = _u + ["100Rnd_762x51_M240"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [35]; _z = _z + [0]; _u = _u + ["200Rnd_556x45_M249"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; _u = _u + ["Laserbatteries"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [30]; _z = _z + [0]; _u = _u + ["M136"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _u = _u + ["SMAW_HEAA"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [300]; _z = _z + [2]; _u = _u + ["SMAW_HEDP"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [3]; _u = _u + ["Stinger"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [150]; _z = _z + [2]; _u = _u + ["Javelin"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [800]; _z = _z + [3]; _u = _u + ["HandGrenade_West"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["HandGrenade_Stone"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [1]; _z = _z + [0]; _u = _u + ["SmokeShell"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellRed"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellGreen"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellBlue"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellYellow"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellOrange"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["SmokeShellPurple"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareWhite_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareYellow_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareGreen_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["FlareRed_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _u = _u + ["1Rnd_HE_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _u = _u + ["1Rnd_Smoke_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["1Rnd_SmokeRed_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["1Rnd_SmokeGreen_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["1Rnd_SmokeYellow_M203"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _u = _u + ["Mine"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [40]; _z = _z + [0]; _u = _u + ["PipeBomb"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; [_faction, _u, _p, _n, _o, _z] Call Compile preprocessFile "Common\Config\Config_Magazines.sqf"; _u = [];//--- Weapon _p = [];//--- Picture _n = [];//--- Label _o = [];//--- Price _z = [];//--- Upgrade level _m = [];//--- Magazines (-1 = auto, [x,y,z] = forced magazines) //--- Weapons _u = _u + ["DMR"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [300]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["G36a"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [275]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["G36C"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["G36_C_SD_eotech"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [300]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["G36K"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [260]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["M16A2"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [75]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["M16A2GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [90]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["m16a4"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["m16a4_acg"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [115]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["M16A4_ACG_GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [130]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["M16A4_GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [115]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["M24"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [200]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["M40A3"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["M240"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [200]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["M249"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["M4A1"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [90]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["M4A1_Aim"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [100]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["M4A1_Aim_camo"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [120]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["M4SPR"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [180]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["M4A1_RCO_GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [115]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["M4A1_AIM_SD_camo"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [160]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["M4A1_HWS_GL_SD_Camo"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [200]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["M4A1_HWS_GL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [180]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["M4A1_HWS_GL_camo"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [195]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["m8_carbine"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [220]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["m8_carbineGL"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [235]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["m8_compact"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [225]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["m8_SAW"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["m8_sharpshooter"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [270]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["m107"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [400]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["M1014"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [60]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["Mk_48"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["MP5A5"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [50]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["MP5SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [60]; _z = _z + [1]; _m = _m + [-1]; _u = _u + ["MG36"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [240]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["Stinger"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [350]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["Javelin"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [900]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["Laserdesignator"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [250]; _z = _z + [3]; _m = _m + [-1]; _u = _u + ["M136"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [125]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["SMAW"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [400]; _z = _z + [2]; _m = _m + [-1]; _u = _u + ["Colt1911"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [15]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["M9"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [20]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["M9SD"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["Binocular"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["NVGoggles"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemCompass"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemGPS"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [25]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemMap"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemRadio"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [10]; _z = _z + [0]; _m = _m + [-1]; _u = _u + ["ItemWatch"]; _p = _p + ['']; _n = _n + ['']; _o = _o + [5]; _z = _z + [0]; _m = _m + [-1]; [_faction, _u, _p, _n, _o, _z, _m] Call Compile preprocessFile "Common\Config\Config_Weapons.sqf";/* Groups (Used in towns). */ Private ["_faction","_k","_l","_side","_u"]; _l = [];//--- Unit list _k = [];//--- Type used by AI. _side = "WEST"; _faction = "CDF"; _k = _k + ["Squad"]; _u = ["CDF_Soldier_TL"]; _u = _u + ["CDF_Soldier_Strela"]; _u = _u + ["CDF_Soldier_Medic"]; _u = _u + ["CDF_Soldier_GL"]; _u = _u + ["CDF_Soldier"]; _u = _u + ["CDF_Soldier"]; _u = _u + ["CDF_Soldier_Sniper"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier_AR"]; _u = _u + ["CDF_Soldier_RPG"]; _l = _l + [_u]; _k = _k + ["Squad"]; _u = ["CDF_Soldier_TL"]; _u = _u + ["CDF_Soldier_Strela"]; _u = _u + ["CDF_Soldier_Strela"]; _u = _u + ["CDF_Soldier_Medic"]; _u = _u + ["CDF_Soldier_GL"]; _u = _u + ["CDF_Soldier_Sniper"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier_MG"]; _u = _u + ["CDF_Soldier_Engineer"]; _u = _u + ["CDF_Soldier_AR"]; _u = _u + ["CDF_Soldier_RPG"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["CDF_Soldier_TL"]; _u = _u + ["CDF_Soldier_Medic"]; _u = _u + ["CDF_Soldier"]; _u = _u + ["CDF_Soldier_AR"]; _u = _u + ["CDF_Soldier"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["CDF_Soldier_TL"]; _u = _u + ["CDF_Soldier_AR"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier_Medic"]; _u = _u + ["CDF_Soldier"]; _l = _l + [_u]; _k = _k + ["Team_MG"]; _u = ["CDF_Soldier_TL"]; _u = _u + ["CDF_Soldier_AR"]; _u = _u + ["CDF_Soldier_MG"]; _u = _u + ["CDF_Soldier_Medic"]; _u = _u + ["CDF_Soldier"]; _l = _l + [_u]; _k = _k + ["Team_AT"]; _u = ["CDF_Soldier_TL"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier"]; _l = _l + [_u]; _k = _k + ["Team_AA"]; _u = ["CDF_Soldier_TL"]; _u = _u + ["CDF_Soldier_AR"]; _u = _u + ["CDF_Soldier"]; _u = _u + ["CDF_Soldier_Strela"]; _u = _u + ["CDF_Soldier_Strela"]; _l = _l + [_u]; _k = _k + ["Team_Sniper"]; _u = ["CDF_Soldier_Sniper"]; _u = _u + ["CDF_Soldier_Spotter"]; _u = _u + ["CDF_Soldier_Marksman"]; _u = _u + ["CDF_Soldier_Marksman"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["CDF_Soldier_TL"]; _u = _u + ["UAZ_AGS30_CDF"]; _u = _u + ["UAZ_MG_CDF"]; _u = _u + ["CDF_Soldier"]; _u = _u + ["CDF_Soldier"]; _u = _u + ["CDF_Soldier_AR"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["UAZ_AGS30_CDF"]; _u = _u + ["UAZ_MG_CDF"]; _u = _u + ["UAZ_MG_CDF"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["Ural_ZU23_CDF"]; _u = _u + ["CDF_Soldier"]; _l = _l + [_u]; _k = _k + ["AA_Light"]; _u = ["CDF_Soldier_Strela"]; _u = _u + ["Ural_ZU23_CDF"]; _u = _u + ["Ural_ZU23_CDF"]; _u = _u + ["CDF_Soldier_Strela"]; _l = _l + [_u]; _k = _k + ["AA_Heavy"]; _u = ["ZSU_CDF"]; _u = _u + ["ZSU_CDF"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["CDF_Soldier_TL"]; _u = _u + ["BRDM2_CDF"]; _u = _u + ["BRDM2_CDF"]; _u = _u + ["CDF_Soldier_MG"]; _u = _u + ["CDF_Soldier_AR"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["BRDM2_CDF"]; _u = _u + ["BRDM2_ATGM_CDF"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["CDF_Soldier_TL"]; _u = _u + ["BMP2_CDF"]; _u = _u + ["CDF_Soldier"]; _u = _u + ["CDF_Soldier_AR"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier_Medic"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["BMP2_CDF"]; _u = _u + ["BMP2_CDF"]; _l = _l + [_u]; _k = _k + ["Armored_Light"]; _u = ["T72_CDF"]; _u = _u + ["T72_CDF"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["BMP2_CDF"]; _u = _u + ["BMP2_CDF"]; _u = _u + ["T72_CDF"]; _u = _u + ["T72_CDF"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["T72_CDF"]; _u = _u + ["T72_CDF"]; _u = _u + ["T72_CDF"]; _l = _l + [_u]; [_k,_l,_side,_faction] Call Compile preprocessFile "Common\Config\Config_Groups.sqf";/* Groups (Used in towns). */ Private ["_faction","_k","_l","_side","_u"]; _l = [];//--- Unit list _k = [];//--- Type used by AI. _side = "GUER"; _faction = "GUE"; _k = _k + ["Squad"]; _u = ["GUE_Soldier_CO"]; _u = _u + ["GUE_Soldier_GL"]; _u = _u + ["GUE_Soldier_AR"]; _u = _u + ["GUE_Soldier_1"]; _u = _u + ["GUE_Soldier_3"]; _u = _u + ["GUE_Soldier_2"]; _u = _u + ["GUE_Soldier_Medic"]; _l = _l + [_u]; _k = _k + ["Squad"]; _u = ["GUE_Soldier_CO"]; _u = _u + ["GUE_Soldier_GL"]; _u = _u + ["GUE_Soldier_AT"]; _u = _u + ["GUE_Soldier_AR"]; _u = _u + ["GUE_Soldier_MG"]; _u = _u + ["GUE_Soldier_AT"]; _u = _u + ["GUE_Soldier_2"]; _u = _u + ["GUE_Soldier_Medic"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["GUE_Soldier_2"]; _u = _u + ["GUE_Soldier_MG"]; _u = _u + ["GUE_Soldier_AT"]; _u = _u + ["GUE_Soldier_GL"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["GUE_Soldier_1"]; _u = _u + ["GUE_Soldier_AR"]; _u = _u + ["GUE_Soldier_GL"]; _u = _u + ["GUE_Soldier_MG"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["GUE_Worker2"]; _u = _u + ["GUE_Woodlander3"]; _u = _u + ["GUE_Villager3"]; _u = _u + ["GUE_Woodlander2"]; _u = _u + ["GUE_Woodlander1"]; _u = _u + ["GUE_Villager4"]; _l = _l + [_u]; _k = _k + ["Team_AT"]; _u = ["GUE_Soldier_CO"]; _u = _u + ["GUE_Soldier_AT"]; _u = _u + ["GUE_Soldier_AT"]; _u = _u + ["GUE_Soldier_AT"]; _l = _l + [_u]; _k = _k + ["Team_AA"]; _u = ["GUE_Soldier_CO"]; _u = _u + ["GUE_Soldier_AA"]; _u = _u + ["GUE_Soldier_AA"]; _u = _u + ["GUE_Soldier_AA"]; _l = _l + [_u]; _k = _k + ["Team_Sniper"]; _u = ["GUE_Soldier_Sniper"]; _u = _u + ["GUE_Soldier_Sniper"]; _u = _u + ["GUE_Soldier_Scout"]; _u = _u + ["GUE_Soldier_Scout"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["GUE_Soldier_CO"]; _u = _u + ["Offroad_DSHKM_Gue"]; _u = _u + ["Offroad_SPG9_Gue"]; _u = _u + ["Pickup_PK_GUE"]; _u = _u + ["GUE_Soldier_MG"]; _u = _u + ["GUE_Soldier_3"]; _u = _u + ["GUE_Soldier_Sniper"]; _u = _u + ["GUE_Soldier_AR"]; _u = _u + ["GUE_Soldier_Medic"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["Offroad_DSHKM_Gue"]; _u = _u + ["Offroad_DSHKM_Gue"]; _u = _u + ["Offroad_SPG9_Gue"]; _u = _u + ["Pickup_PK_GUE"]; _l = _l + [_u]; _k = _k + ["AA_Light"]; _u = ["GUE_Soldier_CO"]; _u = _u + ["Ural_ZU23_Gue"]; _u = _u + ["GUE_Soldier_GL"]; _u = _u + ["GUE_Soldier_AA"]; _u = _u + ["GUE_Soldier_1"]; _l = _l + [_u]; _k = _k + ["AA_Heavy"]; _u = ["Ural_ZU23_Gue"]; _u = _u + ["Ural_ZU23_Gue"]; _u = _u + ["Ural_ZU23_Gue"]; _u = _u + ["GUE_Soldier_AA"]; _u = _u + ["GUE_Soldier_AA"]; _u = _u + ["GUE_Soldier_AA"]; _u = _u + ["GUE_Soldier_1"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["GUE_Soldier_AR"]; _u = _u + ["BRDM2_GUE"]; _u = _u + ["BRDM2_GUE"]; _u = _u + ["GUE_Soldier_GL"]; _u = _u + ["GUE_Soldier_1"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["BRDM2_GUE"]; _u = _u + ["BRDM2_GUE"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["GUE_Soldier_CO"]; _u = _u + ["BMP2_GUE"]; _u = _u + ["GUE_Soldier_MG"]; _u = _u + ["GUE_Soldier_GL"]; _u = _u + ["GUE_Soldier_3"]; _u = _u + ["GUE_Soldier_AR"]; _u = _u + ["GUE_Soldier_Sniper"]; _u = _u + ["GUE_Soldier_AT"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["BMP2_GUE"]; _u = _u + ["BMP2_GUE"]; _l = _l + [_u]; _k = _k + ["Armored_Light"]; _u = ["T72_GUE"]; _u = _u + ["T72_GUE"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["T72_GUE"]; _u = _u + ["T72_GUE"]; _u = _u + ["T72_GUE"]; _u = _u + ["T72_GUE"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["T72_GUE"]; _u = _u + ["T72_GUE"]; _u = _u + ["BMP2_GUE"]; _u = _u + ["BMP2_GUE"]; _l = _l + [_u]; [_k,_l,_side,_faction] Call Compile preprocessFile "Common\Config\Config_Groups.sqf";/* Groups (Used in towns). */ Private ["_faction","_k","_l","_side","_u"]; _l = [];//--- Unit list _k = [];//--- Type used by AI. _side = "EAST"; _faction = "INS"; _k = _k + ["Squad"]; _u = ["Ins_Soldier_CO"]; _u = _u + ["Ins_Soldier_MG"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_Medic"]; _u = _u + ["Ins_Soldier_AA"]; _u = _u + ["Ins_Soldier_1"]; _u = _u + ["Ins_Soldier_1"]; _u = _u + ["Ins_Soldier_GL"]; _u = _u + ["Ins_Soldier_1"]; _l = _l + [_u]; _k = _k + ["Squad"]; _u = ["Ins_Soldier_CO"]; _u = _u + ["Ins_Soldier_MG"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_AA"]; _u = _u + ["Ins_Soldier_Sniper"]; _u = _u + ["Ins_Soldier_AR"]; _u = _u + ["Ins_Soldier_GL"]; _u = _u + ["Ins_Soldier_Medic"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["Ins_Soldier_CO"]; _u = _u + ["Ins_Soldier_MG"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_Medic"]; _u = _u + ["Ins_Soldier_2"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["Ins_Soldier_CO"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_Sniper"]; _u = _u + ["Ins_Soldier_AR"]; _u = _u + ["Ins_Soldier_GL"]; _l = _l + [_u]; _k = _k + ["Team_MG"]; _u = ["Ins_Soldier_CO"]; _u = _u + ["Ins_Soldier_MG"]; _u = _u + ["Ins_Soldier_MG"]; _u = _u + ["Ins_Soldier_AR"]; _l = _l + [_u]; _k = _k + ["Team_AT"]; _u = ["Ins_Soldier_CO"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_AT"]; _l = _l + [_u]; _k = _k + ["Team_AA"]; _u = ["Ins_Soldier_AA"]; _u = _u + ["Ins_Soldier_AA"]; _u = _u + ["Ins_Soldier_AA"]; _u = _u + ["Ins_Soldier_1"]; _l = _l + [_u]; _k = _k + ["Team_Sniper"]; _u = ["Ins_Soldier_Sniper"]; _u = _u + ["Ins_Soldier_Sniper"]; _u = _u + ["Ins_Soldier_Sniper"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["Ins_Soldier_CO"]; _u = _u + ["UAZ_MG_INS"]; _u = _u + ["UAZ_AGS30_INS"]; _u = _u + ["Ins_Soldier_MG"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_GL"]; _u = _u + ["Ins_Soldier_AR"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_2"]; _u = _u + ["Ins_Soldier_1"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["UAZ_AGS30_INS"]; _u = _u + ["UAZ_AGS30_INS"]; _u = _u + ["UAZ_AGS30_INS"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["Offroad_DSHKM_INS"]; _u = _u + ["Pickup_PK_INS"]; _l = _l + [_u]; _k = _k + ["AA_Light"]; _u = ["Ins_Soldier_AA"]; _u = _u + ["Ural_ZU23_INS"]; _u = _u + ["Ural_ZU23_INS"]; _u = _u + ["Ins_Soldier_AA"]; _l = _l + [_u]; _k = _k + ["AA_Heavy"]; _u = ["ZSU_INS"]; _u = _u + ["ZSU_INS"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["Ins_Soldier_CO"]; _u = _u + ["BRDM2_INS"]; _u = _u + ["BRDM2_INS"]; _u = _u + ["Ins_Soldier_MG"]; _u = _u + ["Ins_Soldier_AR"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_1"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["BRDM2_INS"]; _u = _u + ["BRDM2_ATGM_INS"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["Ins_Soldier_CO"]; _u = _u + ["BMP2_INS"]; _u = _u + ["Ins_Soldier_1"]; _u = _u + ["Ins_Soldier_AR"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_Medic"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["BMP2_INS"]; _u = _u + ["BMP2_INS"]; _l = _l + [_u]; _k = _k + ["Armored_Light"]; _u = ["T72_INS"]; _u = _u + ["T72_INS"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["BMP2_INS"]; _u = _u + ["BMP2_INS"]; _u = _u + ["T72_INS"]; _u = _u + ["T72_INS"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["T72_INS"]; _u = _u + ["T72_INS"]; _u = _u + ["T72_INS"]; _l = _l + [_u]; [_k,_l,_side,_faction] Call Compile preprocessFile "Common\Config\Config_Groups.sqf";/* Groups (Used in towns). */ Private ["_faction","_k","_l","_side","_u"]; _l = [];//--- Unit list _k = [];//--- Type used by AI. _side = "WEST"; _faction = "French"; _k = _k + ["Squad"]; _u = ["OFrP_Soldier_Inf_Grenadier"]; _u = _u + ["OFrP_Soldier_Inf_TeamLeader"]; _u = _u + ["OFrP_Soldier_Inf_Minimi"]; _u = _u + ["OFrP_Soldier_Inf_Minimi"]; _u = _u + ["OFrP_Soldier_Inf_Minimi"]; _u = _u + ["OFrP_Soldier_Inf_ERYX"]; _u = _u + ["OFrP_Soldier_Inf_ABL"]; _u = _u + ["OFrP_Soldier_Inf"]; _u = _u + ["OFrP_Soldier_Inf_Medic"]; _l = _l + [_u]; _k = _k + ["Squad_Advanced"]; _u = ["OFrP_Soldier_FELIN_TeamLeader"]; _u = _u + ["OFrP_Soldier_FELIN_Grenadier"]; _u = _u + ["OFrP_Soldier_FELIN_Minimi"]; _u = _u + ["OFrP_Soldier_FELIN_Minimi"]; _u = _u + ["OFrP_Soldier_FELIN_Grenadier"]; _u = _u + ["OFrP_Soldier_FELIN_Medic"]; _u = _u + ["OFrP_Soldier_FELIN_SniperFRF2"]; _u = _u + ["OFrP_Soldier_FELIN_Optronic"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["OFrP_Soldier_Inf_Grenadier"]; _u = _u + ["OFrP_Soldier_Inf_TeamLeader"]; _u = _u + ["OFrP_Soldier_Inf_Minimi"]; _u = _u + ["OFrP_Soldier_Inf_ABL"]; _u = _u + ["OFrP_Soldier_Inf"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["OFrP_Soldier_Inf_TeamLeader"]; _u = _u + ["OFrP_Soldier_Inf_Minimi"]; _u = _u + ["OFrP_Soldier_Inf_ABL"]; _u = _u + ["OFrP_Soldier_Inf"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["OFrP_Soldier_Inf_TeamLeader"]; _u = _u + ["OFrP_Soldier_Inf_Minimi"]; _u = _u + ["OFrP_Soldier_Inf_ABL"]; _u = _u + ["OFrP_Soldier_Inf_Medic"]; _l = _l + [_u]; _k = _k + ["Team_MG"]; _u = ["OFrP_Soldier_Inf_TeamLeader"]; _u = _u + ["OFrP_Soldier_Inf_Minimi"]; _u = _u + ["OFrP_Soldier_Inf_Minimi"]; _u = _u + ["OFrP_Soldier_Inf_ABL"]; _l = _l + [_u]; _k = _k + ["Team_AT"]; _u = ["OFrP_Soldier_Inf_TeamLeader"]; _u = _u + ["OFrP_Soldier_Inf_Minimi"]; _u = _u + ["OFrP_Soldier_Inf_ERYX"]; _u = _u + ["OFrP_Soldier_Inf_ABL"]; _l = _l + [_u]; _k = _k + ["Team_HAT"]; _u = ["OFrP_Soldier_Inf_LRAC89"]; _u = _u + ["OFrP_Soldier_Inf_ERYX"]; _u = _u + ["OFrP_Soldier_Inf_ERYX"]; _u = _u + ["OFrP_Soldier_Inf_ABL"]; _l = _l + [_u]; _k = _k + ["Team_AA"]; _u = ["OFrP_Soldier_Inf_TeamLeader"]; _u = _u + ["OFrP_Soldier_Inf_Minimi"]; _u = _u + ["OFrP_Soldier_Inf_Stinger"]; _u = _u + ["OFrP_Soldier_Inf_Stinger"]; _l = _l + [_u]; _k = _k + ["Team_Sniper"]; _u = ["OFrP_Soldier_Inf_SniperFRF2"]; _u = _u + ["OFrP_Soldier_Inf_Scout"]; _u = _u + ["OFrP_Soldier_Inf_SniperFRF2"]; _u = _u + ["OFrP_Soldier_Inf_SniperFRF2"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["OFrP_Soldier_Inf_TeamLeader"]; _u = _u + ["OFrP_VBL_127_desert"]; _u = _u + ["OFrP_VBL_ANF1_desert"]; _u = _u + ["OFrP_Soldier_Inf_Minimi"]; _u = _u + ["OFrP_Soldier_Inf_ERYX"]; _u = _u + ["OFrP_Soldier_Inf_ABL"]; _u = _u + ["OFrP_Soldier_Inf"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["OFrP_Soldier_Inf_TeamLeader"]; _u = _u + ["OFrP_VBL_Milan_desert"]; _u = _u + ["OFrP_VBL_Milan_desert"]; _u = _u + ["OFrP_Soldier_Inf_Minimi"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["OFrP_VBL_127_desert"]; _u = _u + ["OFrP_VBL_ANF1_desert"]; _u = _u + ["OFrP_VBL_Milan_desert"]; _l = _l + [_u]; _k = _k + ["AA_Light"]; _u = ["OFrP_Soldier_Inf_TeamLeader"]; _u = _u + ["OFrP_VABT20"]; _u = _u + ["OFrP_VABT20"]; _u = _u + ["OFrP_Soldier_Inf_Stinger"]; _l = _l + [_u]; _k = _k + ["AA_Heavy"]; _u = ["OFrP_VABT20"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["OFrP_VAB_TOP127_desert"]; _u = _u + ["OFrP_Soldier_Inf_Minimi"]; _u = _u + ["OFrP_Soldier_Inf_ABL"]; _u = _u + ["OFrP_Soldier_Inf_Medic"]; _u = _u + ["OFrP_Soldier_Inf"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["OFrP_VAB_TOP127_desert"]; _u = _u + ["OFrP_VAB_127_desert"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["OFrP_VAB_TOP127_desert"]; _u = _u + ["OFrP_VAB_Mephisto_desert"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["OFrP_VBCI_vci"]; _u = _u + ["OFrP_Soldier_Inf_Minimi"]; _u = _u + ["OFrP_Soldier_Inf_ABL"]; _u = _u + ["OFrP_Soldier_Inf_Medic"]; _u = _u + ["OFrP_Soldier_Inf"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["OFrP_VBCI_vci"]; _u = _u + ["OFrP_VBCI_vci"]; _l = _l + [_u]; _k = _k + ["Armored_Light"]; _u = ["OFrP_10RCR"]; _u = _u + ["OFrP_10RCR"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["OFrP_Leclerc_desert"]; _u = _u + ["OFrP_Leclerc_desert"]; _u = _u + ["OFrP_10RCR"]; _u = _u + ["OFrP_10RCR"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["OFrP_Leclerc_desert"]; _u = _u + ["OFrP_Leclerc_desert"]; _u = _u + ["OFrP_Leclerc_desert"]; _l = _l + [_u]; //hint("Config Done!"); [_k,_l,_side,_faction] Call Compile preprocessFile "Common\Config\Config_Groups.sqf";/* Groups (Used in towns). */ Private ["_faction","_k","_l","_side","_u"]; _l = [];//--- Unit list _k = [];//--- Type used by AI. _side = "GUER"; _faction = "PMC"; _k = _k + ["Squad"]; _u = ["Soldier_TL_PMC"]; _u = _u + ["Soldier_M4A3_PMC"]; _u = _u + ["Soldier_MG_PMC"]; _u = _u + ["Soldier_Engineer_PMC"]; _u = _u + ["Soldier_PMC"]; _u = _u + ["Soldier_PMC"]; _u = _u + ["Soldier_Medic_PMC"]; _u = _u + ["Soldier_AT_PMC"]; _l = _l + [_u]; _k = _k + ["Squad"]; _u = ["Soldier_TL_PMC"]; _u = _u + ["Soldier_M4A3_PMC"]; _u = _u + ["Soldier_AA_PMC"]; _u = _u + ["Soldier_AT_PMC"]; _u = _u + ["Soldier_AT_PMC"]; _u = _u + ["Soldier_Bodyguard_AA12_PMC"]; _u = _u + ["Soldier_Bodyguard_M4_PMC"]; _u = _u + ["Soldier_GL_M16A2_PMC"]; _u = _u + ["Soldier_Sniper_PMC"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["Soldier_TL_PMC"]; _u = _u + ["Soldier_MG_PKM_PMC"]; _u = _u + ["Soldier_AT_PMC"]; _u = _u + ["Soldier_Bodyguard_M4_PMC"]; _u = _u + ["Soldier_AT_PMC"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["Soldier_TL_PMC"]; _u = _u + ["Soldier_Bodyguard_AA12_PMC"]; _u = _u + ["Soldier_Bodyguard_M4_PMC"]; _u = _u + ["Soldier_GL_PMC"]; _u = _u + ["Soldier_Medic_PMC"]; _u = _u + ["Soldier_PMC"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["Soldier_TL_PMC"]; _u = _u + ["Soldier_MG_PMC"]; _u = _u + ["Soldier_AT_PMC"]; _u = _u + ["Soldier_PMC"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["Soldier_TL_PMC"]; _u = _u + ["Soldier_MG_PKM_PMC"]; _u = _u + ["Soldier_Bodyguard_M4_PMC"]; _u = _u + ["Soldier_AT_PMC"]; _l = _l + [_u]; _k = _k + ["Team_AT"]; _u = ["Soldier_AT_PMC"]; _u = _u + ["Soldier_AT_PMC"]; _u = _u + ["Soldier_MG_PKM_PMC"]; _l = _l + [_u]; _k = _k + ["Team_AA"]; _u = ["Soldier_TL_PMC"]; _u = _u + ["Soldier_AA_PMC"]; _u = _u + ["Soldier_AA_PMC"]; _u = _u + ["Soldier_MG_PKM_PMC"]; _l = _l + [_u]; _k = _k + ["Team_Sniper"]; _u = ["Soldier_Sniper_PMC"]; _u = _u + ["Soldier_Sniper_KSVK_PMC"]; _u = _u + ["Soldier_Sniper_PMC"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["Soldier_TL_PMC"]; _u = _u + ["ArmoredSUV_PMC"]; _u = _u + ["ArmoredSUV_PMC"]; _u = _u + ["Soldier_MG_PMC"]; _u = _u + ["Soldier_M4A3_PMC"]; _u = _u + ["Soldier_Sniper_PMC"]; _u = _u + ["Soldier_AT_PMC"]; _u = _u + ["Soldier_AT_PMC"]; _u = _u + ["Soldier_Medic_PMC"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["SUV_PMC"]; _u = _u + ["SUV_PMC"]; _u = _u + ["Offroad_DSHKM_TK_GUE_EP1"]; _l = _l + [_u]; _k = _k + ["AA_Light"]; _u = ["Soldier_TL_PMC"]; _u = _u + ["Ural_ZU23_TK_GUE_EP1"]; _u = _u + ["Soldier_AA_PMC"]; _u = _u + ["Soldier_AA_PMC"]; _u = _u + ["Soldier_PMC"]; _l = _l + [_u]; _k = _k + ["AA_Heavy"]; _u = ["Ural_ZU23_TK_GUE_EP1"]; _u = _u + ["Ural_ZU23_TK_GUE_EP1"]; _u = _u + ["Ural_ZU23_TK_GUE_EP1"]; _u = _u + ["Soldier_AA_PMC"]; _u = _u + ["Soldier_AA_PMC"]; _u = _u + ["Soldier_AA_PMC"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["Soldier_TL_PMC"]; _u = _u + ["BTR40_MG_TK_GUE_EP1"]; _u = _u + ["BRDM2_TK_GUE_EP1"]; _u = _u + ["Soldier_Bodyguard_AA12_PMC"]; _u = _u + ["Soldier_PMC"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["BRDM2_TK_GUE_EP1"]; _u = _u + ["BRDM2_TK_GUE_EP1"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["BTR40_MG_TK_GUE_EP1"]; _u = _u + ["Soldier_GL_PMC"]; _u = _u + ["Soldier_MG_PMC"]; _u = _u + ["Soldier_PMC"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["Soldier_TL_PMC"]; _u = _u + ["T34_TK_GUE_EP1"]; _u = _u + ["BTR40_MG_TK_GUE_EP1"]; _u = _u + ["Soldier_MG_PMC"]; _u = _u + ["Soldier_PMC"]; _u = _u + ["Soldier_AT_PMC"]; _u = _u + ["Soldier_Engineer_PMC"]; _u = _u + ["Soldier_Sniper_PMC"]; _u = _u + ["Soldier_AT_PMC"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["T34_TK_GUE_EP1"]; _u = _u + ["BTR40_MG_TK_GUE_EP1"]; _l = _l + [_u]; _k = _k + ["Armored_Light"]; _u = ["T34_TK_GUE_EP1"]; _u = _u + ["T34_TK_GUE_EP1"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["T55_TK_GUE_EP1"]; _u = _u + ["T55_TK_GUE_EP1"]; _u = _u + ["T55_TK_GUE_EP1"]; _u = _u + ["T55_TK_GUE_EP1"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["T55_TK_GUE_EP1"]; _u = _u + ["T55_TK_GUE_EP1"]; _u = _u + ["T34_TK_GUE_EP1"]; _u = _u + ["T34_TK_GUE_EP1"]; _l = _l + [_u]; [_k,_l,_side,_faction] Call Compile preprocessFile "Common\Config\Config_Groups.sqf";/* Groups (Used in towns). */ Private ["_faction","_k","_l","_side","_u"]; _l = [];//--- Unit list _k = [];//--- Type used by AI. _side = "EAST"; _faction = "RU"; _k = _k + ["Squad"]; _u = ["RU_Soldier_SL"]; _u = _u + ["RU_Soldier_MG"]; _u = _u + ["RU_Soldier_AT"]; _u = _u + ["RU_Soldier_LAT"]; _u = _u + ["RU_Soldier_Marksman"]; _u = _u + ["RU_Soldier_AR"]; _u = _u + ["RU_Soldier_GL"]; _u = _u + ["RU_Soldier"]; _u = _u + ["RU_Soldier_Medic"]; _l = _l + [_u]; _k = _k + ["Squad"]; _u = ["RU_Soldier_SL"]; _u = _u + ["RU_Soldier_AR"]; _u = _u + ["RU_Soldier_AR"]; _u = _u + ["RU_Soldier_AT"]; _u = _u + ["RU_Soldier_AT"]; _u = _u + ["RU_Soldier_GL"]; _u = _u + ["RU_Soldier_Medic"]; _u = _u + ["RU_Soldier"]; _u = _u + ["RU_Soldier"]; _l = _l + [_u]; _k = _k + ["Squad_Advanced"]; _u = ["RUS_Commander"]; _u = _u + ["RUS_Soldier1"]; _u = _u + ["RUS_Soldier2"]; _u = _u + ["RUS_Soldier_GL"]; _u = _u + ["RUS_Soldier_Marksman"]; _u = _u + ["RUS_Soldier3"]; _u = _u + ["RUS_Soldier_TL"]; _l = _l + [_u]; _k = _k + ["Squad_Advanced"]; _u = ["MVD_Soldier_TL"]; _u = _u + ["MVD_Soldier_MG"]; _u = _u + ["MVD_Soldier_AT"]; _u = _u + ["MVD_Soldier_GL"]; _u = _u + ["MVD_Soldier_Sniper"]; _u = _u + ["MVD_Soldier_Marksman"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["RU_Soldier_TL"]; _u = _u + ["RU_Soldier_AR"]; _u = _u + ["RU_Soldier_LAT"]; _u = _u + ["RU_Soldier"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["RU_Soldier_TL"]; _u = _u + ["RU_Soldier_AR"]; _u = _u + ["RU_Soldier"]; _u = _u + ["RU_Soldier"]; _u = _u + ["RU_Soldier_Medic"]; _l = _l + [_u]; _k = _k + ["Team_MG"]; _u = ["RU_Soldier_TL"]; _u = _u + ["RU_Soldier_MG"]; _u = _u + ["RU_Soldier_MG"]; _u = _u + ["RU_Soldier_GL"]; _l = _l + [_u]; _k = _k + ["Team_AT"]; _u = ["RU_Soldier_TL"]; _u = _u + ["RU_Soldier_AT"]; _u = _u + ["RU_Soldier_AT"]; _u = _u + ["RU_Soldier_AT"]; _u = _u + ["RU_Soldier_LAT"]; _l = _l + [_u]; _k = _k + ["Team_HAT"]; _u = ["RU_Soldier_HAT"]; _u = _u + ["RU_Soldier_HAT"]; _u = _u + ["RU_Soldier_LAT"]; _u = _u + ["RU_Soldier_AT"]; _l = _l + [_u]; _k = _k + ["Team_AA"]; _u = ["RU_Soldier_AA"]; _u = _u + ["RU_Soldier_AA"]; _u = _u + ["RU_Soldier_AA"]; _u = _u + ["RU_Soldier"]; _l = _l + [_u]; _k = _k + ["Team_Sniper"]; _u = ["RU_Soldier_Marksman"]; _u = _u + ["RUS_Soldier_Marksman"]; _u = _u + ["RU_Soldier_Marksman"]; _u = _u + ["RUS_Soldier_Marksman"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["RU_Soldier_TL"]; _u = _u + ["GAZ_Vodnik"]; _u = _u + ["GAZ_Vodnik_HMG"]; _u = _u + ["RU_Soldier_MG"]; _u = _u + ["RU_Soldier_AT"]; _u = _u + ["RU_Soldier_GL"]; _u = _u + ["RU_Soldier_Marksman"]; _u = _u + ["RU_Soldier_AR"]; _u = _u + ["RU_Soldier_LAT"]; _u = _u + ["RU_Soldier"]; _u = _u + ["RU_Soldier"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["UAZ_AGS30_RU"]; _u = _u + ["UAZ_AGS30_RU"]; _u = _u + ["UAZ_AGS30_RU"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["GAZ_Vodnik_HMG"]; _u = _u + ["GAZ_Vodnik_HMG"]; _u = _u + ["GAZ_Vodnik"]; _l = _l + [_u]; _k = _k + ["AA_Light"]; _u = ["BTR90"]; _u = _u + ["RU_Soldier_AA"]; _u = _u + ["RU_Soldier_AA"]; _u = _u + ["RU_Soldier_AA"]; _u = _u + ["RU_Soldier_AA"]; _l = _l + [_u]; _k = _k + ["AA_Heavy"]; _u = ["2S6M_Tunguska"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["USMC_Soldier_TL"]; _u = _u + ["LAV25"]; _u = _u + ["USMC_Soldier_MG"]; _u = _u + ["USMC_Soldier_AR"]; _u = _u + ["USMC_Soldier_AT"]; _u = _u + ["USMC_Soldier_LAT"]; _u = _u + ["USMC_Soldier"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["BTR90"]; _u = _u + ["BTR90"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["RU_Soldier_SL"]; _u = _u + ["BTR90"]; _u = _u + ["RU_Soldier_MG"]; _u = _u + ["RU_Soldier_MG"]; _u = _u + ["RU_Soldier_AT"]; _u = _u + ["RU_Soldier_LAT"]; _u = _u + ["RU_Soldier_GL"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["RU_Soldier_SL"]; _u = _u + ["BMP3"]; _u = _u + ["RU_Soldier_MG"]; _u = _u + ["RU_Soldier_AT"]; _u = _u + ["RU_Soldier_LAT"]; _u = _u + ["RU_Soldier_GL"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["BMP3"]; _u = _u + ["BMP3"]; _l = _l + [_u]; _k = _k + ["Armored_Light"]; _u = ["T72_RU"]; _u = _u + ["T72_RU"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["T90"]; _u = _u + ["T90"]; _u = _u + ["T72_RU"]; _u = _u + ["T72_RU"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["T90"]; _u = _u + ["T90"]; _u = _u + ["T90"]; _l = _l + [_u]; [_k,_l,_side,_faction] Call Compile preprocessFile "Common\Config\Config_Groups.sqf";/* Groups (Used in towns). */ Private ["_faction","_k","_l","_side","_u"]; _l = [];//--- Unit list _k = [];//--- Type used by AI. _side = "EAST"; _faction = "TKA"; _k = _k + ["Squad"]; _u = ["TK_Soldier_SL_EP1"]; _u = _u + ["TK_Soldier_MG_EP1"]; _u = _u + ["TK_Soldier_AT_EP1"]; _u = _u + ["TK_Soldier_LAT_EP1"]; _u = _u + ["TK_Soldier_Spotter_EP1"]; _u = _u + ["TK_Soldier_AR_EP1"]; _u = _u + ["TK_Soldier_GL_EP1"]; _u = _u + ["TK_Soldier_EP1"]; _l = _l + [_u]; _k = _k + ["Squad_Advanced"]; _u = ["TK_Special_Forces_EP1"]; _u = _u + ["TK_Special_Forces_TL_EP1"]; _u = _u + ["TK_Special_Forces_MG_EP1"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["TK_Soldier_SL_EP1"]; _u = _u + ["TK_Soldier_AR_EP1"]; _u = _u + ["TK_Soldier_AT_EP1"]; _u = _u + ["TK_Soldier_GL_EP1"]; _u = _u + ["TK_Soldier_EP1"]; _l = _l + [_u]; _k = _k + ["Team_MG"]; _u = ["TK_Soldier_SL_EP1"]; _u = _u + ["TK_Soldier_MG_EP1"]; _u = _u + ["TK_Soldier_MG_EP1"]; _u = _u + ["TK_Soldier_GL_EP1"]; _u = _u + ["TK_Soldier_AT_EP1"]; _l = _l + [_u]; _k = _k + ["Team_AT"]; _u = ["TK_Soldier_AT_EP1"]; _u = _u + ["TK_Soldier_AT_EP1"]; _u = _u + ["TK_Soldier_LAT_EP1"]; _u = _u + ["TK_Soldier_EP1"]; _l = _l + [_u]; _k = _k + ["Team_HAT"]; _u = ["TK_Soldier_HAT_EP1"]; _u = _u + ["TK_Soldier_HAT_EP1"]; _u = _u + ["TK_Soldier_AT_EP1"]; _u = _u + ["TK_Soldier_EP1"]; _l = _l + [_u]; _k = _k + ["Team_AA"]; _u = ["TK_Soldier_AA_EP1"]; _u = _u + ["TK_Soldier_AA_EP1"]; _u = _u + ["TK_Soldier_AA_EP1"]; _u = _u + ["TK_Soldier_EP1"]; _l = _l + [_u]; _k = _k + ["Team_Sniper"]; _u = ["TK_Soldier_Spotter_EP1"]; _u = _u + ["TK_Soldier_Sniper_EP1"]; _u = _u + ["TK_Soldier_Sniper_EP1"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["TK_Soldier_SL_EP1"]; _u = _u + ["BTR60_TK_EP1"]; _u = _u + ["BTR60_TK_EP1"]; _u = _u + ["TK_Soldier_MG_EP1"]; _u = _u + ["TK_Soldier_AT_EP1"]; _u = _u + ["TK_Soldier_LAT_EP1"]; _u = _u + ["TK_Soldier_Spotter_EP1"]; _u = _u + ["TK_Soldier_MG_EP1"]; _u = _u + ["TK_Soldier_AR_EP1"]; _u = _u + ["TK_Soldier_GL_EP1"]; _u = _u + ["TK_Soldier_EP1"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["UAZ_MG_TK_EP1"]; _u = _u + ["UAZ_AGS30_TK_EP1"]; _u = _u + ["UAZ_AGS30_TK_EP1"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["LandRover_SPG9_TK_EP1"]; _u = _u + ["LandRover_MG_TK_EP1"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["TK_Soldier_SL_EP1"]; _u = _u + ["BRDM2_TK_EP1"]; _u = _u + ["BRDM2_TK_EP1"]; _l = _l + [_u]; _k = _k + ["AA_Light"]; _u = ["Ural_ZU23_TK_EP1"]; _u = _u + ["TK_Soldier_AA_EP1"]; _u = _u + ["TK_Soldier_AA_EP1"]; _u = _u + ["TK_Soldier_AA_EP1"]; _u = _u + ["TK_Soldier_AA_EP1"]; _l = _l + [_u]; _k = _k + ["AA_Heavy"]; _u = ["ZSU_TK_EP1"]; _u = _u + ["ZSU_TK_EP1"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["TK_Soldier_SL_EP1"]; _u = _u + ["BTR60_TK_EP1"]; _u = _u + ["TK_Soldier_MG_EP1"]; _u = _u + ["TK_Soldier_AT_EP1"]; _u = _u + ["TK_Soldier_LAT_EP1"]; _u = _u + ["TK_Soldier_MG_EP1"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["BTR60_TK_EP1"]; _u = _u + ["BTR60_TK_EP1"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["TK_Soldier_SL_EP1"]; _u = _u + ["BMP2_TK_EP1"]; _u = _u + ["TK_Soldier_MG_EP1"]; _u = _u + ["TK_Soldier_AT_EP1"]; _u = _u + ["TK_Soldier_LAT_EP1"]; _u = _u + ["TK_Soldier_GL_EP1"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["BMP2_TK_EP1"]; _u = _u + ["BMP2_TK_EP1"]; _l = _l + [_u]; _k = _k + ["Armored_Light"]; _u = ["T55_TK_EP1"]; _u = _u + ["T55_TK_EP1"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["T55_TK_EP1"]; _u = _u + ["T72_TK_EP1"]; _u = _u + ["T55_TK_EP1"]; _u = _u + ["T72_TK_EP1"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["T72_TK_EP1"]; _u = _u + ["T72_TK_EP1"]; _u = _u + ["T72_TK_EP1"]; _l = _l + [_u]; [_k,_l,_side,_faction] Call Compile preprocessFile "Common\Config\Config_Groups.sqf";/* Groups (Used in towns). */ Private ["_faction","_k","_l","_side","_u"]; _l = [];//--- Unit list _k = [];//--- Type used by AI. _side = "GUER"; _faction = "TKGUE"; _k = _k + ["Squad"]; _u = ["TK_GUE_Warlord_EP1"]; _u = _u + ["TK_GUE_Soldier_4_EP1"]; _u = _u + ["TK_GUE_Soldier_AR_EP1"]; _u = _u + ["TK_GUE_Soldier_EP1"]; _u = _u + ["TK_GUE_Soldier_5_EP1"]; _u = _u + ["TK_GUE_Soldier_5_EP1"]; _u = _u + ["TK_GUE_Bonesetter_EP1"]; _l = _l + [_u]; _k = _k + ["Squad"]; _u = ["TK_GUE_Warlord_EP1"]; _u = _u + ["TK_GUE_Soldier_4_EP1"]; _u = _u + ["TK_GUE_Soldier_AT_EP1"]; _u = _u + ["TK_GUE_Soldier_AR_EP1"]; _u = _u + ["TK_GUE_Soldier_MG_EP1"]; _u = _u + ["TK_GUE_Soldier_HAT_EP1"]; _u = _u + ["TK_GUE_Soldier_5_EP1"]; _u = _u + ["TK_GUE_Bonesetter_EP1"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["TK_GUE_Soldier_5_EP1"]; _u = _u + ["TK_GUE_Soldier_MG_EP1"]; _u = _u + ["TK_GUE_Soldier_AT_EP1"]; _u = _u + ["TK_GUE_Soldier_4_EP1"]; _u = _u + ["TK_GUE_Soldier_AT_EP1"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["TK_GUE_Soldier_2_EP1"]; _u = _u + ["TK_GUE_Soldier_3_EP1"]; _u = _u + ["TK_GUE_Soldier_4_EP1"]; _u = _u + ["TK_GUE_Soldier_5_EP1"]; _u = _u + ["TK_GUE_Bonesetter_EP1"]; _u = _u + ["TK_GUE_Soldier_EP1"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["TK_GUE_Soldier_5_EP1"]; _u = _u + ["TK_GUE_Soldier_MG_EP1"]; _u = _u + ["TK_GUE_Soldier_AT_EP1"]; _u = _u + ["TK_GUE_Soldier_4_EP1"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["TK_GUE_Soldier_EP1"]; _u = _u + ["TK_GUE_Soldier_AR_EP1"]; _u = _u + ["TK_GUE_Soldier_4_EP1"]; _u = _u + ["TK_GUE_Soldier_HAT_EP1"]; _l = _l + [_u]; _k = _k + ["Team_AT"]; _u = ["TK_GUE_Soldier_AT_EP1"]; _u = _u + ["TK_GUE_Soldier_AT_EP1"]; _u = _u + ["TK_GUE_Soldier_AR_EP1"]; _l = _l + [_u]; _k = _k + ["Team_AT"]; _u = ["TK_GUE_Soldier_EP1"]; _u = _u + ["TK_GUE_Soldier_AR_EP1"]; _u = _u + ["TK_GUE_Soldier_4_EP1"]; _u = _u + ["TK_GUE_Soldier_HAT_EP1"]; _l = _l + [_u]; _k = _k + ["Team_AA"]; _u = ["TK_GUE_Warlord_EP1"]; _u = _u + ["TK_GUE_Soldier_AA_EP1"]; _u = _u + ["TK_GUE_Soldier_AA_EP1"]; _u = _u + ["TK_GUE_Soldier_AR_EP1"]; _l = _l + [_u]; _k = _k + ["Team_Sniper"]; _u = ["TK_GUE_Soldier_Sniper_EP1"]; _u = _u + ["TK_GUE_Soldier_2_EP1"]; _u = _u + ["TK_GUE_Soldier_Sniper_EP1"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["TK_GUE_Warlord_EP1"]; _u = _u + ["Offroad_DSHKM_TK_GUE_EP1"]; _u = _u + ["Offroad_SPG9_TK_GUE_EP1"]; _u = _u + ["Pickup_PK_TK_GUE_EP1"]; _u = _u + ["TK_GUE_Soldier_MG_EP1"]; _u = _u + ["TK_GUE_Soldier_5_EP1"]; _u = _u + ["TK_GUE_Soldier_Sniper_EP1"]; _u = _u + ["TK_GUE_Soldier_HAT_EP1"]; _u = _u + ["TK_GUE_Soldier_AR_EP1"]; _u = _u + ["TK_GUE_Bonesetter_EP1"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["Offroad_DSHKM_TK_GUE_EP1"]; _u = _u + ["Offroad_DSHKM_TK_GUE_EP1"]; _u = _u + ["Offroad_DSHKM_TK_GUE_EP1"]; _u = _u + ["Pickup_PK_TK_GUE_EP1"]; _l = _l + [_u]; _k = _k + ["AA_Light"]; _u = ["TK_GUE_Warlord_EP1"]; _u = _u + ["Ural_ZU23_TK_GUE_EP1"]; _u = _u + ["TK_GUE_Soldier_4_EP1"]; _u = _u + ["TK_GUE_Soldier_AA_EP1"]; _u = _u + ["TK_GUE_Soldier_EP1"]; _l = _l + [_u]; _k = _k + ["AA_Heavy"]; _u = ["Ural_ZU23_TK_GUE_EP1"]; _u = _u + ["Ural_ZU23_TK_GUE_EP1"]; _u = _u + ["Ural_ZU23_TK_GUE_EP1"]; _u = _u + ["TK_GUE_Soldier_AA_EP1"]; _u = _u + ["TK_GUE_Soldier_AA_EP1"]; _u = _u + ["TK_GUE_Soldier_AA_EP1"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["TK_GUE_Soldier_AR_EP1"]; _u = _u + ["BTR40_MG_TK_GUE_EP1"]; _u = _u + ["BRDM2_TK_GUE_EP1"]; _u = _u + ["TK_GUE_Soldier_4_EP1"]; _u = _u + ["TK_GUE_Soldier_EP1"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["BRDM2_TK_GUE_EP1"]; _u = _u + ["BRDM2_TK_GUE_EP1"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["BTR40_MG_TK_GUE_EP1"]; _u = _u + ["TK_GUE_Soldier_4_EP1"]; _u = _u + ["TK_GUE_Soldier_AR_EP1"]; _u = _u + ["TK_GUE_Soldier_EP1"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["TK_GUE_Warlord_EP1"]; _u = _u + ["T34_TK_GUE_EP1"]; _u = _u + ["BTR40_MG_TK_GUE_EP1"]; _u = _u + ["TK_GUE_Soldier_MG_EP1"]; _u = _u + ["TK_GUE_Soldier_4_EP1"]; _u = _u + ["TK_GUE_Soldier_HAT_EP1"]; _u = _u + ["TK_GUE_Soldier_AR_EP1"]; _u = _u + ["TK_GUE_Soldier_Sniper_EP1"]; _u = _u + ["TK_GUE_Soldier_AT_EP1"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["T34_TK_GUE_EP1"]; _u = _u + ["BTR40_MG_TK_GUE_EP1"]; _l = _l + [_u]; _k = _k + ["Armored_Light"]; _u = ["T34_TK_GUE_EP1"]; _u = _u + ["T34_TK_GUE_EP1"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["T55_TK_GUE_EP1"]; _u = _u + ["T55_TK_GUE_EP1"]; _u = _u + ["T55_TK_GUE_EP1"]; _u = _u + ["T55_TK_GUE_EP1"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["T55_TK_GUE_EP1"]; _u = _u + ["T55_TK_GUE_EP1"]; _u = _u + ["T34_TK_GUE_EP1"]; _u = _u + ["T34_TK_GUE_EP1"]; _l = _l + [_u]; [_k,_l,_side,_faction] Call Compile preprocessFile "Common\Config\Config_Groups.sqf";/* Groups (Used in towns). */ Private ["_faction","_k","_l","_side","_u"]; _l = [];//--- Unit list _k = [];//--- Type used by AI. _side = "WEST"; _faction = "US"; _k = _k + ["Squad"]; _u = ["US_Soldier_SL_EP1"]; _u = _u + ["US_Soldier_TL_EP1"]; _u = _u + ["US_Soldier_AR_EP1"]; _u = _u + ["US_Soldier_AR_EP1"]; _u = _u + ["US_Soldier_MG_EP1"]; _u = _u + ["US_Soldier_AT_EP1"]; _u = _u + ["US_Soldier_LAT_EP1"]; _u = _u + ["US_Soldier_EP1"]; _u = _u + ["US_Soldier_Medic_EP1"]; _l = _l + [_u]; _k = _k + ["Squad_Advanced"]; _u = ["US_Delta_Force_TL_EP1"]; _u = _u + ["US_Delta_Force_Assault_EP1"]; _u = _u + ["US_Delta_Force_MG_EP1"]; _u = _u + ["US_Delta_Force_AR_EP1"]; _u = _u + ["US_Delta_Force_EP1"]; _u = _u + ["US_Delta_Force_Medic_EP1"]; _u = _u + ["US_Delta_Force_M14_EP1"]; _u = _u + ["US_Delta_Force_Air_Controller_EP1"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["US_Soldier_SL_EP1"]; _u = _u + ["US_Soldier_TL_EP1"]; _u = _u + ["US_Soldier_AR_EP1"]; _u = _u + ["US_Soldier_LAT_EP1"]; _u = _u + ["US_Soldier_EP1"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["US_Soldier_TL_EP1"]; _u = _u + ["US_Soldier_AR_EP1"]; _u = _u + ["US_Soldier_LAT_EP1"]; _u = _u + ["US_Soldier_EP1"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["US_Soldier_TL_EP1"]; _u = _u + ["US_Soldier_AR_EP1"]; _u = _u + ["US_Soldier_LAT_EP1"]; _u = _u + ["US_Soldier_Medic_EP1"]; _l = _l + [_u]; _k = _k + ["Team_MG"]; _u = ["US_Soldier_TL_EP1"]; _u = _u + ["US_Soldier_MG_EP1"]; _u = _u + ["US_Soldier_AR_EP1"]; _u = _u + ["US_Soldier_LAT_EP1"]; _l = _l + [_u]; _k = _k + ["Team_AT"]; _u = ["US_Soldier_TL_EP1"]; _u = _u + ["US_Soldier_AR_EP1"]; _u = _u + ["US_Soldier_AT_EP1"]; _u = _u + ["US_Soldier_LAT_EP1"]; _l = _l + [_u]; _k = _k + ["Team_HAT"]; _u = ["US_Soldier_HAT_EP1"]; _u = _u + ["US_Soldier_HAT_EP1"]; _u = _u + ["US_Soldier_AT_EP1"]; _u = _u + ["US_Soldier_LAT_EP1"]; _l = _l + [_u]; _k = _k + ["Team_AA"]; _u = ["US_Soldier_TL_EP1"]; _u = _u + ["US_Soldier_AR_EP1"]; _u = _u + ["US_Soldier_AA_EP1"]; _u = _u + ["US_Soldier_AA_EP1"]; _l = _l + [_u]; _k = _k + ["Team_Sniper"]; _u = ["US_Soldier_Sniper_EP1"]; _u = _u + ["US_Soldier_Marksman_EP1"]; _u = _u + ["US_Soldier_Sniper_EP1"]; _u = _u + ["US_Soldier_Spotter_EP1"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["US_Soldier_TL_EP1"]; _u = _u + ["HMMWV_M998_crows_M2_DES_EP1"]; _u = _u + ["HMMWV_M998_crows_MK19_DES_EP1"]; _u = _u + ["US_Soldier_AR_EP1"]; _u = _u + ["US_Soldier_AT_EP1"]; _u = _u + ["US_Soldier_LAT_EP1"]; _u = _u + ["US_Soldier_EP1"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["US_Soldier_TL_EP1"]; _u = _u + ["HMMWV_TOW_DES_EP1"]; _u = _u + ["HMMWV_TOW_DES_EP1"]; _u = _u + ["US_Soldier_AR_EP1"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["HMMWV_M998_crows_M2_DES_EP1"]; _u = _u + ["HMMWV_M998_crows_MK19_DES_EP1"]; _u = _u + ["HMMWV_TOW_DES_EP1"]; _l = _l + [_u]; _k = _k + ["AA_Light"]; _u = ["US_Soldier_TL_EP1"]; _u = _u + ["HMMWV_Avenger_DES_EP1"]; _u = _u + ["HMMWV_Avenger_DES_EP1"]; _u = _u + ["US_Soldier_AA_EP1"]; _l = _l + [_u]; _k = _k + ["AA_Heavy"]; _u = ["M6_EP1"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["M1126_ICV_M2_EP1"]; _u = _u + ["US_Soldier_AR_EP1"]; _u = _u + ["US_Soldier_LAT_EP1"]; _u = _u + ["US_Soldier_Medic_EP1"]; _u = _u + ["US_Soldier_EP1"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["M1126_ICV_M2_EP1"]; _u = _u + ["M1126_ICV_mk19_EP1"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["M1126_ICV_M2_EP1"]; _u = _u + ["M1135_ATGMV_EP1"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["M2A2_EP1"]; _u = _u + ["US_Soldier_AR_EP1"]; _u = _u + ["US_Soldier_LAT_EP1"]; _u = _u + ["US_Soldier_Medic_EP1"]; _u = _u + ["US_Soldier_EP1"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["M2A3_EP1"]; _u = _u + ["M2A3_EP1"]; _l = _l + [_u]; _k = _k + ["Armored_Light"]; _u = ["M1A1_US_DES_EP1"]; _u = _u + ["M1A1_US_DES_EP1"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["M1A2_US_TUSK_MG_EP1"]; _u = _u + ["M1A2_US_TUSK_MG_EP1"]; _u = _u + ["M1A1_US_DES_EP1"]; _u = _u + ["M1A1_US_DES_EP1"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["M1A2_US_TUSK_MG_EP1"]; _u = _u + ["M1A2_US_TUSK_MG_EP1"]; _u = _u + ["M1A2_US_TUSK_MG_EP1"]; _l = _l + [_u]; [_k,_l,_side,_faction] Call Compile preprocessFile "Common\Config\Config_Groups.sqf";/* Groups (Used in towns). */ Private ["_faction","_k","_l","_side","_u"]; _l = [];//--- Unit list _k = [];//--- Type used by AI. _side = "WEST"; _faction = "USMC"; _k = _k + ["Squad"]; _u = ["USMC_Soldier_SL"]; _u = _u + ["USMC_Soldier_TL"]; _u = _u + ["USMC_Soldier_AR"]; _u = _u + ["USMC_Soldier_AR"]; _u = _u + ["USMC_Soldier_MG"]; _u = _u + ["USMC_Soldier_AT"]; _u = _u + ["USMC_Soldier_LAT"]; _u = _u + ["USMC_Soldier"]; _u = _u + ["USMC_Soldier_Medic"]; _l = _l + [_u]; _k = _k + ["Squad_Advanced"]; _u = ["FR_TL"]; _u = _u + ["FR_AR"]; _u = _u + ["FR_GL"]; _u = _u + ["FR_Marksman"]; _u = _u + ["FR_R"]; _u = _u + ["FR_Corpsman"]; _u = _u + ["FR_Sapper"]; _u = _u + ["FR_AC"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["USMC_Soldier_TL"]; _u = _u + ["USMC_Soldier_AR"]; _u = _u + ["USMC_Soldier_LAT"]; _u = _u + ["USMC_Soldier"]; _l = _l + [_u]; _k = _k + ["Team"]; _u = ["USMC_Soldier_TL"]; _u = _u + ["USMC_Soldier_AR"]; _u = _u + ["USMC_Soldier_LAT"]; _u = _u + ["USMC_Soldier_Medic"]; _l = _l + [_u]; _k = _k + ["Team_MG"]; _u = ["USMC_Soldier_TL"]; _u = _u + ["USMC_Soldier_MG"]; _u = _u + ["USMC_Soldier_AR"]; _u = _u + ["USMC_Soldier_LAT"]; _l = _l + [_u]; _k = _k + ["Team_AT"]; _u = ["USMC_Soldier_TL"]; _u = _u + ["USMC_Soldier_AR"]; _u = _u + ["USMC_Soldier_AT"]; _u = _u + ["USMC_Soldier_AT"]; _u = _u + ["USMC_Soldier_LAT"]; _l = _l + [_u]; _k = _k + ["Team_HAT"]; _u = ["USMC_Soldier_HAT"]; _u = _u + ["USMC_Soldier_HAT"]; _u = _u + ["USMC_Soldier_AT"]; _u = _u + ["USMC_Soldier_LAT"]; _l = _l + [_u]; _k = _k + ["Team_AA"]; _u = ["USMC_Soldier_TL"]; _u = _u + ["USMC_Soldier_AR"]; _u = _u + ["USMC_Soldier_AA"]; _u = _u + ["USMC_Soldier_AA"]; _l = _l + [_u]; _k = _k + ["Team_Sniper"]; _u = ["USMC_SoldierS_Sniper"]; _u = _u + ["USMC_SoldierS_Spotter"]; _u = _u + ["USMC_SoldierS_Sniper"]; _u = _u + ["USMC_SoldierS"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["USMC_Soldier_TL"]; _u = _u + ["HMMWV_M2"]; _u = _u + ["HMMWV_Mk19"]; _u = _u + ["USMC_Soldier_AR"]; _u = _u + ["USMC_Soldier_LAT"]; _u = _u + ["USMC_Soldier"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["USMC_Soldier_TL"]; _u = _u + ["HMMWV_TOW"]; _u = _u + ["HMMWV_TOW"]; _u = _u + ["USMC_Soldier_AR"]; _l = _l + [_u]; _k = _k + ["Motorized"]; _u = ["HMMWV_M2"]; _u = _u + ["HMMWV_Mk19"]; _u = _u + ["HMMWV_TOW"]; _l = _l + [_u]; _k = _k + ["AA_Light"]; _u = ["USMC_Soldier_TL"]; _u = _u + ["HMMWV_Avenger"]; _u = _u + ["HMMWV_Avenger"]; _u = _u + ["USMC_Soldier_AA"]; _l = _l + [_u]; _k = _k + ["AA_Heavy"]; _u = ["HMMWV_Avenger"]; _u = _u + ["HMMWV_Avenger"]; _u = _u + ["HMMWV_Avenger"]; _u = _u + ["HMMWV_Avenger"]; _u = _u + ["USMC_Soldier_AA"]; _u = _u + ["USMC_Soldier_AA"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["USMC_Soldier_TL"]; _u = _u + ["LAV25"]; _u = _u + ["USMC_Soldier_MG"]; _u = _u + ["USMC_Soldier_AR"]; _u = _u + ["USMC_Soldier_AT"]; _u = _u + ["USMC_Soldier_LAT"]; _u = _u + ["USMC_Soldier"]; _l = _l + [_u]; _k = _k + ["Mechanized"]; _u = ["LAV25"]; _u = _u + ["LAV25"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["USMC_Soldier_SL"]; _u = _u + ["AAV"]; _u = _u + ["USMC_Soldier_TL"]; _u = _u + ["USMC_Soldier_AR"]; _u = _u + ["USMC_Soldier_LAT"]; _u = _u + ["USMC_Soldier_Medic"]; _u = _u + ["USMC_Soldier"]; _l = _l + [_u]; _k = _k + ["Mechanized_Heavy"]; _u = ["AAV"]; _u = _u + ["AAV"]; _l = _l + [_u]; _k = _k + ["Armored_Light"]; _u = ["M1A1"]; _u = _u + ["M1A1"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["M1A2_TUSK_MG"]; _u = _u + ["M1A2_TUSK_MG"]; _u = _u + ["M1A1"]; _u = _u + ["M1A1"]; _l = _l + [_u]; _k = _k + ["Armored_Heavy"]; _u = ["M1A2_TUSK_MG"]; _u = _u + ["M1A2_TUSK_MG"]; _u = _u + ["M1A2_TUSK_MG"]; _l = _l + [_u]; [_k,_l,_side,_faction] Call Compile preprocessFile "Common\Config\Config_Groups.sqf";Private ["_m","_side","_u"]; _side = _this; //--- Loadout - Magazines. _m = ['30Rnd_762x39_AK47']; _m = _m + ['30Rnd_545x39_AK']; _m = _m + ['30Rnd_545x39_AKSD']; _m = _m + ['64Rnd_9x19_Bizon']; _m = _m + ['64Rnd_9x19_SD_Bizon']; _m = _m + ['100Rnd_762x54_PK']; _m = _m + ['75Rnd_545x39_RPK']; _m = _m + ['5x_22_LR_17_HMR']; _m = _m + ['10Rnd_762x54_SVD']; _m = _m + ['8Rnd_B_Saiga12_74Slug']; _m = _m + ['5Rnd_127x108_KSVK']; _m = _m + ['10Rnd_9x39_SP5_VSS']; _m = _m + ['20Rnd_9x39_SP5_VSS']; _m = _m + ['PG7V']; _m = _m + ['PG7VL']; _m = _m + ['OG7']; _m = _m + ['PG7VR']; _m = _m + ['RPG18']; _m = _m + ['AT13']; _m = _m + ['Igla']; _m = _m + ['Strela']; _m = _m + ['Laserbatteries']; _m = _m + ['8Rnd_9x18_Makarov']; _m = _m + ['8Rnd_9x18_MakarovSD']; _m = _m + ['HandGrenade_East']; _m = _m + ['HandGrenade_Stone']; _m = _m + ['SmokeShell']; _m = _m + ['SmokeShellRed']; _m = _m + ['SmokeShellGreen']; _m = _m + ['SmokeShellBlue']; _m = _m + ['SmokeShellYellow']; _m = _m + ['SmokeShellOrange']; _m = _m + ['SmokeShellPurple']; _m = _m + ['FlareWhite_GP25']; _m = _m + ['FlareYellow_GP25']; _m = _m + ['FlareGreen_GP25']; _m = _m + ['FlareRed_GP25']; _m = _m + ['1Rnd_HE_GP25']; _m = _m + ['1Rnd_SMOKE_GP25']; _m = _m + ['1Rnd_SMOKERED_GP25']; _m = _m + ['1Rnd_SMOKEGREEN_GP25']; _m = _m + ['1Rnd_SMOKEYELLOW_GP25']; _m = _m + ['MineE']; _m = _m + ['PipeBomb']; _m = _m + ["ACE_30Rnd_762x39_AP_AK47"]; _m = _m + ["ACE_30Rnd_762x39_AP_S_AK47"]; _m = _m + ["ACE_30Rnd_762x39_S_AK47"]; _m = _m + ["ACE_30Rnd_762x39_SD_AK47"]; _m = _m + ["ACE_30Rnd_762x39_T_AK47"]; _m = _m + ["ACE_40Rnd_762x39_AP_AK47"]; _m = _m + ["ACE_40Rnd_762x39_AP_S_AK47"]; _m = _m + ["ACE_75Rnd_762x39_SD_AK47"]; _m = _m + ["ACE_75Rnd_762x39_B_AK47"]; _m = _m + ["ACE_30Rnd_545x39_AP_AK"]; _m = _m + ["ACE_30Rnd_545x39_EP_AK"]; _m = _m + ["ACE_30Rnd_545x39_T_AK"]; _m = _m + ["ACE_10Rnd_9x39_SP6_VSS"]; _m = _m + ["ACE_20Rnd_9x39_SP6_VSS"]; _m = _m + ["ACE_20Rnd_9x39_B_OC14"]; _m = _m + ["ACE_20Rnd_9x39_B_SP6_OC14"]; _m = _m + ["ACE_20Rnd_9x39_S_OC14"]; _m = _m + ["ACE_20Rnd_9x39_S_SP6_OC14"]; _m = _m + ["ACE_TBG7V_PGO7"]; _m = _m + ["ACE_1Rnd_CS_GP25"]; _m = _m + ["ACE_1Rnd_HE_GP25P"]; _m = _m + ["ACE_RPG29_PG29"]; _m = _m + ["ACE_RPG29_TBG29"]; _m = [_m, _side] Call Compile preprocessFile "Common\Config\Config_SortMagazines.sqf"; //--- Loadout - Weapons. _u = ['AK_47_M']; _u = _u + ['AK_47_S']; _u = _u + ['AK_74']; _u = _u + ['AK_74_GL']; _u = _u + ['AK_107_kobra']; _u = _u + ['AK_107_GL_kobra']; _u = _u + ['AK_107_pso']; _u = _u + ['AK_107_GL_pso']; _u = _u + ['AKS_74_kobra']; _u = _u + ['AKS_74_pso']; _u = _u + ['AKS_74_U']; _u = _u + ['AKS_74_UN_kobra']; _u = _u + ['AKS_GOLD']; _u = _u + ['bizon']; _u = _u + ['bizon_silenced']; _u = _u + ['PK']; _u = _u + ['Pecheneg']; _u = _u + ['RPK_74']; _u = _u + ['huntingrifle']; _u = _u + ['SVD']; _u = _u + ['SVD_CAMO']; _u = _u + ['Saiga12K']; _u = _u + ['ksvk']; _u = _u + ['VSS_vintorez']; _u = _u + ['RPG7V']; _u = _u + ['RPG18']; _u = _u + ['MetisLauncher']; _u = _u + ['Igla']; _u = _u + ['Strela']; _u = _u + ['Laserdesignator']; _u = _u + ['Binocular']; _u = _u + ['NVGoggles']; _u = _u + ['Makarov']; _u = _u + ['MakarovSD']; _u = _u + ['ItemCompass']; _u = _u + ['ItemGPS']; _u = _u + ['ItemMap']; _u = _u + ['ItemRadio']; _u = _u + ['ItemWatch']; _u = _u + ["ACE_AK103"]; _u = _u + ["ACE_AK103_1P29"]; _u = _u + ["ACE_AK103_GL"]; _u = _u + ["ACE_AK103_GL_1P29"]; _u = _u + ["ACE_AK103_GL_Kobra"]; _u = _u + ["ACE_AK103_GL_PSO"]; _u = _u + ["ACE_AK103_Kobra"]; _u = _u + ["ACE_AK103_PSO"]; _u = _u + ["ACE_AK104"]; _u = _u + ["ACE_AK104_1P29"]; _u = _u + ["ACE_AK104_Kobra"]; _u = _u + ["ACE_AK104_PSO"]; _u = _u + ["ACE_AK105"]; _u = _u + ["ACE_AK105_1P29"]; _u = _u + ["ACE_AK105_Kobra"]; _u = _u + ["ACE_AK105_PSO"]; _u = _u + ["ACE_AK74M_FL_F"]; _u = _u + ["ACE_AK74M_1P78_FL_F"]; _u = _u + ["ACE_AK74M_TWS_FL_F"]; _u = _u + ["ACE_AK74M_GL"]; _u = _u + ["ACE_AK74M_GL_1P78"]; _u = _u + ["ACE_AK74M_GL_TWS"]; _u = _u + ["ACE_AK74M_GL_Kobra"]; _u = _u + ["ACE_AK74M_GL_NSPU"]; _u = _u + ["ACE_AK74M_GL_PSO"]; _u = _u + ["ACE_AK74M_GL_1P29"]; _u = _u + ["ACE_AK74M_Kobra_FL_F"]; _u = _u + ["ACE_AK74M_NSPU_FL_F"]; _u = _u + ["ACE_AK74M_PSO_FL_F"]; _u = _u + ["ACE_AK74M_SD_F"]; _u = _u + ["ACE_AK74M_SD_1P78_F"]; _u = _u + ["ACE_AK74M_SD_TWS_F"]; _u = _u + ["ACE_AK74M_SD_NSPU_F"]; _u = _u + ["ACE_AK74M_SD_PSO_F"]; _u = _u + ["ACE_AKS74_GP25"]; _u = _u + ["ACE_AKS74P"]; _u = _u + ["ACE_AKS74P_1P29"]; _u = _u + ["ACE_AKS74P_Kobra"]; _u = _u + ["ACE_AKS74P_PSO"]; _u = _u + ["ACE_AKS74P_GL"]; _u = _u + ["ACE_AKS74P_GL_1P29"]; _u = _u + ["ACE_AKS74P_GL_Kobra"]; _u = _u + ["ACE_AKS74P_GL_PSO"]; _u = _u + ["ACE_Val_Kobra"]; _u = _u + ["ACE_Val_PSO"]; _u = _u + ["ACE_Val"]; _u = _u + ["ACE_gr1"]; _u = _u + ["ACE_gr1sp"]; _u = _u + ["ACE_gr1sd"]; _u = _u + ["ACE_gr1sdsp"]; _u = _u + ["ACE_oc14"]; _u = _u + ["ACE_oc14gl"]; _u = _u + ["ACE_oc14glsp"]; _u = _u + ["ACE_oc14sp"]; _u = _u + ["ACE_oc14sd"]; _u = _u + ["ACE_oc14sdsp"]; _u = _u + ["ACE_SVD_Bipod"]; _u = _u + ["ACE_RPK74M"]; _u = _u + ["ACE_RPK74M_1P29"]; _u = _u + ["ACE_RMG"]; _u = _u + ["ACE_RPG22"]; _u = _u + ["ACE_RPG27"]; _u = _u + ["ACE_RPG29"]; _u = _u + ["ACE_RPG7V_PGO7"]; _u = _u + ["ACE_RPOM"]; _u = _u + ["ACE_GlassesGasMask_RU"]; _u = _u + ["ACE_Epinephrine"]; _u = _u + ["ACE_Morphine"]; _u = _u + ["ACE_Medkit"]; _u = _u + ["ACE_Bandage"]; _u = _u + ["ACE_GlassesTactical"]; _u = _u + ["ACE_SpottingScope"]; _u = _u + ["ACE_GlassesLHD_glasses"]; _u = _u + ["ACE_GlassesBalaklavaOlive"]; _u = _u + ["ACE_Earplugs"]; _u = _u + ["ACE_GlassesLHD_glasses"]; [_u, _m, _side] Call Compile preprocessFile "Common\Config\Config_SortWeapons.sqf"; //--- Loadout - Templates (note that backpacks content require the weapons to be first), use -1 to use the default BP content. _u = [[['AK_107_kobra','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','HandGrenade_East','SmokeShellRed','8Rnd_9x18_Makarov'],[8,2,2,8]]]]; _u = _u + [[['AK_74_GL','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','HandGrenade_East','1Rnd_HE_GP25'],[10,2,8]]]]; _u = _u + [[['AKS_74_kobra','RPG18','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','RPG18'],[6,1]]]]; _u = _u + [[['AKS_74_U','RPG7V','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','PG7VL','OG7'],[6,2,1]]]]; _u = _u + [[['AK_107_kobra','MetisLauncher','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','AT13'],[6,1]]]]; _u = _u + [[['AKS_74_U','Strela','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','Strela'],[6,1]]]]; _u = _u + [[['AK_107_pso','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','MineE','8Rnd_9x18_Makarov'],[6,3,8]]]]; _u = _u + [[['VSS_vintorez','MakarovSD','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['20Rnd_9x39_SP5_VSS','PipeBomb','8Rnd_9x18_MakarovSD'],[6,3,8]]]]; _u = _u + [[['PK','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['100Rnd_762x54_PK','SmokeShellRed','8Rnd_9x18_Makarov'],[5,2,8]]]]; _u = _u + [[['Pecheneg','Makarov','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['100Rnd_762x54_PK','SmokeShellRed','8Rnd_9x18_Makarov'],[5,2,8]]]]; _u = _u + [[['SVD','MakarovSD','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['10Rnd_762x54_SVD','HandGrenade_East','8Rnd_9x18_MakarovSD'],[10,2,8]]]]; _u = _u + [[['ksvk','MakarovSD','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['5Rnd_127x108_KSVK','HandGrenade_East','8Rnd_9x18_MakarovSD'],[10,2,8]]]]; [_u, _side] Call Compile preprocessFile "Common\Config\Config_SetTemplates.sqf";Private ["_m","_side","_u"]; _side = _this; //--- Loadout - Magazines. _m = ['30Rnd_556x45_Stanag']; _m = _m + ['30Rnd_556x45_StanagSD']; _m = _m + ['20Rnd_556x45_Stanag']; _m = _m + ['30Rnd_556x45_G36']; _m = _m + ['30Rnd_556x45_G36SD']; _m = _m + ['100Rnd_556x45_BetaCMag']; _m = _m + ['5Rnd_762x51_M24']; _m = _m + ['20Rnd_762x51_DMR']; _m = _m + ['10Rnd_127x99_m107']; _m = _m + ['100Rnd_762x51_M240']; _m = _m + ['100Rnd_556x45_M249']; _m = _m + ['200Rnd_556x45_M249']; _m = _m + ['20Rnd_762x51_B_SCAR']; _m = _m + ['20Rnd_762x51_SB_SCAR']; _m = _m + ['6Rnd_HE_M203']; _m = _m + ['6Rnd_FlareWhite_M203']; _m = _m + ['6Rnd_FlareGreen_M203']; _m = _m + ['6Rnd_FlareRed_M203']; _m = _m + ['6Rnd_FlareYellow_M203']; _m = _m + ['6Rnd_Smoke_M203']; _m = _m + ['6Rnd_SmokeRed_M203']; _m = _m + ['6Rnd_SmokeGreen_M203']; _m = _m + ['6Rnd_SmokeYellow_M203']; _m = _m + ['M136']; _m = _m + ['MAAWS_HEAT']; _m = _m + ['MAAWS_HEDP']; _m = _m + ['Javelin']; _m = _m + ['Stinger']; _m = _m + ['Laserbatteries']; _m = _m + ['15Rnd_9x19_M9']; _m = _m + ['15Rnd_9x19_M9SD']; _m = _m + ['7Rnd_45ACP_1911']; _m = _m + ['17Rnd_9x19_glock17']; _m = _m + ['HandGrenade_West']; _m = _m + ['HandGrenade_Stone']; _m = _m + ['IR_Strobe_Target']; _m = _m + ['IR_Strobe_Marker']; _m = _m + ['SmokeShell']; _m = _m + ['SmokeShellRed']; _m = _m + ['SmokeShellGreen']; _m = _m + ['SmokeShellBlue']; _m = _m + ['SmokeShellYellow']; _m = _m + ['SmokeShellOrange']; _m = _m + ['SmokeShellPurple']; _m = _m + ['FlareWhite_M203']; _m = _m + ['FlareYellow_M203']; _m = _m + ['FlareGreen_M203']; _m = _m + ['FlareRed_M203']; _m = _m + ['1Rnd_HE_M203']; _m = _m + ['1Rnd_Smoke_M203']; _m = _m + ['1Rnd_SmokeRed_M203']; _m = _m + ['1Rnd_SmokeGreen_M203']; _m = _m + ['1Rnd_SmokeYellow_M203']; _m = _m + ['Mine']; _m = _m + ['PipeBomb']; _m = _m + ["ACE_10Rnd_127x99_T_m107"]; _m = _m + ["ACE_10Rnd_127x99_Raufoss_m107"]; _m = _m + ["ACE_5Rnd_25x59_HEDP_Barrett"]; _m = _m + ["ACE_5Rnd_127x99_B_TAC50"]; _m = _m + ["ACE_5Rnd_127x99_S_TAC50"]; _m = _m + ["ACE_5Rnd_127x99_T_TAC50"]; _m = _m + ["ACE_30Rnd_556x45_T_G36"]; _m = _m + ["ACE_30Rnd_556x45_T_Stanag"]; _m = _m + ["ACE_200Rnd_556x45_T_M249"]; _m = _m + ["ACE_100Rnd_556x45_T_M249"]; _m = _m + ["ACE_15Rnd_9x19_P226"]; _m = _m + ["ACE_40Rnd_B_46x30_MP7"]; _m = _m + ["ACE_25Rnd_1143x23_B_UMP45"]; _m = _m + ["ACE_25Rnd_1143x23_S_UMP45"]; _m = _m + ["ACE_12Rnd_45ACP_USP"]; _m = _m + ["ACE_12Rnd_45ACP_USPSD"]; _m = _m + ["ACE_20Rnd_762x51_B_HK417"]; _m = _m + ["ACE_20Rnd_762x51_T_HK417"]; _m = [_m, _side] Call Compile preprocessFile "Common\Config\Config_SortMagazines.sqf"; //--- Loadout - Weapons. _u = ['M16A2']; _u = _u + ['ACE_G36A2_Bipod_D']; _u = _u + ['ACE_G36A1_AG36A1_D']; _u = _u + ['ACE_M60']; _u = _u + ['ACE_M240L']; _u = _u + ['ACE_M240L_M145']; _u = _u + ['ACE_HK416_D10']; _u = _u + ['ACE_HK416_D10_AIM']; _u = _u + ['ACE_HK416_D10_COMPM3']; _u = _u + ['ACE_HK416_D10_COMPM3_SD']; _u = _u + ['ACE_HK416_D10_Holo']; _u = _u + ['ACE_HK416_D10_M320']; _u = _u + ['ACE_HK416_D10_SD']; _u = _u + ['ACE_HK416_D14']; _u = _u + ['ACE_HK416_D14_ACOG_PVS14']; _u = _u + ['ACE_HK416_D14_COMPM3']; _u = _u + ['ACE_HK416_D14_COMPM3_M320']; _u = _u + ['ACE_HK416_D14_SD']; _u = _u + ['ACE_HK417_Eotech_4x']; _u = _u + ['ACE_HK417_leupold']; _u = _u + ['ACE_HK417_micro']; _u = _u + ['ACE_HK417_Shortdot']; _u = _u + ['ACE_HK416_D14_TWS']; _u = _u + ['ACE_M4']; _u = _u + ['ACE_M4_ACOG']; _u = _u + ['ACE_M4_Aim']; _u = _u + ['ACE_M4_AIM_GL']; _u = _u + ['ACE_M4_Eotech']; _u = _u + ['ACE_M4_Eotech_GL']; _u = _u + ['ACE_M4_GL']; _u = _u + ['ACE_M4_RCO_GL']; _u = _u + ['ACE_M4A1_ACOG']; _u = _u + ['ACE_M4A1_ACOG_SD']; _u = _u + ['ACE_M4A1_AIM_GL']; _u = _u + ['ACE_M4A1_AIM_GL_SD']; _u = _u + ['ACE_M4A1_Aim_SD']; _u = _u + ['ACE_M4A1_Eotech']; _u = _u + ['ACE_M4A1_GL']; _u = _u + ['ACE_M4A1_GL_SD']; _u = _u + ['ACE_SOC_M4A1']; _u = _u + ['ACE_SOC_M4A1_Aim']; _u = _u + ['ACE_SOC_M4A1_AIM_SD']; _u = _u + ['ACE_SOC_M4A1_Eotech']; _u = _u + ['ACE_SOC_M4A1_Eotech_4x']; _u = _u + ['ACE_SOC_M4A1_GL']; _u = _u + ['ACE_SOC_M4A1_GL_13']; _u = _u + ['ACE_SOC_M4A1_GL_AIMPOINT']; _u = _u + ['ACE_SOC_M4A1_GL_EOTECH']; _u = _u + ['ACE_SOC_M4A1_GL_SD']; _u = _u + ['ACE_SOC_M4A1_RCO_GL']; _u = _u + ['ACE_SOC_M4A1_SD_9']; _u = _u + ['ACE_SOC_M4A1_SHORTDOT']; _u = _u + ['ACE_SOC_M4A1_SHORTDOT_SD']; _u = _u + ['ACE_SPAS12']; _u = _u + ['ACE_UMP45']; _u = _u + ['ACE_UMP45_AIM']; _u = _u + ['ACE_UMP45_AIM_SD']; _u = _u + ['ACE_UMP45_SD']; _u = _u + ['ACE_Mk12mod1']; _u = _u + ['ACE_Mk12mod1_SD']; _u = _u + ['ACE_MP5A4']; _u = _u + ['ACE_MP5A5']; _u = _u + ['ACE_MP5SD']; _u = _u + ['ACE_MP7']; _u = _u + ['ACE_MP7_RSAS']; _u = _u + ['ACE_M109']; _u = _u + ['ACE_M110']; _u = _u + ['ACE_M110_SD']; _u = _u + ['ACE_TAC50']; _u = _u + ['ACE_TAC50_SD']; _u = _u + ['ACE_MG36_D']; _u = _u + ['ACE_SOC_M4A1_TWS']; _u = _u + ['ACE_VTAC_RUSH72_ACU']; _u = _u + ['ACE_BackPack_ACR_TT']; _u = _u + ['ACE_CharliePack_ACU']; _u = _u + ['ACE_CharliePack_ACU_Medic']; _u = _u + ['ACE_USP']; _u = _u + ['ACE_USPSD']; _u = _u + ['ACE_P226']; _u = _u + ['ACE_HuntIR_M203']; _u = _u + ['ACE_FlareIR_M203']; _u = _u + ['ACE_Earplugs']; _u = _u + ['ACE_GlassesBalaklava']; _u = _u + ['ACE_GlassesGasMask_US']; _u = _u + ['ACE_GlassesTactical']; _u = _u + ['ACE_GlassesLHD_glasses']; _u = _u + ['ACE_HuntIR_monitor']; _u = _u + ['ACE_Javelin_CLU']; _u = _u + ['ACE_SpottingScope']; _u = _u + ['ACE_Kestrel4500']; _u = _u + ['M16A2GL']; _u = _u + ['M24_des_EP1']; _u = _u + ['m240_scoped_EP1']; _u = _u + ['M60A4_EP1']; _u = _u + ['Mk_48_DES_EP1']; _u = _u + ['M249_EP1']; _u = _u + ['M249_TWS_EP1']; _u = _u + ['M249_m145_EP1']; _u = _u + ['M4A1']; _u = _u + ['M4A3_CCO_EP1']; _u = _u + ['M4A3_RCO_GL_EP1']; _u = _u + ['G36C_camo']; _u = _u + ['G36_C_SD_camo']; _u = _u + ['G36A_camo']; _u = _u + ['G36K_camo']; _u = _u + ['MG36_camo']; _u = _u + ['M32_EP1']; _u = _u + ['M79_EP1']; _u = _u + ['Mk13_EP1']; _u = _u + ['M14_EP1']; _u = _u + ['m107']; _u = _u + ['m107_TWS_EP1']; _u = _u + ['M110_TWS_EP1']; _u = _u + ['M110_NVG_EP1']; _u = _u + ['SCAR_L_CQC']; _u = _u + ['SCAR_L_CQC_Holo']; _u = _u + ['SCAR_L_STD_Mk4CQT']; _u = _u + ['SCAR_L_STD_EGLM_RCO']; _u = _u + ['SCAR_L_CQC_EGLM_Holo']; _u = _u + ['SCAR_L_STD_EGLM_TWS']; _u = _u + ['SCAR_L_STD_HOLO']; _u = _u + ['SCAR_H_CQC_CCO']; _u = _u + ['SCAR_H_CQC_CCO_SD']; _u = _u + ['SCAR_H_STD_EGLM_Spect']; _u = _u + ['SCAR_H_LNG_Sniper']; _u = _u + ['SCAR_H_LNG_Sniper_SD']; _u = _u + ['SCAR_H_STD_TWS_SD']; _u = _u + ['M136']; _u = _u + ['MAAWS']; _u = _u + ['Javelin']; _u = _u + ['Stinger']; _u = _u + ['Laserdesignator']; _u = _u + ['Binocular']; _u = _u + ['NVGoggles']; _u = _u + ['Binocular_Vector']; _u = _u + ['Colt1911']; _u = _u + ['M9']; _u = _u + ['M9SD']; _u = _u + ['glock17_EP1']; _u = _u + ['ItemCompass']; _u = _u + ['ItemGPS']; _u = _u + ['ItemMap']; _u = _u + ['ItemRadio']; _u = _u + ['ItemWatch']; _u = _u + ['US_Assault_Pack_EP1']; _u = _u + ['US_Assault_Pack_Ammo_EP1']; _u = _u + ['US_Assault_Pack_AmmoSAW_EP1']; _u = _u + ['US_Assault_Pack_AT_EP1']; _u = _u + ['US_Assault_Pack_Explosives_EP1']; _u = _u + ['US_Patrol_Pack_EP1']; _u = _u + ['US_Patrol_Pack_Ammo_EP1']; _u = _u + ['US_Patrol_Pack_Specops_EP1']; _u = _u + ['US_Backpack_EP1']; _u = _u + ['US_Backpack_AmmoMG_EP1']; _u = _u + ['US_Backpack_AT_EP1']; _u = _u + ['US_Backpack_Specops_EP1']; _u = _u + ['Tripod_Bag']; _u = _u + ['M2HD_mini_TriPod_US_Bag_EP1']; _u = _u + ['M2StaticMG_US_Bag_EP1']; _u = _u + ['MK19_TriPod_US_Bag_EP1']; _u = _u + ['TOW_TriPod_US_Bag_EP1']; _u = _u + ['M252_US_Bag_EP1']; _u = _u + ["ACE_Epinephrine"]; _u = _u + ["ACE_Morphine"]; _u = _u + ["ACE_Medkit"]; _u = _u + ["ACE_Bandage"]; [_u, _m, _side] Call Compile preprocessFile "Common\Config\Config_SortWeapons.sqf"; //--- Loadout - Templates (note that backpacks content require the weapons to be first), use -1 to use the default BP content. _u = [[['SCAR_L_CQC','Colt1911','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','HandGrenade_West','SmokeShellBlue','7Rnd_45ACP_1911'],[8,2,2,8]]]]; _u = _u + [[['M16A2GL','US_Assault_Pack_Ammo_EP1','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','HandGrenade_West','1Rnd_HE_M203'],[10,2,8]],-1]]; _u = _u + [[['SCAR_L_CQC_Holo','M136','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','M136'],[6,1]]]]; _u = _u + [[['SCAR_H_CQC_CCO','MAAWS','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['20rnd_762x51_B_SCAR','MAAWS_HEAT'],[6,2]]]]; _u = _u + [[['M4A3_CCO_EP1','Javelin','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','Javelin'],[6,1]]]]; _u = _u + [[['SCAR_L_STD_Mk4CQT','Stinger','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','Stinger'],[6,1]]]]; _u = _u + [[['SCAR_L_CQC','M9','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','Mine','15Rnd_9x19_M9'],[6,3,8]]]]; _u = _u + [[['SCAR_H_CQC_CCO_SD','M9SD','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['20Rnd_762x51_SB_SCAR','PipeBomb','15Rnd_9x19_M9SD'],[6,3,8]]]]; _u = _u + [[['m240_scoped_EP1','Colt1911','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['100Rnd_762x51_M240','SmokeShellBlue','7Rnd_45ACP_1911'],[5,2,8]]]]; _u = _u + [[['M249_m145_EP1','Colt1911','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['200Rnd_556x45_M249','SmokeShellBlue','7Rnd_45ACP_1911'],[5,2,8]]]]; _u = _u + [[['M14_EP1','M9SD','NVGoggles','Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['20Rnd_762x51_DMR','HandGrenade_West','15Rnd_9x19_M9SD'],[10,2,8]]]]; _u = _u + [[['M110_TWS_EP1','M9SD','NVGoggles','Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['20Rnd_762x51_B_SCAR','HandGrenade_West','15Rnd_9x19_M9SD'],[10,2,8]]]]; _u = _u + [[['m107','M9SD','NVGoggles','Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['10Rnd_127x99_m107','HandGrenade_West','15Rnd_9x19_M9SD'],[10,2,8]]]]; [_u, _side] Call Compile preprocessFile "Common\Config\Config_SetTemplates.sqf";Private ["_m","_side","_u"]; _side = _this; //--- Loadout - Magazines. _m = ['5Rnd_127x99_AS50']; _m = _m + ['5Rnd_86x70_L115A1']; _m = _m + ['30Rnd_556x45_Stanag']; _m = _m + ['30Rnd_556x45_StanagSD']; _m = _m + ['100Rnd_762x51_M240']; _m = _m + ['200Rnd_556x45_L110A1']; _m = _m + ['NLAW']; _m = _m + ['Laserbatteries']; _m = _m + ['BAF_L109A1_HE']; _m = _m + ['15Rnd_9x19_M9']; _m = _m + ['15Rnd_9x19_M9SD']; _m = _m + ['7Rnd_45ACP_1911']; _m = _m + ['17Rnd_9x19_glock17']; _m = _m + ['HandGrenade_West']; _m = _m + ['HandGrenade_Stone']; _m = _m + ['IR_Strobe_Target']; _m = _m + ['IR_Strobe_Marker']; _m = _m + ['SmokeShell']; _m = _m + ['SmokeShellRed']; _m = _m + ['SmokeShellGreen']; _m = _m + ['SmokeShellBlue']; _m = _m + ['SmokeShellYellow']; _m = _m + ['SmokeShellOrange']; _m = _m + ['SmokeShellPurple']; _m = _m + ['FlareWhite_M203']; _m = _m + ['FlareYellow_M203']; _m = _m + ['FlareGreen_M203']; _m = _m + ['FlareRed_M203']; _m = _m + ['1Rnd_HE_M203']; _m = _m + ['1Rnd_Smoke_M203']; _m = _m + ['1Rnd_SmokeRed_M203']; _m = _m + ['1Rnd_SmokeGreen_M203']; _m = _m + ['1Rnd_SmokeYellow_M203']; _m = _m + ['Mine']; _m = _m + ['PipeBomb']; _m = [_m, _side] Call Compile preprocessFile "Common\Config\Config_SortMagazines.sqf"; //--- Loadout - Weapons. _u = ['BAF_AS50_scoped']; _u = _u + ['BAF_AS50_TWS']; _u = _u + ['BAF_LRR_scoped']; _u = _u + ['BAF_LRR_scoped_W']; _u = _u + ['BAF_L85A2_RIS_Holo']; _u = _u + ['BAF_L85A2_UGL_Holo']; _u = _u + ['BAF_L85A2_RIS_SUSAT']; _u = _u + ['BAF_L85A2_UGL_SUSAT']; _u = _u + ['BAF_L85A2_RIS_ACOG']; _u = _u + ['BAF_L85A2_UGL_ACOG']; _u = _u + ['BAF_L85A2_RIS_CWS']; _u = _u + ['BAF_L86A2_ACOG']; _u = _u + ['BAF_L110A1_Aim']; _u = _u + ['BAF_L7A2_GPMG']; _u = _u + ['BAF_NLAW_Launcher']; _u = _u + ['Laserdesignator']; _u = _u + ['Colt1911']; _u = _u + ['M9']; _u = _u + ['M9SD']; _u = _u + ['glock17_EP1']; _u = _u + ['Binocular']; _u = _u + ['NVGoggles']; _u = _u + ['Binocular_Vector']; _u = _u + ['BAF_AssaultPack_ARAmmo']; _u = _u + ['BAF_AssaultPack_ATAmmo']; _u = _u + ['BAF_AssaultPack_FAC']; _u = _u + ['BAF_AssaultPack_HAAAmmo']; _u = _u + ['BAF_AssaultPack_HATAmmo']; _u = _u + ['BAF_AssaultPack_LRRAmmo']; _u = _u + ['BAF_AssaultPack_MGAmmo']; _u = _u + ['BAF_AssaultPack_RifleAmmo']; _u = _u + ['BAF_AssaultPack_special']; _u = _u + ['Tripod_Bag']; _u = _u + ['BAF_L2A1_ACOG_minitripod_bag']; _u = _u + ['BAF_L2A1_ACOG_tripod_bag']; _u = _u + ['BAF_GPMG_Minitripod_D_bag']; _u = _u + ['BAF_GMG_ACOG_minitripod_bag']; [_u, _m, _side] Call Compile preprocessFile "Common\Config\Config_SortWeapons.sqf"; //--- Loadout - Templates (note that backpacks content require the weapons to be first), use -1 to use the default BP content. _u = [[['BAF_L85A2_RIS_ACOG','Colt1911','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','HandGrenade_West','SmokeShellBlue','7Rnd_45ACP_1911'],[8,2,2,8]]]]; _u = _u + [[['BAF_L85A2_UGL_Holo','BAF_AssaultPack_RifleAmmo','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','HandGrenade_West','1Rnd_HE_M203'],[10,2,8]],-1]]; _u = _u + [[['BAF_L85A2_RIS_Holo','M136','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','M136'],[6,1]]]]; _u = _u + [[['BAF_L85A2_RIS_SUSAT','MAAWS','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','MAAWS_HEAT'],[6,2]]]]; _u = _u + [[['BAF_L85A2_RIS_SUSAT','Javelin','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','Javelin'],[6,1]]]]; _u = _u + [[['BAF_L85A2_RIS_Holo','Stinger','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','Stinger'],[6,1]]]]; _u = _u + [[['BAF_L85A2_RIS_ACOG','M9','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','Mine','15Rnd_9x19_M9'],[6,3,8]]]]; _u = _u + [[['BAF_L85A2_RIS_Holo','M9SD','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','PipeBomb','15Rnd_9x19_M9SD'],[6,3,8]]]]; _u = _u + [[['BAF_L7A2_GPMG','Colt1911','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['100Rnd_762x51_M240','SmokeShellBlue','7Rnd_45ACP_1911'],[5,2,8]]]]; _u = _u + [[['BAF_L110A1_Aim','Colt1911','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['200Rnd_556x45_L110A1','SmokeShellBlue','7Rnd_45ACP_1911'],[5,2,8]]]]; _u = _u + [[['BAF_LRR_scoped','M9SD','NVGoggles','Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['5Rnd_86x70_L115A1','HandGrenade_West','15Rnd_9x19_M9SD'],[10,2,8]]]]; _u = _u + [[['BAF_AS50_TWS','M9SD','NVGoggles','Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['5Rnd_127x99_AS50','HandGrenade_West','15Rnd_9x19_M9SD'],[10,2,8]]]]; _u = _u + [[['BAF_AS50_scoped','M9SD','NVGoggles','Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['5Rnd_127x99_AS50','HandGrenade_West','15Rnd_9x19_M9SD'],[10,2,8]]]]; [_u, _side] Call Compile preprocessFile "Common\Config\Config_SetTemplates.sqf";Private ["_m","_side","_u"]; _side = _this; //--- Loadout - Magazines. _m = ['30Rnd_762x39_AK47']; _m = _m + ['30Rnd_545x39_AK']; _m = _m + ['30Rnd_545x39_AKSD']; _m = _m + ['100Rnd_762x54_PK']; _m = _m + ['75Rnd_545x39_RPK']; _m = _m + ['5x_22_LR_17_HMR']; _m = _m + ['10Rnd_762x54_SVD']; _m = _m + ['8Rnd_B_Saiga12_74Slug']; _m = _m + ['PG7V']; _m = _m + ['PG7VL']; _m = _m + ['OG7']; _m = _m + ['PG7VR']; _m = _m + ['RPG18']; _m = _m + ['Igla']; _m = _m + ['Strela']; _m = _m + ['Laserbatteries']; _m = _m + ['8Rnd_9x18_Makarov']; _m = _m + ['8Rnd_9x18_MakarovSD']; _m = _m + ['HandGrenade_East']; _m = _m + ['HandGrenade_Stone']; _m = _m + ['SmokeShell']; _m = _m + ['SmokeShellRed']; _m = _m + ['SmokeShellGreen']; _m = _m + ['SmokeShellBlue']; _m = _m + ['SmokeShellYellow']; _m = _m + ['SmokeShellOrange']; _m = _m + ['SmokeShellPurple']; _m = _m + ['FlareWhite_GP25']; _m = _m + ['FlareYellow_GP25']; _m = _m + ['FlareGreen_GP25']; _m = _m + ['FlareRed_GP25']; _m = _m + ['1Rnd_HE_GP25']; _m = _m + ['1Rnd_SMOKE_GP25']; _m = _m + ['1Rnd_SMOKERED_GP25']; _m = _m + ['1Rnd_SMOKEGREEN_GP25']; _m = _m + ['1Rnd_SMOKEYELLOW_GP25']; _m = _m + ['Mine']; _m = _m + ['PipeBomb']; _m = [_m, _side] Call Compile preprocessFile "Common\Config\Config_SortMagazines.sqf"; //--- Loadout - Weapons. _u = ['AK_47_M']; _u = _u + ['AK_47_S']; _u = _u + ['AK_74']; _u = _u + ['AK_74_GL']; _u = _u + ['AKS_74_kobra']; _u = _u + ['AKS_74_pso']; _u = _u + ['AKS_74_U']; _u = _u + ['AKS_74_UN_kobra']; _u = _u + ['AKS_GOLD']; _u = _u + ['PK']; _u = _u + ['Pecheneg']; _u = _u + ['RPK_74']; _u = _u + ['huntingrifle']; _u = _u + ['SVD']; _u = _u + ['Saiga12K']; _u = _u + ['RPG7V']; _u = _u + ['RPG18']; _u = _u + ['Igla']; _u = _u + ['Strela']; _u = _u + ['Laserdesignator']; _u = _u + ['Binocular']; _u = _u + ['NVGoggles']; _u = _u + ['Makarov']; _u = _u + ['MakarovSD']; _u = _u + ['ItemCompass']; _u = _u + ['ItemGPS']; _u = _u + ['ItemMap']; _u = _u + ['ItemRadio']; _u = _u + ['ItemWatch']; [_u, _m, _side] Call Compile preprocessFile "Common\Config\Config_SortWeapons.sqf"; //--- Loadout - Templates (note that backpacks content require the weapons to be first), use -1 to use the default BP content. _u = [[['AKS_74_kobra','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','HandGrenade_East','SmokeShellRed','8Rnd_9x18_Makarov'],[8,2,2,8]]]]; _u = _u + [[['AK_74_GL','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','HandGrenade_East','1Rnd_HE_GP25'],[10,2,8]]]]; _u = _u + [[['AKS_74_kobra','RPG18','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','RPG18'],[6,1]]]]; _u = _u + [[['AKS_74_U','RPG7V','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','PG7VL','OG7'],[6,2,1]]]]; _u = _u + [[['AKS_74_U','Strela','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','Strela'],[6,1]]]]; _u = _u + [[['AKS_74_pso','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','MineE','8Rnd_9x18_Makarov'],[6,3,8]]]]; _u = _u + [[['PK','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['100Rnd_762x54_PK','SmokeShellRed','8Rnd_9x18_Makarov'],[5,2,8]]]]; _u = _u + [[['Pecheneg','Makarov','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['100Rnd_762x54_PK','SmokeShellRed','8Rnd_9x18_Makarov'],[5,2,8]]]]; _u = _u + [[['SVD','MakarovSD','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['10Rnd_762x54_SVD','HandGrenade_East','8Rnd_9x18_MakarovSD'],[10,2,8]]]]; [_u, _side] Call Compile preprocessFile "Common\Config\Config_SetTemplates.sqf";Private ["_m","_side","_u"]; _side = _this; //--- Loadout - Magazines. _m = ['30Rnd_762x39_AK47']; _m = _m + ['30Rnd_545x39_AK']; _m = _m + ['30Rnd_545x39_AKSD']; _m = _m + ['100Rnd_762x54_PK']; _m = _m + ['75Rnd_545x39_RPK']; _m = _m + ['5x_22_LR_17_HMR']; _m = _m + ['10Rnd_762x54_SVD']; _m = _m + ['8Rnd_B_Saiga12_74Slug']; _m = _m + ['PG7V']; _m = _m + ['PG7VL']; _m = _m + ['OG7']; _m = _m + ['PG7VR']; _m = _m + ['RPG18']; _m = _m + ['Igla']; _m = _m + ['Strela']; _m = _m + ['Laserbatteries']; _m = _m + ['8Rnd_9x18_Makarov']; _m = _m + ['8Rnd_9x18_MakarovSD']; _m = _m + ['HandGrenade_East']; _m = _m + ['HandGrenade_Stone']; _m = _m + ['SmokeShell']; _m = _m + ['SmokeShellRed']; _m = _m + ['SmokeShellGreen']; _m = _m + ['SmokeShellBlue']; _m = _m + ['SmokeShellYellow']; _m = _m + ['SmokeShellOrange']; _m = _m + ['SmokeShellPurple']; _m = _m + ['FlareWhite_GP25']; _m = _m + ['FlareYellow_GP25']; _m = _m + ['FlareGreen_GP25']; _m = _m + ['FlareRed_GP25']; _m = _m + ['1Rnd_HE_GP25']; _m = _m + ['1Rnd_SMOKE_GP25']; _m = _m + ['1Rnd_SMOKERED_GP25']; _m = _m + ['1Rnd_SMOKEGREEN_GP25']; _m = _m + ['1Rnd_SMOKEYELLOW_GP25']; _m = _m + ['MineE']; _m = _m + ['PipeBomb']; _m = [_m, _side] Call Compile preprocessFile "Common\Config\Config_SortMagazines.sqf"; //--- Loadout - Weapons. _u = ['AK_47_M']; _u = _u + ['AK_47_S']; _u = _u + ['AK_74']; _u = _u + ['AK_74_GL']; _u = _u + ['AKS_74_kobra']; _u = _u + ['AKS_74_pso']; _u = _u + ['AKS_74_U']; _u = _u + ['AKS_74_UN_kobra']; _u = _u + ['AKS_GOLD']; _u = _u + ['PK']; _u = _u + ['Pecheneg']; _u = _u + ['RPK_74']; _u = _u + ['huntingrifle']; _u = _u + ['SVD']; _u = _u + ['Saiga12K']; _u = _u + ['RPG7V']; _u = _u + ['RPG18']; _u = _u + ['Igla']; _u = _u + ['Strela']; _u = _u + ['Laserdesignator']; _u = _u + ['Binocular']; _u = _u + ['NVGoggles']; _u = _u + ['Makarov']; _u = _u + ['MakarovSD']; _u = _u + ['ItemCompass']; _u = _u + ['ItemGPS']; _u = _u + ['ItemMap']; _u = _u + ['ItemRadio']; _u = _u + ['ItemWatch']; [_u, _m, _side] Call Compile preprocessFile "Common\Config\Config_SortWeapons.sqf"; //--- Loadout - Templates (note that backpacks content require the weapons to be first), use -1 to use the default BP content. _u = [[['AKS_74_kobra','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','HandGrenade_East','SmokeShellRed','8Rnd_9x18_Makarov'],[8,2,2,8]]]]; _u = _u + [[['AK_74_GL','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','HandGrenade_East','1Rnd_HE_GP25'],[10,2,8]]]]; _u = _u + [[['AKS_74_kobra','RPG18','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','RPG18'],[6,1]]]]; _u = _u + [[['AKS_74_U','RPG7V','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','PG7VL','OG7'],[6,2,1]]]]; _u = _u + [[['AKS_74_U','Strela','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','Strela'],[6,1]]]]; _u = _u + [[['AKS_74_pso','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','MineE','8Rnd_9x18_Makarov'],[6,3,8]]]]; _u = _u + [[['PK','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['100Rnd_762x54_PK','SmokeShellRed','8Rnd_9x18_Makarov'],[5,2,8]]]]; _u = _u + [[['Pecheneg','Makarov','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['100Rnd_762x54_PK','SmokeShellRed','8Rnd_9x18_Makarov'],[5,2,8]]]]; _u = _u + [[['SVD','MakarovSD','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['10Rnd_762x54_SVD','HandGrenade_East','8Rnd_9x18_MakarovSD'],[10,2,8]]]]; [_u, _side] Call Compile preprocessFile "Common\Config\Config_SetTemplates.sqf";Private ["_m","_side","_u"]; _side = _this; //--- Loadout - Magazines. _m = ['30Rnd_762x39_AK47']; _m = _m + ['30Rnd_545x39_AK']; _m = _m + ['30Rnd_545x39_AKSD']; _m = _m + ['100Rnd_762x54_PK']; _m = _m + ['75Rnd_545x39_RPK']; _m = _m + ['5x_22_LR_17_HMR']; _m = _m + ['10Rnd_762x54_SVD']; _m = _m + ['8Rnd_B_Saiga12_74Slug']; _m = _m + ['PG7V']; _m = _m + ['PG7VL']; _m = _m + ['OG7']; _m = _m + ['PG7VR']; _m = _m + ['RPG18']; _m = _m + ['Igla']; _m = _m + ['Strela']; _m = _m + ['Laserbatteries']; _m = _m + ['8Rnd_9x18_Makarov']; _m = _m + ['8Rnd_9x18_MakarovSD']; _m = _m + ['HandGrenade_East']; _m = _m + ['HandGrenade_Stone']; _m = _m + ['SmokeShell']; _m = _m + ['SmokeShellRed']; _m = _m + ['SmokeShellGreen']; _m = _m + ['SmokeShellBlue']; _m = _m + ['SmokeShellYellow']; _m = _m + ['SmokeShellOrange']; _m = _m + ['SmokeShellPurple']; _m = _m + ['FlareWhite_GP25']; _m = _m + ['FlareYellow_GP25']; _m = _m + ['FlareGreen_GP25']; _m = _m + ['FlareRed_GP25']; _m = _m + ['1Rnd_HE_GP25']; _m = _m + ['1Rnd_SMOKE_GP25']; _m = _m + ['1Rnd_SMOKERED_GP25']; _m = _m + ['1Rnd_SMOKEGREEN_GP25']; _m = _m + ['1Rnd_SMOKEYELLOW_GP25']; _m = _m + ['MineE']; _m = _m + ['PipeBomb']; _m = [_m, _side] Call Compile preprocessFile "Common\Config\Config_SortMagazines.sqf"; //--- Loadout - Weapons. _u = ['AK_47_M']; _u = _u + ['AK_47_S']; _u = _u + ['AK_74']; _u = _u + ['AK_74_GL']; _u = _u + ['AKS_74_kobra']; _u = _u + ['AKS_74_pso']; _u = _u + ['AKS_74_U']; _u = _u + ['AKS_74_UN_kobra']; _u = _u + ['AKS_GOLD']; _u = _u + ['PK']; _u = _u + ['Pecheneg']; _u = _u + ['RPK_74']; _u = _u + ['huntingrifle']; _u = _u + ['SVD']; _u = _u + ['Saiga12K']; _u = _u + ['RPG7V']; _u = _u + ['RPG18']; _u = _u + ['Igla']; _u = _u + ['Strela']; _u = _u + ['Laserdesignator']; _u = _u + ['Binocular']; _u = _u + ['NVGoggles']; _u = _u + ['Makarov']; _u = _u + ['MakarovSD']; _u = _u + ['ItemCompass']; _u = _u + ['ItemGPS']; _u = _u + ['ItemMap']; _u = _u + ['ItemRadio']; _u = _u + ['ItemWatch']; [_u, _m, _side] Call Compile preprocessFile "Common\Config\Config_SortWeapons.sqf"; //--- Loadout - Templates (note that backpacks content require the weapons to be first), use -1 to use the default BP content. _u = [[['AKS_74_kobra','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','HandGrenade_East','SmokeShellRed','8Rnd_9x18_Makarov'],[8,2,2,8]]]]; _u = _u + [[['AK_74_GL','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','HandGrenade_East','1Rnd_HE_GP25'],[10,2,8]]]]; _u = _u + [[['AKS_74_kobra','RPG18','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','RPG18'],[6,1]]]]; _u = _u + [[['AKS_74_U','RPG7V','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','PG7VL','OG7'],[6,2,1]]]]; _u = _u + [[['AKS_74_U','Strela','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','Strela'],[6,1]]]]; _u = _u + [[['AKS_74_pso','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','MineE','8Rnd_9x18_Makarov'],[6,3,8]]]]; _u = _u + [[['PK','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['100Rnd_762x54_PK','SmokeShellRed','8Rnd_9x18_Makarov'],[5,2,8]]]]; _u = _u + [[['Pecheneg','Makarov','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['100Rnd_762x54_PK','SmokeShellRed','8Rnd_9x18_Makarov'],[5,2,8]]]]; _u = _u + [[['SVD','MakarovSD','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['10Rnd_762x54_SVD','HandGrenade_East','8Rnd_9x18_MakarovSD'],[10,2,8]]]]; [_u, _side] Call Compile preprocessFile "Common\Config\Config_SetTemplates.sqf";Private ["_m","_side","_u"]; _side = _this; //--- Loadout - Magazines. _m = ['15Rnd_9x19_M9']; _m = _m + ['15Rnd_9x19_M9SD']; _m = _m + ['OFrP_556x45_25cp']; _m = _m + ['OFrP_556x45SD_25cp']; _m = _m + ['OFrP_25Rnd_556x45']; _m = _m + ['OFrP_25Rnd_556x45SD']; _m = _m + ['OFrP_556x45_30cp']; _m = _m + ['OFrP_556x45SD_30cp']; _m = _m + ['OFrP_30Rnd_556x45']; _m = _m + ['OFrP_30Rnd_556x45SD']; _m = _m + ['30rnd_9x19_MP5']; _m = _m + ['30rnd_9x19_MP5SD']; _m = _m + ['OFrP_200Rnd_556x45']; _m = _m + ['OFrP_127x99_7cp']; _m = _m + ['OFrP_127x99_7cp_APEI']; _m = _m + ['OFrP_762x51_10cp']; _m = _m + ['OFrP_1Rnd_84_ABL']; _m = _m + ['OFrP_1Rnd_112_APILAS']; _m = _m + ['OFrP_1Rnd_136_ERYX']; _m = _m + ['OFrP_1Rnd_89_LRAC']; _m = _m + ['Stinger']; _m = _m + ['OFrP_Laserbatteries']; _m = _m + ['7Rnd_45ACP_1911']; _m = _m + ['17Rnd_9x19_glock17']; _m = _m + ['HandGrenade_West']; _m = _m + ['HandGrenade_Stone']; _m = _m + ['IR_Strobe_Target']; _m = _m + ['IR_Strobe_Marker']; _m = _m + ['SmokeShell']; _m = _m + ['SmokeShellRed']; _m = _m + ['SmokeShellGreen']; _m = _m + ['SmokeShellBlue']; _m = _m + ['SmokeShellYellow']; _m = _m + ['SmokeShellOrange']; _m = _m + ['SmokeShellPurple']; _m = _m + ['FlareWhite_M203']; _m = _m + ['FlareYellow_M203']; _m = _m + ['FlareGreen_M203']; _m = _m + ['FlareRed_M203']; _m = _m + ['1Rnd_HE_M203']; _m = _m + ['1Rnd_Smoke_M203']; _m = _m + ['1Rnd_SmokeRed_M203']; _m = _m + ['1Rnd_SmokeGreen_M203']; _m = _m + ['1Rnd_SmokeYellow_M203']; _m = _m + ['Mine']; _m = _m + ['OFrP_Charge_1000g_mag']; _m = _m + ['OFrP_Charge_500g_mag']; _m = [_m, _side] Call Compile preprocessFile "Common\Config\Config_SortMagazines.sqf"; //--- Loadout - Weapons. _u = ['OFrP_PAMAS']; _u = _u + ['OFrP_PAMAS_SD']; _u = _u + ['OFrP_FAMAS_F1']; _u = _u + ['OFrP_FAMAS_F1_HG']; _u = _u + ['OFrP_FAMAS_F1_acog']; _u = _u + ['OFrP_FAMAS_F1_acog_hg']; _u = _u + ['OFrP_FAMAS_F1_acog_SD']; _u = _u + ['OFrP_FAMAS_F1_acog_SD_HG']; _u = _u + ['OFrP_FAMAS_F1_acog_M203']; _u = _u + ['OFrP_FAMAS_F1_aim']; _u = _u + ['OFrP_FAMAS_F1_aim_hg']; _u = _u + ['OFrP_FAMAS_F1_aim_SD']; _u = _u + ['OFrP_FAMAS_F1_aim_SD_HG']; _u = _u + ['OFrP_FAMAS_F1_EOTech']; _u = _u + ['OFrP_FAMAS_F1_EOTech_hg']; _u = _u + ['OFrP_FAMAS_F1_EOTech_SD']; _u = _u + ['OFrP_FAMAS_F1_EOTech_SD_HG']; _u = _u + ['OFrP_FAMAS_F1_EOTech_M203']; _u = _u + ['OFrP_FAMAS_F1_J4']; _u = _u + ['OFrP_FAMAS_F1_J4_hg']; _u = _u + ['OFrP_FAMAS_F1_J4_SD']; _u = _u + ['OFrP_FAMAS_F1_J4_SD_HG']; _u = _u + ['OFrP_FAMAS_F1_J4_M203']; _u = _u + ['OFrP_FAMAS_G2']; _u = _u + ['OFrP_FAMAS_G2_hg']; _u = _u + ['OFrP_FAMAS_G2_EOTech']; _u = _u + ['OFrP_FAMAS_G2_EOTech_hg']; _u = _u + ['OFrP_FAMAS_G2_EOTech_SD']; _u = _u + ['OFrP_FAMAS_G2_EOTech_SD_HG']; _u = _u + ['OFrP_FAMAS_G2_EOTech_M203']; _u = _u + ['OFrP_FAMAS_FE_Optronic']; _u = _u + ['OFrP_FAMAS_FE_Optronic_EOTech']; _u = _u + ['OFrP_FAMAS_FE_Optronic_M203']; _u = _u + ['OFrP_FAMAS_FE_Optronic_SD']; _u = _u + ['OFrP_FAMAS_FE_EOTech']; _u = _u + ['OFrP_FAMAS_FE_EOTech_M203']; _u = _u + ['OFrP_HK_416']; _u = _u + ['OFrP_HK_416_AIM']; _u = _u + ['OFrP_HK_416_AIM_HG']; _u = _u + ['OFrP_HK_416_AIM_M203']; _u = _u + ['OFrP_HK_416_AIM_SD']; _u = _u + ['OFrP_HK_416_EOTech']; _u = _u + ['OFrP_HK_416_EOTech_HG']; _u = _u + ['OFrP_HK_416_EOTech_M203']; _u = _u + ['OFrP_HK_416_EOTech_SD']; _u = _u + ['OFrP_HK_MP5']; _u = _u + ['OFrP_HK_MP5_SD']; _u = _u + ['OFrP_Minimi_para']; _u = _u + ['OFrP_Minimi_para_HG']; _u = _u + ['OFrP_Minimi_para_EOTech']; _u = _u + ['OFrP_Minimi_para_EOTech_HG']; _u = _u + ['OFrP_Minimi_para_Optronic']; _u = _u + ['OFrP_Minimi_para_Optronic_HG']; _u = _u + ['OFrP_Minimi_para_Optronic_eotech']; _u = _u + ['OFrP_Minimi_para_Optronic_eotech_HG']; _u = _u + ['OFrP_HecateII']; _u = _u + ['OFrP_FRF2_J8']; _u = _u + ['OFrP_FRF2_Optronic']; _u = _u + ['OFrP_ABL']; _u = _u + ['OFrP_APILAS']; _u = _u + ['OFrP_ERYX']; _u = _u + ['OFrP_LRAC']; _u = _u + ['Stinger']; _u = _u + ['OFrP_Laserdesignator']; _u = _u + ['OFrP_NVG']; _u = _u + ['OFrP_NVG_Head']; _u = _u + ['OFrP_Binocular_Vector']; _u = _u + ['OFrP_Binocular_JIMMR']; _u = _u + ['ItemCompass']; _u = _u + ['ItemGPS']; _u = _u + ['ItemMap']; _u = _u + ['ItemRadio']; _u = _u + ['ItemWatch']; [_u, _m, _side] Call Compile preprocessFile "Common\Config\Config_SortWeapons.sqf"; //--- Loadout - Templates (note that backpacks content require the weapons to be first), use -1 to use the default BP content. _u = [[['OFrP_FAMAS_F1','OFrP_PAMAS','OFrP_Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['OFrP_556x45_25cp','HandGrenade_West','SmokeShellBlue','15Rnd_9x19_M9'],[8,2,2,8]]]]; _u = _u + [[['OFrP_FAMAS_F1_HG','OFrP_Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['OFrP_556x45_25cp','HandGrenade_West','1Rnd_HE_M203'],[8,2,8]],-1]]; _u = _u + [[['OFrP_FAMAS_F1_EOTech','OFrP_ABL','OFrP_NVG','OFrP_Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['OFrP_556x45_25cp','OFrP_1Rnd_84_ABL'],[6,1]]]]; _u = _u + [[['OFrP_FAMAS_F1_EOTech','OFrP_LRAC','OFrP_NVG','OFrP_Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['OFrP_556x45_25cp','OFrP_1Rnd_89_LRAC'],[6,2]]]]; _u = _u + [[['OFrP_FAMAS_F1_aim','OFrP_ERYX','OFrP_NVG','OFrP_Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['OFrP_556x45_25cp','OFrP_1Rnd_136_ERYX'],[6,1]]]]; _u = _u + [[['OFrP_FAMAS_F1_J4','Stinger','OFrP_NVG','OFrP_Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['OFrP_556x45_25cp','Stinger'],[6,1]]]]; _u = _u + [[['OFrP_FAMAS_F1','OFrP_PAMAS','OFrP_Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['OFrP_PAMAS ','Mine','15Rnd_9x19_M9'],[6,3,8]]]]; _u = _u + [[['OFrP_FAMAS_F1_EOTech_SD','OFrP_PAMAS_SD','OFrP_Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['OFrP_PAMAS_SD','OFrP_Charge_500g_mag','15Rnd_9x19_M9SD'],[6,3,8]]]]; _u = _u + [[['OFrP_Minimi_para_EOTech','OFrP_PAMAS','OFrP_Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['OFrP_200Rnd_556x45','SmokeShellBlue','15Rnd_9x19_M9'],[5,2,8]]]]; _u = _u + [[['OFrP_Minimi_para','OFrP_PAMAS','OFrP_NVG','OFrP_Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['OFrP_200Rnd_556x45','SmokeShellBlue','15Rnd_9x19_M9'],[5,2,8]]]]; _u = _u + [[['OFrP_FRF2_J8','OFrP_PAMAS_SD','OFrP_NVG','OFrP_Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['OFrP_762x51_10cp','HandGrenade_West','15Rnd_9x19_M9SD'],[10,2,8]]]]; _u = _u + [[['OFrP_HecateII','OFrP_PAMAS_SD','OFrP_NVG','OFrP_Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['OFrP_127x99_7cp','OFrP_127x99_7cp_APEI','HandGrenade_West','15Rnd_9x19_M9SD'],[6,4,2,8]]]]; [_u, _side] Call Compile preprocessFile "Common\Config\Config_SetTemplates.sqf";Private ["_m","_side","_u"]; _side = _this; //--- Loadout - Magazines. _m = ['5Rnd_127x108_KSVK']; _m = _m + ['10x_303']; _m = _m + ['10Rnd_762x54_SVD']; _m = _m + ['20Rnd_B_AA12_Pellets']; _m = _m + ['20Rnd_B_AA12_74Slug']; _m = _m + ['20Rnd_B_AA12_HE']; _m = _m + ['20Rnd_762x51_FNFAL']; _m = _m + ['30Rnd_762x39_AK47']; _m = _m + ['30Rnd_556x45_Stanag']; _m = _m + ['30Rnd_556x45_StanagSD']; _m = _m + ['30Rnd_556x45_G36']; _m = _m + ['30Rnd_556x45_G36SD']; _m = _m + ['30Rnd_545x39_AK']; _m = _m + ['30Rnd_545x39_AKSD']; _m = _m + ['30Rnd_762x39_SA58']; _m = _m + ['75Rnd_545x39_RPK']; _m = _m + ['100Rnd_762x54_PK']; _m = _m + ['100Rnd_556x45_BetaCMag']; _m = _m + ['PG7V']; _m = _m + ['PG7VL']; _m = _m + ['OG7']; _m = _m + ['PG7VR']; _m = _m + ['RPG18']; _m = _m + ['Dragon_EP1']; _m = _m + ['Igla']; _m = _m + ['Strela']; _m = _m + ['Laserbatteries']; _m = _m + ['6Rnd_45ACP']; _m = _m + ['8Rnd_9x18_Makarov']; _m = _m + ['8Rnd_9x18_MakarovSD']; _m = _m + ['10Rnd_B_765x17_Ball']; _m = _m + ['20Rnd_B_765x17_Ball']; _m = _m + ['30Rnd_9x19_UZI']; _m = _m + ['30Rnd_9x19_UZI_SD']; _m = _m + ['HandGrenade_East']; _m = _m + ['HandGrenade_Stone']; _m = _m + ['SmokeShell']; _m = _m + ['SmokeShellRed']; _m = _m + ['SmokeShellGreen']; _m = _m + ['SmokeShellBlue']; _m = _m + ['SmokeShellYellow']; _m = _m + ['SmokeShellOrange']; _m = _m + ['SmokeShellPurple']; _m = _m + ['FlareWhite_GP25']; _m = _m + ['FlareYellow_GP25']; _m = _m + ['FlareGreen_GP25']; _m = _m + ['FlareRed_GP25']; _m = _m + ['1Rnd_HE_GP25']; _m = _m + ['1Rnd_SMOKE_GP25']; _m = _m + ['1Rnd_SMOKERED_GP25']; _m = _m + ['1Rnd_SMOKEGREEN_GP25']; _m = _m + ['1Rnd_SMOKEYELLOW_GP25']; _m = _m + ['FlareWhite_M203']; _m = _m + ['FlareYellow_M203']; _m = _m + ['FlareGreen_M203']; _m = _m + ['FlareRed_M203']; _m = _m + ['1Rnd_HE_M203']; _m = _m + ['1Rnd_Smoke_M203']; _m = _m + ['1Rnd_SmokeRed_M203']; _m = _m + ['1Rnd_SmokeGreen_M203']; _m = _m + ['1Rnd_SmokeYellow_M203']; _m = _m + ['MineE']; _m = _m + ['PipeBomb']; _m = [_m, _side] Call Compile preprocessFile "Common\Config\Config_SortMagazines.sqf"; //--- Loadout - Weapons. _u = ['AA12_PMC']; _u = _u + ['AK_47_M']; _u = _u + ['AK_47_S']; _u = _u + ['AK_74']; _u = _u + ['AK_74_GL']; _u = _u + ['AK_74_GL_kobra']; _u = _u + ['AKS_74']; _u = _u + ['AKS_74_GOSHAWK']; _u = _u + ['AKS_74_kobra']; _u = _u + ['AKS_74_NSPU']; _u = _u + ['AKS_74_pso']; _u = _u + ['AKS_74_U']; _u = _u + ['FN_FAL']; _u = _u + ['FN_FAL_ANPVS4']; _u = _u + ['LeeEnfield']; _u = _u + ['ksvk']; _u = _u + ['M16A2']; _u = _u + ['M16A2GL']; _u = _u + ['m8_carbine']; _u = _u + ['m8_carbine_pmc']; _u = _u + ['m8_carbineGL']; _u = _u + ['m8_compact']; _u = _u + ['m8_compact_pmc']; _u = _u + ['m8_holo_sd']; _u = _u + ['m8_SAW']; _u = _u + ['m8_sharpshooter']; _u = _u + ['m8_tws']; _u = _u + ['m8_tws_sd']; _u = _u + ['PK']; _u = _u + ['RPK_74']; _u = _u + ['Sa58P_EP1']; _u = _u + ['Sa58V_EP1']; _u = _u + ['Sa58V_RCO_EP1']; _u = _u + ['Sa58V_CCO_EP1']; _u = _u + ['SVD']; _u = _u + ['SVD_des_EP1']; _u = _u + ['SVD_NSPU_EP1']; _u = _u + ['RPG7V']; _u = _u + ['RPG18']; _u = _u + ['M47Launcher_EP1']; _u = _u + ['Igla']; _u = _u + ['Strela']; _u = _u + ['Makarov']; _u = _u + ['revolver_EP1']; _u = _u + ['revolver_gold_EP1']; _u = _u + ['MakarovSD']; _u = _u + ['Sa61_EP1']; _u = _u + ['UZI_EP1']; _u = _u + ['UZI_SD_EP1']; _u = _u + ['Laserdesignator']; _u = _u + ['Binocular']; _u = _u + ['NVGoggles']; _u = _u + ['Binocular_Vector']; _u = _u + ['ItemCompass']; _u = _u + ['ItemGPS']; _u = _u + ['ItemMap']; _u = _u + ['ItemRadio']; _u = _u + ['ItemWatch']; _u = _u + ['TK_Assault_Pack_EP1']; _u = _u + ['TK_Assault_Pack_RPK_EP1']; _u = _u + ['TK_RPG_Backpack_EP1']; _u = _u + ['TK_ALICE_Pack_EP1']; _u = _u + ['TK_ALICE_Pack_AmmoMG_EP1']; _u = _u + ['TK_ALICE_Pack_Explosives_EP1']; _u = _u + ['TKA_Assault_Pack_Ammo_EP1']; _u = _u + ['TKG_ALICE_Pack_AmmoAK74_EP1']; _u = _u + ['TKG_ALICE_Pack_AmmoAK47_EP1']; _u = _u + ['TKA_ALICE_Pack_Ammo_EP1']; _u = _u + ['Tripod_Bag']; _u = _u + ['KORD_TK_Bag_EP1']; _u = _u + ['KORD_high_TK_Bag_EP1']; _u = _u + ['SPG9_TK_INS_Bag_EP1']; _u = _u + ['AGS_TK_Bag_EP1']; _u = _u + ['Metis_TK_Bag_EP1']; _u = _u + ['2b14_82mm_TK_Bag_EP1']; [_u, _m, _side] Call Compile preprocessFile "Common\Config\Config_SortWeapons.sqf"; //--- Loadout - Templates (note that backpacks content require the weapons to be first), use -1 to use the default BP content. _u = [[['AKS_74_kobra','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','HandGrenade_East','SmokeShellRed','8Rnd_9x18_Makarov'],[8,2,2,8]]]]; _u = _u + [[['m8_carbineGL','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_G36','HandGrenade_East','1Rnd_HE_GP25'],[10,2,8]]]]; _u = _u + [[['AKS_74_kobra','RPG18','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','RPG18'],[6,1]]]]; _u = _u + [[['FN_FAL','RPG7V','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['20Rnd_762x51_FNFAL','PG7VL','OG7'],[6,2,1]]]]; _u = _u + [[['AKS_74_kobra','M47Launcher_EP1','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','Dragon_EP1'],[6,1]]]]; _u = _u + [[['m8_compact_pmc','Strela','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_G36','Strela'],[6,1]]]]; _u = _u + [[['m8_holo_sd','TK_ALICE_Pack_Explosives_EP1','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_G36SD','MineE','8Rnd_9x18_Makarov'],[6,3,8]],-1]]; _u = _u + [[['SVD_NSPU_EP1','MakarovSD','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['10Rnd_762x54_SVD','PipeBomb','8Rnd_9x18_MakarovSD'],[6,3,8]]]]; _u = _u + [[['m8_SAW','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['100Rnd_556x45_BetaCMag','SmokeShellRed','8Rnd_9x18_Makarov'],[5,2,8]]]]; _u = _u + [[['m8_sharpshooter','Makarov','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_G36','SmokeShellRed','8Rnd_9x18_Makarov'],[10,2,8]]]]; _u = _u + [[['SVD','MakarovSD','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['10Rnd_762x54_SVD','HandGrenade_East','8Rnd_9x18_MakarovSD'],[10,2,8]]]]; _u = _u + [[['ksvk','MakarovSD','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['5Rnd_127x108_KSVK','HandGrenade_East','8Rnd_9x18_MakarovSD'],[10,2,8]]]]; [_u, _side] Call Compile preprocessFile "Common\Config\Config_SetTemplates.sqf";Private ["_m","_side","_u"]; _side = _this; //--- Loadout - Magazines. _m = ['30Rnd_762x39_AK47']; _m = _m + ['30Rnd_545x39_AK']; _m = _m + ['30Rnd_545x39_AKSD']; _m = _m + ['64Rnd_9x19_Bizon']; _m = _m + ['64Rnd_9x19_SD_Bizon']; _m = _m + ['100Rnd_762x54_PK']; _m = _m + ['75Rnd_545x39_RPK']; _m = _m + ['5x_22_LR_17_HMR']; _m = _m + ['10Rnd_762x54_SVD']; _m = _m + ['8Rnd_B_Saiga12_74Slug']; _m = _m + ['5Rnd_127x108_KSVK']; _m = _m + ['10Rnd_9x39_SP5_VSS']; _m = _m + ['20Rnd_9x39_SP5_VSS']; _m = _m + ['PG7V']; _m = _m + ['PG7VL']; _m = _m + ['OG7']; _m = _m + ['PG7VR']; _m = _m + ['RPG18']; _m = _m + ['SMAW_HEAA']; _m = _m + ['SMAW_HEDP']; _m = _m + ['AT13']; _m = _m + ['Igla']; _m = _m + ['Strela']; _m = _m + ['Laserbatteries']; _m = _m + ['8Rnd_9x18_Makarov']; _m = _m + ['8Rnd_9x18_MakarovSD']; _m = _m + ['HandGrenade_East']; _m = _m + ['HandGrenade_Stone']; _m = _m + ['SmokeShell']; _m = _m + ['SmokeShellRed']; _m = _m + ['SmokeShellGreen']; _m = _m + ['SmokeShellBlue']; _m = _m + ['SmokeShellYellow']; _m = _m + ['SmokeShellOrange']; _m = _m + ['SmokeShellPurple']; _m = _m + ['FlareWhite_GP25']; _m = _m + ['FlareYellow_GP25']; _m = _m + ['FlareGreen_GP25']; _m = _m + ['FlareRed_GP25']; _m = _m + ['1Rnd_HE_GP25']; _m = _m + ['1Rnd_SMOKE_GP25']; _m = _m + ['1Rnd_SMOKERED_GP25']; _m = _m + ['1Rnd_SMOKEGREEN_GP25']; _m = _m + ['1Rnd_SMOKEYELLOW_GP25']; _m = _m + ['MineE']; _m = _m + ['PipeBomb']; _m = [_m, _side] Call Compile preprocessFile "Common\Config\Config_SortMagazines.sqf"; //--- Loadout - Weapons. _u = ['AK_47_M']; _u = _u + ['AK_47_S']; _u = _u + ['AK_74']; _u = _u + ['AK_74_GL']; _u = _u + ['AK_107_kobra']; _u = _u + ['AK_107_GL_kobra']; _u = _u + ['AK_107_pso']; _u = _u + ['AK_107_GL_pso']; _u = _u + ['AKS_74_kobra']; _u = _u + ['AKS_74_pso']; _u = _u + ['AKS_74_U']; _u = _u + ['AKS_74_UN_kobra']; _u = _u + ['AKS_GOLD']; _u = _u + ['bizon']; _u = _u + ['bizon_silenced']; _u = _u + ['PK']; _u = _u + ['Pecheneg']; _u = _u + ['RPK_74']; _u = _u + ['huntingrifle']; _u = _u + ['SVD']; _u = _u + ['SVD_CAMO']; _u = _u + ['Saiga12K']; _u = _u + ['ksvk']; _u = _u + ['VSS_vintorez']; _u = _u + ['RPG7V']; _u = _u + ['RPG18']; _u = _u + ['SMAW']; _u = _u + ['MetisLauncher']; _u = _u + ['Igla']; _u = _u + ['Strela']; _u = _u + ['Laserdesignator']; _u = _u + ['Binocular']; _u = _u + ['NVGoggles']; _u = _u + ['Makarov']; _u = _u + ['MakarovSD']; _u = _u + ['ItemCompass']; _u = _u + ['ItemGPS']; _u = _u + ['ItemMap']; _u = _u + ['ItemRadio']; _u = _u + ['ItemWatch']; [_u, _m, _side] Call Compile preprocessFile "Common\Config\Config_SortWeapons.sqf"; //--- Loadout - Templates (note that backpacks content require the weapons to be first), use -1 to use the default BP content. _u = [[['AK_107_kobra','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','HandGrenade_East','SmokeShellRed','8Rnd_9x18_Makarov'],[8,2,2,8]]]]; _u = _u + [[['AK_74_GL','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','HandGrenade_East','1Rnd_HE_GP25'],[10,2,8]]]]; _u = _u + [[['AKS_74_kobra','RPG18','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','RPG18'],[6,1]]]]; _u = _u + [[['AKS_74_U','RPG7V','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','PG7VL','OG7'],[6,2,1]]]]; _u = _u + [[['AK_107_kobra','MetisLauncher','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','AT13'],[6,1]]]]; _u = _u + [[['AKS_74_U','Strela','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','Strela'],[6,1]]]]; _u = _u + [[['AK_107_pso','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','MineE','8Rnd_9x18_Makarov'],[6,3,8]]]]; _u = _u + [[['VSS_vintorez','MakarovSD','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['20Rnd_9x39_SP5_VSS','PipeBomb','8Rnd_9x18_MakarovSD'],[6,3,8]]]]; _u = _u + [[['PK','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['100Rnd_762x54_PK','SmokeShellRed','8Rnd_9x18_Makarov'],[5,2,8]]]]; _u = _u + [[['Pecheneg','Makarov','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['100Rnd_762x54_PK','SmokeShellRed','8Rnd_9x18_Makarov'],[5,2,8]]]]; _u = _u + [[['SVD','MakarovSD','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['10Rnd_762x54_SVD','HandGrenade_East','8Rnd_9x18_MakarovSD'],[10,2,8]]]]; _u = _u + [[['ksvk','MakarovSD','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['5Rnd_127x108_KSVK','HandGrenade_East','8Rnd_9x18_MakarovSD'],[10,2,8]]]]; [_u, _side] Call Compile preprocessFile "Common\Config\Config_SetTemplates.sqf";Private ["_m","_side","_u"]; _side = _this; //--- Loadout - Magazines. _m = ['30Rnd_762x39_AK47']; _m = _m + ['30Rnd_556x45_Stanag']; _m = _m + ['30Rnd_545x39_AK']; _m = _m + ['30Rnd_545x39_AKSD']; _m = _m + ['100Rnd_762x54_PK']; _m = _m + ['75Rnd_545x39_RPK']; _m = _m + ['10Rnd_762x54_SVD']; _m = _m + ['5Rnd_127x108_KSVK']; _m = _m + ['10x_303']; _m = _m + ['30Rnd_762x39_SA58']; _m = _m + ['20Rnd_762x51_FNFAL']; _m = _m + ['PG7V']; _m = _m + ['PG7VL']; _m = _m + ['OG7']; _m = _m + ['PG7VR']; _m = _m + ['RPG18']; _m = _m + ['Dragon_EP1']; _m = _m + ['AT13']; _m = _m + ['Igla']; _m = _m + ['Strela']; _m = _m + ['Laserbatteries']; _m = _m + ['6Rnd_45ACP']; _m = _m + ['8Rnd_9x18_Makarov']; _m = _m + ['8Rnd_9x18_MakarovSD']; _m = _m + ['10Rnd_B_765x17_Ball']; _m = _m + ['20Rnd_B_765x17_Ball']; _m = _m + ['30Rnd_9x19_UZI']; _m = _m + ['30Rnd_9x19_UZI_SD']; _m = _m + ['HandGrenade_East']; _m = _m + ['HandGrenade_Stone']; _m = _m + ['SmokeShell']; _m = _m + ['SmokeShellRed']; _m = _m + ['SmokeShellGreen']; _m = _m + ['SmokeShellBlue']; _m = _m + ['SmokeShellYellow']; _m = _m + ['SmokeShellOrange']; _m = _m + ['SmokeShellPurple']; _m = _m + ['FlareWhite_GP25']; _m = _m + ['FlareYellow_GP25']; _m = _m + ['FlareGreen_GP25']; _m = _m + ['FlareRed_GP25']; _m = _m + ['1Rnd_HE_GP25']; _m = _m + ['1Rnd_SMOKE_GP25']; _m = _m + ['1Rnd_SMOKERED_GP25']; _m = _m + ['1Rnd_SMOKEGREEN_GP25']; _m = _m + ['1Rnd_SMOKEYELLOW_GP25']; _m = _m + ['FlareWhite_M203']; _m = _m + ['FlareYellow_M203']; _m = _m + ['FlareGreen_M203']; _m = _m + ['FlareRed_M203']; _m = _m + ['1Rnd_HE_M203']; _m = _m + ['1Rnd_Smoke_M203']; _m = _m + ['1Rnd_SmokeRed_M203']; _m = _m + ['1Rnd_SmokeGreen_M203']; _m = _m + ['1Rnd_SmokeYellow_M203']; _m = _m + ['MineE']; _m = _m + ['PipeBomb']; _m = [_m, _side] Call Compile preprocessFile "Common\Config\Config_SortMagazines.sqf"; //--- Loadout - Weapons. _u = ['AK_47_M']; _u = _u + ['AK_47_S']; _u = _u + ['M16A2']; _u = _u + ['M16A2GL']; _u = _u + ['AK_74']; _u = _u + ['AK_74_GL']; _u = _u + ['AK_74_GL_kobra']; _u = _u + ['AKS_74']; _u = _u + ['AKS_74_GOSHAWK']; _u = _u + ['AKS_74_kobra']; _u = _u + ['AKS_74_NSPU']; _u = _u + ['AKS_74_pso']; _u = _u + ['AKS_74_U']; _u = _u + ['FN_FAL']; _u = _u + ['FN_FAL_ANPVS4']; _u = _u + ['LeeEnfield']; _u = _u + ['PK']; _u = _u + ['RPK_74']; _u = _u + ['Sa58P_EP1']; _u = _u + ['Sa58V_EP1']; _u = _u + ['Sa58V_RCO_EP1']; _u = _u + ['Sa58V_CCO_EP1']; _u = _u + ['SVD']; _u = _u + ['SVD_des_EP1']; _u = _u + ['SVD_NSPU_EP1']; _u = _u + ['ksvk']; _u = _u + ['RPG7V']; _u = _u + ['RPG18']; _u = _u + ['M47Launcher_EP1']; _u = _u + ['MetisLauncher']; _u = _u + ['Igla']; _u = _u + ['Strela']; _u = _u + ['Binocular']; _u = _u + ['NVGoggles']; _u = _u + ['Binocular_Vector']; _u = _u + ['Makarov']; _u = _u + ['revolver_EP1']; _u = _u + ['revolver_gold_EP1']; _u = _u + ['MakarovSD']; _u = _u + ['Sa61_EP1']; _u = _u + ['UZI_EP1']; _u = _u + ['UZI_SD_EP1']; _u = _u + ['Laserdesignator']; _u = _u + ['ItemCompass']; _u = _u + ['ItemGPS']; _u = _u + ['ItemMap']; _u = _u + ['ItemRadio']; _u = _u + ['ItemWatch']; _u = _u + ['TK_Assault_Pack_EP1']; _u = _u + ['TK_Assault_Pack_RPK_EP1']; _u = _u + ['TK_RPG_Backpack_EP1']; _u = _u + ['TK_ALICE_Pack_EP1']; _u = _u + ['TK_ALICE_Pack_AmmoMG_EP1']; _u = _u + ['TK_ALICE_Pack_Explosives_EP1']; _u = _u + ['TKA_Assault_Pack_Ammo_EP1']; _u = _u + ['TKG_ALICE_Pack_AmmoAK74_EP1']; _u = _u + ['TKG_ALICE_Pack_AmmoAK47_EP1']; _u = _u + ['TKA_ALICE_Pack_Ammo_EP1']; _u = _u + ['Tripod_Bag']; _u = _u + ['KORD_TK_Bag_EP1']; _u = _u + ['KORD_high_TK_Bag_EP1']; _u = _u + ['SPG9_TK_INS_Bag_EP1']; _u = _u + ['AGS_TK_Bag_EP1']; _u = _u + ['Metis_TK_Bag_EP1']; _u = _u + ['2b14_82mm_TK_Bag_EP1']; [_u, _m, _side] Call Compile preprocessFile "Common\Config\Config_SortWeapons.sqf"; //--- Loadout - Templates (note that backpacks content require the weapons to be first), use -1 to use the default BP content. _u = [[['AKS_74_kobra','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','HandGrenade_East','SmokeShellRed','8Rnd_9x18_Makarov'],[8,2,2,8]]]]; _u = _u + [[['AK_74_GL_kobra','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','HandGrenade_East','1Rnd_HE_GP25'],[10,2,8]]]]; _u = _u + [[['AKS_74_kobra','RPG18','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','RPG18'],[6,1]]]]; _u = _u + [[['FN_FAL','RPG7V','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['20Rnd_762x51_FNFAL','PG7VL','OG7'],[6,2,1]]]]; _u = _u + [[['AKS_74_kobra','MetisLauncher','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','AT13'],[6,1]]]]; _u = _u + [[['FN_FAL','Strela','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['20Rnd_762x51_FNFAL','Strela'],[6,1]]]]; _u = _u + [[['AKS_74_pso','TK_ALICE_Pack_Explosives_EP1','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','MineE','8Rnd_9x18_Makarov'],[6,3,8]],-1]]; _u = _u + [[['SVD_NSPU_EP1','MakarovSD','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['10Rnd_762x54_SVD','PipeBomb','8Rnd_9x18_MakarovSD'],[6,3,8]]]]; _u = _u + [[['PK','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['100Rnd_762x54_PK','SmokeShellRed','8Rnd_9x18_Makarov'],[5,2,8]]]]; _u = _u + [[['RPK_74','Makarov','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['75Rnd_545x39_RPK','SmokeShellRed','8Rnd_9x18_Makarov'],[5,2,8]]]]; _u = _u + [[['SVD','MakarovSD','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['10Rnd_762x54_SVD','HandGrenade_East','8Rnd_9x18_MakarovSD'],[10,2,8]]]]; _u = _u + [[['ksvk','MakarovSD','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['5Rnd_127x108_KSVK','HandGrenade_East','8Rnd_9x18_MakarovSD'],[10,2,8]]]]; [_u, _side] Call Compile preprocessFile "Common\Config\Config_SetTemplates.sqf";Private ["_m","_side","_u"]; _side = _this; //--- Loadout - Magazines. _m = ['30Rnd_762x39_AK47']; _m = _m + ['30Rnd_556x45_Stanag']; _m = _m + ['30Rnd_545x39_AK']; _m = _m + ['30Rnd_545x39_AKSD']; _m = _m + ['100Rnd_762x54_PK']; _m = _m + ['75Rnd_545x39_RPK']; _m = _m + ['10Rnd_762x54_SVD']; _m = _m + ['10x_303']; _m = _m + ['PG7V']; _m = _m + ['PG7VL']; _m = _m + ['OG7']; _m = _m + ['PG7VR']; _m = _m + ['RPG18']; _m = _m + ['Dragon_EP1']; _m = _m + ['Igla']; _m = _m + ['Strela']; _m = _m + ['Laserbatteries']; _m = _m + ['6Rnd_45ACP']; _m = _m + ['8Rnd_9x18_Makarov']; _m = _m + ['8Rnd_9x18_MakarovSD']; _m = _m + ['30Rnd_9x19_UZI']; _m = _m + ['30Rnd_9x19_UZI_SD']; _m = _m + ['HandGrenade_East']; _m = _m + ['HandGrenade_Stone']; _m = _m + ['SmokeShell']; _m = _m + ['SmokeShellRed']; _m = _m + ['SmokeShellGreen']; _m = _m + ['SmokeShellBlue']; _m = _m + ['SmokeShellYellow']; _m = _m + ['SmokeShellOrange']; _m = _m + ['SmokeShellPurple']; _m = _m + ['FlareWhite_GP25']; _m = _m + ['FlareYellow_GP25']; _m = _m + ['FlareGreen_GP25']; _m = _m + ['FlareRed_GP25']; _m = _m + ['1Rnd_HE_GP25']; _m = _m + ['1Rnd_SMOKE_GP25']; _m = _m + ['1Rnd_SMOKERED_GP25']; _m = _m + ['1Rnd_SMOKEGREEN_GP25']; _m = _m + ['1Rnd_SMOKEYELLOW_GP25']; _m = _m + ['FlareWhite_M203']; _m = _m + ['FlareYellow_M203']; _m = _m + ['FlareGreen_M203']; _m = _m + ['FlareRed_M203']; _m = _m + ['1Rnd_HE_M203']; _m = _m + ['1Rnd_Smoke_M203']; _m = _m + ['1Rnd_SmokeRed_M203']; _m = _m + ['1Rnd_SmokeGreen_M203']; _m = _m + ['1Rnd_SmokeYellow_M203']; _m = _m + ['MineE']; _m = _m + ['PipeBomb']; _m = [_m, _side] Call Compile preprocessFile "Common\Config\Config_SortMagazines.sqf"; //--- Loadout - Weapons. _u = ['AK_47_M']; _u = _u + ['AK_47_S']; _u = _u + ['M16A2']; _u = _u + ['M16A2GL']; _u = _u + ['AK_74']; _u = _u + ['AK_74_GL']; _u = _u + ['AK_74_GL_kobra']; _u = _u + ['AKS_74']; _u = _u + ['AKS_74_GOSHAWK']; _u = _u + ['AKS_74_kobra']; _u = _u + ['AKS_74_NSPU']; _u = _u + ['AKS_74_pso']; _u = _u + ['AKS_74_U']; _u = _u + ['LeeEnfield']; _u = _u + ['PK']; _u = _u + ['RPK_74']; _u = _u + ['SVD']; _u = _u + ['SVD_des_EP1']; _u = _u + ['SVD_NSPU_EP1']; _u = _u + ['RPG7V']; _u = _u + ['RPG18']; _u = _u + ['M47Launcher_EP1']; _u = _u + ['Igla']; _u = _u + ['Strela']; _u = _u + ['Makarov']; _u = _u + ['revolver_EP1']; _u = _u + ['revolver_gold_EP1']; _u = _u + ['MakarovSD'];; _u = _u + ['UZI_EP1']; _u = _u + ['UZI_SD_EP1']; _u = _u + ['Laserdesignator']; _u = _u + ['Binocular']; _u = _u + ['NVGoggles']; _u = _u + ['Binocular_Vector']; _u = _u + ['ItemCompass']; _u = _u + ['ItemGPS']; _u = _u + ['ItemMap']; _u = _u + ['ItemRadio']; _u = _u + ['ItemWatch']; _u = _u + ['TK_Assault_Pack_EP1']; _u = _u + ['TK_Assault_Pack_RPK_EP1']; _u = _u + ['TK_RPG_Backpack_EP1']; _u = _u + ['TK_ALICE_Pack_EP1']; _u = _u + ['TK_ALICE_Pack_AmmoMG_EP1']; _u = _u + ['TK_ALICE_Pack_Explosives_EP1']; _u = _u + ['TKA_Assault_Pack_Ammo_EP1']; _u = _u + ['TKG_ALICE_Pack_AmmoAK74_EP1']; _u = _u + ['TKG_ALICE_Pack_AmmoAK47_EP1']; _u = _u + ['Tripod_Bag']; _u = _u + ['DSHKM_TK_GUE_Bag_EP1']; _u = _u + ['2b14_82mm_TK_GUE_Bag_EP1']; _u = _u + ['AGS_TK_GUE_Bag_EP1']; _u = _u + ['DSHkM_Mini_TriPod_TK_GUE_Bag_EP1']; _u = _u + ['SPG9_TK_GUE_Bag_EP1']; [_u, _m, _side] Call Compile preprocessFile "Common\Config\Config_SortWeapons.sqf"; //--- Loadout - Templates (note that backpacks content require the weapons to be first), use -1 to use the default BP content. _u = [[['AKS_74_kobra','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','HandGrenade_East','SmokeShellRed','8Rnd_9x18_Makarov'],[8,2,2,8]]]]; _u = _u + [[['AK_74_GL_kobra','Binocular','TKG_ALICE_Pack_AmmoAK74_EP1','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','HandGrenade_East','1Rnd_HE_GP25'],[10,2,8]],-1]]; _u = _u + [[['AKS_74_kobra','RPG18','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','RPG18'],[6,1]]]]; _u = _u + [[['AKS_74_kobra','RPG7V','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','PG7VL','OG7'],[6,2,1]]]]; _u = _u + [[['AKS_74_kobra','MetisLauncher','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','AT13'],[6,1]]]]; _u = _u + [[['AKS_74_U','Strela','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','Strela'],[6,1]]]]; _u = _u + [[['AKS_74_pso','TK_ALICE_Pack_Explosives_EP1','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_545x39_AK','MineE','8Rnd_9x18_Makarov'],[6,3,8]],-1]]; _u = _u + [[['SVD_NSPU_EP1','MakarovSD','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['10Rnd_762x54_SVD','PipeBomb','8Rnd_9x18_MakarovSD'],[6,3,8]]]]; _u = _u + [[['PK','Makarov','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['100Rnd_762x54_PK','SmokeShellRed','8Rnd_9x18_Makarov'],[5,2,8]]]]; _u = _u + [[['RPK_74','Makarov','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['75Rnd_545x39_RPK','SmokeShellRed','8Rnd_9x18_Makarov'],[5,2,8]]]]; _u = _u + [[['SVD','MakarovSD','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['10Rnd_762x54_SVD','HandGrenade_East','8Rnd_9x18_MakarovSD'],[10,2,8]]]]; [_u, _side] Call Compile preprocessFile "Common\Config\Config_SetTemplates.sqf";Private ["_m","_side","_u"]; _side = _this; //--- Loadout - Magazines. _m = ['30Rnd_556x45_Stanag']; _m = _m + ['30Rnd_556x45_StanagSD']; _m = _m + ['20Rnd_556x45_Stanag']; _m = _m + ['30Rnd_556x45_G36']; _m = _m + ['30Rnd_556x45_G36SD']; _m = _m + ['100Rnd_556x45_BetaCMag']; _m = _m + ['5Rnd_762x51_M24']; _m = _m + ['20Rnd_762x51_DMR']; _m = _m + ['10Rnd_127x99_m107']; _m = _m + ['100Rnd_762x51_M240']; _m = _m + ['100Rnd_556x45_M249']; _m = _m + ['200Rnd_556x45_M249']; _m = _m + ['20Rnd_762x51_B_SCAR']; _m = _m + ['20Rnd_762x51_SB_SCAR']; _m = _m + ['6Rnd_HE_M203']; _m = _m + ['6Rnd_FlareWhite_M203']; _m = _m + ['6Rnd_FlareGreen_M203']; _m = _m + ['6Rnd_FlareRed_M203']; _m = _m + ['6Rnd_FlareYellow_M203']; _m = _m + ['6Rnd_Smoke_M203']; _m = _m + ['6Rnd_SmokeRed_M203']; _m = _m + ['6Rnd_SmokeGreen_M203']; _m = _m + ['6Rnd_SmokeYellow_M203']; _m = _m + ['M136']; _m = _m + ['MAAWS_HEAT']; _m = _m + ['MAAWS_HEDP']; _m = _m + ['Javelin']; _m = _m + ['Stinger']; _m = _m + ['Laserbatteries']; _m = _m + ['15Rnd_9x19_M9']; _m = _m + ['15Rnd_9x19_M9SD']; _m = _m + ['7Rnd_45ACP_1911']; _m = _m + ['17Rnd_9x19_glock17']; _m = _m + ['HandGrenade_West']; _m = _m + ['HandGrenade_Stone']; _m = _m + ['IR_Strobe_Target']; _m = _m + ['IR_Strobe_Marker']; _m = _m + ['SmokeShell']; _m = _m + ['SmokeShellRed']; _m = _m + ['SmokeShellGreen']; _m = _m + ['SmokeShellBlue']; _m = _m + ['SmokeShellYellow']; _m = _m + ['SmokeShellOrange']; _m = _m + ['SmokeShellPurple']; _m = _m + ['FlareWhite_M203']; _m = _m + ['FlareYellow_M203']; _m = _m + ['FlareGreen_M203']; _m = _m + ['FlareRed_M203']; _m = _m + ['1Rnd_HE_M203']; _m = _m + ['1Rnd_Smoke_M203']; _m = _m + ['1Rnd_SmokeRed_M203']; _m = _m + ['1Rnd_SmokeGreen_M203']; _m = _m + ['1Rnd_SmokeYellow_M203']; _m = _m + ['Mine']; _m = _m + ['PipeBomb']; _m = [_m, _side] Call Compile preprocessFile "Common\Config\Config_SortMagazines.sqf"; //--- Loadout - Weapons. _u = ['M16A2']; _u = _u + ['M16A2GL']; _u = _u + ['M24_des_EP1']; _u = _u + ['m240_scoped_EP1']; _u = _u + ['M60A4_EP1']; _u = _u + ['Mk_48_DES_EP1']; _u = _u + ['M249_EP1']; _u = _u + ['M249_TWS_EP1']; _u = _u + ['M249_m145_EP1']; _u = _u + ['M4A1']; _u = _u + ['M4A3_CCO_EP1']; _u = _u + ['M4A3_RCO_GL_EP1']; _u = _u + ['G36C_camo']; _u = _u + ['G36_C_SD_camo']; _u = _u + ['G36A_camo']; _u = _u + ['G36K_camo']; _u = _u + ['MG36_camo']; _u = _u + ['M32_EP1']; _u = _u + ['M79_EP1']; _u = _u + ['Mk13_EP1']; _u = _u + ['M14_EP1']; _u = _u + ['m107']; _u = _u + ['m107_TWS_EP1']; _u = _u + ['M110_TWS_EP1']; _u = _u + ['M110_NVG_EP1']; _u = _u + ['SCAR_L_CQC']; _u = _u + ['SCAR_L_CQC_Holo']; _u = _u + ['SCAR_L_STD_Mk4CQT']; _u = _u + ['SCAR_L_STD_EGLM_RCO']; _u = _u + ['SCAR_L_CQC_EGLM_Holo']; _u = _u + ['SCAR_L_STD_EGLM_TWS']; _u = _u + ['SCAR_L_STD_HOLO']; _u = _u + ['SCAR_H_CQC_CCO']; _u = _u + ['SCAR_H_CQC_CCO_SD']; _u = _u + ['SCAR_H_STD_EGLM_Spect']; _u = _u + ['SCAR_H_LNG_Sniper']; _u = _u + ['SCAR_H_LNG_Sniper_SD']; _u = _u + ['SCAR_H_STD_TWS_SD']; _u = _u + ['M136']; _u = _u + ['MAAWS']; _u = _u + ['Javelin']; _u = _u + ['Stinger']; _u = _u + ['Laserdesignator']; _u = _u + ['Binocular']; _u = _u + ['NVGoggles']; _u = _u + ['Binocular_Vector']; _u = _u + ['Colt1911']; _u = _u + ['M9']; _u = _u + ['M9SD']; _u = _u + ['glock17_EP1']; _u = _u + ['ItemCompass']; _u = _u + ['ItemGPS']; _u = _u + ['ItemMap']; _u = _u + ['ItemRadio']; _u = _u + ['ItemWatch']; _u = _u + ['US_Assault_Pack_EP1']; _u = _u + ['US_Assault_Pack_Ammo_EP1']; _u = _u + ['US_Assault_Pack_AmmoSAW_EP1']; _u = _u + ['US_Assault_Pack_AT_EP1']; _u = _u + ['US_Assault_Pack_Explosives_EP1']; _u = _u + ['US_Patrol_Pack_EP1']; _u = _u + ['US_Patrol_Pack_Ammo_EP1']; _u = _u + ['US_Patrol_Pack_Specops_EP1']; _u = _u + ['US_Backpack_EP1']; _u = _u + ['US_Backpack_AmmoMG_EP1']; _u = _u + ['US_Backpack_AT_EP1']; _u = _u + ['US_Backpack_Specops_EP1']; _u = _u + ['Tripod_Bag']; _u = _u + ['M2HD_mini_TriPod_US_Bag_EP1']; _u = _u + ['M2StaticMG_US_Bag_EP1']; _u = _u + ['MK19_TriPod_US_Bag_EP1']; _u = _u + ['TOW_TriPod_US_Bag_EP1']; _u = _u + ['M252_US_Bag_EP1']; [_u, _m, _side] Call Compile preprocessFile "Common\Config\Config_SortWeapons.sqf"; //--- Loadout - Templates (note that backpacks content require the weapons to be first), use -1 to use the default BP content. _u = [[['SCAR_L_CQC','Colt1911','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','HandGrenade_West','SmokeShellBlue','7Rnd_45ACP_1911'],[8,2,2,8]]]]; _u = _u + [[['M16A2GL','US_Assault_Pack_Ammo_EP1','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','HandGrenade_West','1Rnd_HE_M203'],[10,2,8]],-1]]; _u = _u + [[['SCAR_L_CQC_Holo','M136','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','M136'],[6,1]]]]; _u = _u + [[['SCAR_H_CQC_CCO','MAAWS','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['20rnd_762x51_B_SCAR','MAAWS_HEAT'],[6,2]]]]; _u = _u + [[['M4A3_CCO_EP1','Javelin','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','Javelin'],[6,1]]]]; _u = _u + [[['SCAR_L_STD_Mk4CQT','Stinger','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','Stinger'],[6,1]]]]; _u = _u + [[['SCAR_L_CQC','M9','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','Mine','15Rnd_9x19_M9'],[6,3,8]]]]; _u = _u + [[['SCAR_H_CQC_CCO_SD','M9SD','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['20Rnd_762x51_SB_SCAR','PipeBomb','15Rnd_9x19_M9SD'],[6,3,8]]]]; _u = _u + [[['m240_scoped_EP1','Colt1911','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['100Rnd_762x51_M240','SmokeShellBlue','7Rnd_45ACP_1911'],[5,2,8]]]]; _u = _u + [[['M249_m145_EP1','Colt1911','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['200Rnd_556x45_M249','SmokeShellBlue','7Rnd_45ACP_1911'],[5,2,8]]]]; _u = _u + [[['M14_EP1','M9SD','NVGoggles','Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['20Rnd_762x51_DMR','HandGrenade_West','15Rnd_9x19_M9SD'],[10,2,8]]]]; _u = _u + [[['M110_TWS_EP1','M9SD','NVGoggles','Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['20Rnd_762x51_B_SCAR','HandGrenade_West','15Rnd_9x19_M9SD'],[10,2,8]]]]; _u = _u + [[['m107','M9SD','NVGoggles','Binocular_Vector','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['10Rnd_127x99_m107','HandGrenade_West','15Rnd_9x19_M9SD'],[10,2,8]]]]; [_u, _side] Call Compile preprocessFile "Common\Config\Config_SetTemplates.sqf";Private ["_m","_side","_u"]; _side = _this; //--- Loadout - Magazines. _m = ['30Rnd_556x45_Stanag']; _m = _m + ['30Rnd_556x45_StanagSD']; _m = _m + ['20Rnd_556x45_Stanag']; _m = _m + ['30Rnd_556x45_G36']; _m = _m + ['30Rnd_556x45_G36SD']; _m = _m + ['100Rnd_556x45_BetaCMag']; _m = _m + ['5Rnd_762x51_M24']; _m = _m + ['20Rnd_762x51_DMR']; _m = _m + ['10Rnd_127x99_m107']; _m = _m + ['100Rnd_762x51_M240']; _m = _m + ['200Rnd_556x45_M249']; _m = _m + ['30Rnd_9x19_MP5']; _m = _m + ['30Rnd_9x19_MP5SD']; _m = _m + ['8Rnd_B_Beneli_74Slug']; _m = _m + ['M136']; _m = _m + ['SMAW_HEAA']; _m = _m + ['SMAW_HEDP']; _m = _m + ['Javelin']; _m = _m + ['Stinger']; _m = _m + ['Laserbatteries']; _m = _m + ['15Rnd_9x19_M9']; _m = _m + ['15Rnd_9x19_M9SD']; _m = _m + ['7Rnd_45ACP_1911']; _m = _m + ['HandGrenade_West']; _m = _m + ['HandGrenade_Stone']; _m = _m + ['SmokeShell']; _m = _m + ['SmokeShellRed']; _m = _m + ['SmokeShellGreen']; _m = _m + ['SmokeShellBlue']; _m = _m + ['SmokeShellYellow']; _m = _m + ['SmokeShellOrange']; _m = _m + ['SmokeShellPurple']; _m = _m + ['FlareWhite_M203']; _m = _m + ['FlareYellow_M203']; _m = _m + ['FlareGreen_M203']; _m = _m + ['FlareRed_M203']; _m = _m + ['1Rnd_HE_M203']; _m = _m + ['1Rnd_Smoke_M203']; _m = _m + ['1Rnd_SmokeRed_M203']; _m = _m + ['1Rnd_SmokeGreen_M203']; _m = _m + ['1Rnd_SmokeYellow_M203']; _m = _m + ['Mine']; _m = _m + ['PipeBomb']; _m = [_m, _side] Call Compile preprocessFile "Common\Config\Config_SortMagazines.sqf"; //--- Loadout - Weapons. _u = ['M16A2']; _u = _u + ['M16A2GL']; _u = _u + ['m16a4']; _u = _u + ['m16a4_acg']; _u = _u + ['M16A4_GL']; _u = _u + ['M16A4_ACG_GL']; _u = _u + ['M24']; _u = _u + ['M40A3']; _u = _u + ['M240']; _u = _u + ['Mk_48']; _u = _u + ['M249']; _u = _u + ['M4A1']; _u = _u + ['M4A1_Aim']; _u = _u + ['M4A1_Aim_camo']; _u = _u + ['M4SPR']; _u = _u + ['M4A1_RCO_GL']; _u = _u + ['M4A1_AIM_SD_camo']; _u = _u + ['M4A1_HWS_GL_SD_Camo']; _u = _u + ['M4A1_HWS_GL']; _u = _u + ['M4A1_HWS_GL_camo']; _u = _u + ['MP5SD']; _u = _u + ['MP5A5']; _u = _u + ['G36C']; _u = _u + ['G36_C_SD_eotech']; _u = _u + ['G36a']; _u = _u + ['G36K']; _u = _u + ['MG36']; _u = _u + ['DMR']; _u = _u + ['M1014']; _u = _u + ['m107']; _u = _u + ['m8_carbine']; _u = _u + ['m8_carbineGL']; _u = _u + ['m8_compact']; _u = _u + ['m8_sharpshooter']; _u = _u + ['m8_SAW']; _u = _u + ['M136']; _u = _u + ['SMAW']; _u = _u + ['Javelin']; _u = _u + ['Stinger']; _u = _u + ['Laserdesignator']; _u = _u + ['Binocular']; _u = _u + ['NVGoggles']; _u = _u + ['Colt1911']; _u = _u + ['M9']; _u = _u + ['M9SD']; _u = _u + ['ItemCompass']; _u = _u + ['ItemGPS']; _u = _u + ['ItemMap']; _u = _u + ['ItemRadio']; _u = _u + ['ItemWatch']; [_u, _m, _side] Call Compile preprocessFile "Common\Config\Config_SortWeapons.sqf"; //--- Loadout - Templates (note that backpacks content require the weapons to be first), use -1 to use the default BP content. _u = [[['m16a4','Colt1911','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','HandGrenade_West','SmokeShellBlue','7Rnd_45ACP_1911'],[8,2,2,8]]]]; _u = _u + [[['M16A4_GL','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','HandGrenade_West','1Rnd_HE_M203'],[10,2,8]]]]; _u = _u + [[['G36C','M136','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_G36','M136'],[6,1]]]]; _u = _u + [[['M4A1_HWS_GL_SD_Camo','SMAW','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_StanagSD','SMAW_HEAA','1Rnd_HE_M203'],[6,3,8]]]]; _u = _u + [[['M4A1_Aim','Javelin','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','Javelin'],[6,1]]]]; _u = _u + [[['M4A1_Aim','Stinger','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','Stinger'],[6,1]]]]; _u = _u + [[['m16a4_acg','M9','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_Stanag','Mine','15Rnd_9x19_M9'],[6,3,8]]]]; _u = _u + [[['M4A1_AIM_SD_camo','M9SD','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['30Rnd_556x45_StanagSD','PipeBomb','15Rnd_9x19_M9SD'],[6,3,8]]]]; _u = _u + [[['M240','Colt1911','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['100Rnd_762x51_M240','SmokeShellBlue','7Rnd_45ACP_1911'],[5,2,8]]]]; _u = _u + [[['MG36','Colt1911','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['100Rnd_556x45_BetaCMag','SmokeShellBlue','7Rnd_45ACP_1911'],[5,2,8]]]]; _u = _u + [[['DMR','M9SD','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['20Rnd_762x51_DMR','HandGrenade_West','15Rnd_9x19_M9SD'],[10,2,8]]]]; _u = _u + [[['m107','M9SD','NVGoggles','Binocular','ItemCompass','ItemGPS','ItemMap','ItemRadio','ItemWatch'],[['10Rnd_127x99_m107','HandGrenade_West','15Rnd_9x19_M9SD'],[10,2,8]]]]; [_u, _side] Call Compile preprocessFile "Common\Config\Config_SetTemplates.sqf";######################## ### CORE FILE SYSTEM ### ######################## # Description # The core system defines the units and weapons, it's a modulable system. # The core files > Common\Config\ # > Gear < Generic file which deals with weapons/magazines/backpacks definition (price, upgrade level...), more than one may be called. by side Vanilla gamemode will have Gear_USMC, Gear_RU, Gear_GUE called for all sides. You may create more like Gear_ACE for instance. > Magazines properties are defined here [classname, picture, label, price, upgrade level]. > Magazines labels may be changed (if != ""). > Magazines pictures may be changed (if != ""). > Each magazines list Calls "Common\Config\Config_Magazines.sqf" ([_faction, _u, _p, _n, _o, _z] Call Compile preprocessFile "Common\Config\Config_Magazines.sqf";) > Weapons properties are defined here [classname, picture, label, price, upgrade level, magazines]. > Weapons labels may be changed (if != ""). > Weapons pictures may be changed (if != ""). > Weapons magazines may be changed (if != -1, like _m = _m + [["30Rnd_9x19_UZI","30Rnd_9x19_UZI_SD"]]), -1 will get the magazines from the config. > Each weapons list Calls "Common\Config\Config_Weapons.sqf" ([_faction, _u, _p, _n, _o, _z, _m] Call Compile preprocessFile "Common\Config\Config_Weapons.sqf";) > Backpacks properties are defined here [classname, picture, label, price, upgrade level]. > Backpacks labels may be changed (if != ""), using a "+" in front will add a custom text after the actual backpack config name like '+(Ammo SAW)' will give "Assault Backpack (Ammo SAW)" > Backpacks pictures may be changed (if != ""). > Each backpacks list Calls "Common\Config\Config_Backpack.sqf" ([_faction, _u, _p, _n, _o, _z] Call Compile preprocessFile "Common\Config\Config_Backpack.sqf";) > Core_Groups < Generic file which deals with groups which are being used in towns, only one Core_Groups may be called by side. > Town groups properties are defined here [group label, group units] > A list of group calls "Common\Config\Config_Groups.sqf" > Groups uses per town is defined in "Server\Functions\Server_GetTownGroups.sqf" > Loadout < Generic file which defines the loadouts to use in the Gear Menu, more than one Loadout file may be called per side like Loadout_US & Loadout_USMC, those files are commonly called in Core_Root ones. > Magazines classnames are defined here. > Magazines calls "Common\Config\Config_SortMagazines.sqf" (_m = [_m, _side] Call Compile preprocessFile "Common\Config\Config_SortMagazines.sqf";) which set or update the magazines, note that the returned values is a list of non-side-defined magazines used by SortWeapons.sqf (for the WFBE_%1_All). > Weapons classnames are defined here. > Weapons calls "Common\Config\Config_SortWeapons.sqf" ([_u, _m, _side] Call Compile preprocessFile "Common\Config\Config_SortWeapons.sqf";) which set or update the weapons. Note that _m is the non-side-defined magazines returned by SortMagazines.sqf > Templates are defined here. > Only one template per side may be used by default, see below in order to add others. > Templates calls "Common\Config\Config_SetTemplates.sqf" ([_u, _side] Call Compile preprocessFile "Common\Config\Config_SetTemplates.sqf";), you may add an extra "false" parameter to allow multiple template usage in case of multiple Loadout_x files call per side. > Core_Models < Generic file which deals with models, only one Core_Models may be called by a side. > Camps and their properties (direction, position, model...) are defined here. > Depots and their properties (direction, position, distance, model...) are defined here. > Airports and their properties (direction, position, distance, model...) are defined here. > Core_Root < Generic file which deals with the sides general properties, only one Core_Root may be called by side. > Soldiers/pilots/crew models are defined here. > Flag textures are defined here. > Radio announcers are defined here. > Support (Ambulances/Repair/Rearm/Refuel) are defined here. > UAV model is defined here (nil means none). > Town inter-patrols models are defined here. > Base patrols models are defined here. > Paratroopers models are defined here. > Paratroopers vehicle models are defined here. > Ammo paradropping models are defined here. > Server AI playable units loadout is defined here. > Client default loadout is defined here. > Default buy faction filter is defined here. > Core_Loadout is called from here (Gear menu items display), more than one may be called. You may Call Loadout_US & Loadout_USMC for instance. You may create your own aswell. /* Array Push function. Parameters: - Array. - Value. */ Private ["_array","_value"]; _array = _this select 0; _value = _this select 1; _array set [count(_array), _value]; _array/* Resize an array by removing the given index. Parameters: - Array. */ Private ["_array","_index"]; _array = +(_this select 0); _index = _this select 1; if (count _array > 0) then { _array set [_index, "wfbe_nil"]; _array = _array - ["wfbe_nil"]; }; _array/* Shift an array. Parameters: - Array. - Index Array. */ Private ["_array","_i","_remove","_shifted"]; _array = +(_this select 0); _remove = _this select 1; _shifted = []; _i = 0; for '_j' from 0 to count(_array)-1 do { if !(_j in _remove) then { _shifted set [_i, _array select _j]; _i = _i + 1; }; }; _shifted/* Shuffle an array. Parameters: - Array. */ Private ["_array","_count","_ran","_selected","_shuffled"]; _array = +_this; _shuffled = []; _count = (count _array) -1; for '_i' from 0 to _count do { _ran = floor(random(count _array)); _selected = _array select _ran; _shuffled set [_i, _selected]; _array = [_array, [_ran]] Call WFBE_CO_FNC_ArrayShift; }; _shuffledswitch (typeOf _this) do { case "HMMWV_Avenger": { if (WF_A2_Vanilla) then { _this removeWeapon "SidewinderLaucher_AH1Z"; _this removeWeapon "StingerLaucher"; _this addMagazine "2Rnd_Sidewinder_AH1Z"; _this addMagazine "2Rnd_Sidewinder_AH1Z"; _this addMagazine "2Rnd_Sidewinder_AH1Z"; _this addMagazine "2Rnd_Sidewinder_AH1Z"; _this addMagazine "2Rnd_Sidewinder_AH1Z"; _this addMagazine "2Rnd_Sidewinder_AH1Z"; _this addMagazine "2Rnd_Sidewinder_AH1Z"; _this addMagazine "2Rnd_Sidewinder_AH1Z"; _this addWeapon "SidewinderLaucher_AH1Z"; }; }; case "M6_EP1": { _this removeWeapon "StingerLaucher_4x"; _unit addMagazine "4Rnd_Sidewinder_AV8B"; _unit addMagazine "4Rnd_Sidewinder_AV8B"; _unit addWeapon "SidewinderLaucher"; }; case "Ka52": { _this removeWeapon "AT9Launcher"; _this removeWeapon "VikhrLauncher"; _this addMagazine "4Rnd_AT9_Mi24P"; _this addMagazine "4Rnd_AT9_Mi24P"; _this addWeapon "AT9Launcher"; _this addMagazine "2Rnd_Sidewinder_AH1Z"; _this addMagazine "2Rnd_Sidewinder_AH1Z"; _this addWeapon "SidewinderLaucher_AH1Z"; }; case "Ka52Black": { _this removeWeapon "AT9Launcher"; _this removeWeapon "VikhrLauncher"; _this addMagazine "4Rnd_AT9_Mi24P"; _this addMagazine "4Rnd_AT9_Mi24P"; _this addWeapon "AT9Launcher"; _this addMagazine "2Rnd_Sidewinder_AH1Z"; _this addMagazine "2Rnd_Sidewinder_AH1Z"; _this addWeapon "SidewinderLaucher_AH1Z"; }; // case "2S6M_Tunguska": { // _this addMagazine "4Rnd_Stinger"; // _this addMagazine "4Rnd_Stinger"; // _this addWeapon "StingerLaucher_4x"; // }; case "An2_TK_EP1": { _this addMagazine "500Rnd_TwinVickers"; _this addMagazine "500Rnd_TwinVickers"; _this addWeapon "TwinVickers"; _unit addMagazine "60Rnd_CMFlareMagazine"; _unit addWeapon "CMFlareLauncher"; }; case "An2_1_TK_CIV_EP1": { _this addMagazine "500Rnd_TwinVickers"; _this addMagazine "500Rnd_TwinVickers"; _this addWeapon "TwinVickers"; _unit addMagazine "60Rnd_CMFlareMagazine"; _unit addWeapon "CMFlareLauncher"; }; case "An2_2_TK_CIV_EP1": { _this addMagazine "500Rnd_TwinVickers"; _this addMagazine "500Rnd_TwinVickers"; _this addWeapon "TwinVickers"; _unit addMagazine "60Rnd_CMFlareMagazine"; _unit addWeapon "CMFlareLauncher"; }; };Private ['_buildings','_buildingType','_checks','_closest','_range','_side','_unit']; _buildingType = _this select 0; _buildings = _this select 1; _range = _this select 2; _side = _this select 3; _unit = _this select 4; _closest = objNull; _checks = [_side,missionNamespace getVariable Format ["WFBE_%1%2",str _side,_buildingType],_buildings] Call GetFactories; if (count _checks > 0) then { _closest = [_unit,_checks] Call WFBE_CO_FNC_GetClosestEntity; if (_unit distance _closest > _range) then {_closest = objNull}; }; _closestPrivate ['_amount','_change','_currentSupply','_side']; _side = _this select 0; _amount = _this select 1; _currentSupply = (_side) Call GetSideSupply; if (isNil '_currentSupply') then {_currentSupply = 0}; _change = _currentSupply + _amount; if (_change < 0) then {_change = _currentSupply - _amount}; (_side Call WFBE_CO_FNC_GetSideLogic) setVariable ["wfbe_supply", _change, true];Private['_amount','_team']; _team = _this select 0; _amount = _this select 1; if (isNull _team) exitWith {}; _team setVariable ["wfbe_funds", (_team getVariable "wfbe_funds") + _amount, true];Private ["_entitie", "_group", "_side", "_unit"]; _unit = _this select 0; _group = _this select 1; _side = _this select 2; _units = (units group _unit) Call WFBE_CO_FNC_GetLiveUnits; //--- Be aware, if the unit that is changing group is the only one left, the join command will erase the group. We fix it by adding a "temp" unit before the join. if ((count _units) < 2) then {_entitie = [missionNamespace getVariable Format ["WFBE_%1SOLDIER", _side], group _unit, [0,0,0], _side, false] Call WFBE_CO_FNC_CreateUnit}; [_unit] join _group; if !(isNull _entitie) then {deleteVehicle _entitie};/* Clear the Cargo of a vehicle (Vanilla). Parameters: - Vehicle */ Private ["_vehicle"]; _vehicle = _this; clearMagazineCargo _vehicle; clearWeaponCargo _vehicle;/* Clear the Cargo of a vehicle (Arrowhead). Parameters: - Vehicle */ Private ["_vehicle"]; _vehicle = _this; if (count ((getMagazineCargo _vehicle) select 0) > 0) then {clearMagazineCargoGlobal _vehicle}; if (count ((getWeaponCargo _vehicle) select 0) > 0) then {clearWeaponCargoGlobal _vehicle}; if (count ((getBackpackCargo _vehicle) select 0) > 0) then {clearBackpackCargoGlobal _vehicle};Private ['_canCreate','_commander','_crews','_driver','_firstDone','_global','_gunner','_list','_lockVehicles','_position','_probability','_side','_sideID','_team','_type','_unit','_units','_vehicle','_vehicles']; _list = _this select 0; _position = _this select 1; _side = _this select 2; _sideID = (_side) Call GetSideID; _lockVehicles = _this select 3; _team = _this select 4; _global = if (count _this > 5) then {_this select 5} else {true}; _probability = if (count _this > 6) then {_this select 6} else {-1}; _units = []; _vehicles = []; _crews = []; _firstDone = false; if (isNull _team) then {_team = createGroup _side}; //--- Create a group if none are given as a parameter. //--- Create. { _canCreate = true; if (_probability != -1) then { if (random 100 > _probability && _firstDone) then {_canCreate = false}; _firstDone = true; }; if (_canCreate) then { if (_x isKindOf 'Man') then { _unit = [_x,_team,_position,_sideID] Call WFBE_CO_FNC_CreateUnit; _units = _units + [_unit]; } else { _vehicle = [_x, _position, _sideID, 0, _lockVehicles, true, _global, "FORM"] Call WFBE_CO_FNC_CreateVehicle; _type = if (_vehicle isKindOf 'Man') then {missionNamespace getVariable Format ['WFBE_%1SOLDIER',_side]} else {if (_vehicle isKindOf 'Air') then {missionNamespace getVariable Format ['WFBE_%1PILOT',_side]} else {missionNamespace getVariable Format ['WFBE_%1CREW',_side]}}; if (_vehicle emptyPositions 'driver' > 0) then {_driver = [_type,_team,_position,_sideID] Call WFBE_CO_FNC_CreateUnit;_driver moveInDriver _vehicle;_crews = _crews + [_driver]}; if (_vehicle emptyPositions 'gunner' > 0) then {_gunner = [_type,_team,_position,_sideID] Call WFBE_CO_FNC_CreateUnit;_gunner moveInGunner _vehicle;_crews = _crews + [_gunner]}; if (_vehicle emptyPositions 'commander' > 0) then {_commander = [_type,_team,_position,_sideID] Call WFBE_CO_FNC_CreateUnit;_commander moveInCommander _vehicle;_crews = _crews + [_commander]}; _vehicles = _vehicles + [_vehicle]; }; }; } forEach _list; {_team addVehicle _x} forEach _vehicles; //--- Add vehicles. [_units,_vehicles,_team,_crews]/* Create units in towns. Parameters: - Town - Side - Groups - Spawn positions - Teams */ Private ["_groups", "_lock", "_position", "_positions", "_side", "_sideID", "_team", "_teams", "_town", "_town_teams", "_town_vehicles"]; _town = _this select 0; _side = _this select 1; _groups = _this select 2; _positions = _this select 3; _teams = _this select 4; _sideID = (_side) call WFBE_CO_FNC_GetSideID; _built = 0; _builtveh = 0; _town_teams = []; _town_vehicles = []; _lock = if ((missionNamespace getVariable "WFBE_C_TOWNS_VEHICLES_LOCK_DEFENDER") == 0 && _side == WFBE_DEFENDER) then {false} else {true}; for '_i' from 0 to count(_groups)-1 do { _position = _positions select _i; _team = _teams select _i; _retVal = [_groups select _i, _position, _side, _lock, _team, true, 90] call WFBE_CO_FNC_CreateTeam; _vehicles = _retVal select 1; _built = _built + count(_retVal select 0); _builtveh = _builtveh + (count _vehicles); [_town, _team, _sideID] execFSM "Server\FSM\server_town_patrol.fsm"; [_team, 400, _position] spawn WFBE_CO_FNC_RevealArea; [_town_teams, _team] call WFBE_CO_FNC_ArrayPush; { [_town_vehicles, _x] call WFBE_CO_FNC_ArrayPush; if (isServer) then { _x spawn HandleEmptyVehicle; _x setVariable ["WFBE_Taxi_Prohib", true]; }; } forEach _vehicles; if ((missionNamespace getVariable "WFBE_C_MODULE_UPSMON") > 0) then {[leader _team,Format ['UPSMON_TOWN_%1',str _town],"move","nofollow","fortify","reinforcement"] spawn UPSMON}; }; if (_built > 0) then {[str _side,'UnitsCreated',_built] call UpdateStatistics}; if (_builtveh > 0) then {[str _side,'VehiclesCreated',_builtveh] call UpdateStatistics}; ["INFORMATION", Format["Common_CreateTownUnits.sqf: [%1] [%2] Created units [%3].", _town, _side, _built + _builtveh]] Call WFBE_CO_FNC_LogContent; [_town_teams, _town_vehicles]/* Create a unit. Parameters: - Classname - Group - Position - Side ID - {Global Init} - {PLacement} */ Private ["_get", "_global", "_position", "_side", "_skill", "_special", "_team", "_type", "_unit"]; _type = _this select 0; _team = _this select 1; _position = _this select 2; _side = _this select 3; _global = if (count _this > 4) then {_this select 4} else {true}; _special = if (count _this > 5) then {_this select 5} else {"FORM"}; if (typeName _side == "SIDE") then {_side = (_side) Call WFBE_CO_FNC_GetSideID}; _get = missionNamespace getVariable _type; _skill = if !(isNil '_get') then {_get select QUERYUNITSKILL} else {missionNamespace getVariable "WFBE_C_UNITS_SKILL_DEFAULT"}; _unit = _team createUnit [_type, _position, [], 5, _special]; _unit setSkill _skill; if (_global) then { if (_side != WFBE_DEFENDER_ID || WFBE_ISTHREEWAY) then { if ((missionNamespace getVariable "WFBE_C_UNITS_TRACK_INFANTRY") > 0) then { _unit setVehicleInit Format["[this,%1] ExecVM 'Common\Init\Init_Unit.sqf';", _side]; processInitCommands; } else { if (isPlayer leader _team) then {[_unit, _side] ExecVM 'Common\Init\Init_Unit.sqf'}; }; }; }; _unit addEventHandler ['Killed', Format ['[_this select 0,_this select 1,%1] Spawn WFBE_CO_FNC_OnUnitKilled', _side]]; ["INFORMATION", Format ["Common_CreateUnit.sqf: [%1] Unit [%2] was created at [%3] and has been assigned to team [%4]", _side Call WFBE_CO_FNC_GetSideFromID, _type, _position, _team]] Call WFBE_CO_FNC_LogContent; _unit/* Create a vehicle. Parameters: - Classname - Position - Side ID - Direction - Locked - {Bounty} - {Global Init} - {PLacement} */ Private ["_bounty", "_direction", "_global", "_locked", "_position", "_side", "_special", "_track", "_type", "_vehicle"]; _type = _this select 0; _position = _this select 1; _side = _this select 2; _direction = _this select 3; _locked = _this select 4; _bounty = if (count _this > 5) then {_this select 5} else {true}; _global = if (count _this > 6) then {_this select 6} else {true}; _special = if (count _this > 7) then {_this select 7} else {"FORM"}; if (typeName _position == "OBJECT") then {_position = getPos _position}; if (typeName _side == "SIDE") then {_side = (_side) Call WFBE_CO_FNC_GetSideID}; _vehicle = createVehicle [_type, _position, [], 7, _special]; if (_special != "FLY") then { _vehicle setVelocity [0,0,-1]; } else { _vehicle setVelocity [50 * (sin _direction), 50 * (cos _direction), 0]; }; _vehicle setDir _direction; if (_locked) then {_vehicle lock _locked}; if (_bounty) then { _vehicle addEventHandler ["killed", Format ['[_this select 0,_this select 1,%1] Spawn WFBE_CO_FNC_OnUnitKilled', _side]]; _vehicle addEventHandler ["hit", {_this Spawn WFBE_CO_FNC_OnUnitHit}]; }; if (_global) then { if (_side != WFBE_DEFENDER_ID || WFBE_ISTHREEWAY) then { _vehicle setVehicleInit Format["[this,%1] ExecVM 'Common\Init\Init_Unit.sqf'", _side]; processInitCommands; }; }; ["INFORMATION", Format ["Common_CreateVehicle.sqf: [%1] Vehicle [%2] was created at [%3].", _side Call WFBE_CO_FNC_GetSideFromID, _type, _position]] Call WFBE_CO_FNC_LogContent; _vehiclePrivate ['_ammo','_currentUpgrades','_extMagUpgr','_i','_index','_side','_unit']; _unit = _this select 0; _index = _this select 1; _side = _this select 2; //--- Browse for extended Mags (WP, SADARM... ) _ammo = (missionNamespace getVariable Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS',_side]) select _index; if (count _ammo == 0) exitWith {}; _extMagUpgr = missionNamespace getVariable Format['WFBE_%1_ARTILLERY_EXTENDED_MAGS_UPGRADE',_side]; //--- Retrieve the Artillery upgrade level. _currentUpgrades = ((_side) Call WFBE_CO_FNC_GetSideUpgrades) select WFBE_UP_ARTYAMMO; for [{_i = 0},{_i < count(_ammo)},{_i = _i + 1}] do { if (_currentUpgrades >= ((_extMagUpgr select _index) select _i)) then { _unit addMagazine (_ammo select _i); }; };/* Equip a unit with a backpack or remove it. Parameters: - Unit - Backpack - {Backpack content} */ Private ["_backpack","_backpack_content","_counts","_items","_unit","_unit_bp"]; _unit = _this select 0; _backpack = _this select 1; _backpack_content = if (count _this > 2) then {_this select 2} else {[]}; //--- Always remove the Backpack. _unit_bp = unitBackpack _unit; if !(isNull _unit_bp) then {removeBackpack _unit}; //--- Add Backpack if necessary. if (_backpack != "") then { _unit addBackpack _backpack; _unit_bp = unitBackpack _unit; //--- Clear the existing default content. clearWeaponCargoGlobal _unit_bp; clearMagazineCargoGlobal _unit_bp; //--- Don't bother if there is no content. if (count _backpack_content == 0) exitWith {}; //--- Weapons _items = (_backpack_content select 0) select 0; _counts = (_backpack_content select 0) select 1; for '_i' from 0 to count(_items) do {_unit_bp addWeaponCargoGlobal [_items select _i, _counts select _i]}; //--- Ammo _items = (_backpack_content select 1) select 0; _counts = (_backpack_content select 1) select 1; for '_i' from 0 to count(_items) do {_unit_bp addMagazineCargoGlobal [_items select _i, _counts select _i]}; };Private['_ammo','_unit','_use','_weapon','_weapons']; _unit = _this select 0; _weapons = _this select 1; _ammo = _this select 2; removeAllWeapons _unit; removeAllItems _unit; {_unit addMagazine _x} forEach _ammo; {_unit addWeapon _x} forEach _weapons; _use = primaryWeapon _unit; if (_use == "") then { Private ["_kind"]; { _kind = getNumber(configFile >> 'CfgWeapons' >> _x >> "type"); if (_kind in [1,2,4,5]) exitWith {_use = _x}; } forEach _weapons; }; if (_use != "") then { Private ["_muzzles"]; _muzzles = getArray (configFile >> "CfgWeapons" >> _use >> "muzzles"); if !("this" in _muzzles) then {_unit selectWeapon (_muzzles select 0)} else {_unit selectWeapon _use}; };/* Equip a unit with a defined loadout. Parameters: - Unit - Weapons - Magazines - Selectable weapons (Priority). - {Backpack} - {Backpack content} */ Private ["_backpack","_backpack_content","_eligible","_magazines","_muzzles","_unit","_use","_weapons"]; _unit = _this select 0; _weapons = _this select 1; _magazines = _this select 2; _eligible = _this select 3; _backpack = if (count _this > 4) then {_this select 4} else {""}; _backpack_content = if (count _this > 5) then {_this select 5} else {[]}; //--- Equip with default stuff. removeAllWeapons _unit; removeAllItems _unit; {_unit addMagazine _x} forEach _magazines; {_unit addWeapon _x} forEach _weapons; //--- Get a proper muzzle. _use = ""; {if (_x != "") exitWith {_use = _x}} forEach _eligible; if (_use != "") then { _muzzles = getArray (configFile >> "CfgWeapons" >> _use >> "muzzles"); if !("this" in _muzzles) then {_unit selectWeapon (_muzzles select 0)} else {_unit selectWeapon _use}; }; //--- Backpack handling. [_unit, _backpack, _backpack_content] Call WFBE_CO_FNC_EquipBackpack;/* Equip a vehicle Parameters: - Vehicle - Vehicle Content */ Private ["_counts","_items","_vehicle","_vehicle_content"]; _vehicle = _this select 0; _vehicle_content = _this select 1; //--- Make sure that the vehicle is alive. if (alive _vehicle) then { //--- Clear the existing default content. clearWeaponCargoGlobal _vehicle; clearMagazineCargoGlobal _vehicle; clearBackpackCargoGlobal _vehicle; //--- Don't bother if there is no content. if (count _vehicle_content == 0) exitWith {}; //--- Weapons _items = (_vehicle_content select 0) select 0; _counts = (_vehicle_content select 0) select 1; for '_i' from 0 to count(_items) do {_vehicle addWeaponCargoGlobal [_items select _i, _counts select _i]}; //--- Ammo _items = (_vehicle_content select 1) select 0; _counts = (_vehicle_content select 1) select 1; for '_i' from 0 to count(_items) do {_vehicle addMagazineCargoGlobal [_items select _i, _counts select _i]}; //--- Backpack _items = (_vehicle_content select 2) select 0; _counts = (_vehicle_content select 2) select 1; for '_i' from 0 to count(_items) do {_vehicle addBackpackCargoGlobal [_items select _i, _counts select _i]}; };/* Find turrets recursively (based on http://community.bistudio.com/wiki/weaponsTurret) Parameters: - Config root - Turret Path */ private ["_root", "_class", "_path", "_currentPath"]; _root = _this select 0; _path = +(_this select 1); for "_i" from 0 to count _root -1 do { _class = _root select _i; if (isClass _class) then { _currentPath = _path + [_i]; _result set [count _result, [getArray(_class >> "weapons"), getArray(_class >> "magazines"), _currentPath, str _class]]; _class = _class >> "turrets"; if (isClass _class) then {[_class, _currentPath] call WFBE_CO_FNC_FindTurretsRecursive}; }; };Private["_ammo","_angle","_artillery","_artillery_classes","_artillery_type","_burst","_destination","_dispersion","_direction","_distance","_FEH","_gunner","_i","_index","_minRange","_maxRange","_position","_radius","_reloadTime","_side","_type","_velocity","_watchPosition","_weapon","_xcoord","_ycoord"]; _artillery = _this select 0; _destination = _this select 1; _side = _this select 2; _radius = _this select 3; _index = [typeOf _artillery, _side] Call IsArtillery; _gunner = gunner _artillery; if (_index == -1) exitWith {["WARNING", Format ["Common_FireArtillery.sqf: No artillery types were found for [%1].", _artillery]] Call WFBE_CO_FNC_LogContent}; if (isNull _gunner) exitWith {["WARNING", Format ["Common_FireArtillery.sqf: Artillery [%1] gunner is null.", _artillery]] Call WFBE_CO_FNC_LogContent}; if (isPlayer _gunner) exitWith {["WARNING", Format ["Common_FireArtillery.sqf: Artillery [%1] gunner is a player", _artillery]] Call WFBE_CO_FNC_LogContent}; _minRange = (missionNamespace getVariable Format ["WFBE_%1_ARTILLERY_RANGES_MIN",_side]) select _index; _maxRange = round(((missionNamespace getVariable Format ["WFBE_%1_ARTILLERY_RANGES_MAX",_side]) select _index) * (missionNamespace getVariable "WFBE_C_ARTILLERY")); _weapon = (missionNamespace getVariable Format ["WFBE_%1_ARTILLERY_WEAPONS",_side]) select _index; _ammo = (missionNamespace getVariable Format ["WFBE_%1_ARTILLERY_AMMOS",_side]) select _index; _velocity = (missionNamespace getVariable Format ["WFBE_%1_ARTILLERY_VELOCITIES",_side]) select _index; _dispersion = (missionNamespace getVariable Format ["WFBE_%1_ARTILLERY_DISPERSIONS",_side]) select _index; [_artillery] Call ARTY_Prep; //--- Prepare the artillery unit to the fire mission submission. //--- Artillery Calculations. _position = getPos _artillery; _xcoord = (_destination select 0) - (_position select 0); _ycoord = (_destination select 1) - (_position select 1); _direction = -(((_ycoord atan2 _xcoord) + 270) % 360); if (_direction < 0) then {_direction = _direction + 360}; _distance = sqrt ((_xcoord ^ 2) + (_ycoord ^ 2)) - _minRange; _angle = _distance / (_maxRange - _minRange) * 100 + 15; if (_angle > 70) then {_angle = 70}; if (_distance < 0 || _distance + _minRange > _maxRange) exitWith {}; _FEH = Call Compile Format ["_artillery addEventHandler ['Fired',{[_this select 4,_this select 6,%1,%2,%3,%4,%5,%6,%7,%8,%9] Spawn WFBE_CO_FNC_HandleArtillery}];",_ammo,_destination,_velocity,_dispersion,getPos _artillery,_distance,_radius,_maxRange,_side]; {_gunner disableAI _x} forEach ['MOVE','TARGET','AUTOTARGET']; _watchPosition = [_destination select 0, _destination select 1, (_artillery distance _destination)/(tan(90-_angle))]; (_gunner) doWatch _watchPosition; sleep (10 + random 4); if !(alive _gunner) exitWith {if !(isNull _artillery) then {_artillery removeEventHandler ['Fired',_FEH]}}; if !(alive _artillery) exitWith { if (alive _gunner) then {{_gunner enableAI _x} forEach ['MOVE','TARGET','AUTOTARGET']}; }; _reloadTime = (missionNamespace getVariable Format ["WFBE_%1_ARTILLERY_TIME_RELOAD",_side]) select _index; _burst = (missionNamespace getVariable Format ["WFBE_%1_ARTILLERY_BURST",_side]) select _index; for '_i' from 1 to _burst do { sleep (_reloadTime+random 3); if (!alive _gunner || !alive _artillery) exitWith {}; _artillery fire _weapon; }; sleep 1; if !(isNull _artillery) then {_artillery removeEventHandler ['Fired', _FEH]}; sleep (_reloadTime + 20); if (alive (_gunner)) then {{_gunner enableAI _x} forEach ['MOVE','TARGET','AUTOTARGET']}; [_artillery] Call ARTY_Finish; //--- Free the artillery unit from the fire mission submission.Private ["_i","_split","_unit","_yield"]; _unit = _this; if (_unit == leader (group _unit)) exitWith {"Leader"}; _split = toArray(str _unit); _find = _split find 58; _yield = []; if (_find != -1) then { for '_i' from (_find+1) to count(_split)-1 do { if ((_split select _i) == 65 || (_split select _i) == 32) exitWith {}; _yield = _yield + [_split select _i]; }; }; if (count _yield == 0) exitWith {"0"}; toString(_yield)/* Get enemies in area according to sides. Parameters: - Units/Objects array. - Friendly Side. - {Ignored sides} */ Private ["_count","_sides","_sideFriendly","_sideIgnored","_units"]; _units = _this select 0; _sideFriendly = _this select 1; _sideIgnored = if (count _this > 2) then {_this select 2} else {[]}; _sides = [west, east, resistance, sideEnemy] - [_sideFriendly] - _sideIgnored; _count = 0; {_count = _count + (_x countSide _units)} forEach _sides; _countPrivate["_ID","_side","_team"]; _side = _this Select 0; _ID = _this Select 1; _team = ((Format["WFBE_%1TEAMS",str _side]) Call GetNamespace) select (_ID - 1); _team/* Get closest enemy location. Parameters: - Entity. - Side ID of the friendly side. - {Ignored Towns Side IDs} */ Private ["_closest","_distance","_entity","_side","_sideID","_ignoredSideID"]; _entity = _this select 0; _sideID = _this select 1; _ignoredSideID = if (count _this > 2) then {_this select 2} else {[]}; _closest = objNull; _distance = 100000; { _side = _x getVariable "sideID"; if (_side != _sideID && !(_sideID in _ignoredSideID) && (_x distance _entity) < _distance) then {_closest = _x; _distance = _x distance _entity}; } forEach towns; _closest/* Return the closest object among a list Parameters: - Entity. - List. */ Private["_distance","_nearest","_object","_objects"]; _object = _this select 0; _objects = _this select 1; _nearest = objNull; _distance = 100000; {if (_x distance _object < _distance) then {_nearest = _x;_distance = _x distance _object}} forEach _objects; _nearestPrivate["_object"]; _object = _this select 0; [_object,towns] Call WFBE_CO_FNC_GetClosestEntityPrivate["_enemyTowns","_object","_nearest","_side"]; _object = _this select 0; _side = _this select 1; _cvar = if (count _this > 2) then {_this select 2} else {""}; _enemyTowns = towns - ((_side) Call GetSideTowns); _nearest = objNull; if (count _enemyTowns > 0) then { _nearests = [_object,_enemyTowns] Call SortByDistance; if (_cvar != "") then { for '_i' from 0 to count(_nearests)-1 do { if ((_nearests select _i) getVariable _cvar) exitWith {_nearest = (_nearests select _i)}; }; } else { _nearest = _nearests select 0; } }; _nearest/* Return a side's HQ. Parameters: - Side. */ switch (_this) do { case west: {WFBE_L_BLU getVariable "wfbe_commander"}; case east: {WFBE_L_OPF getVariable "wfbe_commander"}; case resistance: {WFBE_L_GUE getVariable "wfbe_commander"}; default {objNull}; }/* Return a config entry. (adapted from BIS) Parameters: - Config - Object */ private ["_config", "_entryName"]; _config = _this select 0; _entryName = _this select 1; //--- Validate parameters if ((typeName _config) != (typeName configFile)) exitWith {debugLog "Log: [returnConfigEntry] Starting class (0) must be of type Config!"; nil}; if ((typeName _entryName) != (typeName "")) exitWith {debugLog "Log: [returnConfigEntry] Entry name (1) must be of type String!"; nil}; private ["_entry", "_value"]; _entry = _config >> _entryName; //--- If the entry is not found and we are not yet at the config root, explore the class' parent. if (((configName (_config >> _entryName)) == "") && (!((configName _config) in ["CfgVehicles", "CfgWeapons", ""]))) then { [inheritsFrom _config, _entryName] call WFBE_CO_FNC_GetConfigEntry; } else { //--- Supporting either Numbers or Strings, and array ofc! switch (true) do { case (isNumber _entry): {_value = getNumber _entry}; case (isText _entry): {_value = getText _entry}; case (isArray _entry): {_value = getArray _entry}; }; }; //--- Make sure returning 'nil' works. if (isNil "_value") exitWith {nil}; _valuePrivate ['_element','_from','_object']; _object = _this select 0; _element = _this select 1; _from = if (count _this > 2) then {_this select 2} else {'CfgVehicles'}; if (typeName _object == 'OBJECT') then {_object = typeOf(_object)}; getText (configFile >> _from >> _object >> _element)/* Adapted from BIS turret's function. */ private ['_entry','_turrestcount','_turrets']; _entry = configFile >> 'CfgVehicles' >> _this >> 'Turrets'; vhasCommander = false; vhasGunner = false; _turrets = [_entry] Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleTurretsReturn.sqf"; tmp_overall = []; if (count _turrets > 0) then { [_turrets, []] Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleTurrets.sqf"; }; _turrestcount = count(tmp_overall); if (vhasGunner) then {_turrestcount = _turrestcount - 1}; if (vhasCommander) then {_turrestcount = _turrestcount - 1}; [[vhasCommander,vhasGunner,count(tmp_overall)+1,_turrestcount], tmp_overall]private ["_turrets", "_i", "_path"]; _turrets = _this select 0; _path = _this select 1; _i = 0; while {_i < (count _turrets)} do { private ["_turretIndex", "_thisTurret"]; _turretIndex = _turrets select _i; _thisTurret = _path + [_turretIndex]; tmp_overall = tmp_overall + [_thisTurret]; [([_turrets select (_i + 1), _thisTurret] Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleTurrets.sqf")]; _i = _i + 2; };if ((count _this) < 1) exitWith {debugLog "Log: [returnVehicleTurrets] Function requires at least 1 parameter!"; []}; private ["_entry"]; _entry = _this select 0; //Validate parameters if ((typeName _entry) != (typeName configFile)) exitWith {debugLog "Log: [returnVehicleTurrets] Entry (0) must be a Config!"; []}; private ["_turrets", "_turretIndex"]; _turrets = []; _turretIndex = 0; //Explore all turrets and sub-turrets recursively. for "_i" from 0 to ((count _entry) - 1) do { private ["_subEntry"]; _subEntry = _entry select _i; if (isClass _subEntry) then { private ["_hasGunner","_isset","_pcom","_pgun"]; _hasGunner = [_subEntry, "hasGunner"] Call BIS_fnc_returnConfigEntry; _pgun = [_subEntry, "primaryGunner"] Call BIS_fnc_returnConfigEntry; _pcom = [_subEntry, "primaryObserver"] Call BIS_fnc_returnConfigEntry; _isset = false; if (_pgun == 1 && !vhasGunner) then {vhasGunner = true;_isset = true}; if (_pcom == 1 && !vhasCommander && !_isset) then {vhasCommander = true}; //Make sure the entry was found. if !(isNil "_hasGunner") then { if (_hasGunner == 1) then { _turrets = _turrets + [_turretIndex]; //Include sub-turrets, if present. if (isClass (_subEntry >> "Turrets")) then { _turrets = _turrets + [[_subEntry >> "Turrets"] Call Compile preprocessFile "Common\Functions\Common_GetConfigVehicleTurretsReturn.sqf"]; } else { _turrets = _turrets + [[]]; }; }; }; _turretIndex = _turretIndex + 1; }; }; _turrets/* Return pos1 direction to pos2. (BIS Fnc) Parameters: - Entity. - Entity. */ Private ["_pos1","_pos2","_ret"]; _pos1 = _this select 0; _pos2 = _this select 1; if(typename _pos1 == "OBJECT") then {_pos1 = getpos _pos1}; if(typename _pos2 == "OBJECT") then {_pos2 = getpos _pos2}; _ret = ((_pos2 select 0) - (_pos1 select 0)) atan2 ((_pos2 select 1) - (_pos1 select 1)); _ret = _ret % 360; _ret/* Return an empty 'safe' position. Parameters: - Position (Object / Position). - Radius. */ Private ["_i" ,"_object", "_position", "_tpos"]; _object = _this select 0; _radius = _this select 1; if (typeName _object == "OBJECT") then {_object = getPos _object}; _position = [(_object select 0)+5,(_object select 0)+5,0]; _i = 0; while {_i < 1000} do { _tpos = [(_object select 0)+(_radius - (random (_radius * 2))),(_object select 1)+(_radius - (random (_radius * 2))),0]; if (count (_tpos isFlatEmpty [15, 0, 2, 10, 0, false, objNull]) > 0) exitWith {_position = _tpos}; _i = _i + 1; }; _positionPrivate ["_buildings","_kind","_list","_side","_type"]; _side = _this select 0; _kind = _this select 1; _buildings = _this select 2; _list = []; _type = (missionNamespace getVariable Format["WFBE_%1STRUCTURENAMES", _side]) select _kind; {if (typeOf _x == _type && alive _x) then {_list = _list + [_x]}} forEach _buildings; _listPrivate["_add","_camp","_count","_friendlyCamps","_lives","_side","_sideID","_town"]; _town = _this Select 0; _side = _this Select 1; _lives = if (count _this > 2) then {_this select 2} else {false}; _sideID = _side Call GetSideID; _friendlyCamps = []; { if ((_x getVariable "sideID") == _sideID) then { _add = true; if (_lives) then {if !(alive(_x getVariable "wfbe_camp_bunker")) then {_add = false}}; if (_add) then {_friendlyCamps = _friendlyCamps + [_x]}; }; } forEach (_town getVariable "camps"); _friendlyCampsPrivate ['_config','_faction','_group','_kind','_side','_type']; _side = _this select 0; _faction = _this select 1; _kind = _this select 2; _type = _this select 3; _config = configFile >> "CfgGroups" >> _side >> _faction >> _kind >> _type; _group = []; if (isClass _config) then { for "_j" from 0 to ((count _config) - 1) do { private ["_mclass"]; _mclass = _config select _j; if (isClass (_mclass)) then { _group = _group + [getText(_mclass >> "vehicle")]; }; }; } else { ["ERROR", Format ["Common_GetGroupFromConfig.sqf: Entry (configFile >> 'CfgGroups' >> '%3' >> '%4' >> '%5' >> '%6') is not a valid group config.", _side,_faction,_kind,_typ]] Call WFBE_CO_FNC_LogContent; }; _groupPrivate ['_hostiles','_object','_objects','_safeFromSide','_within']; _object = _this select 0; _safeFromSide = _this select 1; _within = if (count _this > 2) then {_this select 2} else {50}; _objects = _object nearEntities[["Man","Car","Motorcycle","Tank","Air"],_within]; _hostiles = 0; if (typeName _safeFromSide == 'ARRAY') then { { _hostiles = _hostiles + (_x countSide _objects); } forEach _safeFromSide; }; if (typeName _safeFromSide == 'SIDE') then { _hostiles = _hostiles + (_safeFromSide countSide _objects); }; _hostilesPrivate["_liveUnits","_units"]; _units = _this; _liveUnits = []; {if (alive _x) then {_liveUnits = _liveUnits + [_x]}} forEach _units; _liveUnits Private ['_variable']; _variable = _this; missionNamespace getVariable _variablePrivate["_destination","_distance","_direction","_position"]; _position = _this Select 0; if (TypeName _position != "ARRAY") then {_position = Position _position}; _distance = _this Select 1; _direction = _this Select 2; if (TypeName _direction != "SCALAR") then {_direction = [_position,_direction] Call GetDirTo}; [(_position Select 0)+((sin _direction)*_distance),(_position Select 1)+((cos _direction)*_distance),(_position Select 2)]/* Retrieve a random position. Parameters: - Position - Min Radius - Max Radius */ Private["_position","_radius","_direction","_maxRadius","_minRadius"]; _position = _this select 0; _minRadius = _this select 1; _maxRadius = _this select 2; _direction = random 360; if (typeName _position == "OBJECT") then {_position = getPos _position}; if (count _position < 3) then {_position set [2, 0]}; _radius = (random (_maxRadius - _minRadius)) + _minRadius; _position = [(_position select 0)+((sin _direction)*_radius),(_position select 1)+((cos _direction)*_radius),(_position select 2)]; while {surfaceIsWater _position}do {_direction = random 360;_radius = (random (_maxRadius - _minRadius)) + _minRadius;_position = [(_position select 0)+((sin _direction)*_radius),(_position select 1)+((cos _direction)*_radius),(_position select 2)]}; _positionPrivate ['_availableSpawn','_camps','_closestCamp','_deathLoc','_enemySide','_get','_hostiles','_nearestCamps','_respawnCampsRuleMode','_respawnMinRange','_side','_town','_townSID'],; _deathLoc = _this select 0; _side = _this select 1; _availableSpawn = []; _respawnCampsRuleMode = missionNamespace getVariable "WFBE_C_RESPAWN_CAMPS_RULE_MODE"; _respawnMinRange = missionNamespace getVariable "WFBE_C_RESPAWN_CAMPS_SAFE_RADIUS"; _enemySide = sideEnemy; switch (missionNamespace getVariable "WFBE_C_RESPAWN_CAMPS_MODE") do { case 1: { /* Classic Respawn */ _town = [_deathLoc] Call GetClosestLocation; if !(isNull _town) then { if (_town distance _deathLoc < (missionNamespace getVariable "WFBE_C_RESPAWN_CAMPS_RANGE")) then { _camps = [_town,_side,true] Call GetFriendlyCamps; if (count _camps > 0) then { if (_respawnCampsRuleMode > 0) then { _closestCamp = [_deathLoc,_camps] Call WFBE_CO_FNC_GetClosestEntity; if (WFBE_ISTHREEWAY) then { _enemySide = [west, east, resistance] - [_side]; } else { _enemySide = if (_side == west) then {[east]} else {[west]}; if (_respawnCampsRuleMode == 2) then {_enemySide = _enemySide + [resistance]}; }; _hostiles = [_closestCamp,_enemySide,_respawnMinRange] Call GetHostilesInArea; if (_deathLoc distance _closestCamp < _respawnMinRange && _hostiles > 0) then {_camps = _camps - [_closestCamp]}; }; _availableSpawn = _availableSpawn + _camps; }; }; }; }; case 2: { /* Enhanced Respawn - Get the camps around the unit */ _nearestCamps = _deathLoc nearEntities [WFBE_Logic_Camp, (missionNamespace getVariable "WFBE_C_RESPAWN_CAMPS_RANGE")]; { if !(isNil {_x getVariable 'sideID'}) then { if ((_side Call GetSideID) == (_x getVariable 'sideID') && alive(_x getVariable "wfbe_camp_bunker")) then { if (_respawnCampsRuleMode > 0) then { if (_deathLoc distance _x < _respawnMinRange) then { if (WFBE_ISTHREEWAY) then { _enemySide = [west, east, resistance] - [_side]; } else { _enemySide = if (_side == west) then {[east]} else {[west]}; if (_respawnCampsRuleMode == 2) then {_enemySide = _enemySide + [resistance]}; }; _hostiles = [_x,_enemySide,_respawnMinRange] Call GetHostilesInArea; if (_hostiles == 0) then {_availableSpawn = _availableSpawn + [_x]}; } else { _availableSpawn = _availableSpawn + [_x]; }; } else { _availableSpawn = _availableSpawn + [_x]; }; }; }; } forEach _nearestCamps; }; case 3: { /* Defender Only Respawn - Get the camps around the unit only if the town is friendly to the unit. */ _nearestCamps = _deathLoc nearEntities [WFBE_Logic_Camp, (missionNamespace getVariable "WFBE_C_RESPAWN_CAMPS_RANGE")]; { if !(isNil {_x getVariable 'sideID'}) then { _town = _x getVariable 'town'; _townSID = _town getVariable 'sideID'; if ((_side Call GetSideID) == _townSID && (_x getVariable 'sideID') == _townSID && alive(_x getVariable "wfbe_camp_bunker")) then { if (_respawnCampsRuleMode > 0) then { if (_deathLoc distance _x < _respawnMinRange) then { if (WFBE_ISTHREEWAY) then { _enemySide = [west, east, resistance] - [_side]; } else { _enemySide = if (_side == west) then {[east]} else {[west]}; if (_respawnCampsRuleMode == 2) then {_enemySide = _enemySide + [resistance]}; }; _hostiles = [_x,_enemySide,_respawnMinRange] Call GetHostilesInArea; if (_hostiles == 0) then {_availableSpawn = _availableSpawn + [_x]}; } else { _availableSpawn = _availableSpawn + [_x]; }; } else { _availableSpawn = _availableSpawn + [_x]; }; }; }; } forEach _nearestCamps; }; }; /* Return the available camps */ _availableSpawnPrivate ["_availableSpawn","_camps_side","_camps_total","_side"]; _side = _this; _availableSpawn = []; { if ((_x Call GetTotalCamps) == ([_x, _side] Call GetTotalCampsOnSide)) then {[_availableSpawn, _x] Call WFBE_CO_FNC_ArrayPush}; } forEach (_side Call GetSideTowns); _availableSpawnPrivate["_count","_currentPosition","_direction","_obstacles","_placed","_position","_radius","_retPos","_vehicles"]; scopeName "PlaceSafe"; _position = _this select 0; _radius = if (count _this > 1) then {_this select 1} else {35}; _retPos = []; _currentPosition = _position; _placed = false; _direction = 0; for [{_count = 0},{_count < 30 && !_placed},{_count = _count + 1}] do { _obstacles = nearestObjects [_currentPosition, ["Building"], 15]; _vehicles = _currentPosition nearEntities [["Building","Car","Tank","Air"], 7]; if (count _obstacles > 0 || count _vehicles > 0 || surfaceIsWater _currentPosition) then { _currentPosition = [(_position select 0)+((sin _direction)*_radius),(_position select 1)+((cos _direction)*_radius),0]; _direction = _direction + 36; if (_count > 15) then {_radius = _radius + 25}; } else { _retPos = _currentPosition; _placed = true; breakTo "PlaceSafe"; }; }; _retPos/* Return the side from the ID. Parameters: - Side ID. */ switch (_this) do { case WFBE_C_WEST_ID: {west}; case WESTID: {west}; case WFBE_C_EAST_ID: {east}; case EASTID: {east}; case WFBE_C_GUER_ID: {resistance}; case RESISTANCEID: {resistance}; case WFBE_C_CIV_ID: {civilian}; default {sideLogic}; }; /* Return a side's HQ. Parameters: - Side. */ switch (_this) do { case west: {WFBE_L_BLU getVariable "wfbe_hq"}; case east: {WFBE_L_OPF getVariable "wfbe_hq"}; case resistance: {WFBE_L_GUE getVariable "wfbe_hq"}; default {objNull}; }/* Return a side HQ deloy status. Parameters: - Side. */ switch (_this) do { case west: {WFBE_L_BLU getVariable "wfbe_hq_deployed"}; case east: {WFBE_L_OPF getVariable "wfbe_hq_deployed"}; case resistance: {WFBE_L_GUE getVariable "wfbe_hq_deployed"}; default {objNull}; } /* Return the numeric value of a side. Parameters: - Side. */ switch (_this) do { case west: {WFBE_C_WEST_ID}; case east: {WFBE_C_EAST_ID}; case resistance: {WFBE_C_GUER_ID}; case civilian: {WFBE_C_CIV_ID}; default {-1}; }; /* Return a side's logic. Parameters: - Side. */ switch (_this) do { case west: {WFBE_L_BLU}; case east: {WFBE_L_OPF}; case resistance: {WFBE_L_GUE}; default {sideNull}; }; /* Return a side's structures. Parameters: - Side. */ switch (_this) do { case west: {WFBE_L_BLU getVariable "wfbe_structures"}; case east: {WFBE_L_OPF getVariable "wfbe_structures"}; case resistance: {WFBE_L_GUE getVariable "wfbe_structures"}; default {objNull}; }/* Return a side's HQ. Parameters: - Side. */ switch (_this) do { case west: {WFBE_L_BLU getVariable "wfbe_supply"}; case east: {WFBE_L_OPF getVariable "wfbe_supply"}; case resistance: {WFBE_L_GUE getVariable "wfbe_supply"}; default {objNull}; }Private ['_sideID','_towns']; _sideID = (_this) Call GetSideID; _towns = []; { if ((_x getVariable 'sideID') == _sideID) then {_towns = _towns + [_x]}; } forEach towns; _towns/* Return a side's HQ. Parameters: - Side. */ switch (_this) do { case west: {WFBE_L_BLU getVariable "wfbe_upgrades"}; case east: {WFBE_L_OPF getVariable "wfbe_upgrades"}; case resistance: {WFBE_L_GUE getVariable "wfbe_upgrades"}; default {objNull}; }Private ["_delay"]; _delay = _this; if (diag_fps > 15) exitWith {_delay}; if (diag_fps <= 15 && diag_fps > 10) exitWith {_delay * 0.85}; if (diag_fps <= 10 && diag_fps > 7) exitWith {_delay * 0.75}; if (diag_fps <= 7 && diag_fps > 5) exitWith {_delay * 0.70}; if (diag_fps <= 5) exitWith {_delay * 0.50}; _delayPrivate["_artillery","_artyTypes","_artyWeapons","_count","_ignoreAmmo","_index","_position","_search","_side","_team","_units","_vehicle","_weapon","_x","_y"]; _team = _this select 0; _ignoreAmmo = _this select 1; _index = _this select 2; _side = _this select 3; if (_index < 0) exitWith {[]}; _units = units _team; _artyTypes = (missionNamespace getVariable Format ["WFBE_%1_ARTILLERY_CLASSNAMES",_side]) select _index; _artyWeapons = missionNamespace getVariable Format ["WFBE_%1_ARTILLERY_WEAPONS",_side]; _artillery = []; { _vehicle = vehicle _x; if (typeOf(_vehicle) in _artyTypes) then { if (!(isNull(gunner _vehicle)) && !(_vehicle in _artillery) && !(isPlayer(gunner _vehicle))) then { if !(isPlayer(gunner _vehicle)) then { _weapon = _artyWeapons select _index; if (_ignoreAmmo || (_vehicle ammo _weapon > 0)) then { _artillery = _artillery + [_vehicle]; }; }; }; }; } forEach _units; _artilleryif (isNull _this) exitWith {false}; _this getVariable "wfbe_autonomous";Private ["_funds"]; if (isNull _this) exitWith {0}; _funds = (_this getVariable "wfbe_funds"); if (isNil '_funds') exitWith {0}; _fundsif (isNull _this) exitWith {"towns"}; _this getVariable "wfbe_teammode"if (isNull _this) exitWith {[0,0,0]}; _this getVariable "wfbe_teamgoto"if (isNull _this) exitWith {""}; _this getVariable "wfbe_respawn"if (isNull _this) exitWith {0}; _this getVariable "wfbe_teamtype"Private["_canMove","_count","_crew","_ignoreOwnerConflict","_member","_ownerConflict","_range","_team","_teamVehicles","_units","_vehicle"]; _team = _this select 0; _canMove = _this select 1; _member = objNull; _range = 150; if (count _this > 2) then {_member = _this select 2}; if (count _this > 3) then {_range = _this select 3}; _ignoreOwnerConflict = false; if (count _this > 4) then {_ignoreOwnerConflict = _this select 4}; _teamVehicles = []; _units = units _team; { _vehicle = vehicle _x; if (_x != _vehicle && !(_vehicle in _teamVehicles)) then {_teamVehicles = _teamVehicles + [_vehicle]}; if (_canMove && !canMove _vehicle) then {_teamVehicles = _teamVehicles - [_vehicle]}; if (!IsNull _member && _member distance _vehicle > _range) then {_teamVehicles = _teamVehicles - [_vehicle]}; _ownerConflict = false; _crew = crew _vehicle; {if (_x != leader _team && isPlayer _x) then {_ownerConflict = true}} forEach _crew; if (!_ignoreOwnerConflict && _ownerConflict) then {_teamVehicles = _teamVehicles - [_vehicle]}; } forEach _units; _teamVehicles/* Get all of the camp from a town. Parameters: - Town. */ Private ['_camps']; _camps = _this getVariable "camps"; if (count _camps == 0) exitWith {1}; count _camps/* Get all of the camp which belong to the x side from a town. Parameters: - Town. - Side. */ Private ["_camps","_side","_sideID","_total","_town"]; _town = _this select 0; _side = _this select 1; _sideID = _side Call WFBE_CO_FNC_GetSideID; _camps = _town getVariable "camps"; if (count _camps == 0) exitWith {1}; _total = 0; {if ((_x getVariable "sideID") == _sideID) then {_total = _total + 1}} forEach _camps; _totalPrivate["_side","_sideID","_totalSupply"]; _side = _this; _sideID = _side Call GetSideID; _totalSupply = 0; { if ((_x getVariable "sideID") == _sideID) then { _totalSupply = _totalSupply + (_x getVariable "supplyValue"); }; } forEach towns; _totalSupplyPrivate["_count","_held","_sideID"]; _held = 0; _sideID = _this Call GetSideID; {if ((_x getVariable 'sideID') == _sideID) then {_held = _held + 1}} forEach towns; _heldPrivate ["_income","_incomeCoef","_incomeSystem","_side"]; _side = (_this) Call GetSideID; _income = 0; _incomeSystem = missionNamespace getVariable "WFBE_C_ECONOMY_INCOME_SYSTEM"; _incomeCoef = 0; if (_incomeSystem == 3) then {_incomeCoef = missionNamespace getVariable "WFBE_C_ECONOMY_INCOME_COEF"}; { if ((_x getVariable "sideID") == _side) then { switch (_incomeSystem) do { case 3: {_income = _income + ((_x getVariable "supplyValue")*_incomeCoef)}; default {_income = _income + (_x getVariable "supplyValue")}; }; }; } forEach towns; _incomePrivate ["_income","_side"]; _side = (_this) Call GetSideID; _income = 0; { if ((_x getVariable "sideID") == _side) then {_income = _income + (_x getVariable "supplyValue")}; } forEach towns; _income/* Return the gear of a unit from the config. Parameters: - Unit kind */ Private ["_backpack","_get_backpack_content","_kind","_magazines","_root","_weapons"]; _kind = _this; _root = configFile >> 'CfgVehicles' >> _kind; _weapons = getArray(_root >> 'weapons') - ["Throw", "Put"]; _magazines = getArray(_root >> 'magazines'); _backpack = getText(_root >> 'backpack'); _get_backpack_content = [[[],[]],[[],[]]]; if (_backpack != "") then { if (isClass(configFile >> 'CfgVehicles' >> _backpack >> 'TransportWeapons')) then { Private ["_cname","_get","_root_sub"]; for '_j' from 0 to count(configFile >> 'CfgVehicles' >> _backpack >> "TransportWeapons")-1 do { _root_sub = (configFile >> 'CfgVehicles' >> _backpack >> 'TransportWeapons') select _j; _cname = getText(_root_sub >> 'weapon'); _get = missionNamespace getVariable _cname; if !(isNil '_get') then { [(_get_backpack_content select 0) select 0, _cname] Call WFBE_CO_FNC_ArrayPush; [(_get_backpack_content select 0) select 1, getNumber(_root_sub >> 'count')] Call WFBE_CO_FNC_ArrayPush; }; }; }; if (isClass(configFile >> 'CfgVehicles' >> _backpack >> 'TransportMagazines')) then { Private ["_cname","_count","_get","_root"]; for '_j' from 0 to count(configFile >> 'CfgVehicles' >> _backpack >> "TransportMagazines")-1 do { _root = (configFile >> 'CfgVehicles' >> _backpack >> 'TransportMagazines') select _j; _cname = getText(_root >> 'magazine'); _get = missionNamespace getVariable Format["Mag_%1",_cname]; if !(isNil '_get') then { [(_get_backpack_content select 1) select 0, _cname] Call WFBE_CO_FNC_ArrayPush; [(_get_backpack_content select 1) select 1, getNumber(_root >> 'count')] Call WFBE_CO_FNC_ArrayPush; }; }; }; }; [_weapons, _magazines, _backpack, _get_backpack_content]Private["_belowUnits","_height","_min","_units","_z"]; _units = _this Select 0; _height = _this Select 1; _min = if (count _this > 2) then {_this select 2} else {-10}; _belowUnits = []; {_z = getPos _x select 2;if (_z < _height && _z >= _min) then {_belowUnits = _belowUnits + [_x]}} ForEach _units; _belowUnits/* Get units in an area regarding of the given sides. Parameters: - Units - Sides to get. */ Private ["_count","_sides","_sideFriendly","_sideIgnored","_units"]; _units = _this select 0; _sides = _this select 1; _return = []; for '_i' from 1 to count _sides do {[_return, []] Call WFBE_CO_FNC_ArrayPush}; { _find = _sides find (side _x); if (_find != -1) then {[_return select _find, _x] Call WFBE_CO_FNC_ArrayPush}; } forEach _units; _returnPrivate['_unit','_return']; _unit = _this; _return = if (_unit != vehicle _unit) then {vehicle _unit} else {_unit}; _return/* Return the turrets along with it's weapons/magazines of a vehicle (based on http://community.bistudio.com/wiki/weaponsTurret) Ex: [["M256","M240BC_veh"],["20Rnd_120mmSABOT_M1A2","20Rnd_120mmHE_M1A2","1200Rnd_762x51_M240"],[0],"bin\config.bin/CfgVehicles/M1A2_TUSK_MG/Turrets/MainTurret"] Parameters: - Vehicle */ private ["_result", "_class"]; _result = []; _class = configFile >> "CfgVehicles" >> ( switch (typeName _this) do { case "STRING" : {_this}; case "OBJECT" : {typeOf _this}; default {nil}}) >> "turrets"; [_class, []] call WFBE_CO_FNC_FindTurretsRecursive; _result/* Handle artillery Fired EH */ Private ['_ammo','_ammoList','_cannon','_destination','_direction','_dispersion','_distance','_keepShellAlive','_landDestination','_maxRange','_nearLaser','_percent','_projectile','_radius','_shellpos','_side','_smoke','_smokeOnImpact','_velocity','_xcoord','_ycoord']; _ammo = _this select 0; _ammoList = _this select 2; //--- Only Catch allowed ammo. if (_ammo in _ammoList) then { //--- Retrieve the parameters. _projectile = _this select 1; _destination = _this select 3; _velocity = _this select 4; _dispersion = _this select 5; _cannon = _this select 6; _distance = _this select 7; _radius = _this select 8; _maxRange = _this select 9; _side = _this select 10; _smokeOnImpact = false; //--- Randomize Land Area. _distance = random (_distance / _maxRange * 100) + random _radius; _direction = random 360; //--- Default Position. _landDestination = [((_destination select 0)+((sin _direction)*_distance))+(random _dispersion)-(random _dispersion),(_destination select 1)+((cos _direction)*_distance)+(random _dispersion)-(random _dispersion),0]; _keepShellAlive = true; //--- SADARM Rounds. if (_ammo in (missionNamespace getVariable Format ["WFBE_%1_ARTILLERY_AMMO_SADARM",_side])) then { [_projectile,_landDestination,_velocity] Spawn ARTY_HandleSADARM; _keepShellAlive = false; //--- SADARM Destroy the original round. }; //--- ILLUM Rounds. if (_ammo in (missionNamespace getVariable Format ["WFBE_%1_ARTILLERY_AMMO_ILLUMN",_side])) then { [_projectile,_landDestination,_velocity] Spawn ARTY_HandleILLUM; _keepShellAlive = false; //--- ILLUM Destroy the original round. }; //--- Some rounds remove the projectile, make sure that it's not removed or anything. if (_keepShellAlive) then { //--- LASER Rounds. if (_ammo in (missionNamespace getVariable Format ["WFBE_%1_ARTILLERY_AMMO_LASER",_side])) then { _nearLaser = _destination nearEntities ['LaserTarget',missionNamespace getVariable 'WFBE_C_ARTILLERY_AMMO_RANGE_LASER']; if (count _nearLaser > 0) then { _nearLaser = getPos ([_destination, _nearLaser] Call WFBE_CO_FNC_GetClosestEntity); _landDestination = [(_nearLaser select 0)+(((random _dispersion)-(random _dispersion))/4),(_nearLaser select 1)+(((random _dispersion)-(random _dispersion))/4),0]; }; }; //--- Calculate the shell estimated spawn area. _distance = _landDestination distance _cannon; _percent = ((500 * 100 / _distance) / 100); _xcoord = (_landDestination select 0) + _percent * ((_cannon select 0) - (_landDestination select 0)); _ycoord = (_landDestination select 1) + _percent * ((_cannon select 1) - (_landDestination select 1)); _shellpos = [_xcoord,_ycoord,1000]; //--- Calculate the direction _xcoord = (_landDestination select 0) - (_cannon select 0); _ycoord = (_landDestination select 1) - (_cannon select 1); _direction = -(((_ycoord atan2 _xcoord) + 270) % 360); if (_direction < 0) then {_direction = _direction + 360}; //--- Track the shell (FX)? _smokeOnImpact = if (_ammo in (missionNamespace getVariable Format ["WFBE_%1_ARTILLERY_DEPLOY_SMOKE",_side])) then {true} else {false}; //--- Release the shell. if !(isNull _projectile) then { _projectile setPos _shellpos; _projectile setVelocity [(sin _direction*_velocity),(cos _direction*_velocity),((_velocity * 2.03) * -1)]; if (WF_A2_Vanilla) then { //---- MLRS ammo has some weird config problems on vanilla. if (_ammo == "R_MLRS" || _ammo == "ARTY_R_227mm_HE_Rocket") then { _projectile setPos _landDestination; }; }; }; }; //--- Release smoke on an impact if needed. if (_smokeOnImpact) then { _shellPos = []; //--- Wait for the last known position. while {!isNull _projectile} do { _shellPos = getPos _projectile; sleep 0.02; }; //--- If we have it, release it. if (count _shellPos > 0) then { _shellPos set [2,0]; _smoke = "ARTY_SmokeShellWhite" createVehicle _shellPos; _smoke setPos _shellPos; }; }; };Private ["_ammo","_irLock","_missile","_source","_unit"]; _unit = _this select 0; _ammo = _this select 1; _source = _this select 2; _missile = nearestObject [_source,_ammo]; if (isNull _missile) exitWith {}; _irLock = getNumber(configFile >> "CfgAmmo" >> _ammo >> "irLock"); //--- Get the ammo type. if (_irLock == 0) then {if (_ammo in ["Bo_FAB_250","Bo_Mk82"]) then {_irLock = 1}}; //--- Dumb bomb workaround (rocket simulation). if (_irLock == 1) then { //--- IR Lock is affected _source = getPos _source; _distance = _unit distance _source; _limit = missionNamespace getVariable "WFBE_C_GAMEPLAY_MISSILES_RANGE"; if (_distance > _limit) then { waitUntil {_missile distance _source > _limit}; deleteVehicle _missile; }; };Private ['_artyNames','_retVal','_side','_unit']; _unit = _this select 0; _side = _this select 1; _retVal = -1; _artyNames = missionNamespace getVariable Format ["WFBE_%1_ARTILLERY_CLASSNAMES",_side]; for '_i' from 0 to (count _artyNames)-1 do { if (_unit in (_artyNames select _i)) exitWith {_retVal = _i}; }; _retVal/* Logging function. Parameters: - Log Type. - Log Content. - {Log Level}. */ Private ["_logContent","_logLevel","_logType"]; _logType = _this select 0; _logContent = _this select 1; _logLevel = if (count _this > 2) then {_this select 2} else {0}; if (_logLevel >= WFBE_LogLevel) then {diag_log Format["[WFBE (%1)] [frameno:%2 | ticktime:%3 | fps:%4] %5",_logType, diag_frameno, diag_tickTime, diag_fps, _logContent]};/* Triggered whenever a unit take a consequent hit. Parameters: - Killed - Killer - Side ID */ Private ["_causedby","_damage","_unit"]; _unit = _this select 0; _causedby = _this select 1; _damage = _this select 2; if (_damage >= 0.05) then {_unit setVariable ["wfbe_lasthitby", _causedby]; _unit setVariable ["wfbe_lasthittime", time]};/* Triggerd upon a unit death. Parameters: - Killed - Killer - Killed side ID. */ Private ["_get","_killed","_killed_group","_killed_isman","_killed_side","_killed_type","_killer","_killer_group","_killer_isplayer","_killer_iswfteam","_killer_side","_killer_type","_killer_vehicle","_killer_uid"]; _killed = _this select 0; _killer = _this select 1; _killed_side = (_this select 2) Call GetSideFromID; if (_killer == _killed || isNull _killer) then { //--- The killed may be the killer (suicide) or bailed before destruction. _last_hit = _killed getVariable "wfbe_lasthitby"; if !(isNil '_last_hit') then { if (alive _last_hit) then { if (side _last_hit != _killed_side && time - (_killed getVariable "wfbe_lasthittime") < 25) then {_killer = _last_hit}; }; }; }; if !(alive _killer) exitWith {}; //--- Killer is null or dead, nothing to see here. //--- Retrieve basic information. _killed_group = group _killed; _killed_isman = if (_killed isKindOf "Man") then {true} else {false}; _killed_type = typeOf _killed; _killer_group = group _killer; _killer_isplayer = if (isPlayer _killer) then {true} else {false}; _killer_iswfteam = if !(isNil {_killer_group getVariable "wfbe_funds"}) then {true} else {false}; _killer_side = side _killer; _killer_type = typeOf _killer; _killer_vehicle = vehicle _killer; _killer_uid = getPlayerUID (leader _killer_group); // if (!_killer_isplayer && isPlayer (leader _killer_group) || _killer_isplayer && isPlayer (leader _killer_group)) then {_killer_uid = getPlayerUID (leader _killer_group)}; if (_killer_side == sideEnemy) then { //--- Make sure the killer is not renegade, if so, get the side from the config. _killer_side = switch (getNumber(configFile >> "CfgVehicles" >> _killer_type >> "side")) do {case 0: {east}; case 1: {west}; case 2: {resistance}; default {civilian}}; }; if (_killer_side == civilian) exitWith {}; //--- Side couldn't be determined? exit. if (WF_A2_Vanilla) then { //--- Garbage Collector. if (!isServer || local player) then {_objects = (WF_Logic getVariable "trash") + [_killed]; WF_Logic setVariable ["trash",_objects,true];} else {_killed setVariable ["wfbe_trashed", true];_killed Spawn TrashObject}; } else { if (isServer) then {_killed setVariable ["wfbe_trashed", true]; _killed Spawn TrashObject}; }; if (_killed_side in WFBE_PRESENTSIDES) then { //--- Update the statistics if needed. if (_killed_isman) then {[str _killed_side,'Casualties',1] Call UpdateStatistics} else {[str _killed_side,'VehiclesLost',1] Call UpdateStatistics}; }; _get = missionNamespace getVariable _killed_type; //--- Get the killed informations. if (!isNil '_get' && _killer_iswfteam) then { //--- Make sure that type killed type is defined in the core files and that the killer is a WF team. if (_killer_side != _killed_side) then { //--- Normal kill. if (isPlayer (leader _killer_group)) then { //--- The team is lead by a player. _killer_award = objNull; if !(_killer_isplayer) then { //--- An AI is the killer. _killer_award = _killer; _points = switch (true) do { case (_killed_type isKindOf "Infantry"): {1}; case (_killed_type isKindOf "Car"): {2}; case (_killed_type isKindOf "Ship"): {4}; case (_killed_type isKindOf "Motorcycle"): {1}; case (_killed_type isKindOf "Tank"): {4}; case (_killed_type isKindOf "Helicopter"): {4}; case (_killed_type isKindOf "Plane"): {6}; case (_killed_type isKindOf "StaticWeapon"): {2}; case (_killed_type isKindOf "Building"): {2}; default {1}; }; if (isServer) then { ['SRVFNCREQUESTCHANGESCORE',[leader _killer_group, (score leader _killer_group) + _points]] Spawn WFBE_SE_FNC_HandlePVF; } else { ["RequestChangeScore", [leader _killer_group, (score leader _killer_group) + _points]] Call WFBE_CO_FNC_SendToServer; }; }; if ((missionNamespace getVariable "WFBE_C_UNITS_BOUNTY") > 0) then { //--- Award the bounty if needed. [_killer_uid, "AwardBounty", [_killed_type, false, _killer_award]] Call WFBE_CO_FNC_SendToClients; if (vehicle _vehicle != _vehicle && alive _vehicle) then { //--- Kill assist (players in the same vehicle). {if (alive _x && isPlayer _x) then {[getPlayerUID(_x), "AwardBounty", [_objectType, true]] Call WFBE_CO_FNC_SendToClients}} forEach ((crew (vehicle _vehicle)) - [_killer, player]); }; }; } else { //--- The team is lead by an AI. if ((missionNamespace getVariable "WFBE_C_AI_TEAMS_ENABLED") > 0 && isServer) then { //--- Award the kill to the AI team. _bounty = (_get select QUERYUNITPRICE) * (missionNamespace getVariable "WFBE_C_UNITS_BOUNTY_COEF"); _bounty = _bounty - (_bounty % 1); [_killer_group, _bounty] Call ChangeTeamFunds; }; }; } else { //--- Teamkill. if (isPlayer (leader _killer_group) && _killer != _killed && !(_killed_type isKindOf "Building")) then { //--- Only applies to player groups. [_killer_uid, "LocalizeMessage", ['Teamkill']] Call WFBE_CO_FNC_SendToClients; }; }; };Private["_destination","_direction","_faceAway","_maxRadius","_minRadius","_object","_placeSafe","_position","_radius","_randomDirection","_safeRadius"]; _object = _this Select 0; _position = _this Select 1; _minRadius = _this Select 2; _maxRadius = _this Select 3; _faceAway = true; if (Count _this > 4) then {_faceAway = _this Select 4}; _randomDirection = true; if (Count _this > 5) then {_randomDirection = _this Select 5}; _placeSafe = false; if (Count _this > 6) then {_placeSafe = _this Select 6}; _direction = Random 360; _radius = (Random (_maxRadius - _minRadius)) + _minRadius; if (_placeSafe) then { _safeRadius = (_maxRadius - _minRadius) / 2; if (_safeRadius < 5) then {_safeRadius = 5}; _destination = [(_position Select 0)+((sin _direction)*_radius),(_position Select 1)+((cos _direction)*_radius),(_position Select 2)+0.5]; [_object,_destination,_safeRadius] Call PlaceSafe; } else { _object SetPos [(_position Select 0)+((sin _direction)*_radius),(_position Select 1)+((cos _direction)*_radius),(_position Select 2)+0.5]; }; if (_randomDirection) then {_object SetDir Random 360}; if (_faceAway) then { _destination = GetPos _object; _object SetDir -((((_destination Select 1) - (_position Select 1)) atan2 ((_destination Select 0) - (_position Select 0))) - 90); };Private["_count","_currentPosition","_direction","_object","_obstacles","_placed","_position","_radius","_vehicles"]; scopeName "PlaceSafe"; _object = _this select 0; _position = _this select 1; _radius = if (count _this > 2) then {_this select 2} else {35}; _currentPosition = _position; _placed = false; _direction = 0; for [{_count = 0},{_count < 30 && !_placed},{_count = _count + 1}] do { _obstacles = nearestObjects [_currentPosition, ["Building"], 15]; _vehicles = _currentPosition nearEntities [["Building","Car","Tank","Air"], 7]; if (count _obstacles > 0 || count _vehicles > 0 || surfaceIsWater _currentPosition) then { _currentPosition = [(_position select 0)+((sin _direction)*_radius),(_position select 1)+((cos _direction)*_radius),0]; _direction = _direction + 36; if (_count > 15) then {_radius = _radius + 25}; } else { _object setPos _currentPosition; _object setVelocity [0,0,-0.5]; _placed = true; breakTo "PlaceSafe"; }; }; if (!_placed) then {_object setPos _position;_object setVelocity [0,0,-0.5]}; Private["_amount","_get","_isArtillery","_magazines","_side","_type","_vehicle"]; _vehicle = _this select 0; _side = _this select 1; _type = typeOf _vehicle; //rearming turrets. {_vehicle removeMagazine _x} forEach magazines _vehicle; _magazines = getArray (configFile >> "CfgVehicles" >> typeOf _vehicle >> "Turrets" >> "MainTurret" >> "Magazines"); _magazines = _magazines + getArray (configFile >> "CfgVehicles" >> typeOf _vehicle >> "Magazines"); {_vehicle addMagazine _x} forEach _magazines; //--- CM Parameter. if (_vehicle isKindOf "Air") then { switch (missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES") do { //--- Add CM if needed. case 1: { //--- Enabled with upgrades. if (((_side Call WFBE_CO_FNC_GetSideUpgrades) select WFBE_UP_FLARESCM) > 0) then { _amount = if (_vehicle isKindOf "Plane") then {missionNamespace getVariable 'WFBE_C_UNITS_COUNTERMEASURE_PLANES'} else {missionNamespace getVariable 'WFBE_C_UNITS_COUNTERMEASURE_CHOPPERS'}; _vehicle setVariable ["FlareCount", _amount]; }; }; case 2: { //--- Enabled. _amount = if (_vehicle isKindOf "Plane") then {missionNamespace getVariable 'WFBE_C_UNITS_COUNTERMEASURE_PLANES'} else {missionNamespace getVariable 'WFBE_C_UNITS_COUNTERMEASURE_CHOPPERS'}; _vehicle setVariable ["FlareCount", _amount]; }; }; }; //--- IR Smoke if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_IRSMOKE") > 0) then { //--- Make sure that the unit is defined in IRS_Init. _get = missionNamespace getVariable Format ["%1_IRS", _type]; if (!isNil '_get' && !isNil {_vehicle getVariable "wfbe_irs_flares"}) then { if ((_vehicle getVariable "wfbe_irs_flares") != (_get select 1)) then {_vehicle setVariable ["wfbe_irs_flares", _get select 1, true]}; }; }; _vehicle setVehicleAmmo 1; reload _vehicle; /* Are we dealing with an artillery unit ? */ _isArtillery = -1; _isArtillery = [_type,_side] Call IsArtillery; if (_isArtillery != -1) then {[_vehicle,_isArtillery,_side] Call EquipArtillery}; /* Balanced Unit */ if ((missionNamespace getVariable "WFBE_C_UNITS_BALANCING") > 0) then {(_vehicle) Spawn BalanceInit}; /* EASA Module */ if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_EASA") > 0) then { if (_type in (missionNamespace getVariable 'WFBE_EASA_Vehicles')) then { _get = _vehicle getVariable 'WFBE_EASA_Setup'; if !(isNil '_get') then {[_vehicle,0] Call EASA_Equip}; }; };Private['_amount','_get','_isArtillery','_magazines','_side','_turrets','_type','_vehicle']; _vehicle = _this select 0; _side = _this select 1; _type = typeOf _vehicle; //--- Clear the vehicle first. _vehicle setVehicleAmmo 0; //--- Get all weapons on the vehicles (Turrets) & reload. _turrets = (_vehicle) Call WFBE_CO_FNC_GetVehicleTurretsGear; [_vehicle, _turrets] Call WFBE_CO_FNC_SetTurretsMagazines; //--- Driver specific loadout. _magazines = getArray(configFile >> "CfgVehicles" >> typeOf _vehicle >> "magazines"); {_vehicle addMagazineTurret [_x, [-1]]} forEach _magazines; //--- Reload the vehicle. reload _vehicle; //--- IR Smoke if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_IRSMOKE") > 0) then { //--- Make sure that the unit is defined in IRS_Init. _get = missionNamespace getVariable Format ["%1_IRS", _type]; if (!isNil '_get' && !isNil {_vehicle getVariable "wfbe_irs_flares"}) then { if ((_vehicle getVariable "wfbe_irs_flares") != (_get select 1)) then {_vehicle setVariable ["wfbe_irs_flares", _get select 1, true]}; }; }; //--- Are we dealing with an artillery unit ?. _isArtillery = [_type, _side] Call IsArtillery; if (_isArtillery != -1) then {[_vehicle, _isArtillery, _side] Call EquipArtillery}; //--- Balanced Unit. if ((missionNamespace getVariable "WFBE_C_UNITS_BALANCING") > 0) then {(_vehicle) Spawn BalanceInit}; if (_vehicle isKindOf "Air") then { if !(WF_A2_Vanilla) then { switch (missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES") do { //--- Remove CM if needed. case 0: {(_vehicle) Call WFBE_CO_FNC_RemoveCountermeasures}; //--- Disabled. case 1: { //--- Enabled with upgrades. if (((_side Call WFBE_CO_FNC_GetSideUpgrades) select WFBE_UP_FLARESCM) == 0) then { (_vehicle) Call WFBE_CO_FNC_RemoveCountermeasures; }; }; }; }; }; //--- EASA Module. if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_EASA") > 0) then { if (_type in (missionNamespace getVariable 'WFBE_EASA_Vehicles')) then { _get = _vehicle getVariable 'WFBE_EASA_Setup'; if !(isNil '_get') then {[_vehicle, 0] Call EASA_Equip}; }; };/* Remove the countermeasures from an air unit. Parameters: - Unit */ Private ["_cms","_magazines","_unit","_weapons"]; _unit = _this; _weapons = getArray(configFile >> "CfgVehicles" >> typeOf _unit >> "weapons"); if ("CMFlareLauncher" in _weapons) then { _magazines = getArray(configFile >> "CfgVehicles" >> typeOf _unit >> "magazines"); _cms = ["60Rnd_CMFlareMagazine","120Rnd_CMFlareMagazine","240Rnd_CMFlareMagazine","60Rnd_CMFlare_Chaff_Magazine","120Rnd_CMFlare_Chaff_Magazine","240Rnd_CMFlare_Chaff_Magazine"]; {if (_x in _cms) then {_unit removeMagazineTurret [_x, [-1]]}} forEach _magazines; }; true/* Reveal an entire area for a unit/team. Parameters: - Unit/Team - Range - Center Position */ Private ["_pos","_range","_reveal","_team","_unit"]; _unit = _this select 0; _range = _this select 1; _pos = _this select 2; { _reveal = [_x]; if (_x != vehicle _x) then {_reveal = _reveal + (crew _x)}; {_unit reveal _x} forEach _reveal; } forEach (_pos nearEntities _range);/* Send a PVF to one client. Parameters: - Client PVF. */ Private ["_func","_id","_pvf"]; _pvf = _this; _func = _pvf select 1; _id = owner (_pvf select 0); _pvf set [0, getPlayerUID (_pvf select 0)]; _pvf set [1, Format["CLTFNC%1",_func]]; if (!isHostedServer) then { Call Compile Format ["WFBE_PVF_%1 = _pvf; _id publicVariableClient 'WFBE_PVF_%1';", _func]; } else { _pvf Spawn WFBE_CL_FNC_HandlePVF; if (isMultiplayer) then {Call Compile Format ["WFBE_PVF_%1 = _pvf; _id publicVariableClient 'WFBE_PVF_%1';", _func]}; };/* Send a PVF to client(s). Parameters: - Client PVF. */ Private ["_func","_pvf"]; _pvf = _this; _func = _pvf select 1; _pvf set [1, Format["CLTFNC%1",_func]]; if (!isHostedServer) then { Call Compile Format ["WFBE_PVF_%1 = _pvf; publicVariable 'WFBE_PVF_%1';", _func]; } else { _pvf Spawn WFBE_CL_FNC_HandlePVF; if (isMultiplayer) then {Call Compile Format ["WFBE_PVF_%1 = _pvf; publicVariable 'WFBE_PVF_%1';", _func]}; };/* Send a PVF to the server. Parameters: - Server PVF. */ Private ["_func","_pvf"]; _pvf = _this; _func = _pvf select 0; _pvf set [0, Format["SRVFNC%1",_func]]; if (!isHostedServer) then { Call Compile Format ["WFBE_PVF_%1 = _pvf; publicVariable 'WFBE_PVF_%1';", _func]; } else { _pvf Spawn WFBE_SE_FNC_HandlePVF; };/* Send a PVF to the server ([>1.62] needed for publicVariableServer). Parameters: - Server PVF. */ Private ["_func","_pvf"]; _pvf = _this; _func = _pvf select 0; _pvf set [0, Format["SRVFNC%1",_func]]; if (!isHostedServer) then { Call Compile Format ["WFBE_PVF_%1 = _pvf; publicVariableServer 'WFBE_PVF_%1';", _func]; } else { _pvf Spawn WFBE_SE_FNC_HandlePVF; };Private["_logik","_side","_value"]; _side = _this select 0; _value = _this select 1; _logik = (_side) Call WFBE_CO_FNC_GetSideLogic; { if ((_x getVariable "wfbe_vote") != _value) then {_x setVariable ["wfbe_vote", _value, true]}; } forEach (_logik getVariable "wfbe_teams");Private ['_get','_override','_variable','_value']; _variable = _this select 0; _value = _this select 1; _override = if (count _this > 2) then {_this select 2} else {false}; //--- BIS Bug, typename doesn't work properly with nil. if !(_override) then { _get = _variable Call GetNamespace; if (isNil '_get') then { missionNamespace setVariable [_variable,_value]; }; } else { missionNamespace setVariable [_variable,_value]; };Private['_status','_team']; _team = _this select 0; _status = _this select 1; if (isNull _team) exitWith {}; _team setVariable ["wfbe_autonomous", _status, true];Private['_moveMode','_team']; _team = _this select 0; _moveMode = _this select 1; if (isNull _team) exitWith {}; _team setVariable ["wfbe_teammode", _moveMode, true];Private['_movePos','_team']; _team = _this select 0; _movePos = _this select 1; if (isNull _team) exitWith {}; _team setVariable ["wfbe_teamgoto", _movePos, true];Private['_respawn','_team']; _team = _this select 0; _respawn = _this select 1; if (isNull _team) exitWith {}; _team setVariable ["wfbe_respawn", _respawn, true];Private['_idtype','_team']; _team = _this select 0; _idtype = _this select 1; if (isNull _team) exitWith {}; _team setVariable ["wfbe_teamtype", _idtype, true];/* Set the ammunition of a vehicle's turrets. Parameters: - Vehicle - Turrets (WFBE_CO_FNC_GetVehicleTurretsGear) */ Private ["_vehicle", "_turretPath", "_turretsData"]; _vehicle = _this select 0; _turretsData = _this select 1; { _turretPath = _x select 2; {_vehicle addMagazineTurret [_x, _turretPath]} forEach (_x select 1); } forEach _turretsData; true/* Return a list of entity or position sorted according to a center. Parameters: - Entity. - List. */ Private["_current","_nearest","_nearestDistance","_object","_objects","_sorted"]; _object = _this select 0; _objects = +(_this select 1); _sorted = []; for '_i' from 0 to count(_objects)-1 do { _nearest = ObjNull; _nearestDistance = 100000; _index = -1; for '_j' from count(_objects)-1 to 0 step -1 do { _current = _objects select _j; _distance = _current distance _object; if (_distance < _nearestDistance) then {_nearest = _current;_nearestDistance = _distance;_index = _j}; }; [_sorted, _nearest] Call WFBE_CO_FNC_ArrayPush; _objects set [_index, "!"]; _objects = _objects - ["!"]; }; _sortedprivate ["_i", "_turrets", "_path", "_vehicle", "_crew", "_team", "_unit"]; _turrets = _this select 0; _path = _this select 1; _vehicle = _this select 2; _crew = _this select 3; _team = _this select 4; _i = 0; while {_i < (count _turrets)} do { private ["_turretIndex", "_thisTurret"]; _turretIndex = _turrets select _i; _thisTurret = _path + [_turretIndex]; if (isNull (_vehicle turretUnit _thisTurret)) then { _unit = [_crew,_team,getPos _vehicle,side _team] Call WFBE_CO_FNC_CreateUnit; _unit moveInTurret [_vehicle, _thisTurret]; }; //Spawn units into subturrets. [_turrets select (_i + 1), _thisTurret, _vehicle, _crew, _team] call SpawnTurrets; _i = _i + 2; };Private ['_side','_val','_var']; _side = _this select 0; _var = _this select 1; _val = _this select 2; WF_Logic setVariable [Format["%1%2",_side,_var],((WF_Logic getVariable Format["%1%2",_side,_var]) + _val),true];Private["_count","_defense","_defenses","_defenseTypes","_emptyDefenses","_range","_total","_totalDefenses","_unit","_units"]; _units = _this select 0; _range = _this select 1; _total = count _units; if (_total < 1) exitWith {["ERROR", "Common_UseStationaryDefense.sqf: No units were specified"] Call WFBE_CO_FNC_LogContent}; _defenseTypes = missionNamespace getVariable Format["WFBE_%1DEFENSENAMES",side leader group (_units select 0)]; _defenses = (leader group (_units select 0)) nearEntities[_defenseTypes,_range]; _emptyDefenses = []; {if (_x EmptyPositions "gunner" > 0) then {_emptyDefenses = _emptyDefenses + [_x]}} forEach _defenses; for [{_count = 0},{_count < _total},{_count = _count + 1}] do { _unit = _units select _count; _totalDefenses = count _emptyDefenses; if (_totalDefenses < 1) exitWith {}; //If not in a vehicle then check for available defense. if (alive _unit && _unit == vehicle _unit) then { _defense = _emptyDefenses select (_totalDefenses - 1); [_unit] allowGetIn true; _unit assignAsGunner _defense; _emptyDefenses = _emptyDefenses - [_defense]; }; };/* Set a team on patrol. Parameters: - Team. - Destination. - {Radius}. */ Private ["_behaviours","_destination","_maxWaypoints","_pos","_radius","_rand1","_rand2","_team","_type","_wps"]; _team = _this select 0; _destination = _this select 1; _radius = _this select 2; _maxWaypoints = _this select 3; _behaviours = if (count _this > 4) then {_this select 4} else {[]}; if (typeName _destination == 'OBJECT') then {_destination = getPos _destination}; _wps = []; for '_z' from 0 to _maxWaypoints do { _rand1 = random _radius - random _radius; _rand2 = random _radius - random _radius; _pos = [(_destination select 0)+_rand1,(_destination select 1)+_rand2,0]; while {surfaceIsWater _pos} do { _rand1 = random _radius - random _radius; _rand2 = random _radius - random _radius; _pos = [(_destination select 0)+_rand1,(_destination select 1)+_rand2,0]; }; _type = if (_z != _maxWaypoints) then {'MOVE'} else {'CYCLE'}; [_wps, [_pos,_type,35,40,[],[],_behaviours]] Call WFBE_CO_FNC_ArrayPush; }; [_team, true, _wps] Call WFBE_CO_FNC_WaypointsAdd;/* Set a team on town patrol. Parameters: - Team. - Town. - {Radius}. */ Private ['_camps','_insert','_insertObject','_insertStep','_maxWaypoints','_pos','_radius','_rand1','_rand2','_team','_town','_townPos','_type','_update','_usable','_wpcompletionRadius','_wpradius','_wps']; _team = _this select 0; _town = _this select 1; _radius = if (count _this > 2) then {_this select 2} else {30}; if (typeName _town != 'OBJECT') exitWith {}; if (isNull _team) exitWith {}; _townPos = getPos _town; _camps = _town getVariable 'camps';//wf2 _usable = [_town] + _camps; _maxWaypoints = (missionNamespace getVariable 'WFBE_C_TOWNS_UNITS_WAYPOINTS') + count(_usable); _wps = []; //--- Randomize the behaviours. if (random 100 > 50) then {_team setFormation "DIAMOND"} else {_team setFormation "STAG COLUMN"}; if (random 100 > 50) then {_team setCombatMode "YELLOW"} else {_team setCombatMode "RED"}; if (random 100 > 50) then {_team setBehaviour "AWARE"} else {_team setBehaviour "COMBAT"}; if (random 100 > 50) then {_team setSpeedMode "NORMAL"} else {_team setSpeedMode "LIMITED"}; //--- Dyn insert. _insertStep = if (count(_usable) != 0) then {floor(_maxWaypoints / count(_usable))} else {-1}; _insert = _insertStep; _insertObject = objNull; _wpradius = -1; _wpcompletionRadius = -1; for '_z' from 0 to _maxWaypoints do { if (_z == _insert && count _usable > 0) then { _insert = _insert + _insertStep; _insertObject = _usable select (round(random((count _usable)-1))); _usable = _usable - [_insertObject]; }; if (isNull _insertObject) then { _rand1 = random _radius - random _radius; _rand2 = random _radius - random _radius; _pos = [(_townPos select 0)+_rand1,(_townPos select 1)+_rand2,0]; while {surfaceIsWater _pos} do { _rand1 = random _radius - random _radius; _rand2 = random _radius - random _radius; _pos = [(_townPos select 0)+_rand1,(_townPos select 1)+_rand2,0]; }; _wpradius = 32; _wpcompletionRadius = 44; } else { _pos = getPos _insertObject; _wpradius = 35; _wpcompletionRadius = 68; }; _type = if (_z != _maxWaypoints) then {'MOVE'} else {'CYCLE'}; [_wps, [_pos,_type,_wpradius,_wpcompletionRadius, [], [], []]] Call WFBE_CO_FNC_ArrayPush; }; [_team, true, _wps] Call WFBE_CO_FNC_WaypointsAdd;/* Add waypoints to a team. Parameters: - Team. - Remove all existing WP. - WP List. (i.e: [_team, true, [[getPos _camp, 'MOVE', 10, 20, [], [10,20,30], ["COMBAT","RED","COLUMN","LIMITED"]],[[1560,2560,0], 'SAD', 50, 70, ["canComplete", "this sidechat 'lets roll'"], [], ["SAFE","","LINE",""]]...]] Call AddWP;) */ Private ['_clear','_completionRadius','_position','_radius','_squad_prop','_statements','_team','_timeout','_type','_waypoint','_waypoints','_WPCount']; _team = _this select 0; _clear = _this select 1; _waypoints = _this select 2; if (_clear) then {_team Call WFBE_CO_FNC_WaypointsRemove}; { _position = _x select 0; _type = _x select 1; _radius = _x select 2; _completionRadius = _x select 3; _statements = _x select 4; _timeout = _x select 5; _squad_prop = _x select 6; if (typeName _position == 'OBJECT') then {_position = getPos _position}; _WPCount = count (waypoints _team); _waypoint = _team addWaypoint [_position, _radius]; [_team, _WPCount] setWaypointType _type; [_team, _WPCount] setWaypointCompletionRadius _completionRadius; if (count _statements > 0) then {[_team, _WPCount] setWaypointStatements [_statements select 0, _statements select 1]}; if (count _timeout > 0) then {[_team, _WPCount] setWaypointTimeout [_timeout select 0, _timeout select 1, _timeout select 2]}; if (count _squad_prop > 0) then {if ((_squad_prop select 0) != "") then {[_team, _WPCount] setWaypointBehaviour (_squad_prop select 0)};if ((_squad_prop select 1) != "") then {[_team, _WPCount] setWaypointCombatMode (_squad_prop select 1)};if ((_squad_prop select 2) != "") then {[_team, _WPCount] setWaypointFormation (_squad_prop select 2)}; if ((_squad_prop select 3) != "") then {[_team, _WPCount] setWaypointSpeed (_squad_prop select 3)};}; if (_WPCount == 0) then {_team setCurrentWaypoint [_team, _WPCount]}; } forEach _waypoints;/* Give a simple order to a team. Parameters: - Team. - Destination. - WP Kind. - {Radius}. */ Private ["_destination","_formations","_mission","_radius","_team"]; _team = _this select 0; _destination = _this select 1; _mission = _this select 2; _radius = if (count _this > 3) then {_this select 3} else {30}; [_team,true,[[_destination, _mission, _radius, 20, [], [], []]]] Call WFBE_CO_FNC_WaypointsAdd;/* Remove a team's waypoints. Parameters: - Team. */ Private ['_team']; _team = _this; for '_z' from (count (waypoints _team))-1 to 0 step -1 do { deleteWaypoint [_team, _z]; };/* Global Airport Initialization, this file initialize the airports. */ Private ["_airport","_airports"]; //--- Get all of the city logics. _airports = [0,0,0] nearEntities [["LocationLogicAirport"], 100000]; _i = 0; { if (isServer) then { //--- Create the airport model. _airport = (missionNamespace getVariable "WFBE_C_HANGAR") createVehicle (getPos _x); _airport setDir ((getDir _x) + (missionNamespace getVariable "WFBE_C_HANGAR_RDIR")); _airport setPos (getPos _x); //--- Link the airport to the logic. _x setVariable ["wfbe_hangar", _airport, true]; }; if (local player) then { _marker = createMarkerLocal [Format ["wfbe_airport_%1", _i], getPos _x]; _marker setMarkerTypeLocal "mil_triangle"; _marker setMarkerColorLocal "ColorYellow"; _i = _i + 1; }; } forEach _airports;Private ['_boundariesXY']; _boundariesXY = -1; switch (toLower(worldName)) do { case 'chernarus': {_boundariesXY = 15360}; case 'eden': {_boundariesXY = 12800}; case 'fallujah': {_boundariesXY = 10240}; case 'isladuala': {_boundariesXY = 10240}; case 'panthera2': {_boundariesXY = 10240}; case 'queshkibrul': {_boundariesXY = 5120}; case 'sara': {_boundariesXY = 20480}; case 'saraLite': {_boundariesXY = 10240}; case 'takistan': {_boundariesXY = 12800}; case 'utes': {_boundariesXY = 5120}; case 'yapal': {_boundariesXY = 5120}; case 'zargabad': {_boundariesXY = 8192}; }; if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_BOUNDARIES_ENABLED") > 0) then { if (_boundariesXY == -1) then { missionNamespace setVariable ["WFBE_C_GAMEPLAY_BOUNDARIES_ENABLED", 0]; if (local player) then { BoundariesIsOnMap = nil; BoundariesHandleOnMap = nil; }; ["INFORMATION", Format ["Init_Boundaries.sqf: There is no proper boundaries set for island [%1]", worldName]] Call WFBE_CO_FNC_LogContent; } else { missionNamespace setVariable ['WFBE_BOUNDARIESXY',_boundariesXY]; ["INFORMATION", Format ["Init_Boundaries.sqf: Boundaries [%1] found for island [%2]", _boundariesXY, worldName]] Call WFBE_CO_FNC_LogContent; }; } else { if (_boundariesXY == -1) then { ["INFORMATION", Format ["Init_Boundaries.sqf: There is no proper boundaries set for island [%1]", worldName]] Call WFBE_CO_FNC_LogContent; } else { missionNamespace setVariable ['WFBE_BOUNDARIESXY',_boundariesXY]; ["INFORMATION", Format ["Init_Boundaries.sqf: Boundaries [%1] found for island [%2] {Boundaries parameter is disabled}", _boundariesXY, worldName]] Call WFBE_CO_FNC_LogContent; }; };["INITIALIZATION", Format ["Init_Common.sqf: Common initialization begins at [%1]", time]] Call WFBE_CO_FNC_LogContent; Private ['_count']; BalanceInit = Compile preprocessFileLineNumbers "Common\Functions\Common_BalanceInit.sqf"; BuildingInRange = Compile preprocessFileLineNumbers "Common\Functions\Common_BuildingInRange.sqf"; ChangeSideSupply = Compile preprocessFileLineNumbers "Common\Functions\Common_ChangeSideSupply.sqf"; ChangeTeamFunds = Compile preprocessFileLineNumbers "Common\Functions\Common_ChangeTeamFunds.sqf"; EquipArtillery = Compile preprocessFileLineNumbers "Common\Functions\Common_EquipArtillery.sqf"; EquipLoadout = Compile preprocessFileLineNumbers "Common\Functions\Common_EquipLoadout.sqf"; FireArtillery = Compile preprocessFileLineNumbers "Common\Functions\Common_FireArtillery.sqf"; GetAIDigit = Compile preprocessFileLineNumbers "Common\Functions\Common_GetAIDigit.sqf"; GetClosestLocation = Compile preprocessFileLineNumbers "Common\Functions\Common_GetClosestLocation.sqf"; GetClosestLocationBySide = Compile preprocessFileLineNumbers "Common\Functions\Common_GetClosestLocationBySide.sqf"; GetCommanderTeam = Compile preprocessFileLineNumbers "Common\Functions\Common_GetCommanderTeam.sqf"; GetConfigInfo = Compile preprocessFileLineNumbers "Common\Functions\Common_GetConfigInfo.sqf"; GetFactories = Compile preprocessFileLineNumbers "Common\Functions\Common_GetFactories.sqf"; GetFriendlyCamps = Compile preprocessFileLineNumbers "Common\Functions\Common_GetFriendlyCamps.sqf"; GetGroupFromConfig = Compile preprocessFileLineNumbers "Common\Functions\Common_GetGroupFromConfig.sqf"; GetHostilesInArea = Compile preprocessFileLineNumbers "Common\Functions\Common_GetHostilesInArea.sqf"; GetLiveUnits = Compile preprocessFileLineNumbers "Common\Functions\Common_GetLiveUnits.sqf"; GetPositionFrom = Compile preprocessFileLineNumbers "Common\Functions\Common_GetPositionFrom.sqf"; GetRandomPosition = Compile preprocessFileLineNumbers "Common\Functions\Common_GetRandomPosition.sqf"; GetRespawnCamps = Compile preprocessFileLineNumbers "Common\Functions\Common_GetRespawnCamps.sqf"; GetRespawnThreeway = Compile preprocessFileLineNumbers "Common\Functions\Common_GetRespawnThreeway.sqf"; GetSafePlace = Compile preprocessFileLineNumbers "Common\Functions\Common_GetSafePlace.sqf"; GetSideFromID = Compile preprocessFileLineNumbers "Common\Functions\Common_GetSideFromID.sqf"; GetSideID = Compile preprocessFileLineNumbers "Common\Functions\Common_GetSideID.sqf"; GetSideSupply = Compile preprocessFileLineNumbers "Common\Functions\Common_GetSideSupply.sqf"; GetSideUpgrades = Compile preprocessFileLineNumbers "Common\Functions\Common_GetSideUpgrades.sqf"; GetSideTowns = Compile preprocessFileLineNumbers "Common\Functions\Common_GetSideTowns.sqf"; GetSleepFPS = Compile preprocessFileLineNumbers "Common\Functions\Common_GetSleepFPS.sqf"; GetTeamArtillery = Compile preprocessFileLineNumbers "Common\Functions\Common_GetTeamArtillery.sqf"; GetTeamAutonomous = Compile preprocessFileLineNumbers "Common\Functions\Common_GetTeamAutonomous.sqf"; GetTeamFunds = Compile preprocessFileLineNumbers "Common\Functions\Common_GetTeamFunds.sqf"; GetTeamMoveMode = Compile preprocessFileLineNumbers "Common\Functions\Common_GetTeamMoveMode.sqf"; GetTeamMovePos = Compile preprocessFileLineNumbers "Common\Functions\Common_GetTeamMovePos.sqf"; GetTeamRespawn = Compile preprocessFileLineNumbers "Common\Functions\Common_GetTeamRespawn.sqf"; GetTeamType = Compile preprocessFileLineNumbers "Common\Functions\Common_GetTeamType.sqf"; GetTeamVehicles = Compile preprocessFileLineNumbers "Common\Functions\Common_GetTeamVehicles.sqf"; GetTotalCamps = Compile preprocessFileLineNumbers "Common\Functions\Common_GetTotalCamps.sqf"; GetTotalCampsOnSide = Compile preprocessFileLineNumbers "Common\Functions\Common_GetTotalCampsOnSide.sqf"; GetTotalSupplyValue = Compile preprocessFileLineNumbers "Common\Functions\Common_GetTotalSupplyValue.sqf"; GetTownsHeld = Compile preprocessFileLineNumbers "Common\Functions\Common_GetTownsHeld.sqf"; GetTownsIncome = Compile preprocessFileLineNumbers "Common\Functions\Common_GetTownsIncome.sqf"; GetUnitsBelowHeight = Compile preprocessFileLineNumbers "Common\Functions\Common_GetUnitsBelowHeight.sqf"; GetUnitVehicle = Compile preprocessFileLineNumbers "Common\Functions\Common_GetUnitVehicle.sqf"; HandleIncomingMissile = Compile preprocessFileLineNumbers "Common\Functions\Common_HandleIncomingMissile.sqf"; IsArtillery = Compile preprocessFileLineNumbers "Common\Functions\Common_IsArtillery.sqf"; MarkerUpdate = Compile preprocessFileLineNumbers "Common\Common_MarkerUpdate.sqf"; PlaceNear = Compile preprocessFileLineNumbers "Common\Functions\Common_PlaceNear.sqf"; PlaceSafe = Compile preprocessFileLineNumbers "Common\Functions\Common_PlaceSafe.sqf"; RearmVehicle = if !(WF_A2_Vanilla) then {Compile preprocessFileLineNumbers "Common\Functions\Common_RearmVehicleOA.sqf"} else {Compile preprocessFileLineNumbers "Common\Functions\Common_RearmVehicle.sqf"}; RevealArea = Compile preprocessFileLineNumbers "Common\Functions\Common_RevealArea.sqf"; SetCommanderVotes = Compile preprocessFileLineNumbers "Common\Functions\Common_SetCommanderVotes.sqf"; SetTeamAutonomous = Compile preprocessFileLineNumbers "Common\Functions\Common_SetTeamAutonomous.sqf"; SetTeamRespawn = Compile preprocessFileLineNumbers "Common\Functions\Common_SetTeamRespawn.sqf"; SetTeamMoveMode = Compile preprocessFileLineNumbers "Common\Functions\Common_SetTeamMoveMode.sqf"; SetTeamMovePos = Compile preprocessFileLineNumbers "Common\Functions\Common_SetTeamMovePos.sqf"; SetTeamType = Compile preprocessFileLineNumbers "Common\Functions\Common_SetTeamType.sqf"; SpawnTurrets = Compile preprocessFileLineNumbers "Common\Functions\Common_SpawnTurrets.sqf"; SortByDistance = Compile preprocessFileLineNumbers "Common\Functions\Common_SortByDistance.sqf"; UpdateStatistics = Compile preprocessFileLineNumbers "Common\Functions\Common_UpdateStatistics.sqf"; UseStationaryDefense = Compile preprocessFileLineNumbers "Common\Functions\Common_UseStationaryDefense.sqf"; // Module: Arty ARTY_HandleILLUM = Compile preprocessFile "Common\Module\Arty\ARTY_HandleILLUM.sqf"; ARTY_HandleSADARM = Compile preprocessFile "Common\Module\Arty\ARTY_HandleSADARM.sqf"; ARTY_Prep = Compile preprocessFile "Common\Module\Arty\ARTY_mobileMissionPrep.sqf"; ARTY_Finish = Compile preprocessFile "Common\Module\Arty\ARTY_mobileMissionFinish.sqf"; //--- New Fnc. WFBE_CO_FNC_ArrayPush = Compile preprocessFileLineNumbers "Common\Functions\Common_ArrayPush.sqf"; WFBE_CO_FNC_ArrayRemoveIndex = Compile preprocessFileLineNumbers "Common\Functions\Common_ArrayRemoveIndex.sqf"; WFBE_CO_FNC_ArrayShift = Compile preprocessFileLineNumbers "Common\Functions\Common_ArrayShift.sqf"; WFBE_CO_FNC_ArrayShuffle = Compile preprocessFileLineNumbers "Common\Functions\Common_ArrayShuffle.sqf"; WFBE_CO_FNC_ChangeTeamFunds = Compile preprocessFileLineNumbers "Common\Functions\Common_ChangeTeamFunds.sqf"; WFBE_CO_FNC_ChangeUnitGroup = Compile preprocessFileLineNumbers "Common\Functions\Common_ChangeUnitGroup.sqf"; WFBE_CO_FNC_ClearVehicleCargo = if (WF_A2_Vanilla) then {Compile preprocessFileLineNumbers "Common\Functions\Common_ClearVehicleCargo.sqf"} else {Compile preprocessFileLineNumbers "Common\Functions\Common_ClearVehicleCargoOA.sqf"}; WFBE_CO_FNC_CreateTeam = Compile preprocessFileLineNumbers "Common\Functions\Common_CreateTeam.sqf"; WFBE_CO_FNC_CreateTownUnits = Compile preprocessFileLineNumbers "Common\Functions\Common_CreateTownUnits.sqf"; WFBE_CO_FNC_CreateVehicle = Compile preprocessFileLineNumbers "Common\Functions\Common_CreateVehicle.sqf"; WFBE_CO_FNC_CreateUnit = Compile preprocessFileLineNumbers "Common\Functions\Common_CreateUnit.sqf"; WFBE_CO_FNC_EquipBackpack = if !(WF_A2_Vanilla) then {Compile preprocessFileLineNumbers "Common\Functions\Common_EquipBackpack.sqf"} else {{}}; WFBE_CO_FNC_EquipUnit = Compile preprocessFileLineNumbers "Common\Functions\Common_EquipUnit.sqf"; WFBE_CO_FNC_EquipVehicle = if !(WF_A2_Vanilla) then {Compile preprocessFileLineNumbers "Common\Functions\Common_EquipVehicle.sqf"} else {{}}; WFBE_CO_FNC_FindTurretsRecursive = Compile preprocessFileLineNumbers "Common\Functions\Common_FindTurretsRecursive.sqf"; WFBE_CO_FNC_FireArtillery = Compile preprocessFileLineNumbers "Common\Functions\Common_FireArtillery.sqf"; WFBE_CO_FNC_GetAreaEnemiesCount = Compile preprocessFileLineNumbers "Common\Functions\Common_GetAreaEnemiesCount.sqf"; WFBE_CO_FNC_GetCommanderTeam = Compile preprocessFileLineNumbers "Common\Functions\Common_GetCommanderTeam.sqf"; WFBE_CO_FNC_GetClosestEnemyLocation = Compile preprocessFileLineNumbers "Common\Functions\Common_GetClosestEnemyLocation.sqf"; WFBE_CO_FNC_GetClosestEntity = Compile preprocessFileLineNumbers "Common\Functions\Common_GetClosestEntity.sqf"; WFBE_CO_FNC_GetConfigEntry = Compile preprocessFileLineNumbers "Common\Functions\Common_GetConfigEntry.sqf"; WFBE_CO_FNC_GetDirTo = Compile preprocessFileLineNumbers "Common\Functions\Common_GetDirTo.sqf"; WFBE_CO_FNC_GetEmptyPosition = Compile preprocessFileLineNumbers "Common\Functions\Common_GetEmptyPosition.sqf"; WFBE_CO_FNC_GetLiveUnits = Compile preprocessFileLineNumbers "Common\Functions\Common_GetLiveUnits.sqf"; WFBE_CO_FNC_GetRandomPosition = Compile preprocessFileLineNumbers "Common\Functions\Common_GetRandomPosition.sqf"; WFBE_CO_FNC_GetSideFromID = Compile preprocessFileLineNumbers "Common\Functions\Common_GetSideFromID.sqf"; WFBE_CO_FNC_GetSideHQDeployStatus = Compile preprocessFileLineNumbers "Common\Functions\Common_GetSideHQDeployStatus.sqf"; WFBE_CO_FNC_GetSideHQ = Compile preprocessFileLineNumbers "Common\Functions\Common_GetSideHQ.sqf"; WFBE_CO_FNC_GetSideID = Compile preprocessFileLineNumbers "Common\Functions\Common_GetSideID.sqf"; WFBE_CO_FNC_GetSideLogic = Compile preprocessFileLineNumbers "Common\Functions\Common_GetSideLogic.sqf"; WFBE_CO_FNC_GetSideSupply = Compile preprocessFileLineNumbers "Common\Functions\Common_GetSideSupply.sqf"; WFBE_CO_FNC_GetSideStructures = Compile preprocessFileLineNumbers "Common\Functions\Common_GetSideStructures.sqf"; WFBE_CO_FNC_GetSideTowns = Compile preprocessFileLineNumbers "Common\Functions\Common_GetSideTowns.sqf"; WFBE_CO_FNC_GetSideUpgrades = Compile preprocessFileLineNumbers "Common\Functions\Common_GetSideUpgrades.sqf"; WFBE_CO_FNC_GetTeamFunds = Compile preprocessFileLineNumbers "Common\Functions\Common_GetTeamFunds.sqf"; WFBE_CO_FNC_GetTotalCamps = Compile preprocessFileLineNumbers "Common\Functions\Common_GetTotalCamps.sqf"; WFBE_CO_FNC_GetTotalCampsOnSide = Compile preprocessFileLineNumbers "Common\Functions\Common_GetTotalCampsOnSide.sqf"; WFBE_CO_FNC_GetTownsSupply = Compile preprocessFileLineNumbers "Common\Functions\Common_GetTownsSupply.sqf"; WFBE_CO_FNC_GetUnitConfigGear = Compile preprocessFileLineNumbers "Common\Functions\Common_GetUnitConfigGear.sqf"; WFBE_CO_FNC_GetUnitsPerSide = Compile preprocessFileLineNumbers "Common\Functions\Common_GetUnitsPerSide.sqf"; WFBE_CO_FNC_GetVehicleTurretsGear = Compile preprocessFileLineNumbers "Common\Functions\Common_GetVehicleTurretsGear.sqf"; WFBE_CO_FNC_HandleArtillery = Compile preprocessFileLineNumbers "Common\Functions\Common_HandleArtillery.sqf"; WFBE_CO_FNC_OnUnitHit = Compile preprocessFileLineNumbers "Common\Functions\Common_OnUnitHit.sqf"; WFBE_CO_FNC_OnUnitKilled = Compile preprocessFileLineNumbers "Common\Functions\Common_OnUnitKilled.sqf"; WFBE_CO_FNC_RevealArea = Compile preprocessFileLineNumbers "Common\Functions\Common_RevealArea.sqf"; WFBE_CO_FNC_RemoveCountermeasures = if !(WF_A2_Vanilla) then {Compile preprocessFileLineNumbers "Common\Functions\Common_RemoveCountermeasures.sqf"} else {{}}; WFBE_CO_FNC_SendToClient = if !(WF_A2_Vanilla) then {Compile preprocessFileLineNumbers "Common\Functions\Common_SendToClient.sqf"} else {{}}; WFBE_CO_FNC_SendToClients = Compile preprocessFileLineNumbers "Common\Functions\Common_SendToClients.sqf"; WFBE_CO_FNC_SendToServer = if !(WF_A2_Vanilla) then {Compile preprocessFileLineNumbers "Common\Functions\Common_SendToServer.sqf"} else {Compile preprocessFileLineNumbers "Common\Functions\Common_SendToServerOptimized.sqf"}; WFBE_CO_FNC_SetTurretsMagazines = if !(WF_A2_Vanilla) then {Compile preprocessFileLineNumbers "Common\Functions\Common_SetTurretsMagazines.sqf"} else {{}}; WFBE_CO_FNC_SortByDistance = Compile preprocessFileLineNumbers "Common\Functions\Common_SortByDistance.sqf"; WFBE_CO_FNC_WaypointPatrol = Compile preprocessFileLineNumbers "Common\Functions\Common_WaypointPatrol.sqf"; WFBE_CO_FNC_WaypointPatrolTown = Compile preprocessFileLineNumbers "Common\Functions\Common_WaypointPatrolTown.sqf"; WFBE_CO_FNC_WaypointSimple = Compile preprocessFileLineNumbers "Common\Functions\Common_WaypointSimple.sqf"; WFBE_CO_FNC_WaypointsAdd = Compile preprocessFileLineNumbers "Common\Functions\Common_WaypointsAdd.sqf"; WFBE_CO_FNC_WaypointsRemove = Compile preprocessFileLineNumbers "Common\Functions\Common_WaypointsRemove.sqf"; ["INITIALIZATION", "Init_Common.sqf: Functions are initialized."] Call WFBE_CO_FNC_LogContent; varQueu = random(10)+random(100)+random(1000); unitMarker = 0; /* Respawn Markers */ createMarkerLocal ["respawn_east",getMarkerPos "EastTempRespawnMarker"]; "respawn_east" setMarkerColorLocal "ColorGreen"; "respawn_east" setMarkerShapeLocal "RECTANGLE"; "respawn_east" setMarkerBrushLocal "BORDER"; "respawn_east" setMarkerSizeLocal [15,15]; "respawn_east" setMarkerAlphaLocal 0; createMarkerLocal ["respawn_west",getMarkerPos "WestTempRespawnMarker"]; "respawn_west" setMarkerColorLocal "ColorGreen"; "respawn_west" setMarkerShapeLocal "RECTANGLE"; "respawn_west" setMarkerBrushLocal "BORDER"; "respawn_west" setMarkerSizeLocal [15,15]; "respawn_west" setMarkerAlphaLocal 0; createMarkerLocal ["respawn_guerrila",getMarkerPos "GuerTempRespawnMarker"]; "respawn_guerrila" setMarkerColorLocal "ColorGreen"; "respawn_guerrila" setMarkerShapeLocal "RECTANGLE"; "respawn_guerrila" setMarkerBrushLocal "BORDER"; "respawn_guerrila" setMarkerSizeLocal [15,15]; "respawn_guerrila" setMarkerAlphaLocal 0; //--- Types. WFBE_Logic_Airfield = "LocationLogicAirport"; WFBE_Logic_Camp = "LocationLogicCamp"; WFBE_Logic_Depot = "LocationLogicDepot"; /* Allies */ if ((missionNamespace getVariable "WFBE_C_BASE_ALLIES") > 0) then { westAlliesFunds = (missionNamespace getVariable "WFBE_C_ECONOMY_FUNDS_START_WEST")*5; eastAlliesFunds = (missionNamespace getVariable "WFBE_C_ECONOMY_FUNDS_START_EAST")*5; }; /* Wait for BIS Module Init */ waitUntil {!(isNil 'BIS_fnc_init')}; waitUntil {BIS_fnc_init}; /* CORE SYSTEM - Start Different Core are added depending on the current ArmA Version running, add yours bellow. */ _team_west = ""; _team_east = ""; switch (true) do { case WF_A2_Vanilla: { /* Model Core */ Call Compile preprocessFileLineNumbers 'Common\Config\Core_Models\Vanilla.sqf'; /* Gear Core */ if (local player) then { Call Compile preprocessFileLineNumbers "Common\Config\Gear\Gear_RU.sqf"; Call Compile preprocessFileLineNumbers "Common\Config\Gear\Gear_GUE.sqf"; Call Compile preprocessFileLineNumbers "Common\Config\Gear\Gear_USMC.sqf"; }; /* Class Core */ Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_CDF.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_CIV.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_FR.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_GUE.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_INS.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_MVD.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_RU.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_Spetsnaz.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_USMC.sqf'; /* Call in the teams template - Vanilla */ _team_west = "USMC"; _team_east = "RU"; }; case WF_A2_Arrowhead: { /* Model Core */ Call Compile preprocessFileLineNumbers 'Common\Config\Core_Models\Arrowhead.sqf'; /* Gear Core */ if (local player) then { Call Compile preprocessFileLineNumbers "Common\Config\Gear\Gear_US.sqf"; Call Compile preprocessFileLineNumbers "Common\Config\Gear\Gear_TKA.sqf"; Call Compile preprocessFileLineNumbers "Common\Config\Gear\Gear_BAF.sqf"; Call Compile preprocessFileLineNumbers "Common\Config\Gear\Gear_PMC.sqf"; Call Compile preprocessFileLineNumbers "Common\Config\Gear\Gear_OFrP.sqf"; }; /* Class Core */ Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_ACR.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_BAF.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_BAFD.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_BAFW.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_DeltaForce.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_KSK.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_PMC.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_TKA.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_TKCIV.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_TKGUE.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_TKSF.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_US.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_OFrP.sqf'; /* Call in the teams template - Arrowhead */ _team_west = "OFrP"; _team_east = "TKA"; }; case WF_A2_CombinedOps: { /* Model Core */ if !(WF_Camo) then { Call Compile preprocessFileLineNumbers 'Common\Config\Core_Models\CombinedOps.sqf'; } else { Call Compile preprocessFileLineNumbers 'Common\Config\Core_Models\CombinedOps_W.sqf'; }; /* Gear Core */ if (local player) then { Call Compile preprocessFileLineNumbers "Common\Config\Gear\Gear_US.sqf"; Call Compile preprocessFileLineNumbers "Common\Config\Gear\Gear_TKA.sqf"; Call Compile preprocessFileLineNumbers "Common\Config\Gear\Gear_BAF.sqf"; Call Compile preprocessFileLineNumbers "Common\Config\Gear\Gear_GUE.sqf"; Call Compile preprocessFileLineNumbers "Common\Config\Gear\Gear_PMC.sqf"; Call Compile preprocessFileLineNumbers "Common\Config\Gear\Gear_RU.sqf"; Call Compile preprocessFileLineNumbers "Common\Config\Gear\Gear_USMC.sqf"; Call Compile preprocessFileLineNumbers "Common\Config\Gear\Gear_OFrP.sqf"; }; /* Class Core */ Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_ACR.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_BAF.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_BAFD.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_BAFW.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_CDF.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_CIV.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_DeltaForce.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_FR.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_GUE.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_INS.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_KSK.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_MVD.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_PMC.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_RU.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_Spetsnaz.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_TKA.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_TKCIV.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_TKGUE.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_TKSF.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_US.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_USMC.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_OFrP.sqf'; /* Call in the teams template - Combined Operations */ _team_west = if (WF_Camo) then {'OFrP'} else {'OFrP'}; _team_east = "TKA"; /* Mods */ if (modACE) then { if (local player) then { Call Compile preprocessFileLineNumbers "Common\Config\Gear\Gear_ACE_RU.sqf"; Call Compile preprocessFileLineNumbers "Common\Config\Gear\Gear_ACE_US.sqf"; }; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_ACE_RU.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_ACE_US_D.sqf'; Call Compile preprocessFileLineNumbers 'Common\Config\Core\Core_ACE_US_W.sqf'; }; }; }; ["INITIALIZATION", "Init_Common.sqf: Core Files are loaded."] Call WFBE_CO_FNC_LogContent; //--- new system. _grpWest = (missionNamespace getVariable 'WFBE_C_UNITS_FACTIONS_WEST') select (missionNamespace getVariable 'WFBE_C_UNITS_FACTION_WEST'); _grpEast = (missionNamespace getVariable 'WFBE_C_UNITS_FACTIONS_EAST') select (missionNamespace getVariable 'WFBE_C_UNITS_FACTION_EAST'); _grpRes = (missionNamespace getVariable 'WFBE_C_UNITS_FACTIONS_GUER') select (missionNamespace getVariable 'WFBE_C_UNITS_FACTION_GUER'); ["INITIALIZATION", Format["Init_Common.sqf: Using groups - West [%1], East [%2], Resistance [%3].",_grpWest,_grpEast,_grpRes]] Call WFBE_CO_FNC_LogContent; /* CORE SYSTEM - End */ //--- Determine which logics are defined. _presents = []; { Private ["_sideIsPresent"]; _sideIsPresent = if !(isNil (_x select 1)) then {true} else {false}; missionNamespace setVariable [Format["WFBE_%1_PRESENT", str (_x select 0)], _sideIsPresent]; if (_sideIsPresent) then {_presents = _presents + [_x select 0]}; } forEach [[west,"WFBE_L_BLU"],[east,"WFBE_L_OPF"],[resistance,"WFBE_L_GUE"]]; WFBE_PRESENTSIDES = _presents; WFBE_ISTHREEWAY = if (count WFBE_PRESENTSIDES == 3) then {true} else {false}; //--- Todo, dynamic (if logic is present or not). WFBE_DEFENDER = resistance; WFBE_DEFENDER_ID = (WFBE_DEFENDER) Call WFBE_CO_FNC_GetSideID; //--- Import the desired global side variables. Call Compile preprocessFileLineNumbers Format["Common\Config\Core_Root\Root_%1.sqf",_grpRes]; Call Compile preprocessFileLineNumbers Format["Common\Config\Core_Root\Root_%1.sqf", _team_west]; Call Compile preprocessFileLineNumbers Format["Common\Config\Core_Root\Root_%1.sqf", _team_east]; //--- Common Exec. Call Compile preprocessFileLineNumbers "Common\Init\Init_PublicVariables.sqf"; //--- Import the desired defenses. (todo, Replace the old defense init by this one). Call Compile preprocessFileLineNumbers Format["Common\Config\Defenses\Defenses_%1.sqf",_grpWest]; Call Compile preprocessFileLineNumbers Format["Common\Config\Defenses\Defenses_%1.sqf",_grpEast]; Call Compile preprocessFileLineNumbers Format["Common\Config\Defenses\Defenses_%1.sqf",_grpRes]; //--- Server Exec. if (isServer) then { //--- Import the desired town groups. Call Compile preprocessFileLineNumbers Format["Common\Config\Groups\Groups_%1.sqf",_grpWest]; Call Compile preprocessFileLineNumbers Format["Common\Config\Groups\Groups_%1.sqf",_grpEast]; Call Compile preprocessFileLineNumbers Format["Common\Config\Groups\Groups_%1.sqf",_grpRes]; //--- Allies. if ((missionNamespace getVariable "WFBE_C_BASE_ALLIES") > 0) then {Call Compile preprocessFileLineNumbers "Common\Config\Config_Allies.sqf"}; }; //--- Airports Init. ExecVM "Common\Init\Init_Airports.sqf"; ["INITIALIZATION", "Init_Common.sqf: Config Files are loaded."] Call WFBE_CO_FNC_LogContent; //--- Boundaries, use setPos to find the perfect spot on other islands and worldName to determine the island name (editor: diag_log worldName; player setPos [0,5120,0]; ). Call Compile preprocessFileLineNumbers "Common\Init\Init_Boundaries.sqf"; ["INITIALIZATION", "Init_Common.sqf: Boundaries are loaded."] Call WFBE_CO_FNC_LogContent; if ((missionNamespace getVariable 'WFBE_C_TOWNS_CONQUEST_MODE') > 0) then {Call Compile preprocessFileLineNumbers "Common\Init\Init_Neighbors.sqf"}; //--- Neighbors if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_ICBM") > 0) then {Call Compile preprocessFileLineNumbers "Client\Module\Nuke\ICBM_Init.sqf"}; //--- ICBM. if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_IRSMOKE") > 0) then {Call Compile preprocessFileLineNumbers "Common\Module\IRS\IRS_Init.sqf"}; //--- IR Smoke. if ((missionNamespace getVariable "WFBE_C_MODULE_UPSMON") > 0) then {Call Compile preprocessFileLineNumbers "Server\Module\UPSMON\Init_UPSMON.sqf"}; //--- UPSMON AI //--- CIPHER Module - Functions. Call Compile preprocessFileLineNumbers "Common\Module\CIPHER\CIPHER_Init.sqf"; //--- Longest vehicles purchase (+ extra processing). _balancePrice = missionNamespace getVariable "WFBE_C_UNITS_PRICING"; { Private ["_longest","_structure"]; _structure = _x; //--- Get the longest build time per structure. _longest = 0; { _type = missionNamespace getVariable Format ["WFBE_%1%2UNITS", _x, _structure]; if !(isNil '_type') then { { _c = missionNamespace getVariable _x; if !(isNil '_c') then { if ((_c select QUERYUNITTIME) > _longest) then {_longest = (_c select QUERYUNITTIME)}; if (_structure in ["LIGHT", "HEAVY"]) then {if (_balancePrice in [1,3]) then {_c set [QUERYUNITPRICE, (_c select QUERYUNITPRICE)*2]}}; if (_structure in ["AIRCRAFT", "AIRPORT"]) then {if (_balancePrice in [1,2]) then {_c set [QUERYUNITPRICE, (_c select QUERYUNITPRICE)*2]}}; }; } forEach _type; }; } forEach WFBE_PRESENTSIDES; missionNamespace setVariable [Format ["WFBE_LONGEST%1BUILDTIME",_structure], _longest]; } forEach ["BARRACKS","LIGHT","HEAVY","AIRCRAFT","AIRPORT","DEPOT"]; //--- If money is the only resource, multiply the building cost. if ((missionNamespace getVariable "WFBE_C_ECONOMY_CURRENCY_SYSTEM") == 1) then { Private ["_list"]; { _list = missionNamespace getVariable Format ["WFBE_%1STRUCTURECOSTS", _x]; for '_i' from 0 to count(_list)-1 do {_list set [_i, round((_list select _i) * 5)]}; } forEach WFBE_PRESENTSIDES; }; //--- Common initilization is complete at this point. ["INITIALIZATION", Format ["Init_Common.sqf: Common initialization ended at [%1]", time]] Call WFBE_CO_FNC_LogContent; commonInitComplete = true;//--- DO NOT CHANGE. WESTID = 0; EASTID = 1; RESISTANCEID = 2; //--- DO NOT CHANGE. QUERYUNITLABEL = 0; QUERYUNITPICTURE = 1; QUERYUNITPRICE = 2; QUERYUNITTIME = 3; QUERYUNITCREW = 4; QUERYUNITUPGRADE = 5; QUERYUNITFACTORY = 6; QUERYUNITSKILL = 7; QUERYUNITFACTION = 8; QUERYUNITTURRETS = 9; //--- DO NOT CHANGE. QUERYGEARLABEL = 0; QUERYGEARPICTURE = 1; QUERYGEARCLASS = 2; QUERYGEARTYPE = 3; QUERYGEARCOST = 4; QUERYGEARUPGRADE = 5; QUERYGEARALLOWED = 6; QUERYGEARHANDGUNPOOL = 7; QUERYGEARMAGAZINES = 8; QUERYGEARSPACE = 9; QUERYGEARALLOWTWO = 10; //--- Side Statics. WFBE_C_WEST_ID = 0; WFBE_C_EAST_ID = 1; WFBE_C_GUER_ID = 2; WFBE_C_CIV_ID = 3; WFBE_C_UNKNOWN_ID = 4; //--- Common Upgrades, each number match the upgrades arrays. WFBE_UP_BARRACKS = 0; WFBE_UP_LIGHT = 1; WFBE_UP_HEAVY = 2; WFBE_UP_AIR = 3; WFBE_UP_PARATROOPERS = 4; WFBE_UP_UAV = 5; WFBE_UP_SUPPLYRATE = 6; WFBE_UP_RESPAWNRANGE = 7; WFBE_UP_AIRLIFT = 8; WFBE_UP_FLARESCM = 9; WFBE_UP_ARTYTIMEOUT = 10; WFBE_UP_ICBM = 11; WFBE_UP_FASTTRAVEL = 12; WFBE_UP_GEAR = 13; WFBE_UP_AMMOCOIN = 14; WFBE_UP_EASA = 15; WFBE_UP_SUPPLYPARADROP = 16; WFBE_UP_ARTYAMMO = 17; WFBE_UP_IRSMOKE = 18; //--- New Variables, use isNil to check whether it's already defined or not (MP parameters). //--- AI. if (isNil {missionNamespace getVariable "WFBE_C_AI_COMMANDER_ENABLED"}) then {missionNamespace setVariable ["WFBE_C_AI_COMMANDER_ENABLED", 1]}; //--- Enable or disable the AI Commanders. missionNamespace setVariable ["WFBE_C_AI_COMMANDER_MOVE_INTERVALS", 3600]; missionNamespace setVariable ["WFBE_C_AI_COMMANDER_SUPPLY_TRUCKS_MAX", 5]; if (isNil {missionNamespace getVariable "WFBE_C_AI_MAX"}) then {missionNamespace setVariable ["WFBE_C_AI_MAX", 10]}; //--- Max AI allowed on each AI groups. if (isNil {missionNamespace getVariable "WFBE_C_AI_DELEGATION"}) then {missionNamespace setVariable ["WFBE_C_AI_DELEGATION", 0]}; //--- Enable AI delegation (creation of ai on the client). missionNamespace setVariable ["WFBE_C_AI_DELEGATION_FPS_INTERVAL", 60*3]; //--- A client send it's FPS average each x seconds to the server. missionNamespace setVariable ["WFBE_C_AI_DELEGATION_FPS_MIN", 25]; //--- A client can handle groups if it's FPS average is above x. missionNamespace setVariable ["WFBE_C_AI_DELEGATION_GROUPS_MAX", 1]; //--- A client max have up to x groups managed on his computer (high values may makes lag, be careful). missionNamespace setVariable ["WFBE_C_AI_PATROL_RANGE", 400]; if (isNil {missionNamespace getVariable "WFBE_C_AI_TEAMS_ENABLED"}) then {missionNamespace setVariable ["WFBE_C_AI_TEAMS_ENABLED", 1]}; //--- Enable or disable the AI Teams. if (isNil {missionNamespace getVariable "WFBE_C_AI_TEAMS_JIP_PRESERVE"}) then {missionNamespace setVariable ["WFBE_C_AI_TEAMS_JIP_PRESERVE", 0]}; //--- Keep the AI Teams units on JIP. missionNamespace setVariable ["WFBE_C_AI_TOWN_ATTACK_HOPS_WP", 4]; //--- AI may use up to x WP to attack a town. //--- Artillery. if (isNil {missionNamespace getVariable "WFBE_C_ARTILLERY"}) then {missionNamespace setVariable ["WFBE_C_ARTILLERY", 1]}; //--- Enable or disable Artillery fire missions (0: Disabled, 1: Short, 2: Medium, 3: Long). missionNamespace setVariable ["WFBE_C_ARTILLERY_AMMO_RANGE_LASER", 175]; //--- Artillery laser rounds detection range (Per Shell). missionNamespace setVariable ["WFBE_C_ARTILLERY_AMMO_RANGE_SADARM", 200]; //--- Artillery SADARM rounds operative range (Per Shell). missionNamespace setVariable ["WFBE_C_ARTILLERY_AREA_MAX", 300]; //--- Maximum spread area of artillery support. if (isNil {missionNamespace getVariable "WFBE_C_ARTILLERY_COMPUTER"}) then {missionNamespace setVariable ["WFBE_C_ARTILLERY_COMPUTER", 1]}; //--- Enable Artillery Computer (0: Disabled, 1: Enabled on Upgrade, 2: Enabled). missionNamespace setVariable ["WFBE_C_ARTILLERY_INTERVALS", [300, 250, 200, 150]]; //--- Delay between each fire mission for each upgrades. if (isNil {missionNamespace getVariable "WFBE_C_ARTILLERY_UI"}) then {missionNamespace setVariable ["WFBE_C_ARTILLERY_UI", 0]}; //--- Enable or disable Artillery UI for direct fire missions. //--- Base. if (isNil {missionNamespace getVariable "WFBE_C_BASE_AREA"}) then {missionNamespace setVariable ["WFBE_C_BASE_AREA", 2]}; //--- Force the bases to be grouped by areas. if (isNil {missionNamespace getVariable "WFBE_C_BASE_ALLIES"}) then {missionNamespace setVariable ["WFBE_C_BASE_ALLIES", 0]}; //--- Allies Parameters (0 Disabled, 1 West, 2 East, 3 both). missionNamespace setVariable ["WFBE_C_BASE_AREA_RANGE", 250]; //--- A base area has a range of x meters. if (isNil {missionNamespace getVariable "WFBE_C_BASE_DEFENSE_MAX_AI"}) then {missionNamespace setVariable ["WFBE_C_BASE_DEFENSE_MAX_AI", 30]}; //--- Maximum AIs that will be able to man defense within the barracks area. if (isNil {missionNamespace getVariable "WFBE_C_BASE_DEFENSE_MANNING_RANGE"}) then {missionNamespace setVariable ["WFBE_C_BASE_DEFENSE_MANNING_RANGE", 250]}; //--- Within x meters, defenses may be manned. missionNamespace setVariable ["WFBE_C_BASE_HQ_BUILD_RANGE", 120]; //--- HQ Build range. missionNamespace setVariable ["WFBE_C_BASE_HQ_REPAIR_PRICE", 20000]; //--- HQ Repair price. if (isNil {missionNamespace getVariable "WFBE_C_BASE_PATROLS_INFANTRY"}) then {missionNamespace setVariable ["WFBE_C_BASE_PATROLS_INFANTRY", 0]}; //--- Enable AI Squad patrol in base from Barracks. if (isNil {missionNamespace getVariable "WFBE_C_BASE_START_TOWN"}) then {missionNamespace setVariable ["WFBE_C_BASE_START_TOWN", 1]}; //--- Remove the spawn locations which are too far away from the towns. if (isNil {missionNamespace getVariable "WFBE_C_BASE_STARTING_DISTANCE"}) then {missionNamespace setVariable ["WFBE_C_BASE_STARTING_DISTANCE", 5000]}; //--- Sides need at last xkm of distance between them. if (isNil {missionNamespace getVariable "WFBE_C_BASE_STARTING_MODE"}) then {missionNamespace setVariable ["WFBE_C_BASE_STARTING_MODE", 2]}; //--- Starting Locations Mode: 0 = WN|ES; 1 = WS|EN; 2 = Random; //--- Camps. if (isNil {missionNamespace getVariable "WFBE_C_CAMPS_CREATE"}) then {missionNamespace setVariable ["WFBE_C_CAMPS_CREATE", 1]}; //--- Create the camp models. missionNamespace setVariable ["WFBE_C_CAMPS_CAPTURE_BOUNTY", 100]; //--- Bounty received by player whenever he capture a camp. missionNamespace setVariable ["WFBE_C_CAMPS_CAPTURE_RATE", 2]; missionNamespace setVariable ["WFBE_C_CAMPS_CAPTURE_RATE_MAX", 5]; missionNamespace setVariable ["WFBE_C_CAMPS_RANGE", 10]; missionNamespace setVariable ["WFBE_C_CAMPS_RANGE_PLAYERS", 5]; missionNamespace setVariable ["WFBE_C_CAMPS_REPAIR_DELAY", 35]; missionNamespace setVariable ["WFBE_C_CAMPS_REPAIR_PRICE", 2500]; missionNamespace setVariable ["WFBE_C_CAMPS_REPAIR_RANGE", 15]; //--- Economy. if (isNil {missionNamespace getVariable "WFBE_C_ECONOMY_CURRENCY_SYSTEM"}) then {missionNamespace setVariable ["WFBE_C_ECONOMY_CURRENCY_SYSTEM", 0]}; //--- 0: Funds + Supply, 1: Funds. if (isNil {missionNamespace getVariable "WFBE_C_ECONOMY_FUNDS_START_WEST"}) then {missionNamespace setVariable ["WFBE_C_ECONOMY_FUNDS_START_WEST", if (WF_Debug) then {900000} else {800}]}; if (isNil {missionNamespace getVariable "WFBE_C_ECONOMY_FUNDS_START_EAST"}) then {missionNamespace setVariable ["WFBE_C_ECONOMY_FUNDS_START_EAST", if (WF_Debug) then {900000} else {800}]}; if (isNil {missionNamespace getVariable "WFBE_C_ECONOMY_FUNDS_START_GUER"}) then {missionNamespace setVariable ["WFBE_C_ECONOMY_FUNDS_START_GUER", if (WF_Debug) then {900000} else {800}]}; missionNamespace setVariable ["WFBE_C_ECONOMY_INCOME_COEF", 10]; //--- Town Multiplicator Coefficient (SV * x). missionNamespace setVariable ["WFBE_C_ECONOMY_INCOME_DIVIDED", 2.75]; //--- Prevent commander from being a millionaire, and add the rest to the players pool. missionNamespace setVariable ["WFBE_C_ECONOMY_INCOME_PERCENT_MAX", 100]; //--- Commander may set income up to x%. if (isNil {missionNamespace getVariable "WFBE_C_ECONOMY_INCOME_INTERVAL"}) then {missionNamespace setVariable ["WFBE_C_ECONOMY_INCOME_INTERVAL", 60]}; //--- Income Interval (Delay between each paycheck). if (isNil {missionNamespace getVariable "WFBE_C_ECONOMY_INCOME_SYSTEM"}) then {missionNamespace setVariable ["WFBE_C_ECONOMY_INCOME_SYSTEM", 4]}; //--- Income System (1:Full, 2:Half (Half -> 120 SV Town = 60$ / 60SV), 3: Commander System, 4: Commander System: Full) if (isNil {missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_START_WEST"}) then {missionNamespace setVariable ["WFBE_C_ECONOMY_SUPPLY_START_WEST", if (WF_Debug) then {900000} else {1200}]}; if (isNil {missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_START_EAST"}) then {missionNamespace setVariable ["WFBE_C_ECONOMY_SUPPLY_START_EAST", if (WF_Debug) then {900000} else {1200}]}; if (isNil {missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_START_GUER"}) then {missionNamespace setVariable ["WFBE_C_ECONOMY_SUPPLY_START_GUER", if (WF_Debug) then {900000} else {1200}]}; if (isNil {missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM"}) then {missionNamespace setVariable ["WFBE_C_ECONOMY_SUPPLY_SYSTEM", 1]}; //--- Supply System (0: Trucks, 1: Automatic with time). missionNamespace setVariable ["WFBE_C_ECONOMY_SUPPLY_TIME_INCREASE_DELAY", 80]; //--- Increase SV delay. //--- Environment. if (isNil {missionNamespace getVariable "WFBE_C_ENVIRONMENT_FAST_TIME"}) then {missionNamespace setVariable ["WFBE_C_ENVIRONMENT_FAST_TIME", 0]}; //--- Fast Time rates (where x is the minute # skiped each minute) missionNamespace setVariable ["WFBE_C_ENVIRONMENT_FAST_TIME_VALUES", [0, 4.8, 5.052631579, 5.333333333, 5.647058824, 6, 6.4, 6.857142857, 7.384615385, 8, 8.727272727, 9.6, 10.66666667, 12]]; //--- Fast time values, this shall match the amount of values in rsc\parameters.hpp if (isNil {missionNamespace getVariable "WFBE_C_ENVIRONMENT_MAX_VIEW"}) then {missionNamespace setVariable ["WFBE_C_ENVIRONMENT_MAX_VIEW", 4000]}; //--- Max view distance. if (isNil {missionNamespace getVariable "WFBE_C_ENVIRONMENT_MAX_CLUTTER"}) then {missionNamespace setVariable ["WFBE_C_ENVIRONMENT_MAX_CLUTTER", 50]}; //--- Max Terrain grid. if (isNil {missionNamespace getVariable "WFBE_C_ENVIRONMENT_STARTING_HOUR"}) then {missionNamespace setVariable ["WFBE_C_ENVIRONMENT_STARTING_HOUR", 9]}; //--- Starting Hour of the day. if (isNil {missionNamespace getVariable "WFBE_C_ENVIRONMENT_STARTING_MONTH"}) then {missionNamespace setVariable ["WFBE_C_ENVIRONMENT_STARTING_MONTH", 6]}; //--- Starting Month of the year. if (isNil {missionNamespace getVariable "WFBE_C_ENVIRONMENT_WEATHER"}) then {missionNamespace setVariable ["WFBE_C_ENVIRONMENT_WEATHER", 0]}; //--- Weather Type, 0: Clear, 1: Cloudy, 2: Rainy, 3: Dynamic) missionNamespace setVariable ["WFBE_C_ENVIRONMENT_WEATHER_TRANSITION", 600]; //--- Weather Transition period, change weather overcast each x seconds (longer is more realistic). if (isNil {missionNamespace getVariable "WFBE_C_ENVIRONMENT_WEATHER_VOLUMETRIC"}) then {missionNamespace setVariable ["WFBE_C_ENVIRONMENT_WEATHER_VOLUMETRIC", 0]}; //--- Enable volumetric clouds. //--- Gameplay. if (isNil {missionNamespace getVariable "WFBE_C_GAMEPLAY_BOUNDARIES_ENABLED"}) then {missionNamespace setVariable ["WFBE_C_GAMEPLAY_BOUNDARIES_ENABLED", 1]}; //--- Enable the map boundaries if defined. if (isNil {missionNamespace getVariable "WFBE_C_GAMEPLAY_FAST_TRAVEL"}) then {missionNamespace setVariable ["WFBE_C_GAMEPLAY_FAST_TRAVEL", 1]}; //--- Fast Travel (0 Disabled, 1 Free, 2 Fee). missionNamespace setVariable ["WFBE_C_GAMEPLAY_FAST_TRAVEL_RANGE", 175]; missionNamespace setVariable ["WFBE_C_GAMEPLAY_FAST_TRAVEL_RANGE_MAX", 3500]; missionNamespace setVariable ["WFBE_C_GAMEPLAY_FAST_TRAVEL_PRICE_KM", 215]; missionNamespace setVariable ["WFBE_C_GAMEPLAY_FAST_TRAVEL_TIME_COEF", 0.8]; if (isNil {missionNamespace getVariable "WFBE_C_GAMEPLAY_HANDLE_FRIENDLYFIRE"}) then {missionNamespace setVariable ["WFBE_C_GAMEPLAY_HANDLE_FRIENDLYFIRE", 1]}; //--- Handle the friendly fire. if (isNil {missionNamespace getVariable "WFBE_C_GAMEPLAY_HANGARS_ENABLED"}) then {missionNamespace setVariable ["WFBE_C_GAMEPLAY_HANGARS_ENABLED", 1]}; //--- Enable or disable hangars. if (isNil {missionNamespace getVariable "WFBE_C_GAMEPLAY_MISSILES_RANGE"}) then {missionNamespace setVariable ["WFBE_C_GAMEPLAY_MISSILES_RANGE", 0]}; //--- Incoming Guided missiles Range limit (0 = Disabled). if (isNil {missionNamespace getVariable "WFBE_C_GAMEPLAY_TEAMSWAP_DISABLE"}) then {missionNamespace setVariable ["WFBE_C_GAMEPLAY_TEAMSWAP_DISABLE", 1]}; //--- Disable teamswitch. if (isNil {missionNamespace getVariable "WFBE_C_GAMEPLAY_THERMAL_IMAGING"}) then {missionNamespace setVariable ["WFBE_C_GAMEPLAY_THERMAL_IMAGING", 3]}; //--- Thermal Imaging (0: Disabled, 1: Weapons, 2: Vehicles, 3: All). if (isNil {missionNamespace getVariable "WFBE_C_GAMEPLAY_UID_SHOW"}) then {missionNamespace setVariable ["WFBE_C_GAMEPLAY_UID_SHOW", 1]}; //--- Display the user ID (on teamswap/tk). if (isNil {missionNamespace getVariable "WFBE_C_GAMEPLAY_UPGRADES_CLEARANCE"}) then {missionNamespace setVariable ["WFBE_C_GAMEPLAY_UPGRADES_CLEARANCE", 0]}; //--- Upgrade clearance (on start), 0: Disabled, 1: West, 2: East, 3: Res, 4: West + East, 5: West + Res, 6: East + Res, 7: All. if (isNil {missionNamespace getVariable "WFBE_C_GAMEPLAY_VICTORY_CONDITION"}) then {missionNamespace setVariable ["WFBE_C_GAMEPLAY_VICTORY_CONDITION", 2]}; //--- Victory Condition (0: Annihilation, 1: Assassination, 2: Supremacy, 3: Towns). missionNamespace setVariable ["WFBE_C_GAMEPLAY_VOTE_TIME", if (WF_Debug) then {8} else {60}]; //--- Modules. if (isNil {missionNamespace getVariable "WFBE_C_MODULE_BIS_BAF"}) then {missionNamespace setVariable ["WFBE_C_MODULE_BIS_BAF", 1]}; //--- Enable BAF content. if (isNil {missionNamespace getVariable "WFBE_C_MODULE_BIS_HC"}) then {missionNamespace setVariable ["WFBE_C_MODULE_BIS_HC", 1]}; //--- Enable High Command. if (isNil {missionNamespace getVariable "WFBE_C_MODULE_BIS_PMC"}) then {missionNamespace setVariable ["WFBE_C_MODULE_BIS_PMC", 1]}; //--- Enable PMC content. if (isNil {missionNamespace getVariable "WFBE_C_MODULE_WFBE_EASA"}) then {missionNamespace setVariable ["WFBE_C_MODULE_WFBE_EASA", 1]}; //--- Enable the Exchangeable Armament System for Aircraft. if (isNil {missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES"}) then {missionNamespace setVariable ["WFBE_C_MODULE_WFBE_FLARES", 1]}; //--- Enable the countermeasure system (0: Disabled, 1: Enabled with upgrade, 2: Enabled). if (isNil {missionNamespace getVariable "WFBE_C_MODULE_WFBE_ICBM"}) then {missionNamespace setVariable ["WFBE_C_MODULE_WFBE_ICBM", 1]}; //--- Enable the Intercontinental Ballistic Missile call for the commander. if (isNil {missionNamespace getVariable "WFBE_C_MODULE_WFBE_IRSMOKE"}) then {missionNamespace setVariable ["WFBE_C_MODULE_WFBE_IRSMOKE", 1]}; //--- Enable the use of IR Smoke. if (isNil {missionNamespace getVariable "WFBE_C_MODULE_WFBE_MISSIONS"}) then {missionNamespace setVariable ["WFBE_C_MODULE_WFBE_MISSIONS", 1]}; //--- Enable WF BE Secondary Missions. if (isNil {missionNamespace getVariable "WFBE_C_MODULE_UPSMON"}) then {missionNamespace setVariable ["WFBE_C_MODULE_UPSMON", 0]}; //--- Enable UPSMON AI. missionNamespace setVariable ["WFBE_C_MODULES_UPSMON_TOWN_AREA", [500,500]]; //--- Defines the area of operation for UPSMON AI in a town. //--- Players. if (isNil {missionNamespace getVariable "WFBE_C_PLAYERS_AI_MAX"}) then {missionNamespace setVariable ["WFBE_C_PLAYERS_AI_MAX", 14]}; //--- Max AI allowed on each player groups. missionNamespace setVariable ["WFBE_C_PLAYERS_BOUNTY_CAPTURE", 400]; missionNamespace setVariable ["WFBE_C_PLAYERS_BOUNTY_CAPTURE_ASSIST", 175]; missionNamespace setVariable ["WFBE_C_PLAYERS_BOUNTY_CAPTURE_MISSION", 800]; missionNamespace setVariable ["WFBE_C_PLAYERS_BOUNTY_CAPTURE_MISSION_ASSIST", 350]; missionNamespace setVariable ["WFBE_C_PLAYERS_COMMANDER_BOUNTY_CAPTURE_COEF", 30]; missionNamespace setVariable ["WFBE_C_PLAYERS_COMMANDER_SCORE_BUILD", 2]; missionNamespace setVariable ["WFBE_C_PLAYERS_COMMANDER_SCORE_CAPTURE", 1]; missionNamespace setVariable ["WFBE_C_PLAYERS_COMMANDER_SCORE_UPGRADE", 2]; missionNamespace setVariable ["WFBE_C_PLAYERS_GEAR_SELL_COEF", 0.5]; //--- Sell price of the gear: item price * x (800 * 0.5 = 400) missionNamespace setVariable ["WFBE_C_PLAYERS_GEAR_VEHICLE_RANGE", 50]; //--- Possible to buy gear in vehicle if that one is within that range. missionNamespace setVariable ["WFBE_C_PLAYERS_HALO_HEIGHT", 200]; //--- Distance above which units are able to perform an HALO jump. missionNamespace setVariable ["WFBE_C_PLAYERS_MARKER_DEAD_DELAY", 60]; //--- Time that a marker remain on a dead unit. missionNamespace setVariable ["WFBE_C_PLAYERS_MARKER_TOWN_RANGE", 0.8]; //--- A town marker is updated (SV) on map if a unit is within the range (town range * coef). missionNamespace setVariable ["WFBE_C_PLAYERS_OFFMAP_TIMEOUT", 30]; //--- Player may remain x second outside of the map before being killed. missionNamespace setVariable ["WFBE_C_PLAYERS_PENALTY_TEAMKILL", 500]; //--- Teamkill penalty. missionNamespace setVariable ["WFBE_C_PLAYERS_SCORE_CAPTURE", 10]; missionNamespace setVariable ["WFBE_C_PLAYERS_SCORE_CAPTURE_ASSIST", 5]; missionNamespace setVariable ["WFBE_C_PLAYERS_SCORE_CAPTURE_CAMP", 2]; missionNamespace setVariable ["WFBE_C_PLAYERS_SCORE_DELIVERY", 3]; missionNamespace setVariable ["WFBE_C_PLAYERS_SKILL_SOLDIER_UNITS_MAX", 6]; //--- Skill (Soldiers), have more units than the others. missionNamespace setVariable ["WFBE_C_PLAYERS_SQUADS_MAX_PLAYERS", 4]; //--- One player squad may contain up to x players. missionNamespace setVariable ["WFBE_C_PLAYERS_SQUADS_REQUEST_TIMEOUT", 100]; //--- Time delay after which an unanswered request "fades". missionNamespace setVariable ["WFBE_C_PLAYERS_SQUADS_REQUEST_DELAY", 120]; //--- Time delay between each potential squad hops. // missionNamespace setVariable ["WFBE_C_PLAYERS_SQUADS_REQUEST_DELAY", 10]; //--- Time delay between each potential squad hops. missionNamespace setVariable ["WFBE_C_PLAYERS_SUPPLY_TRUCKS_DELIVERY_RANGE", 30]; //--- Supply Trucks (Clients) delivery range. missionNamespace setVariable ["WFBE_C_PLAYERS_SUPPLY_TRUCKS_DELIVERY_FUNDS_COEF", 4]; //--- Funds awarded to a client for a delivery (SV * coef). missionNamespace setVariable ["WFBE_C_PLAYERS_SUPPORT_PARATROOPERS_DELAY", 1200]; //--- Paratroopers Call Interval. missionNamespace setVariable ["WFBE_C_PLAYERS_UAV_SPOTTING_DELAY", 20]; //--- Interval between each uav spotting routine. missionNamespace setVariable ["WFBE_C_PLAYERS_UAV_SPOTTING_DETECTION", 0.21]; //--- UAV will reveal each targets that it knows about this value (0-4) missionNamespace setVariable ["WFBE_C_PLAYERS_UAV_SPOTTING_RANGE", 1100]; //--- Max Range of the UAV spotting. //--- Respawn. if (isNil {missionNamespace getVariable "WFBE_C_RESPAWN_CAMPS_MODE"}) then {missionNamespace setVariable ["WFBE_C_RESPAWN_CAMPS_MODE", 2]}; //--- Respawn Camps (0: Disabled, 1: Classic [from town center], 2: Enhanced [from nearby camps]). if (isNil {missionNamespace getVariable "WFBE_C_RESPAWN_CAMPS_RANGE"}) then {missionNamespace setVariable ["WFBE_C_RESPAWN_CAMPS_RANGE", 550]}; //--- How far a player need to be from a town to spawn at camps. if (isNil {missionNamespace getVariable "WFBE_C_RESPAWN_CAMPS_RULE_MODE"}) then {missionNamespace setVariable ["WFBE_C_RESPAWN_CAMPS_RULE_MODE", 2]}; //--- Respawn Camps Rule (0: Disabled, 1: West | East, 2: West | East | Resistance). missionNamespace setVariable ["WFBE_C_RESPAWN_CAMPS_SAFE_RADIUS", 50]; if (isNil {missionNamespace getVariable "WFBE_C_RESPAWN_DELAY"}) then {missionNamespace setVariable ["WFBE_C_RESPAWN_DELAY", 10]}; //--- Respawn Delay (Players/AI). if (isNil {missionNamespace getVariable "WFBE_C_RESPAWN_LEADER"}) then {missionNamespace setVariable ["WFBE_C_RESPAWN_LEADER", 2]}; //--- Allow leader respawn (0: Disabled, 1: Enabled, 2: Enabled but default gear). if (isNil {missionNamespace getVariable "WFBE_C_RESPAWN_MASH"}) then {missionNamespace setVariable ["WFBE_C_RESPAWN_MASH", 2]}; //--- Allow mash respawn (0: Disabled, 1: Enabled, 2: Enabled but default gear). if (isNil {missionNamespace getVariable "WFBE_C_RESPAWN_MOBILE"}) then {missionNamespace setVariable ["WFBE_C_RESPAWN_MOBILE", 2]}; //--- Allow mobile respawn (0: Disabled, 1: Enabled, 2: Enabled but default gear). if (isNil {missionNamespace getVariable "WFBE_C_RESPAWN_PENALTY"}) then {missionNamespace setVariable ["WFBE_C_RESPAWN_PENALTY", 4]}; //--- Respawn Penalty (0: None, 1: Remove All, 2: Pay full gear price, 3: Pay 1/2 gear price, 4: pay 1/4 gear price, 5: Charge on Mobile). missionNamespace setVariable ["WFBE_C_RESPAWN_RANGE_LEADER", 50]; missionNamespace setVariable ["WFBE_C_RESPAWN_RANGES", [200, 300, 400, 500]]; //--- Structures. if (isNil {missionNamespace getVariable "WFBE_C_STRUCTURES_ANTIAIRRADAR"}) then {missionNamespace setVariable ["WFBE_C_STRUCTURES_ANTIAIRRADAR", 1]}; missionNamespace setVariable ["WFBE_C_STRUCTURES_ANTIAIRRADAR_DETECTION", 100]; missionNamespace setVariable ["WFBE_C_STRUCTURES_BUILDING_DEGRADATION", 1]; //--- Degredation of the building in time during a repair phase (over 100). if (isNil {missionNamespace getVariable "WFBE_C_STRUCTURES_COLLIDING"}) then {missionNamespace setVariable ["WFBE_C_STRUCTURES_COLLIDING", 0]}; missionNamespace setVariable ["WFBE_C_STRUCTURES_COMMANDCENTER_RANGE", 50000]; //--- Command Center Range. if (isNil {missionNamespace getVariable "WFBE_C_STRUCTURES_CONSTRUCTION_MODE"}) then {missionNamespace setVariable ["WFBE_C_STRUCTURES_CONSTRUCTION_MODE", 0]}; //--- Structures construction mode (0: Time, 1: Workers). missionNamespace setVariable ["WFBE_C_STRUCTURES_DAMAGES_REDUCTION", 6]; //--- Building Damage Reduction (Current damage given / x, 1 = normal). if (isNil {missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_COST_DEPLOY"}) then {missionNamespace setVariable ["WFBE_C_STRUCTURES_HQ_COST_DEPLOY", 100]}; //--- HQ Deploy / Mobilize Price. if (isNil {missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_RANGE_DEPLOYED"}) then {missionNamespace setVariable ["WFBE_C_STRUCTURES_HQ_RANGE_DEPLOYED", 120]}; //--- HQ Deploy / Mobilize Price. if (isNil {missionNamespace getVariable "WFBE_C_STRUCTURES_MAX"}) then {missionNamespace setVariable ["WFBE_C_STRUCTURES_MAX", 3]}; missionNamespace setVariable ["WFBE_C_STRUCTURES_RUINS", if (WF_A2_Vanilla) then {"Land_budova4_ruins"} else {"Land_Mil_Barracks_i_ruins_EP1"}]; //--- Ruins model. missionNamespace setVariable ["WFBE_C_STRUCTURES_SALE_DELAY", 240]; //--- Building is sold after x seconds. missionNamespace setVariable ["WFBE_C_STRUCTURES_SALE_PERCENT", 40]; //--- When a structure is sold, x% of supply goes back to the side. missionNamespace setVariable ["WFBE_C_STRUCTURES_SERVICE_POINT_RANGE", 50]; missionNamespace setVariable ["WFBE_C_STRUCTURES_WORKERS_DISTANCE", 30]; //--- Minimal Distance in order to start building. missionNamespace setVariable ["WFBE_C_STRUCTURES_WORKERS_MAX", 10]; //--- Maximum Workers per side. missionNamespace setVariable ["WFBE_C_STRUCTURES_WORKERS_PRICE", 500]; //--- Worker Price missionNamespace setVariable ["WFBE_C_STRUCTURES_WORKERS_RADIUS", 650]; //--- Maximal Traveling distance. missionNamespace setVariable ["WFBE_C_STRUCTURES_WORKERS_RATIO", 2]; //--- Build Speed Ratio. missionNamespace setVariable ["WFBE_C_STRUCTURES_WORKERS_REPAIR", 0.0075]; //--- Health Point fixed during a repair. if (WF_A2_Vanilla) then { missionNamespace setVariable ["WFBE_C_BASE_COIN_DISTANCE_MIN", 8]; missionNamespace setVariable ["WFBE_C_BASE_COIN_GRADIENT_MAX", 4]; } else { missionNamespace setVariable ["WFBE_C_BASE_COIN_DISTANCE_MIN", 24]; missionNamespace setVariable ["WFBE_C_BASE_COIN_GRADIENT_MAX", 4]; }; //--- Towns. if (isNil {missionNamespace getVariable "WFBE_C_TOWNS_AMOUNT"}) then {missionNamespace setVariable ["WFBE_C_TOWNS_AMOUNT", 3]}; //--- Amount of towns (0: Very small, 1: Small, 2: Medium, 3: Large, 4: Full). if (isNil {missionNamespace getVariable "WFBE_C_TOWNS_BUILD_PROTECTION_RANGE"}) then {missionNamespace setVariable ["WFBE_C_TOWNS_BUILD_PROTECTION_RANGE", 450]}; //--- Prevent construction in towns within that radius. missionNamespace setVariable ["WFBE_C_TOWNS_CAPTURE_ASSIST", 400]; if (isNil {missionNamespace getVariable "WFBE_C_TOWNS_CAPTURE_MODE"}) then {missionNamespace setVariable ["WFBE_C_TOWNS_CAPTURE_MODE", 1]}; //--- Town capture mode (0: Normal, 1: Threshold, 2: All Camps). missionNamespace setVariable ["WFBE_C_TOWNS_CAPTURE_RANGE", 40]; missionNamespace setVariable ["WFBE_C_TOWNS_CAPTURE_RATE", 1]; missionNamespace setVariable ["WFBE_C_TOWNS_CAPTURE_THRESHOLD_RANGE", 50]; if (isNil {missionNamespace getVariable "WFBE_C_TOWNS_CONQUEST_MODE"}) then {missionNamespace setVariable ["WFBE_C_TOWNS_CONQUEST_MODE", 0]}; //--- Town Conquest mode (0: None, 1: Territoriality). if (isNil {missionNamespace getVariable "WFBE_C_TOWNS_DEFENDER"}) then {missionNamespace setVariable ["WFBE_C_TOWNS_DEFENDER", 1]}; //--- Town defender Difficulty (0: Disabled, 1: Light, 2: Medium, 3: Hard, 4: Insane). if (isNil {missionNamespace getVariable "WFBE_C_TOWNS_OCCUPATION"}) then {missionNamespace setVariable ["WFBE_C_TOWNS_OCCUPATION", 1]}; //--- Town occupation Difficulty (0: Disabled, 1: Light, 2: Medium, 3: Hard, 4: Insane). missionNamespace setVariable ["WFBE_C_TOWNS_DEFENSE_RANGE", 30]; missionNamespace setVariable ["WFBE_C_TOWNS_DETECTION_RANGE_ACTIVE_COEF", 1]; //--- Town activation range once active (town range * coef) missionNamespace setVariable ["WFBE_C_TOWNS_DETECTION_RANGE_COEF", 1]; //--- Town activation range while idling (town range * coef) missionNamespace setVariable ["WFBE_C_TOWNS_DETECTION_RANGE_AIR", 200]; //--- Detect Air if > x if (isNil {missionNamespace getVariable "WFBE_C_TOWNS_GEAR"}) then {missionNamespace setVariable ["WFBE_C_TOWNS_GEAR", 1]}; //--- Buy Gear From (0: None, 1: Camps, 2: Depot, 3: Camps & Depot). missionNamespace setVariable ["WFBE_C_TOWNS_MORTARS_SCAN", 60]; //--- Scan the area around a target for friends and enemies. missionNamespace setVariable ["WFBE_C_TOWNS_MORTARS_INTERVAL", 200]; //--- AI Mortars may fire each x seconds. missionNamespace setVariable ["WFBE_C_TOWNS_MORTARS_PRECOGNITION", 25]; //--- AI Mortars may fire at a target by precognition. This value is a percentage. missionNamespace setVariable ["WFBE_C_TOWNS_MORTARS_RANGE_MAX", 750]; //--- AI Mortars may not fire at target further than that range (Cannot be higher than artillery core values). missionNamespace setVariable ["WFBE_C_TOWNS_MORTARS_RANGE_MIN", 125]; //--- AI Mortars may not fire at targets within that range (Cannot be lower than artillery core values). missionNamespace setVariable ["WFBE_C_TOWNS_MORTARS_SPLASH_RANGE", 60]; //--- AI Mortar firing area of effect. missionNamespace setVariable ["WFBE_C_TOWNS_PATROL_HOPS", 5]; //--- Amount of Waypoints given to the AI Patrol in towns (Higher is wider). missionNamespace setVariable ["WFBE_C_TOWNS_PATROL_RANGE", 500]; if (isNil {missionNamespace getVariable "WFBE_C_TOWNS_PATROLS"}) then {missionNamespace setVariable ["WFBE_C_TOWNS_PATROLS", 0]}; //--- Enable town to town patrols. missionNamespace setVariable ["WFBE_C_TOWNS_PURCHASE_RANGE", 500]; if (isNil {missionNamespace getVariable "WFBE_C_TOWNS_REINFORCEMENT_DEFENDER"}) then {missionNamespace setVariable ["WFBE_C_TOWNS_REINFORCEMENT_DEFENDER", 0]}; //--- Enable towns defender reinforcement. if (isNil {missionNamespace getVariable "WFBE_C_TOWNS_REINFORCEMENT_OCCUPATION"}) then {missionNamespace setVariable ["WFBE_C_TOWNS_REINFORCEMENT_OCCUPATION", 0]}; //--- Enable towns occupation reinforcement. if (isNil {missionNamespace getVariable "WFBE_C_TOWNS_STARTING_MODE"}) then {missionNamespace setVariable ["WFBE_C_TOWNS_STARTING_MODE", 0]}; //--- Town starting mode (0: Resistance, 1: 50% blu, 50% red, 2: Nearby Towns, 3: Random). missionNamespace setVariable ["WFBE_C_TOWNS_SUPPLY_LEVELS_TIME", [1, 2, 3, 4, 5]]; missionNamespace setVariable ["WFBE_C_TOWNS_SUPPLY_LEVELS_TRUCK", [5, 6, 7, 8, 10]]; missionNamespace setVariable ["WFBE_C_TOWNS_UNITS_INACTIVE", 300]; //--- Remove units in town if no enemies are to be found within that time. missionNamespace setVariable ["WFBE_C_TOWNS_UNITS_WAYPOINTS", 9]; if (isNil {missionNamespace getVariable "WFBE_C_TOWNS_VEHICLES_LOCK_DEFENDER"}) then {missionNamespace setVariable ["WFBE_C_TOWNS_VEHICLES_LOCK_DEFENDER", 1]}; //--- Lock the vehicles of the defender side. //--- Units. if (isNil {missionNamespace getVariable "WFBE_C_UNITS_BALANCING"}) then {missionNamespace setVariable ["WFBE_C_UNITS_BALANCING", 1]}; //--- Enable Units weaponry balancing. if (isNil {missionNamespace getVariable "WFBE_C_UNITS_BOUNTY"}) then {missionNamespace setVariable ["WFBE_C_UNITS_BOUNTY", 1]}; //--- Enable Units bounty on kill. missionNamespace setVariable ["WFBE_C_UNITS_BOUNTY_COEF", 0.25]; //--- Bounty is the unit price * coef. missionNamespace setVariable ["WFBE_C_UNITS_BOUNTY_ASSISTANCE_COEF", 0.5]; //--- Bounty assistance is the unit price * coef * assist coef. if (isNil {missionNamespace getVariable "WFBE_C_UNITS_CLEAN_TIMEOUT"}) then {missionNamespace setVariable ["WFBE_C_UNITS_CLEAN_TIMEOUT", 300]}; //--- Lifespan of a dead body. missionNamespace setVariable ["WFBE_C_UNITS_COUNTERMEASURE_PLANES", 64]; missionNamespace setVariable ["WFBE_C_UNITS_COUNTERMEASURE_CHOPPERS", 32]; missionNamespace setVariable ["WFBE_C_UNITS_CREW_COST", 120]; if (isNil {missionNamespace getVariable "WFBE_C_UNITS_EMPTY_TIMEOUT"}) then {missionNamespace setVariable ["WFBE_C_UNITS_EMPTY_TIMEOUT", 1200]}; //--- Lifespan of an empty vehicle. switch (true) do { case (WF_A2_Vanilla): { if (isNil {missionNamespace getVariable "WFBE_C_UNITS_FACTION_EAST"}) then {missionNamespace setVariable ["WFBE_C_UNITS_FACTION_EAST", 1]}; //--- East Faction. if (isNil {missionNamespace getVariable "WFBE_C_UNITS_FACTION_GUER"}) then {missionNamespace setVariable ["WFBE_C_UNITS_FACTION_GUER", 0]}; //--- Guerilla Faction. if (isNil {missionNamespace getVariable "WFBE_C_UNITS_FACTION_WEST"}) then {missionNamespace setVariable ["WFBE_C_UNITS_FACTION_WEST", 1]}; //--- West Faction. missionNamespace setVariable ["WFBE_C_UNITS_FACTIONS_EAST", ['INS','RU']]; //--- East Factions. missionNamespace setVariable ["WFBE_C_UNITS_FACTIONS_GUER", ['GUE']]; //--- Guerilla Factions. missionNamespace setVariable ["WFBE_C_UNITS_FACTIONS_WEST", ['CDF','USMC']]; //--- West Factions. }; case (WF_A2_Arrowhead): { if (isNil {missionNamespace getVariable "WFBE_C_UNITS_FACTION_EAST"}) then {missionNamespace setVariable ["WFBE_C_UNITS_FACTION_EAST", 0]}; //--- East Faction. if (isNil {missionNamespace getVariable "WFBE_C_UNITS_FACTION_GUER"}) then {missionNamespace setVariable ["WFBE_C_UNITS_FACTION_GUER", 1]}; //--- Guerilla Faction. if (isNil {missionNamespace getVariable "WFBE_C_UNITS_FACTION_WEST"}) then {missionNamespace setVariable ["WFBE_C_UNITS_FACTION_WEST", 0]}; //--- West Faction. missionNamespace setVariable ["WFBE_C_UNITS_FACTIONS_EAST", ['TKA']]; //--- East Factions. missionNamespace setVariable ["WFBE_C_UNITS_FACTIONS_GUER", ['PMC','TKGUE']]; //--- Guerilla Factions. missionNamespace setVariable ["WFBE_C_UNITS_FACTIONS_WEST", ['OFrP']]; //--- West Factions. }; case (WF_A2_CombinedOps): { if (isNil {missionNamespace getVariable "WFBE_C_UNITS_FACTION_EAST"}) then {missionNamespace setVariable ["WFBE_C_UNITS_FACTION_EAST", 1]}; //--- East Faction. if (isNil {missionNamespace getVariable "WFBE_C_UNITS_FACTION_GUER"}) then {missionNamespace setVariable ["WFBE_C_UNITS_FACTION_GUER", 2]}; //--- Guerilla Faction. if (isNil {missionNamespace getVariable "WFBE_C_UNITS_FACTION_WEST"}) then {missionNamespace setVariable ["WFBE_C_UNITS_FACTION_WEST", 0]}; //--- West Faction. missionNamespace setVariable ["WFBE_C_UNITS_FACTIONS_EAST", ['INS','RU','TKA']]; //--- East Factions. missionNamespace setVariable ["WFBE_C_UNITS_FACTIONS_GUER", ['GUE','PMC','TKGUE']]; //--- Guerilla Factions. missionNamespace setVariable ["WFBE_C_UNITS_FACTIONS_WEST", ['OFrP']]; //--- West Factions. }; }; if (isNil {missionNamespace getVariable "WFBE_C_UNITS_KAMOV_DISABLED"}) then {missionNamespace setVariable ["WFBE_C_UNITS_KAMOV_DISABLED", 0]}; //--- Enable Kamov. if (isNil {missionNamespace getVariable "WFBE_C_UNITS_PRICING"}) then {missionNamespace setVariable ["WFBE_C_UNITS_PRICING", 0]}; //--- Price Focus. (0: Default, 1: Infantry, 2: Tanks, 3: Air). missionNamespace setVariable ["WFBE_C_UNITS_PURCHASE_RANGE", 150]; missionNamespace setVariable ["WFBE_C_UNITS_PURCHASE_GEAR_RANGE", 150]; missionNamespace setVariable ["WFBE_C_UNITS_PURCHASE_GEAR_MOBILE_RANGE", 5]; missionNamespace setVariable ["WFBE_C_UNITS_PURCHASE_GEAR_MOBILE_AI_RANGE", 45]; missionNamespace setVariable ["WFBE_C_UNITS_PURCHASE_HANGAR_RANGE", 50]; missionNamespace setVariable ["WFBE_C_UNITS_REPAIR_TRUCK_RANGE", 40]; if (isNil {missionNamespace getVariable "WFBE_C_UNITS_RESTRICT_AIR"}) then {missionNamespace setVariable ["WFBE_C_UNITS_RESTRICT_AIR", 0]}; //--- Advanced Aircraft restriction. missionNamespace setVariable ["WFBE_C_UNITS_SALVAGER_SCAVENGE_RANGE", 20]; missionNamespace setVariable ["WFBE_C_UNITS_SALVAGER_SCAVENGE_RATIO", 30]; //--- Salvager Sell %. missionNamespace setVariable ["WFBE_C_UNITS_SKILL_DEFAULT", 0.7]; missionNamespace setVariable ["WFBE_C_UNITS_SUPPORT_RANGE", 70]; //--- Action range for repair/rearm/refuel. missionNamespace setVariable ["WFBE_C_UNITS_SUPPORT_HEAL_PRICE", 125]; missionNamespace setVariable ["WFBE_C_UNITS_SUPPORT_HEAL_TIME", 25]; missionNamespace setVariable ["WFBE_C_UNITS_SUPPORT_REARM_PRICE", 14]; missionNamespace setVariable ["WFBE_C_UNITS_SUPPORT_REARM_TIME", 30]; missionNamespace setVariable ["WFBE_C_UNITS_SUPPORT_REFUEL_PRICE", 16]; missionNamespace setVariable ["WFBE_C_UNITS_SUPPORT_REFUEL_TIME", 20]; missionNamespace setVariable ["WFBE_C_UNITS_SUPPORT_REPAIR_PRICE", 2]; missionNamespace setVariable ["WFBE_C_UNITS_SUPPORT_REPAIR_TIME", 40]; if (isNil {missionNamespace getVariable "WFBE_C_UNITS_TOWN_PURCHASE"}) then {missionNamespace setVariable ["WFBE_C_UNITS_TOWN_PURCHASE", 1]}; //--- Allow AIs to be bought from depots. if (isNil {missionNamespace getVariable "WFBE_C_UNITS_TRACK_INFANTRY"}) then {missionNamespace setVariable ["WFBE_C_UNITS_TRACK_INFANTRY", 1]}; //--- Track units on map (infantry). if (isNil {missionNamespace getVariable "WFBE_C_UNITS_TRACK_LEADERS"}) then {missionNamespace setVariable ["WFBE_C_UNITS_TRACK_LEADERS", 1]}; //--- Track playable Team Leaders on map (infantry). //--- Victory. missionNamespace setVariable ["WFBE_C_VICTORY_THREEWAY", 0]; //--- Victory Condition (0: Side a vs Side b [supremacy] minus defender). missionNamespace setVariable ["WFBE_C_VICTORY_THREEWAY_LOCATION_SWAP", 300]; //--- When the defender loose depending on victory conditions, startup locations become available for respawn with a rotation (to prevent spawn camping). //--- Overall mission coloration. missionNamespace setVariable ["WFBE_C_WEST_COLOR", "ColorBlue"]; missionNamespace setVariable ["WFBE_C_EAST_COLOR", "ColorRed"]; missionNamespace setVariable ["WFBE_C_GUER_COLOR", "ColorGreen"]; missionNamespace setVariable ["WFBE_C_CIV_COLOR", "ColorYellow"]; missionNamespace setVariable ["WFBE_C_UNKNOWN_COLOR", "ColorBlack"]; //---- THOSE VARIABLES ARE SPECIAL, THOSE ARE ONLY USED AFTER THAT THE PREVIOUS ARE DEFINED. //--- Build area (Radius/Height). missionNamespace setVariable ["WFBE_C_BASE_COIN_AREA_HQ_DEPLOYED", [missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_RANGE_DEPLOYED", 25]]; missionNamespace setVariable ["WFBE_C_BASE_COIN_AREA_HQ_UNDEPLOYED", [(missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_RANGE_DEPLOYED") / 2, 25]]; missionNamespace setVariable ["WFBE_C_BASE_COIN_AREA_REPAIR", [45, 10]]; //--- Pick a fast time rate. if ((missionNamespace getVariable "WFBE_C_ENVIRONMENT_FAST_TIME") != 0) then {missionNamespace setVariable ["WFBE_C_ENVIRONMENT_FAST_TIME", (missionNamespace getVariable "WFBE_C_ENVIRONMENT_FAST_TIME_VALUES") select (missionNamespace getVariable "WFBE_C_ENVIRONMENT_FAST_TIME")]}; //--- Max structures. if (isNil {missionNamespace getVariable "WFBE_C_STRUCTURES_MAX_BARRACKS"}) then {missionNamespace setVariable ["WFBE_C_STRUCTURES_MAX_BARRACKS", missionNamespace getVariable "WFBE_C_STRUCTURES_MAX"]}; if (isNil {missionNamespace getVariable "WFBE_C_STRUCTURES_MAX_LIGHT"}) then {missionNamespace setVariable ["WFBE_C_STRUCTURES_MAX_LIGHT", missionNamespace getVariable "WFBE_C_STRUCTURES_MAX"]}; if (isNil {missionNamespace getVariable "WFBE_C_STRUCTURES_MAX_COMMANDCENTER"}) then {missionNamespace setVariable ["WFBE_C_STRUCTURES_MAX_COMMANDCENTER", missionNamespace getVariable "WFBE_C_STRUCTURES_MAX"]}; if (isNil {missionNamespace getVariable "WFBE_C_STRUCTURES_MAX_HEAVY"}) then {missionNamespace setVariable ["WFBE_C_STRUCTURES_MAX_HEAVY", missionNamespace getVariable "WFBE_C_STRUCTURES_MAX"]}; if (isNil {missionNamespace getVariable "WFBE_C_STRUCTURES_MAX_AIRCRAFT"}) then {missionNamespace setVariable ["WFBE_C_STRUCTURES_MAX_AIRCRAFT", missionNamespace getVariable "WFBE_C_STRUCTURES_MAX"]}; if (isNil {missionNamespace getVariable "WFBE_C_STRUCTURES_MAX_SERVICEPOINT"}) then {missionNamespace setVariable ["WFBE_C_STRUCTURES_MAX_SERVICEPOINT", (missionNamespace getVariable "WFBE_C_STRUCTURES_MAX")*2]}; //--- Apply a towns unit coeficient. missionNamespace setVariable ["WFBE_C_TOWNS_UNITS_COEF", switch (missionNamespace getVariable "WFBE_C_TOWNS_OCCUPATION") do {case 1: {1}; case 2: {1.5}; case 3: {2}; case 4: {2.5}; default {1}}]; missionNamespace setVariable ["WFBE_C_TOWNS_UNITS_DEFENDER_COEF", switch (missionNamespace getVariable "WFBE_C_TOWNS_DEFENDER") do {case 1: {1}; case 2: {1.5}; case 3: {2}; case 4: {2.5}; default {1}}]; ["INITIALIZATION", "Init_CommonConstants.sqf: Constants are defined."] Call WFBE_CO_FNC_LogContent;/* Neighbors town per world. */ switch (toLower(worldName)) do { case "chernarus": { switch (missionNamespace getVariable "WFBE_C_TOWNS_AMOUNT") do { case 4: {//--- Full. Kamenka setVariable ["wfbe_town_neighbors", [Pavlovo, Komarovo]]; Komarovo setVariable ["wfbe_town_neighbors", [Pavlovo, Komarovo, Bor, Chernogorsk]]; Chernogorsk setVariable ["wfbe_town_neighbors", [Komarovo, Nadezhdino, Prigorodki, Kozlovka]]; Prigorodki setVariable ["wfbe_town_neighbors", [Chernogorsk, Elektrozavodsk]]; Elektrozavodsk setVariable ["wfbe_town_neighbors", [Prigorodki, Chernogorsk, Pusta, Kamyshovo, Staroye]]; Kamyshovo setVariable ["wfbe_town_neighbors", [Tulga, Elektrozavodsk]]; Tulga setVariable ["wfbe_town_neighbors", [Kamyshovo, Msta, Solnichniy]]; Solnichniy setVariable ["wfbe_town_neighbors", [Kamyshovo, Msta, Nizhnoye, Dolina]]; Nizhnoye setVariable ["wfbe_town_neighbors", [Solnichniy, Berezino]]; Berezino setVariable ["wfbe_town_neighbors", [Nizhnoye, Khelm, Orlovets, Dubrovka]]; Khelm setVariable ["wfbe_town_neighbors", [Berezino, Krasnostav]]; Krasnostav setVariable ["wfbe_town_neighbors", [Olsha, Gvozdno, Dubrovka, Khelm]]; Olsha setVariable ["wfbe_town_neighbors", [Krasnostav]]; Gvozdno setVariable ["wfbe_town_neighbors", [Krasnostav, Grishino]]; Grishino setVariable ["wfbe_town_neighbors", [Gvozdno, Petrovka, Kabanino]]; Petrovka setVariable ["wfbe_town_neighbors", [Grishino, Lopatino]]; Lopatino setVariable ["wfbe_town_neighbors", [Petrovka, Vybor, Pustoshka]]; Myshkino setVariable ["wfbe_town_neighbors", [Sosnovka, Pustoshka]]; Sosnovka setVariable ["wfbe_town_neighbors", [Zelenogorsk, Myshkino, Pustoshka]]; Zelenogorsk setVariable ["wfbe_town_neighbors", [Sosnovka, Pogorevka, Kozlovka, Pavlovo]]; Pavlovo setVariable ["wfbe_town_neighbors", [Kamenka, Komarovo, Bor, Zelenogorsk]]; Bor setVariable ["wfbe_town_neighbors", [Pavlovo, Kozlovka, Komarovo]]; Kozlovka setVariable ["wfbe_town_neighbors", [Bor, Zelenogorsk, Nadezhdino, Chernogorsk]]; Nadezhdino setVariable ["wfbe_town_neighbors", [Kozlovka, Chernogorsk]]; Mogilevka setVariable ["wfbe_town_neighbors", [Vyshnoye, Pusta]]; Pusta setVariable ["wfbe_town_neighbors", [Mogilevka, Elektrozavodsk]]; Staroye setVariable ["wfbe_town_neighbors", [Shakhovka, Guglovo, Elektrozavodsk, Msta]]; Msta setVariable ["wfbe_town_neighbors", [Staroye, Tulga, Solnichniy]]; Dolina setVariable ["wfbe_town_neighbors", [Staroye, Solnichniy, Solnichniy, Polana]]; Orlovets setVariable ["wfbe_town_neighbors", [Berezino, Polana]]; Polana setVariable ["wfbe_town_neighbors", [Orlovets, Polana, Dolina, Shakhovka, Gorka]]; Gorka setVariable ["wfbe_town_neighbors", [Dubrovka, NovySobor, Polana]]; Dubrovka setVariable ["wfbe_town_neighbors", [Gorka, Krasnostav, Berezino]]; Shakhovka setVariable ["wfbe_town_neighbors", [Staroye, Polana]]; Guglovo setVariable ["wfbe_town_neighbors", [Staroye, NovySobor]]; NovySobor setVariable ["wfbe_town_neighbors", [Guglovo, Gorka, StarySobor]]; Vyshnoye setVariable ["wfbe_town_neighbors", [StarySobor, Gorka]]; StarySobor setVariable ["wfbe_town_neighbors", [Vyshnoye, NovySobor, Kabanino, Pogorevka]]; Pulkovo setVariable ["wfbe_town_neighbors", [Pogorevka]]; Pogorevka setVariable ["wfbe_town_neighbors", [Pulkovo, Zelenogorsk, StarySobor]]; Kabanino setVariable ["wfbe_town_neighbors", [Vybor, Grishino, StarySobor]]; Vybor setVariable ["wfbe_town_neighbors", [Kabanino, Lopatino, Pustoshka]]; Pustoshka setVariable ["wfbe_town_neighbors", [Kabanino, Vybor, Myshkino]]; }; case 3: {//--- Large. Chernogorsk setVariable ["wfbe_town_neighbors", [Komarovo, Nadezhdino, Elektrozavodsk]]; Elektrozavodsk setVariable ["wfbe_town_neighbors", [Chernogorsk, Pusta, Kamyshovo, Staroye]]; Kamyshovo setVariable ["wfbe_town_neighbors", [Solnichniy, Elektrozavodsk]]; Solnichniy setVariable ["wfbe_town_neighbors", [Kamyshovo, Dolina, Berezino]]; Berezino setVariable ["wfbe_town_neighbors", [Solnichniy, Dubrovka]]; Krasnostav setVariable ["wfbe_town_neighbors", [Gvozdno, Dubrovka]]; Dubrovka setVariable ["wfbe_town_neighbors", [Gorka, Krasnostav, Berezino]]; Gorka setVariable ["wfbe_town_neighbors", [Dubrovka, Polana, StarySobor]]; Polana setVariable ["wfbe_town_neighbors", [Gorka, Dolina]]; Dolina setVariable ["wfbe_town_neighbors", [Polana, Solnichniy, Staroye]]; Staroye setVariable ["wfbe_town_neighbors", [Elektrozavodsk, Dolina, Guglovo]]; Pusta setVariable ["wfbe_town_neighbors", [Elektrozavodsk, Mogilevka]]; Guglovo setVariable ["wfbe_town_neighbors", [Staroye, StarySobor]]; Mogilevka setVariable ["wfbe_town_neighbors", [Pusta, Vyshnoye, Nadezhdino]]; Vyshnoye setVariable ["wfbe_town_neighbors", [Mogilevka, StarySobor]]; StarySobor setVariable ["wfbe_town_neighbors", [Mogilevka, Kabanino, Gorka, Pogorevka, Guglovo]]; Gvozdno setVariable ["wfbe_town_neighbors", [Grishino, Krasnostav]]; Grishino setVariable ["wfbe_town_neighbors", [Kabanino, Petrovka, Gvozdno]]; Kabanino setVariable ["wfbe_town_neighbors", [StarySobor, Grishino, Vybor]]; Petrovka setVariable ["wfbe_town_neighbors", [Grishino, Lopatino]]; Lopatino setVariable ["wfbe_town_neighbors", [Vybor, Petrovka]]; Vybor setVariable ["wfbe_town_neighbors", [Lopatino, Myshkino, Kabanino]]; Pogorevka setVariable ["wfbe_town_neighbors", [StarySobor, Zelenogorsk]]; Myshkino setVariable ["wfbe_town_neighbors", [Zelenogorsk, Lopatino]]; Nadezhdino setVariable ["wfbe_town_neighbors", [Mogilevka, Chernogorsk]]; Zelenogorsk setVariable ["wfbe_town_neighbors", [Pogorevka, Myshkino, Pavlovo]]; Pavlovo setVariable ["wfbe_town_neighbors", [Zelenogorsk, Komarovo]]; Komarovo setVariable ["wfbe_town_neighbors", [Pavlovo, Chernogorsk]]; }; case 2: {//--- Medium. Chernogorsk setVariable ["wfbe_town_neighbors", [Komarovo, Nadezhdino, Kozlovka, Mogilevka]]; Mogilevka setVariable ["wfbe_town_neighbors", [Vyshnoye, Nadezhdino]]; Vyshnoye setVariable ["wfbe_town_neighbors", [Mogilevka, StarySobor]]; StarySobor setVariable ["wfbe_town_neighbors", [Mogilevka, Kabanino, Pogorevka]]; Grishino setVariable ["wfbe_town_neighbors", [Kabanino]]; Kabanino setVariable ["wfbe_town_neighbors", [StarySobor, Grishino, Vybor]]; Lopatino setVariable ["wfbe_town_neighbors", [Vybor]]; Vybor setVariable ["wfbe_town_neighbors", [Lopatino, Pustoshka, Kabanino]]; Myshkino setVariable ["wfbe_town_neighbors", [Zelenogorsk, Pustoshka]]; Nadezhdino setVariable ["wfbe_town_neighbors", [Mogilevka, Chernogorsk]]; Zelenogorsk setVariable ["wfbe_town_neighbors", [Pogorevka, Myshkino, Pavlovo, Kozlovka]]; Pavlovo setVariable ["wfbe_town_neighbors", [Zelenogorsk, Komarovo, Kamenka]]; Komarovo setVariable ["wfbe_town_neighbors", [Pavlovo, Chernogorsk, Kamenka]]; Kamenka setVariable ["wfbe_town_neighbors", [Pavlovo, Komarovo]]; Kozlovka setVariable ["wfbe_town_neighbors", [Zelenogorsk, Nadezhdino, Chernogorsk]]; Pustoshka setVariable ["wfbe_town_neighbors", [Vybor, Myshkino]]; Pogorevka setVariable ["wfbe_town_neighbors", [StarySobor, Zelenogorsk]]; }; case 1: {//--- Small. Berezino setVariable ["wfbe_town_neighbors", [Khelm, Orlovets, Dubrovka]]; Orlovets setVariable ["wfbe_town_neighbors", [Berezino, Polana]]; Polana setVariable ["wfbe_town_neighbors", [Gorka, Orlovets]]; Gorka setVariable ["wfbe_town_neighbors", [Dubrovka, Polana]]; Dubrovka setVariable ["wfbe_town_neighbors", [Gorka, Krasnostav, Berezino]]; Khelm setVariable ["wfbe_town_neighbors", [Berezino, Krasnostav]]; Krasnostav setVariable ["wfbe_town_neighbors", [Olsha, Gvozdno, Dubrovka, Khelm]]; Olsha setVariable ["wfbe_town_neighbors", [Krasnostav]]; Gvozdno setVariable ["wfbe_town_neighbors", [Krasnostav]]; }; case 0: {//--- Extra Small. Grishino setVariable ["wfbe_town_neighbors", [Kabanino]]; Kabanino setVariable ["wfbe_town_neighbors", [Grishino, Vybor]]; Vybor setVariable ["wfbe_town_neighbors", [Kabanino, Lopatino, Pustoshka]]; Pustoshka setVariable ["wfbe_town_neighbors", [Vybor]]; Lopatino setVariable ["wfbe_town_neighbors", [Vybor]]; }; }; }; case "takistan": { switch (missionNamespace getVariable "WFBE_C_TOWNS_AMOUNT") do { case 4: {//--- Full. Landay setVariable ["wfbe_town_neighbors", [ChakChak]]; ChakChak setVariable ["wfbe_town_neighbors", [Landay, Sakhee, Huzrutimam]]; Huzrutimam setVariable ["wfbe_town_neighbors", [ChakChak, Sultansafee]]; Sultansafee setVariable ["wfbe_town_neighbors", [Huzrutimam, LoyManara]]; LoyManara setVariable ["wfbe_town_neighbors", [Sultansafee, Jaza, Chardarakht, Timurkalay]]; Jaza setVariable ["wfbe_town_neighbors", [LoyManara]]; Chardarakht setVariable ["wfbe_town_neighbors", [LoyManara, HazarBagh]]; HazarBagh setVariable ["wfbe_town_neighbors", [Chardarakht]]; Timurkalay setVariable ["wfbe_town_neighbors", [LoyManara, Anar, Garmarud]]; Garmarud setVariable ["wfbe_town_neighbors", [Timurkalay, Garmsar, Imarat]]; Garmsar setVariable ["wfbe_town_neighbors", [Garmarud]]; Imarat setVariable ["wfbe_town_neighbors", [Garmarud, Zavarak, Bastam]]; Zavarak setVariable ["wfbe_town_neighbors", [Imarat, Karachinar, Ravanay]]; Karachinar setVariable ["wfbe_town_neighbors", [Zavarak]]; Ravanay setVariable ["wfbe_town_neighbors", [Zavarak]]; Bastam setVariable ["wfbe_town_neighbors", [Imarat, Falar, Rasman, Gospandi]]; Rasman setVariable ["wfbe_town_neighbors", [Shamali, Bastam]]; Shamali setVariable ["wfbe_town_neighbors", [Rasman, Nagara]]; Nagara setVariable ["wfbe_town_neighbors", [Nur, Gospandi, Shamali]]; Nur setVariable ["wfbe_town_neighbors", [Nagara]]; Gospandi setVariable ["wfbe_town_neighbors", [Nagara, Bastam, Mulladoost]]; Mulladoost setVariable ["wfbe_town_neighbors", [Gospandi, Khushab]]; Khushab setVariable ["wfbe_town_neighbors", [Mulladoost, Jilavur, Shukurkalay]]; Shukurkalay setVariable ["wfbe_town_neighbors", [Khushab, Jilavur, Chaman]]; Chaman setVariable ["wfbe_town_neighbors", [Shukurkalay]]; Jilavur setVariable ["wfbe_town_neighbors", [Shukurkalay, Khushab, Sakhee, FeeruzAbad]]; Sakhee setVariable ["wfbe_town_neighbors", [Jilavur, ChakChak, FeeruzAbad, Kakaru]]; Kakaru setVariable ["wfbe_town_neighbors", [Sakhee, Anar, FeeruzAbad]]; FeeruzAbad setVariable ["wfbe_town_neighbors", [Jilavur, Anar, Kakaru, Falar, Sakhee]]; Anar setVariable ["wfbe_town_neighbors", [FeeruzAbad, Kakaru, Timurkalay, Falar]]; Falar setVariable ["wfbe_town_neighbors", [FeeruzAbad, Anar, Bastam]]; }; case 3: {//--- Large. Landay setVariable ["wfbe_town_neighbors", [ChakChak]]; ChakChak setVariable ["wfbe_town_neighbors", [Landay, Sakhee, Huzrutimam]]; Huzrutimam setVariable ["wfbe_town_neighbors", [ChakChak, Sultansafee]]; Sultansafee setVariable ["wfbe_town_neighbors", [Huzrutimam, LoyManara]]; LoyManara setVariable ["wfbe_town_neighbors", [Sultansafee, Jaza, Chardarakht, Timurkalay]]; Jaza setVariable ["wfbe_town_neighbors", [LoyManara]]; Chardarakht setVariable ["wfbe_town_neighbors", [LoyManara]]; Timurkalay setVariable ["wfbe_town_neighbors", [LoyManara, Anar, Garmarud]]; Garmarud setVariable ["wfbe_town_neighbors", [Timurkalay, Garmsar, Imarat]]; Garmsar setVariable ["wfbe_town_neighbors", [Garmarud]]; Imarat setVariable ["wfbe_town_neighbors", [Garmarud, Zavarak, Bastam]]; Zavarak setVariable ["wfbe_town_neighbors", [Imarat, Karachinar, Ravanay]]; Karachinar setVariable ["wfbe_town_neighbors", [Zavarak]]; Ravanay setVariable ["wfbe_town_neighbors", [Zavarak]]; Bastam setVariable ["wfbe_town_neighbors", [Imarat, Falar, Rasman, Gospandi]]; Rasman setVariable ["wfbe_town_neighbors", [Shamali, Bastam]]; Shamali setVariable ["wfbe_town_neighbors", [Rasman, Nagara]]; Nagara setVariable ["wfbe_town_neighbors", [Gospandi, Shamali]]; Gospandi setVariable ["wfbe_town_neighbors", [Nagara, Bastam, Mulladoost]]; Mulladoost setVariable ["wfbe_town_neighbors", [Gospandi, Khushab]]; Khushab setVariable ["wfbe_town_neighbors", [Mulladoost, Jilavur, Shukurkalay]]; Shukurkalay setVariable ["wfbe_town_neighbors", [Khushab, Jilavur]]; Jilavur setVariable ["wfbe_town_neighbors", [Shukurkalay, Khushab, Sakhee, FeeruzAbad]]; Sakhee setVariable ["wfbe_town_neighbors", [Jilavur, ChakChak, FeeruzAbad, Kakaru]]; Kakaru setVariable ["wfbe_town_neighbors", [Sakhee, Anar, FeeruzAbad]]; FeeruzAbad setVariable ["wfbe_town_neighbors", [Jilavur, Anar, Kakaru, Falar, Sakhee]]; Anar setVariable ["wfbe_town_neighbors", [FeeruzAbad, Kakaru, Timurkalay, Falar]]; Falar setVariable ["wfbe_town_neighbors", [FeeruzAbad, Anar, Bastam]]; }; case 2: {//--- Medium. Garmarud setVariable ["wfbe_town_neighbors", [Imarat]]; Imarat setVariable ["wfbe_town_neighbors", [Garmarud, Bastam]]; Bastam setVariable ["wfbe_town_neighbors", [Imarat, Falar, Rasman, Gospandi]]; Rasman setVariable ["wfbe_town_neighbors", [Shamali, Bastam]]; Shamali setVariable ["wfbe_town_neighbors", [Rasman, Nagara]]; Nagara setVariable ["wfbe_town_neighbors", [Gospandi, Shamali]]; Gospandi setVariable ["wfbe_town_neighbors", [Nagara, Bastam, Mulladoost]]; Mulladoost setVariable ["wfbe_town_neighbors", [Gospandi, Khushab]]; Khushab setVariable ["wfbe_town_neighbors", [Mulladoost]]; Falar setVariable ["wfbe_town_neighbors", [Anar, Bastam]]; }; case 1: {//--- Small. Bastam setVariable ["wfbe_town_neighbors", [Imarat, Falar, Rasman, Gospandi]]; Rasman setVariable ["wfbe_town_neighbors", [Shamali, Bastam]]; Shamali setVariable ["wfbe_town_neighbors", [Rasman, Nagara]]; Nagara setVariable ["wfbe_town_neighbors", [Gospandi, Shamali]]; Nur setVariable ["wfbe_town_neighbors", [Nagara]]; Gospandi setVariable ["wfbe_town_neighbors", [Nagara, Bastam, Mulladoost]]; }; case 0: {//--- Extra Small. Huzrutimam setVariable ["wfbe_town_neighbors", [LoyManara]]; LoyManara setVariable ["wfbe_town_neighbors", [Chardarakht, Huzrutimam]]; Chardarakht setVariable ["wfbe_town_neighbors", [LoyManara]]; }; }; }; case "zargabad": { Qeslaq setVariable ["wfbe_town_neighbors", [Shahbaz, Zargabad]]; Shahbaz setVariable ["wfbe_town_neighbors", [Qeslaq, Yarum]]; Yarum setVariable ["wfbe_town_neighbors", [Zargabad, Shahbaz]]; Zargabad setVariable ["wfbe_town_neighbors", [Qeslaq, Yarum, Nango, Azizajt, HazarBagh]]; Azizajt setVariable ["wfbe_town_neighbors", [Zargabad, Nango]]; Nango setVariable ["wfbe_town_neighbors", [Zargabad, Azizajt, HazarBagh]]; HazarBagh setVariable ["wfbe_town_neighbors", [Zargabad, Nango]]; }; default { //--- Not found, prevent territorial mode from going on and swap back to standard mode. missionNamespace setVariable ['WFBE_C_TOWNS_CONQUEST_MODE', 0]; }; };/* Parameters Constants Initialization, use the same class name for parameter as variables. */ for '_i' from 0 to (count (missionConfigFile >> "Params"))-1 do { _paramName = (configName ((missionConfigFile >> "Params") select _i)); _value = if (isMultiplayer) then {paramsArray select _i} else {getNumber (missionConfigFile >> "Params" >> _paramName >> "default")}; missionNamespace setVariable [_paramName, _value]; }; ["INITIALIZATION", "Init_Parameters.sqf: Parameters are defined."] Call WFBE_CO_FNC_LogContent;/* Global Public Variable Functions Initialization, this file initialize PVF files for both the client and the server */ scriptName "Common\Init\Init_PublicVariables.sqf"; Private ['_clientCommandPV','_l','_serverCommandPV']; _l = ["RequestVehicleLock"]; _l = _l + ["RequestChangeScore"]; _l = _l + ["RequestCommanderVote"]; _l = _l + ["RequestStructure"]; _l = _l + ["RequestDefense"]; _l = _l + ["RequestJoin"]; _l = _l + ["RequestMHQRepair"]; _l = _l + ["RequestSpecial"]; _l = _l + ["RequestTeamUpdate"]; _l = _l + ["RequestUpgrade"]; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_CONSTRUCTION_MODE") == 1) then {_l = _l + ["RequestWorker"]}; _serverCommandPV = _l; _l = ["AllCampsCaptured"]; _l = _l + ["AwardBounty"]; _l = _l + ["CampCaptured"]; _l = _l + ["ChangeScore"]; _l = _l + ["HandleSpecial"]; _l = _l + ["LocalizeMessage"]; _l = _l + ["SetTask"]; _l = _l + ["SetVehicleLock"]; _l = _l + ["TownCaptured"]; //--- Secondary Missions handlers. if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_MISSIONS") > 0) then {_l = _l + ['SECOPS_ReceiveMission']}; _clientCommandPV = _l; { Call Compile Format["CLTFNC%1 = compile preprocessFileLineNumbers 'Client\PVFunctions\%1.sqf'", _x]; if (!isServer || local player) then {Format['WFBE_PVF_%1',_x] addPublicVariableEventHandler {(_this select 1) Spawn WFBE_CL_FNC_HandlePVF}}; } forEach _clientCommandPV; { Call Compile Format["SRVFNC%1 = compile preprocessFileLineNumbers 'Server\PVFunctions\%1.sqf'", _x]; if (isServer) then {Format['WFBE_PVF_%1',_x] addPublicVariableEventHandler {(_this select 1) Spawn WFBE_SE_FNC_HandlePVF}}; } forEach _serverCommandPV; ["INITIALIZATION", Format ["Init_PublicVariables.sqf : Initialized [%1] Client PV and [%2] Server PV", count _clientCommandPV, count _serverCommandPV]] Call WFBE_CO_FNC_LogContent;Private ['_camps','_marker','_town','_townDubbingName','_townMaxSV','_townName','_townRange','_townStartSV','_townValue']; _town = _this select 0; _townName = _this select 1; _townDubbingName = _this select 2; _townStartSV = _this select 3; _townMaxSV = _this select 4; _townValue = _this select 5; _townRange = if (count _this > 6) then {_this select 6} else {550}; waitUntil {townModeSet && WFBE_Parameters_Ready}; //--- Prevent the isServer bug on the client. sleep (1.2 + random 0.2); //todo, opposite system. if ((str _town) in TownTemplate) exitWith { ["INITIALIZATION",Format ["Init_Town.sqf : Removed town [%1] since it is disabled.", _townName]] Call WFBE_CO_FNC_LogContent; _town setVariable ["wfbe_inactive", true]; }; if (isNull _town || (_town getVariable "wfbe_inactive")) exitWith {}; _town setVariable ["name",_townName]; _town setVariable ["range",_townRange]; _town setVariable ["startingSupplyValue",_townStartSV]; _town setVariable ["maxSupplyValue",_townMaxSV]; waitUntil {commonInitComplete}; if (isServer) then { Private ["_camps", "_defenses", "_mortars", "_synced"]; //--- Get the camps and defenses, note that synchronizedObjects only work for the server. _camps = []; _defenses = []; _mortars = []; for '_i' from 0 to count(synchronizedObjects _town)-1 do { _synced = (synchronizedObjects _town) select _i; if (typeOf _synced == "LocationLogicCamp" && (missionNamespace getVariable "WFBE_C_CAMPS_CREATE") > 0) then { [_camps, _synced] Call WFBE_CO_FNC_ArrayPush; _synced setVariable ["town", _town]; }; if (!isNil {_synced getVariable "wfbe_defense_kind"}) then {[_defenses, _synced] Call WFBE_CO_FNC_ArrayPush}; if (!isNil {_synced getVariable "wfbe_mortar"}) then {[_mortars, _synced] Call WFBE_CO_FNC_ArrayPush}; }; ["INITIALIZATION",Format ["Init_Town.sqf : Found [%1] synchronized camps in [%2].", count _camps, _town getVariable "name"]] Call WFBE_CO_FNC_LogContent; if (count _mortars > 0) then { _town setVariable ["wfbe_town_mortars", _mortars]; ["INITIALIZATION",Format ["Init_Town.sqf : Found [%1] synchronized mortar position in [%2].", count _mortars, _town getVariable "name"]] Call WFBE_CO_FNC_LogContent; }; _town setVariable ["camps", _camps, true]; _town setVariable ["wfbe_town_defenses", _defenses]; _townDubbingName = switch (_townDubbingName) do { case "+": {_townName};//--- Copy the name. case "": {"Town"};//--- Unknown name, apply Town dubbing. default {_townDubbingName};//--- Input name. }; _town setVariable ["wfbe_town_dubbing", _townDubbingName]; //--- Conquest mode variables. if ((missionNamespace getVariable "WFBE_C_TOWNS_CONQUEST_MODE") == 1) then { {_town setVariable [Format["wfbe_town_capturable_%1", _x], false]} forEach WFBE_PRESENTSIDES; }; //--- Don't pause. [_town,_townStartSV,_townRange] Spawn { Private ["_camps","_defenses","_marker","_size","_town","_townModel","_townRange","_townStartSV"]; _town = _this select 0; _townStartSV = _this select 1; _townRange = _this select 2; _camps = _town getVariable "camps"; //--- Models creation. _townModel = createVehicle [missionNamespace getVariable "WFBE_C_DEPOT", getPos _town, [], 0, "NONE"]; _townModel setDir ((getDir _town) + (missionNamespace getVariable "WFBE_C_DEPOT_RDIR")); _townModel setPos (getPos _town); _townModel addEventHandler ["handleDamage", {false}]; if (isNil {_town getVariable "sideID"}) then {_town setVariable ["sideID",WFBE_DEFENDER_ID,true]}; _town setVariable ["supplyValue",_townStartSV,true]; sleep (random 1); waitUntil {serverInitComplete}; { Private ["_camp_health","_flag","_pos","_townModel"]; //--- Create the camp model. _townModel = createVehicle [missionNamespace getVariable "WFBE_C_CAMP", getPos _x, [], 0, "NONE"]; _townModel setDir ((getDir _x) + (missionNamespace getVariable "WFBE_C_CAMP_RDIR")); _townModel setPos (getPos _x); //--- Maybe we want to make the camp stronger. _camp_health = missionNamespace getVariable "WFBE_C_CAMP_HEALTH_COEF"; if !(isNil '_camp_health') then { _townModel addEventHandler ["handleDamage",{((getDammage (_this select 0))+(_this select 2))/(missionNamespace getVariable "WFBE_C_CAMP_HEALTH_COEF")}]; }; //--- Create a flag near the camp location & position it. _flag = createVehicle [missionNamespace getVariable "WFBE_C_CAMP_FLAG", getPos _x, [], 0, "NONE"]; _flag setPos (_x modelToWorld (missionNamespace getVariable "WFBE_C_CAMP_FLAG_POS")); _x setVariable ["wfbe_flag", _flag]; //--- Initialize the camp. if (isNil {_x getVariable "sideID"}) then {_x setVariable ["sideID",WFBE_DEFENDER_ID,true]}; if (isNil {_x getVariable "supplyValue"}) then { waitUntil {!isNil {_town getVariable "supplyValue"}}; _x setVariable ["supplyValue", _town getVariable "supplyValue", true]; _x setVariable ["wfbe_camp_bunker", _townModel, true]; [_x, _town, _flag] ExecFSM 'Server\FSM\server_town_camp.fsm'; }; ["INITIALIZATION",Format ["Init_Town.sqf : Initialized Camp in [%1].", _town getVariable "name"]] Call WFBE_CO_FNC_LogContent; } forEach _camps; waitUntil {townInitServer}; //--- Prepare the default defenses (if needed and if occupation or defender is present). if ((_town getVariable "sideID") != WFBE_C_UNKNOWN_ID && ((missionNamespace getVariable "WFBE_C_TOWNS_DEFENDER") > 0 || (missionNamespace getVariable "WFBE_C_TOWNS_OCCUPATION") > 0)) then { [_town, (_town getVariable "sideID") Call WFBE_CO_FNC_GetSideFromID, -1] Call WFBE_SE_FNC_ManageTownDefenses; }; //--- Town SV & Control script. [_town, _townRange] ExecFSM 'Server\FSM\server_town.fsm'; //--- Main Town AI Script if ((missionNamespace getVariable "WFBE_C_TOWNS_DEFENDER") > 0 || (missionNamespace getVariable "WFBE_C_TOWNS_OCCUPATION") > 0) then {[_town, _townRange] ExecFSM 'Server\FSM\server_town_ai.fsm'}; }; }; //--- Client camp init. if (local player) then { waitUntil {!isNil {_town getVariable "camps"}}; _camps = _town getVariable "camps"; for '_i' from 0 to count(_camps)-1 do { _camp = _camps select _i; _camp setVariable ["wfbe_camp_marker", Format ["WFBE_%1_CityMarker_Camp%2", str _town, _i]]; _camp setVariable ["town", _town]; }; ["INITIALIZATION",Format ["Init_Town.sqf : (Client) Initialized Camps [%1] for town [%2].", count _camps, _townName]] Call WFBE_CO_FNC_LogContent; }; //--- UPSMON Area Definition. if ((missionNamespace getVariable "WFBE_C_MODULE_UPSMON") > 0) then { _marker = Format['UPSMON_TOWN_%1',str _town]; createMarkerLocal [_marker, getPos _town]; _marker setMarkerColorLocal "ColorBlue"; _marker setMarkerShapeLocal "RECTANGLE"; _marker setMarkerBrushLocal "BORDER"; _size = missionNamespace getVariable "WFBE_C_MODULES_UPSMON_TOWN_AREA"; _marker setMarkerSizeLocal [_size select 0,_size select 1]; _marker setMarkerAlphaLocal 0; }; ["INITIALIZATION",Format ["Init_Town.sqf : Initialized town [%1].", _townName]] Call WFBE_CO_FNC_LogContent; towns = towns + [_town];/* Town mode initialization. the town that have to be removed need to be stored on the desired variable over WF_Logic. If those ain't set, the full town setting will be used. Custom templates can be added bellow. Chernarus Template (WF_Logic init field): this setVariable ["Towns_RemovedXSmall",["Zelenogorsk","Dolina","StarySobor","Myshkino","Chernogorsk","Dubrovka","Pogorevka","Bor","Staroye","Pulkovo","Khelm","Kamyshovo","Pavlovo","Nadezhdino","Mogilevka","Vyshnoye","Berezino","Krasnostav","Gorka","Elektrozavodsk","Msta","Komarovo","Petrovka","Shakhovka","Prigorodki","Olsha","Orlovets","Nizhnoye","Solnichniy","Tulga","Kozlovka","Polana","Kamenka","Gvozdno","NovySobor","Pusta","Guglovo"]]; this setVariable ["Towns_RemovedSmall",["Zelenogorsk","Dolina","StarySobor","Lopatino","Myshkino","Chernogorsk","Pogorevka","Bor","Kabanino","Staroye","Pulkovo","Kamyshovo","Vybor","Pavlovo","Nadezhdino","Grishino","Mogilevka","Vyshnoye","Elektrozavodsk","Msta","Komarovo","Petrovka","Shakhovka","Prigorodki","Nizhnoye","Solnichniy","Tulga","Kozlovka","Pustoshka","Kamenka","NovySobor","Pusta","Guglovo"]]; this setVariable ["Towns_RemovedMedium",["Dolina","Dubrovka","Bor","Staroye","Elektrozavodsk","Berezino","Krasnostav","Pulkovo","Khelm","Kamyshovo","Vyshnoye","Gorka","Msta","Petrovka","Shakhovka","Prigorodki","Olsha","Orlovets","Nizhnoye","Solnichniy","Tulga","Polana","Gvozdno","NovySobor","Pusta","Guglovo","Sosnovka"]]; this setVariable ["Towns_RemovedLarge",["Bor","Pulkovo","Khelm","Msta","Shakhovka","Prigorodki","Olsha","Orlovets","Nizhnoye","Tulga","Kozlovka","Pustoshka","Kamenka","NovySobor","Sosnovka"]]; */ Private ['_towns','_value']; waitUntil {WFBE_Parameters_Ready}; TownTemplate = []; switch (missionNamespace getVariable "WFBE_C_TOWNS_AMOUNT") do { case 0: {TownTemplate = WF_Logic getVariable "Towns_RemovedXSmall"}; case 1: {TownTemplate = WF_Logic getVariable "Towns_RemovedSmall"}; case 2: {TownTemplate = WF_Logic getVariable "Towns_RemovedMedium"}; case 3: {TownTemplate = WF_Logic getVariable "Towns_RemovedLarge"}; //--- case 4 = full. useless. /* Add your templates here ! Custom templates can be added here, just set a new variable with the towns to remove in WF_Logic and add your template name/value in the parameter class - WF_Logic: this setVariable ["myRemovedTowns",["Chernogorsk","Pavlovo","Zelenogorsk"]]; - parameter (Add it at the end!!!): class townsAmount { title = "$STR_WF_PARAMETER_TownsAmount"; values[] = {0,1,2,3,4,5}; texts[] = {"Extra Small","Small","Medium","Large","Full","MyOwnTemplate"}; default = 3; }; - Init_TownMode.sqf (Here!): case 5: {TownTemplate = WF_Logic getVariable "myRemovedTowns"} As a result, Chernogorsk, Pavlovo and Zelenogorsk will be removed. */ }; if (isNil "TownTemplate") then {TownTemplate = []};//--- The field is not defined, we use the default island setting. _towns = [0,0,0] nearEntities [["LocationLogicDepot"], 100000]; totalTowns = (count _towns) - (count TownTemplate); townModeSet = true; ["INITIALIZATION", Format["Init_TownMode.sqf: Towns mode initialization is done for island [%1].",worldName]] Call WFBE_CO_FNC_LogContent;Private ["_towns"]; waitUntil {townModeSet}; //--- Get all of the city logics. _towns = [0,0,0] nearEntities [["LocationLogicDepot"], 100000]; //--- Await for a proper initialization. { waitUntil {!isNil {_x getVariable "sideID"} || !isNil {_x getVariable "wfbe_inactive"}}; } forEach _towns; townInit = true; ["INITIALIZATION", "Init_Towns.sqf: Towns initialization is done."] Call WFBE_CO_FNC_LogContent;/* Initialize a unit for clients (JIP Compatible). */ Private ["_get","_isMan","_logik","_side","_sideID","_unit","_unit_kind","_upgrades"]; _unit = _this select 0; _sideID = _this select 1; _unit_kind = typeOf _unit; if !(alive _unit) exitWith {}; //--- Abort if the unit is null or dead. waitUntil {commonInitComplete}; //--- Wait for the common part. _side = (_sideID) Call GetSideFromID; _logik = (_side) Call WFBE_CO_FNC_GetSideLogic; waitUntil {!isNil {_logik getVariable "wfbe_upgrades"}}; _upgrades = (_side) Call WFBE_CO_FNC_GetSideUpgrades; // --- [Generic Vehicle initialization] (Run on all clients AND server) if (_unit isKindOf "Tank" || _unit isKindOf "Car") then { if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_IRSMOKE") > 0) then { //--- IR Smoke if ((_upgrades select WFBE_UP_IRSMOKE) > 0) then { //--- Make sure that the unit is defined in IRS_Init and that the upgrade is available. _get = missionNamespace getVariable Format ["%1_IRS", _unit_kind]; if !(isNil '_get') then { _unit setVariable ["wfbe_irs_flares", _get select 1, true]; _unit addEventHandler ["incomingMissile", {_this spawn WFBE_CO_MOD_IRS_OnIncomingMissile}]; }; }; }; }; if !(local player) exitWith {}; //--- We don't need the server to process it. waitUntil {clientInitComplete}; //--- Wait for the client part. sleep 2; //--- Wait a bit. _isMan = if (_unit isKindOf 'Man') then {true} else {false}; // --- [Generic Vehicle initialization] (Run on all clients) if (_unit_kind in Zeta_Lifter) then { //--- Units that can lift vehicles. if (_upgrades select WFBE_UP_AIRLIFT > 0) then {_unit addAction [localize "STR_WF_Lift", 'Client\Module\ZetaCargo\Zeta_Hook.sqf']}; }; if (_unit_kind in (missionNamespace getVariable Format['WFBE_%1REPAIRTRUCKS',sideJoinedText])) then { //--- Repair Trucks. //--- Build action. _unit addAction [localize 'STR_WF_BuildMenu_Repair','Client\Action\Action_BuildRepair.sqf', [], 99, false, true, '', Format['side player == side _target && alive _target && player distance _target <= %1', missionNamespace getVariable 'WFBE_C_UNITS_REPAIR_TRUCK_RANGE']]; if ((missionNamespace getVariable "WFBE_C_CAMPS_CREATE") > 0) then { //--- Repair camps. _unit addAction [localize 'STR_WF_Repair_Camp','Client\Action\Action_RepairCamp.sqf', [], 97, false, true, '', 'alive _target']; }; if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_VICTORY_CONDITION") != 1) then { //--- Repair HQ Ability. //--- Repair MHQ action. _unit addAction [localize 'STR_WF_Repair_MHQ','Client\Action\Action_RepairMHQ.sqf', [], 98, false, true, '', 'alive _target']; }; }; if (_unit isKindOf "Ship") then { //--- Boats. //--- Push action. _unit addAction [localize "STR_WF_Push","Client\Action\Action_Push.sqf", [], 93, false, true, "", 'driver _target == _this && alive _target && speed _target < 30']; }; if (_unit isKindOf "Air") then { //--- Air units. if ((getNumber (configFile >> 'CfgVehicles' >> _unit_kind >> 'transportSoldier')) > 0) then { //--- Transporters only. //--- HALO action. _unit addAction ['HALO','Client\Action\Action_HALO.sqf', [], 97, false, true, '', Format['getPos _target select 2 >= %1 && alive _target', missionNamespace getVariable 'WFBE_C_PLAYERS_HALO_HEIGHT']]; //--- Cargo Eject action. _unit addAction [localize 'STR_WF_Cargo_Eject','Client\Action\Action_EjectCargo.sqf', [], 99, false, true, '', 'driver _target == _this && alive _target']; }; if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES") > 0 && WF_A2_Vanilla) then { //--- Use of a custom CM parameter (Vanilla Only). switch (missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES") do { case 1: { //--- Enabled with upgrades. if ((_upgrades select WFBE_UP_FLARESCM) > 0) then { (_unit) ExecVM 'Client\Module\CM\CM_Set.sqf'; _unit addEventHandler ['incomingMissile',{_this Spawn CM_Countermeasures}]; }; }; case 2: { //--- Enabled. (_unit) ExecVM 'Client\Module\CM\CM_Set.sqf'; _unit addEventHandler ['incomingMissile',{_this Spawn CM_Countermeasures}]; }; }; }; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_ANTIAIRRADAR") > 0) then { //--- AAR Tracking. if (sideJoined != _side) then { //--- Track the unit via AAR System, skip if the unit side is the same as the player one. [_unit, _side] ExecVM 'Common\Common_AARadarMarkerUpdate.sqf'; }; }; if (_unit isKindOf "Plane") then { //--- Planes. _unit addAction [localize "STR_WF_TaxiReverse","Client\Action\Action_TaxiReverse.sqf", [], 92, false, true, "", 'driver _target == _this && alive _target && speed _target < 4 && speed _target > -4 && getPos _target select 2 < 4']; }; }; if !(_isMan) then { //--- Vehicle Specific. if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_MISSILES_RANGE") != 0) then { //--- Max missile range. _unit addEventHandler ['incomingMissile', {_this Spawn HandleIncomingMissile}]; //--- Handle incoming missiles. }; if !(WF_A2_Vanilla) then { //--- Only run on non-vanilla versions. if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_THERMAL_IMAGING") < 2) then {Call Compile '_unit disableTIEquipment true;'}; //--- Call Compile the variable to prevent errors on Vanilla. }; }; // --- [Side specific initialization] (Run on the desired client team). if (sideID != _sideID) exitWith {}; Private ["_color","_markerName","_params","_size","_txt","_type"]; //--- Map Marker tracking. _type = "Vehicle"; _color = missionNamespace getVariable (Format ["WFBE_C_%1_COLOR", _side]); _size = [5,5]; _txt = ""; _params = []; unitMarker = unitMarker + 1; _markerName = Format ["unitMarker%1", unitMarker]; if (_isMan) then { //--- Man. _type = "mil_dot"; _size = [0.5,0.5]; if (group _unit == group player) then { _color = "ColorOrange"; _txt = (_unit) Call GetAIDigit; }; _params = [_type,_color,_size,_txt,_markerName,_unit,1,true,"DestroyedVehicle",_color,false,_side,[1,1]]; } else { //--- Vehicle. if (local _unit && isMultiplayer) then {_color = "ColorOrange"}; if (_unit_kind in (missionNamespace getVariable Format['WFBE_%1SUPPLYTRUCKS',str _side])) then {_type = "SupplyVehicle";_size = [1,1]};//--- Supply. if (_unit_kind in (missionNamespace getVariable Format['WFBE_%1REPAIRTRUCKS',str _side])) then {_type = "RepairVehicle"};//--- Repair. _params = [_type,_color,_size,_txt,_markerName,_unit,1,true,"DestroyedVehicle",_color,false,_side,[2,2]]; if (_unit == ((_side) Call WFBE_CO_FNC_GetSideHQ)) then {_color = "ColorOrange";_params = ['Headquarters',_color,[1,1],'','HQUndeployed',_unit,0.2,false,'','',false,_side]};//--- HQ. }; _params Spawn MarkerUpdate;/* ILLUM Handler, Battlefield light bringer */ Private ['_deployPos','_destination','_flare','_force','_shell','_targetToHit','_velocity']; _shell = _this select 0; _destination = _this select 1; _velocity = _this select 2; //--- 1KM Above. _destination set [2, 1000]; //--- Positionate the shell in the air. _shell setPos _destination; _targetToHit = objNull; //--- Fall straigh. _shell setVelocity [0,0,-_velocity]; //--- Wait before deploying. waitUntil {(getPos _shell select 2) < 310}; //--- Retrieve the shell position. _deployPos = getPos _shell; deleteVehicle _shell; //--- Deploy a Flare. _flare = "ARTY_Flare_Medium" createVehicle _deployPos; _flare setPos _deployPos;/* SADARM Handler, Armor Killer */ Private ['_altitude','_barrel','_burst','_chuteModel','_deployPos','_destination','_dir','_dx','_dy','_dz','_force','_hmag','_mag','_parachute','_projectile','_px','_py','_pz','_shell','_targetFound','_targets','_targetToHit','_ux','_uy','_uz','_v1','_velocity','_xoff','_yoff','_zcomp','_zoff']; _shell = _this select 0; _destination = _this select 1; _velocity = _this select 2; //--- 1KM Above. _destination set [2, 1000]; //--- Positionate the shell in the air. _shell setPos _destination; _targetToHit = objNull; //--- Fall straigh. _shell setVelocity [0,0,-_velocity]; //--- Wait before deploying. waitUntil {(getPos _shell select 2) < 600}; //--- Retrieve the shell position. _deployPos = getPos _shell; deleteVehicle _shell; //--- Deploy the model. _chuteModel = missionNamespace getVariable Format ["WFBE_%1PARACHUTE",sideJoined]; _parachute = _chuteModel createVehicle _deployPos; _parachute setPos _deployPos; _barrel = "Barrel4" createVehicle _deployPos; _barrel attachTo [_parachute,[0,0,0]]; //--- Free Fall Simulation with stabilization. waitUntil { _altitude = getPos _parachute select 2; _v1 = velocity _parachute; _parachute setVelocity [_v1 select 0, _v1 select 1, -_velocity]; (_altitude < 400); }; //--- Using BIS SADARM Script, improved. _targetFound = false; //--- Wait until either way the device find no target and fall bellow 10 meters or it find one or more targets. waitUntil { _deployPos = getPos _barrel; _px = _deployPos select 0; _py = _deployPos select 1; _pz = _deployPos select 2; //--- Awaits for the altitude. if (_pz < 275 and _pz > 75) then { //--- Retrieve an potential target list. _targets = _barrel nearEntities [["Car","Motorcycle","Tank","Ship","StaticCannon"], missionNamespace getVariable "WFBE_C_ARTILLERY_AMMO_RANGE_SADARM"]; if (count _targets > 0) then { _targetToHit = _targets select floor(random count _targets); sleep (random 3); _targetFound = true; }; }; sleep 0.2; (_pz < 10 or _targetFound); }; // Deploy attack munition if a target was found. if (_targetFound && alive _barrel) then { _deployPos = getPos _barrel; _px = _deployPos select 0; _py = _deployPos select 1; _pz = _deployPos select 2; deleteVehicle _barrel; deleteVehicle _parachute; // Create burst. _burst = "ARTY_SADARM_BURST" createVehicleLocal [_px, _py, _pz + 5]; _burst setPos [_px, _py, _pz + 5]; // Create projectile _projectile = "ARTY_SADARM_PROJO" createVehicleLocal [_px, _py, _pz + 5]; _projectile setPos [_px, _py, _pz + 5]; // Calculate direction _xoff = (getPos _targetToHit select 0) - _px; _yoff = (getPos _targetToHit select 1) - _py; _zoff = - _pz; _mag = sqrt(_xoff*_xoff + _yoff*_yoff + _zoff*_zoff); _dir = [_xoff/_mag, _yoff/_mag, _zoff/_mag]; _dx = _dir select 0; _dy = _dir select 1; _dz = _dir select 2; _hmag = sqrt(_dx*_dx + _dy*_dy); _zcomp = -_dz/_hmag; _ux = _zcomp*_dx; _uy = _zcomp*_dy; _uz = _hmag; //--- Positionate the projectile. _projectile setVectorDir _dir; _projectile setVectorUp [_ux,_uy,_uz]; _projectile setVelocity [(_dir select 0) * 300, (_dir select 1) * 300, (_dir select 2) * 300]; }; //--- Delete the model. deleteVehicle _barrel; if !(isNull _parachute) then {deleteVehicle _parachute};Private ["_lookPos","_vehicle"]; _vehicle = _this select 0; // Lower gun/missile racks. _lookPos = [(getPos _vehicle select 0) + sin(getDir _vehicle)*20, (getPos _vehicle select 1) + cos(getDir _vehicle)*20, (getPos _vehicle select 2) - 5]; if (alive (driver _vehicle)) then { {(driver _vehicle) enableAI _x} forEach ["MOVE","TARGET","AUTOTARGET"]; }; (gunner _vehicle) lookAt _lookPos;Private ['_vehicle']; _vehicle = _this select 0; if (alive (driver _vehicle)) then { (driver _vehicle) action ["engineOff", _vehicle]; {(driver _vehicle) enableAI _x} forEach ["MOVE","TARGET","AUTOTARGET"]; }; waitUntil {speed _vehicle < 1}; sleep 3;/* * Cipher Module * Author: Benny. * Description: Alphabetical functions such as sorting and string compare. */ /* Compare whether string A is greater than string B */ CIPHER_CompareString = { Private ["_aisgreater","_stringA","_stringB"]; _stringA = toArray(_this select 0); _stringB = toArray(_this select 1); _aisgreater = false; for '_i' from 0 to count(_stringA)-1 do { if (_i > count(_stringB)-1) exitWith {_aisgreater = true}; if ((_stringA select _i) != (_stringB select _i)) exitWith { _aisgreater = if ((_stringA select _i) > (_stringB select _i)) then {true} else {false}; }; }; _aisgreater; }; /* Swap Element A with Element B in an array. */ CIPHER_ArraySwap = { Private ["_array","_elea","_eleb","_posa","_posb"]; _array = _this select 0; _posa = _this select 1; _posb = _this select 2; _elea = _array select _posa; _eleb = _array select _posb; _array set [_posa, _eleb]; _array set [_posb, _elea]; _array; }; /* Reverse an array */ CIPER_ArrayReverse = { Private ["_array","_reversed","_u"]; _array = _this; _reversed = []; _u = 0; for '_i' from count(_array)-1 step -1 to 0 do { _reversed set [_u, _array select _i]; _u = _u + 1; }; _reversed }; /* Sort an array by alphabetical order, selection sort. */ CIPHER_SortArray = { Private['_auxArray','_list','_min','_reverse']; _list = _this select 0; _reverse = _this select 1; _auxArray = if (count _this > 2) then {+(_this select 2)} else {[]}; if (count _list == 0) exitWith {[]}; _isString = if (typeName(_list select 0) == typeName "") then {true} else {false}; for '_i' from 0 to (count _list)-1 do { _min = _i; for '_j' from _i+1 to (count _list)-1 do { if (_isString) then { if !([_list select _j, _list select _min] Call CIPHER_CompareString) then {_min = _j} } else { if ((_list select _j) < (_list select _min)) then {_min = _j}; }; }; if (_min != _i) then { _list = [_list, _i, _min] Call CIPHER_ArraySwap; if (count _auxArray > 0) then {_auxArray = [_auxArray, _i, _min] Call CIPHER_ArraySwap}; }; }; if (_reverse) then { _list = (_list) Call CIPER_ArrayReverse; if (count _auxArray > 0) then {_auxArray = (_auxArray) Call CIPER_ArrayReverse}; }; [_list, _auxArray] }; /* Sort an array by alphabetical order, selection sort. */ CIPHER_SortArrayIndex = { Private['_auxArray','_list','_min','_reverse']; _list = _this select 0; _auxArray = []; for '_i' from 0 to (count _list)-1 do {_auxArray set [_i, _i]}; if (count _list == 0) exitWith {[]}; _isString = if (typeName(_list select 0) == typeName "") then {true} else {false}; for '_i' from 0 to (count _list)-1 do { _min = _i; for '_j' from _i+1 to (count _list)-1 do { if (_isString) then { if !([_list select _j, _list select _min] Call CIPHER_CompareString) then {_min = _j} } else { if ((_list select _j) < (_list select _min)) then {_min = _j}; }; }; if (_min != _i) then { _list = [_list, _i, _min] Call CIPHER_ArraySwap; _auxArray = [_auxArray, _i, _min] Call CIPHER_ArraySwap; }; }; [_list, _auxArray] };/* Elements to sort etc ... */ _preformat = { Private ["_get","_output","_units"]; _units = _this; _output = []; for '_i' from 0 to count(_units)-1 do { _get = missionNamespace getVariable (_units select _i); if !(isNil "_get") then { _output set [_i, _get select QUERYUNITLABEL]; } else { _output set [_i, (_units select _i)]; }; }; _output }; _preformat_gear = { Private ["_content","_get","_output"]; _content = _this select 0; _prefix = if (count _this > 1) then {_this select 1} else {""}; _output = []; for '_i' from 0 to count(_content)-1 do { _get = missionNamespace getVariable Format ["%1%2",_prefix,(_content select _i)]; if !(isNil "_get") then { _output set [_i, _get select 1]; } else { _output set [_i, (_content select _i)]; }; }; _output }; //--- Sort Factions. { _content = missionNamespace getVariable Format["WFBE_%1%2FACTIONS",sideJoinedText,_x]; _sorted = ([_content, false] Call CIPHER_SortArray) select 0; missionNamespace setVariable [Format['WFBE_%1%2FACTIONS',sideJoinedText,_x], _sorted]; //--- While we're at it we set the default selected faction. _content = missionNamespace getVariable Format["WFBE_%1%2FACTIONS",sideJoinedText,_x]; _find = _content find (missionNamespace getVariable Format["WFBE_%1DEFAULTFACTION",sideJoinedText]); if (_find != -1) then { missionNamespace setVariable [Format["WFBE_%1%2CURRENTFACTIONSELECTED",sideJoinedText,_x], _find]; }; } forEach ["BARRACKS","LIGHT","HEAVY","AIRCRAFT","AIRPORT","DEPOT"]; //--- Sort Purchases (Default, name - asc). { _content = missionNamespace getVariable Format['WFBE_%1%2UNITS',sideJoinedText,_x]; _sorted = ([(_content) Call _preformat,false,_content] Call CIPHER_SortArray) select 1; missionNamespace setVariable [Format['WFBE_%1%2UNITS',sideJoinedText,_x], _sorted]; } forEach ["BARRACKS","LIGHT","HEAVY","AIRCRAFT","AIRPORT","DEPOT"]; //--- Sort Gear. { _content = missionNamespace getVariable Format ["WFBE_%1_%2", sideJoinedText, _x]; _sorted = ([[_content] Call _preformat_gear,false,_content] Call CIPHER_SortArray) select 1; missionNamespace setVariable [Format ["WFBE_%1_%2", sideJoinedText, _x], _sorted]; } forEach ["primary","secondary","pistols","equipment"]; _content = missionNamespace getVariable Format ["WFBE_%1_Magazines", sideJoinedText]; _sorted = ([[_content, "Mag_"] Call _preformat_gear,false,_content] Call CIPHER_SortArray) select 1; missionNamespace setVariable [Format ["WFBE_%1_Magazines", sideJoinedText], _sorted]; //--- Sort upgrades. _content = [+(missionNamespace getVariable "WFBE_C_UPGRADES_LABELS")] Call CIPHER_SortArrayIndex; missionNamespace setVariable ["WFBE_C_UPGRADES_SORTED", _content select 1];/* Create smoke at the desired location. */ Private ["_shell", "_source2", "_trails", "_wp"]; _shell = _this; sleep (1.5 + random 0.5); _trails = "#particlesource" createVehicleLocal getPosASL _shell; _trails setDropInterval 0.02; _trails setParticleParams [["\ca\Data\ParticleEffects\Universal\Universal", 16, 0, 1], "", "Billboard", 0.1, 1, [0,0,0], [0, 0, 7], 0, 15, 7.9, 0.075, [0.4], [[1, 1, 1, 1]], [0], 1, 0, "\CA\Data\ParticleEffects\SCRIPTS\WPTrail.sqf", "", _shell]; _trails setParticleRandom [0.1, [0.25, 0.25, 0], [15, 15, 7], 0, 0.15, [0, 0, 0, 0], 0, 0]; _wp = "#particlesource" createVehicleLocal getPosASL _shell; _wp setDropInterval 0.02; _wp setParticleParams [["\Ca\Data\Cl_basic.p3d", 1, 0, 1], "", "Billboard", 1, 10, [0,0,0], [0, 0, 0], 0, 10, 7.9, 0.075, [5, 10, 15,20], [[1, 1, 1, 1], [1, 1, 1, 0.5], [1, 1, 1, 0]], [0], 1, 0, "", "", _shell]; _wp setParticleRandom [4, [3, 3, 3], [0.1, 0.1, 0.1], 0, 0.25, [0, 0, 0, 0], 0, 0]; sleep 0.15; {deleteVehicle _x} forEach [_trails, _wp]; _source2 = "#particlesource" createVehicleLocal getPosASL _shell; _source2 setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 12, 8, 0], "", "Billboard", 1, 6, [0, 0, 0], [0, 0, 0.5], 0, 1.277, 1, 0.025, [0.5, 8, 12, 15], [[1, 1, 1, 1],[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 0]], [0.2], 1, 0.04, "", "", _shell]; _source2 setParticleRandom [2, [0.3, 0.3, 0.3], [1.5, 1.5, 1], 0, 0.2, [0, 0, 0, 0.1], 0, 0, 360]; _source2 setDropInterval 0.1; sleep (55 + random 3); deleteVehicle _source2; /*ArmA 2 smokscreen, by Maddmatt Uses code from VBS2 Smoke launcher by Philipp Pilhofer (raedor) & Andrew Barron */ Private ["_vehicle"]; _vehicle = _this; _shells = []; //Read values from config _smoke_count = getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "smokeLauncherGrenadeCount"); _smoke_velocity = getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "smokeLauncherVelocity"); _smoke_turret = getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "smokeLauncherOnTurret"); _smoke_angle = getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "smokeLauncherAngle"); _dir = direction _vehicle; if (_smoke_turret == 1 && (count weapons _vehicle) > 0) then { _dir = _vehicle weaponDirection ((weapons _vehicle) select 0); _dir = (((_dir select 0) atan2 (_dir select 1))+360)%360; }; _delta = _smoke_angle / _smoke_count; //degrees between grenades. _arc = _delta * (_smoke_count-1); //total arc to cover, in degrees //distance from vehicle center where grenades are created; base it on vertical height _initDist = (((boundingBox _vehicle) select 1) select 2) - (((boundingBox _vehicle) select 0) select 2); for "_i" from 0 to (_smoke_count - 1) do { //find starting parameters _Hdir = (_i * _delta) - (_arc / 2); //relative direction around vehicle _Vdir = 30; //angle of elevation. Temporary: launch all grenades at same angle //derive velocity _vH = _smoke_velocity * cos _Vdir; //horizontal component of velocity _vV = _smoke_velocity * sin _Vdir; //vertical component _Gvel = [_vH*sin (_Hdir+_dir), _vH*cos (_Hdir+_dir), _vV]; //initial grenade velocity //find starting position for grenades _pH = _initDist * cos _Vdir; //initial distance horizontally away from vehicle center to create grenade _pV = _initDist * sin _Vdir; //vertical distance //create / launch the grenade _smokeg = "SmokeShellVehicle" createVehicle (_vehicle modelToWorld [_pH * sin _Hdir, _pH * cos _Hdir, _pV]); _smokeg setVelocity _Gvel; _smokeg setVectorDir _Gvel; _shells = _shells + [_smokeg]; }; [nil, "HandleSpecial", ["irsmoke-createfx", _shells]] Call WFBE_CO_FNC_SendToClients; if (isMultiplayer) then {{_x Spawn WFBE_CO_MOD_IRS_CreateSmoke} forEach _shells}; sleep 55; {deleteVehicle _x} forEach _shells;/* Handle the missile before that it impact the vehicle, this is only triggered if the vehicle has some IR Smoke deployed. Note that the Missile has to be local to the machine that is executing this script. Uses modified IKE Shtora from A1. Parameters: - Vehicle - Missile - Ammo */ Private ["_ammo", "_get", "_maneuvrability", "_missile", "_missile_range", "_smokeshells", "_vehicle"]; _vehicle = _this select 0; _missile = _this select 1; _ammo = _this select 2; _missile_range = missionNamespace getVariable "WFBE_IRS_AUTO_DETECT_RANGE"; _get = missionNamespace getVariable Format ["%1_IRS", typeOf _vehicle]; //--- Wait until that the missile enter the operative area of the tank. waitUntil {_missile distance _vehicle < _missile_range}; if !(alive _missile) exitWith {}; //--- Attempt to get the IR Smoke grenade models deployed by the tank within the IR Smoke operative area. _smokeshells = (getPos _vehicle) nearObjects ["SmokeShellVehicle", missionNamespace getVariable "WFBE_IRS_AREA_OPERATING"]; if (count _smokeshells == 0) exitWith {}; if (random 100 <= (_get select 0)) then { //--- Deflect the missile. _maneuvrability = if (isNumber (configFile >> "CfgAmmo" >> _ammo >> "maneuvrability")) then {getNumber (configFile >> "CfgAmmo" >> _ammo >> "maneuvrability")} else {20}; _calculated = 0; while {(_missile distance _vehicle) > (round _calculated)} do { if (!alive _missile || !alive _vehicle) exitWith {}; _vm = velocity _missile; _vmx = (_vm select 0)+(random 10); _vmy = (_vm select 1)+(random 10); _vmz = (_vm select 2)+(random 10); _vh = velocity _vehicle; _vhx = (_vh select 0)^2; _vhy = (_vh select 1)^2; _vhz = (_vh select 2)^2; _vdx = _vhx - _vmx; _vdy = _vhy - _vmy; _vdz = _vhz - _vmz; _calculated = 25+(((_vdx^2) + (_vdy^2) + (_vdz))^(1/3)); if !(alive _missile) exitWith {}; }; _count = 0; while {_count < 10} do { if (!alive _missile || !alive _vehicle) exitWith {}; _dm = vectorDir _missile; _um = vectorUp _missile; _dmx = _dm select 0; _dmy = _dm select 1; _dmz = _dm select 2; _missile setVectorDirAndUp [[(_dmx + ((random _maneuvrability) - (_maneuvrability / 2)) / 30), (_dmy + ((random _maneuvrability) - (_maneuvrability / 2)) / 30), (_dmz + ((random _maneuvrability) - (_maneuvrability / 1.25)) / 30)], _um]; sleep 0.01; _count =_count +1; }; };/* IR Smoke system. */ WFBE_CO_MOD_IRS_CreateSmoke = Compile preprocessFileLineNumbers "Common\Module\IRS\IRS_CreateSmoke.sqf"; WFBE_CO_MOD_IRS_DeploySmoke = Compile preprocessFileLineNumbers "Common\Module\IRS\IRS_DeploySmoke.sqf"; WFBE_CO_MOD_IRS_HandleMissile = Compile preprocessFileLineNumbers "Common\Module\IRS\IRS_HandleMissile.sqf"; WFBE_CO_MOD_IRS_OnIncomingMissile = Compile preprocessFileLineNumbers "Common\Module\IRS\IRS_OnIncomingMissile.sqf"; missionNamespace setVariable ['WFBE_IRS_AREA_OPERATING', 35]; //--- IR Smoke will operate only if the vehicle is within x meters of a SmokeLauncher grenade. missionNamespace setVariable ['WFBE_IRS_AUTO_DETECT_RANGE', 200]; //--- IR Smoke missile smoke detection. missionNamespace setVariable ['WFBE_IRS_FLARE_DELAY', 60]; missionNamespace setVariable ['WFBE_IRS_MISSILE_CHECK_RANGE', 200]; //--- IR Smoke actions will be checked when the missile enter that range. //--- Initialize vehicles IRS (Type / Dodge Chance / IR Smoke deploy count). _u = [["AAV", 40, 2]]; _u = _u + [["BAF_FV510_W", 60, 3]]; _u = _u + [["BAF_FV510_D", 60, 3]]; _u = _u + [["BMP2_CDF", 40, 2]]; _u = _u + [["BMP2_Gue", 40, 2]]; _u = _u + [["BMP2_INS", 40, 2]]; _u = _u + [["BMP2_TK_EP1", 40, 2]]; _u = _u + [["BMP3", 55, 3]]; _u = _u + [["BTR90", 55, 2]]; _u = _u + [["LAV25", 55, 2]]; _u = _u + [["M1126_ICV_M2_EP1", 50, 1]]; _u = _u + [["M1126_ICV_mk19_EP1", 45, 1]]; _u = _u + [["M1129_MC_EP1", 50, 1]]; _u = _u + [["M1135_ATGMV_EP1", 50, 1]]; _u = _u + [["M1128_MGS_EP1", 50, 1]]; _u = _u + [["M1133_MEV_EP1", 50, 1]]; _u = _u + [["M1A1", 60, 4]]; _u = _u + [["M1A1_US_DES_EP1", 60, 4]]; _u = _u + [["M1A2_TUSK_MG", 65, 4]]; _u = _u + [["M1A2_US_TUSK_MG_EP1", 65, 4]]; _u = _u + [["M2A2_EP1", 55, 3]]; _u = _u + [["M2A3_EP1", 55, 3]]; _u = _u + [["M6_EP1", 60, 3]]; _u = _u + [["T72_CDF", 55, 4]]; _u = _u + [["T72_INS", 55, 4]]; _u = _u + [["T72_Gue", 55, 4]]; _u = _u + [["T72_RU", 55, 4]]; _u = _u + [["T72_TK_EP1", 55, 4]]; _u = _u + [["T90", 70, 4]]; //--- Only define the vehicle if it's defined in the core files and if it has smokes in config. (i.e -> "T90_IRS" = [65, 4]. { _type = _x select 0; if !(isNil {missionNamespace getVariable _type}) then { if (isNumber (configFile >> "CfgVehicles" >> _type >> "smokeLauncherGrenadeCount")) then { missionNamespace setVariable [Format["%1_IRS",_type], [_x select 1, _x select 2]]; }; }; } forEach _u;/* Whenever a missile is shot at the tank... */ Private ["_ammo","_lastFired","_projectile","_shooter","_vehicle"]; _vehicle = _this select 0; _ammo = _this select 1; _shooter = _this select 2; //--- Make sure that the target is alive. if (alive _vehicle) then { //--- Get the projectile. _projectile = nearestObject[_shooter, _ammo]; if (isNull _projectile) exitWith {}; //--- Only triggered upon IR Lock Ammo. if (getNumber(configFile >> "CfgAmmo" >> _ammo >> "irLock") == 1) then { //--- Vehicle specific. if (local _vehicle) then { if (alive driver _vehicle || alive gunner _vehicle || alive commander _vehicle) then { _lastFired = _vehicle getVariable "wfbe_irs_lastfired"; if (isNil '_lastFired') then {_lastFired = -100}; if ((_vehicle getVariable "wfbe_irs_flares") > 0 && (time - _lastFired > (missionNamespace getVariable "WFBE_IRS_FLARE_DELAY"))) then { (_vehicle) Spawn WFBE_CO_MOD_IRS_DeploySmoke; _vehicle setVariable ["wfbe_irs_lastfired", time]; _vehicle setVariable ["wfbe_irs_flares", (_vehicle getVariable "wfbe_irs_flares") - 1, true]; if (local player) then {_vehicle vehicleChat Format[localize "STR_WF_CHAT_IRS_Deployed",_vehicle getVariable "wfbe_irs_flares"]}; }; }; }; //--- Missile specific. if (local _projectile) then {[_vehicle, _projectile, _ammo] Spawn WFBE_CO_MOD_IRS_HandleMissile}; }; };/* WARFARE Benny Edition Note: This mission was made from scratch. Status: Work in Progress. Contact: benny_boy66@hotmail.fr Description: Warfare is a gamemode which focus on the PvPvAI (Player versus Player versus AI), each team has a commander which have to build a base and perform upgrades. The others players have to conquer towns in order to gain more supply, this supply is used to build a base and perform upgrades, a town generate a variable income each x min (Supply and Funds), the funds are used to purchase different assets (Infantry, Vehicles, Support...) Each team has a MHQ, This last one is used to build the base, once that the MHQ is lost, The commander won't be able to build a base until that the MHQ get fixed with a repair truck. The towns are defended by resistance, once that all resistance is neutralized, the town will belong to the team who took it, depending on the Supply Value of the town, a defense team will spawn in that town to prevent enemy from taking it. The game will end as soon as all towns are captured by a side or once that all of a side's base is destroyed. Credits: Benny - Mission Maker MrNiceGuy - UI Design - Beer provider */ //--- Define which 'part' of the game to run. #include "version.sqf" //--- Header contains the mission tite. #include "Rsc\Header.hpp" //--- Styles #include "Rsc\Styles.hpp" //--- Parameters contains the mission parameters. #include "Rsc\Parameters.hpp" //--- Ressource contains the dialog ressources. #include "Rsc\Ressources.hpp" //--- Dialogs contain all the interfaces (dialogs). #include "Rsc\Dialogs.hpp" //--- Titles contains the titles (overlay). #include "Rsc\Titles.hpp" //--- Include Identities (OA/CO Only). #ifndef VANILLA #include "Rsc\Identities.hpp" #endif//--- Global Init, first file called. //--- Define which 'part' of the game to run. #include "version.sqf" //--- Mission is starting. for '_i' from 0 to 3 do {diag_log "################################"}; diag_log format ["## Island Name: [%1]", worldName]; diag_log format ["## Mission Name: [%1]", WF_MISSIONNAME]; diag_log format ["## Max players Defined: [%1]", WF_MAXPLAYERS]; for '_i' from 0 to 3 do {diag_log "################################"}; WFBE_CO_FNC_LogContent = Compile preprocessFileLineNumbers "Common\Functions\Common_LogContent.sqf"; //--- Define the log function earlier. WFBE_LogLevel = 0; //--- Logging level (0: Trivial, 1: Information, 2: Warnnings, 3: Errors). ["INITIALIZATION", Format["initJIPCompatible.sqf: Starting JIP Initialization",local player]] Call WFBE_CO_FNC_LogContent; if (isServer) then { //--- JIP Handler, handle connection & disconnection. WFBE_SE_FNC_OnPlayerConnected = Compile preprocessFileLineNumbers "Server\Functions\Server_OnPlayerConnected.sqf"; WFBE_SE_FNC_OnPlayerDisconnected = Compile preprocessFileLineNumbers "Server\Functions\Server_OnPlayerDisconnected.sqf"; onPlayerConnected {[_uid, _name, _id] Spawn WFBE_SE_FNC_OnPlayerConnected}; onPlayerDisconnected {[_uid, _name, _id] Spawn WFBE_SE_FNC_OnPlayerDisconnected}; }; //--- Client Init. if (!isServer || local player) then { ["INITIALIZATION", "initJIPCompatible.sqf: Client detected... waiting for non null result..."] Call WFBE_CO_FNC_LogContent; waitUntil {!isNull player}; ["INITIALIZATION", "initJIPCompatible.sqf: Client is not null..."] Call WFBE_CO_FNC_LogContent; //--- Client Init - Begin the blackout on Layer 12452. 12452 cutText [(localize 'STR_WF_Loading')+"...","BLACK FADED",50000]; isHostedServer = if (!isMultiplayer || (isServer && local player)) then {true} else {false}; } else { //--- Prevent the isServer bug on the client. sleep 1.3; isHostedServer = if (!isMultiplayer || (isServer && local player)) then {true} else {false}; ["INITIALIZATION", Format["initJIPCompatible.sqf: Server detected... client is local? [%1]",local player]] Call WFBE_CO_FNC_LogContent; }; setViewDistance 1000; //--- Server & Client default View Distance. clientInitComplete = false; commonInitComplete = false; serverInitComplete = false; serverInitFull = false; gameOver = false; WFBE_GameOver = false; townInitServer = false; townInit = false; modACE = false; towns = []; WF_A2_Vanilla = false; #ifdef VANILLA WF_A2_Vanilla = true; #endif WF_A2_Arrowhead = false; #ifdef ARROWHEAD WF_A2_Arrowhead = true; #endif WF_A2_CombinedOps = false; #ifdef COMBINEDOPS WF_A2_CombinedOps = true; #endif WF_Debug = false; #ifdef WF_DEBUG WF_Debug = true; #endif WF_Camo = false; #ifdef WF_CAMO WF_Camo = true; #endif if (isMultiplayer) then {Call Compile preprocessFileLineNumbers "Common\Init\Init_Parameters.sqf"}; //--- In MP, we get the parameters. Call Compile preprocessFileLineNumbers "Common\Init\Init_CommonConstants.sqf"; //--- Set the constants and the parameters, skip the params if they're already defined. if (WF_Debug) then { //--- Debug. // missionNamespace setVariable ["WFBE_C_TOWNS_CONQUEST_MODE", 1]; // missionNamespace setVariable ["WFBE_C_GAMEPLAY_UPGRADES_CLEARANCE", 7]; }; //--- Apply the time-environment (don't halt). [] Spawn { waitUntil {time > 0}; //--- Await for the mission to start / JIP. setDate [(date select 0),(missionNamespace getVariable "WFBE_C_ENVIRONMENT_STARTING_MONTH"),(date select 2),(missionNamespace getVariable "WFBE_C_ENVIRONMENT_STARTING_HOUR"),(date select 4)]; //--- Apply the date and time. if (local player) then {skipTime (time / 3600)}; //--- If we're dealing with a client, he may have JIP half way through the game. Sync him via skipTime with the mission time. }; WFBE_Parameters_Ready = true; //--- All parameters are set and ready. ExecVM "Common\Init\Init_Common.sqf"; //--- Execute the common files. ExecVM "Common\Init\Init_Towns.sqf"; //--- Execute the towns file.//--- Execute the common files. if (isServer) then { //--- Run the server's part. ["INITIALIZATION", "initJIPCompatible.sqf: Executing the Server Initialization."] Call WFBE_CO_FNC_LogContent; ExecVM "Server\Init\Init_Server.sqf"; }; //--- Run the client's part. if (!isServer || local player) then { waitUntil {!isNil 'WFBE_PRESENTSIDES'}; //--- Await for teams to be set before processing the client init. { _logik = (_x) Call WFBE_CO_FNC_GetSideLogic; waitUntil {!isNil {_logik getVariable "wfbe_teams"}}; missionNamespace setVariable [Format["WFBE_%1TEAMS",_x], _logik getVariable "wfbe_teams"]; } forEach WFBE_PRESENTSIDES; ["INITIALIZATION", "initJIPCompatible.sqf: Executing the Client Initialization."] Call WFBE_CO_FNC_LogContent; ExecVM "Client\Init\Init_Client.sqf"; };version=11; class Mission { addOns[]= { "ca_modules_functions", "ca_highcommand", "takistan", "cacharacters_e", "cawheeled_w_baf", "catracked_w_baf", "caair_baf_ch_47f", "caair_baf", "caweapons_baf", "cacharacters_pmc", "cawheeled_pmc_armoredsuv", "caair_pmc_ka60", "cacharacters2", "operation_frenchpoint" }; addOnsAuto[]= { "cacharacters2", "ca_highcommand", "ca_modules_functions", "operation_frenchpoint", "takistan" }; randomSeed=6848509; class Intel { briefingName="Warfare BE V2.073 Lite CO - OFrP Version Modified by [MAKO]Hybrid- Takistan"; briefingDescription="By Benny"; resistanceWest=0; startWeather=0; forecastWeather=0; year=2010; month=6; day=30; hour=9; minute=20; }; class Groups { items=91; class Item0 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={7458.353,269.83954,50.020874}; id=0; side="EAST"; vehicle="RUS_Soldier1"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={48}; }; }; }; class Item1 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={7461.4585,269.66058,50.018921}; id=1; side="EAST"; vehicle="RUS_Soldier1"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={48}; }; }; }; class Item2 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={7464.6675,269.59052,50.019897}; id=2; side="EAST"; vehicle="RUS_Soldier_TL"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={48}; }; }; }; class Item3 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={7467.7495,269.57672,50.041382}; id=3; side="EAST"; vehicle="RUS_Soldier_TL"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={48}; }; }; }; class Item4 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={7470.7671,269.50647,50.022827}; id=4; side="EAST"; vehicle="RU_Soldier_Sniper"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={48}; }; }; }; class Item5 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={7473.6812,269.41107,49.973999}; id=5; side="EAST"; vehicle="RU_Soldier_Sniper"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={48}; }; }; }; class Item6 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={7476.5552,269.28915,49.973999}; id=6; side="EAST"; vehicle="MVD_Soldier_TL"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={48}; }; }; }; class Item7 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={7479.5415,269.13727,49.995483}; id=7; side="EAST"; vehicle="MVD_Soldier_TL"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={48}; }; }; }; class Item8 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={7482.3384,268.992,49.948608}; id=8; side="EAST"; vehicle="MVD_Soldier_TL"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={48}; }; }; }; class Item9 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={7485.1333,268.84982,49.970093}; id=9; side="EAST"; vehicle="MVD_Soldier_TL"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={48}; }; }; }; class Item10 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={7458.2622,269.72095,47.113647}; id=10; side="EAST"; vehicle="RUS_Commander"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={48}; }; }; }; class Item11 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={7461.3677,269.52661,47.112671}; id=11; side="EAST"; vehicle="RUS_Soldier3"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={48}; }; }; }; class Item12 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={7464.5767,269.46478,47.113647}; id=12; side="EAST"; vehicle="RU_Soldier_Medic"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={48}; }; }; }; class Item13 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={7467.6587,269.45609,47.135132}; id=13; side="EAST"; vehicle="RU_Soldier_Medic"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={48}; }; }; }; class Item14 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={7470.6763,269.38531,47.116577}; id=14; side="EAST"; vehicle="RU_Soldier_Medic"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={48}; }; }; }; class Item15 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={7473.5903,269.28839,47.066772}; id=15; side="EAST"; vehicle="RU_Soldier_Medic"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={48}; }; }; }; class Item16 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={1861.5867,487.00436,1841.6172}; id=16; side="LOGIC"; vehicle="Logic"; leader=1; skill=0.60000002; text="WF_Logic"; init="this setVariable [""totalTowns"",31];this setVariable [""Towns_RemovedXSmall"",[""FeeruzAbad"",""Nagara"",""Garmsar"",""Bastam"",""Zavarak"",""ChakChak"",""Sakhee"",""Garmarud"",""Falar"",""Chaman"",""Mulladoost"",""Nur"",""Karachinar"",""Rasman"",""Ravanay"",""Imarat"",""Shamali"",""Gospandi"",""Landay"",""Jaza"",""Timurkalay"",""Sultansafee"",""Shukurkalay"",""Jilavur"",""Khushab"",""Kakaru"",""Anar"",""HazarBagh""]];this setVariable [""Towns_RemovedSmall"",[""FeeruzAbad"",""Garmsar"",""Zavarak"",""ChakChak"",""LoyManara"",""Sakhee"",""Garmarud"",""Falar"",""Chaman"",""Mulladoost"",""Chardarakht"",""Karachinar"",""Ravanay"",""Imarat"",""Landay"",""Jaza"",""Timurkalay"",""Huzrutimam"",""Sultansafee"",""Shukurkalay"",""Jilavur"",""Khushab"",""Kakaru"",""Anar"",""HazarBagh""]];this setVariable [""Towns_RemovedMedium"",[""FeeruzAbad"",""Garmsar"",""Zavarak"",""ChakChak"",""LoyManara"",""Sakhee"",""Chaman"",""Chardarakht"",""Nur"",""Karachinar"",""Ravanay"",""Landay"",""Jaza"",""Timurkalay"",""Huzrutimam"",""Sultansafee"",""Shukurkalay"",""Jilavur"",""Kakaru"",""Anar"",""HazarBagh""]];this setVariable [""Towns_RemovedLarge"",[""Chaman"",""HazarBagh"",""Nur""]];nullReturn = [this] ExecVM ""Common\Init\Init_TownMode.sqf"""; }; }; }; class Item17 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={1878.4728,494.86816,1841.5765}; id=17; side="LOGIC"; vehicle="Logic"; leader=1; skill=0.60000002; text="RCoin"; }; }; }; class Item18 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={1892.756,501.53064,1841.7191}; id=18; side="LOGIC"; vehicle="Logic"; leader=1; skill=0.60000002; text="MCoin"; }; }; }; class Item19 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={1906.3767,493.96814,1867.5131}; id=19; side="LOGIC"; vehicle="HighCommand"; leader=1; skill=0.60000002; text="HC"; init="this SetVariable [""addAllGroups"",false];"; }; }; }; class Item20 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={6976.0913,32.9552,12518.923}; azimut=180; id=20; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; init="this setVariable [""wfbe_default"", west]; this setVariable [""wfbe_spawn"", ""north""];"; }; }; }; class Item21 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={1907.3542,501.01257,1854.5442}; id=21; side="LOGIC"; vehicle="FunctionsManager"; leader=1; skill=0.60000002; }; }; }; class Item22 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={7278.8247,280.50735,565.9245}; id=22; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; init="this setVariable [""wfbe_default"", east]; this setVariable [""wfbe_spawn"", ""south""];"; }; }; }; class Item23 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={264.19705,310.54095,5567.4683}; azimut=90; id=23; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; }; }; }; class Item24 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={5264.1392,311.17419,1103.2817}; id=24; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; }; }; }; class Item25 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={2118.8914,208.48778,4358.8955}; id=25; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; }; }; }; class Item26 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={4439.7134,603.22833,2877.5359}; id=26; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; }; }; }; class Item27 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={3553.9385,366.34622,1319.8539}; id=27; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; }; }; }; class Item28 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={9580.0791,418.16983,3012.0789}; id=28; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; }; }; }; class Item29 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={124.57814,494.6759,7296.3745}; azimut=90; id=29; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; init="this setVariable [""wfbe_default"", resistance];"; synchronizations[]={29}; }; }; }; class Item30 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={7593.4224,322.03012,2731.1753}; id=30; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; }; }; }; class Item31 { side="LOGIC"; class Vehicles { items=11; class Item0 { position[]={4392.793,346.20001,767.74023}; azimut=15; special="NONE"; id=31; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="ChakChak"; init="nullReturn = [this,""Chak Chak"",""+"",20,80,800] execVM ""Common\Init\Init_Town.sqf"""; synchronizations[]={47,45,46,54,55,56,57,257,258,259}; }; class Item1 { position[]={4138.0698,324.77408,518.07068}; azimut=350; special="NONE"; id=45; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={31}; }; class Item2 { position[]={4352.5518,395.00253,1054.7914}; azimut=90; special="NONE"; id=46; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={31}; }; class Item3 { position[]={4653.4639,317.59518,713.70435}; azimut=220; special="NONE"; id=47; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={31}; }; class Item4 { position[]={4106.979,325.83405,513.26843}; azimut=280; special="NONE"; id=54; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={31}; }; class Item5 { position[]={4345.3628,395.39944,1086.2883}; azimut=350; special="NONE"; id=55; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={31}; }; class Item6 { position[]={4632.959,317.64999,684.99701}; azimut=50; special="NONE"; id=57; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={31}; }; class Item7 { position[]={4742.0503,317.14218,763.28406}; azimut=65; special="NONE"; id=56; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={31}; }; class Item8 { position[]={4358.2085,322.7037,524.77826}; azimut=205; special="NONE"; id=257; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_mortar', true];"; synchronizations[]={31}; }; class Item9 { position[]={4559.1528,336.52679,788.02905}; azimut=120; special="NONE"; id=258; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_mortar', true];"; synchronizations[]={31}; }; class Item10 { position[]={4134.6543,338.13721,917.99725}; special="NONE"; id=259; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_mortar', true];"; synchronizations[]={31}; }; }; }; class Item32 { side="LOGIC"; class Vehicles { items=8; class Item0 { position[]={5977.7998,294.18436,1169.9866}; azimut=95; special="NONE"; id=32; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Huzrutimam"; init="nullReturn = [this,""Huzrutimam"",""+"",10,60,600] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={44,42,43,49,50,51,52}; }; class Item1 { position[]={5856.5986,310.77887,960.89722}; azimut=130; special="NONE"; id=42; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={32}; }; class Item2 { position[]={6220.7056,289.18143,1157.9437}; azimut=260; special="NONE"; id=43; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={32}; }; class Item3 { position[]={5935.105,306.40347,1329.902}; azimut=160; special="NONE"; id=44; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={32}; }; class Item4 { position[]={5874.0928,311.2038,941.14868}; azimut=240; special="NONE"; id=49; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={32}; }; class Item5 { position[]={5757.5981,327.32547,1096.9092}; placement=50; azimut=75; special="NONE"; id=50; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['AT','AA']];"; synchronizations[]={32}; }; class Item6 { position[]={5929.9141,306.45877,1337.8607}; azimut=330; special="NONE"; id=51; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={32}; }; class Item7 { position[]={6240.8135,288.96429,1168.2097}; azimut=70; special="NONE"; id=52; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={32}; }; }; }; class Item33 { side="LOGIC"; class Vehicles { items=3; class Item0 { position[]={2072.8567,361.47272,303.89569}; azimut=20; special="NONE"; id=33; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Landay"; init="nullReturn = [this,""Landay"",""+"",10,40,400] execVM ""Common\Init\Init_Town.sqf"""; synchronizations[]={41,53}; }; class Item1 { position[]={2227.0083,365.61688,479.19345}; azimut=150; special="NONE"; id=41; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={33}; }; class Item2 { position[]={2242.6372,366.86646,492.41226}; azimut=40; special="NONE"; id=53; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={33}; }; }; }; class Item34 { side="LOGIC"; class Vehicles { items=14; class Item0 { position[]={8532.2041,308.6048,2467.0283}; azimut=170; id=34; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="LoyManara"; init="nullReturn = [this,""Loy Manara"",""+"",30,120,1000] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={40,38,39,61,60,62,63,64,65,76,260,261,262}; }; class Item1 { position[]={8688.3848,301.95523,2288.3333}; azimut=220; special="NONE"; id=40; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={34,40}; }; class Item2 { position[]={8362.0107,296.65393,2261.8152}; azimut=275; special="NONE"; id=38; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={34}; }; class Item3 { position[]={8768.5391,333.46643,2579.3682}; azimut=155; special="NONE"; id=39; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={34}; }; class Item4 { position[]={8718.6279,311.87955,2359.2148}; azimut=190; special="NONE"; id=60; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={34}; }; class Item5 { position[]={8699.5527,301.39856,2272.9106}; azimut=145; special="NONE"; id=61; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={34}; }; class Item6 { position[]={8319.46,382.73035,2767.2771}; placement=100; azimut=230; special="NONE"; id=62; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['AT','AA']];"; synchronizations[]={34}; }; class Item7 { position[]={8402.1738,296.75107,2235.9417}; azimut=265; special="NONE"; id=63; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={34}; }; class Item8 { position[]={8331.5469,296.51581,2238.6926}; azimut=285; special="NONE"; id=64; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={34}; }; class Item9 { position[]={8780.7783,334.75443,2581.7878}; azimut=70; special="NONE"; id=65; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={34}; }; class Item10 { position[]={8506.2959,299.04822,2110.3591}; placement=50; azimut=230; special="NONE"; id=76; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['AA']];"; synchronizations[]={34}; }; class Item11 { position[]={8395.8369,311.61182,2476.7764}; special="NONE"; id=260; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_mortar', true];"; synchronizations[]={34}; }; class Item12 { position[]={8545.751,298.5979,2302.9644}; azimut=190; special="NONE"; id=261; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_mortar', true];"; synchronizations[]={34}; }; class Item13 { position[]={8545.626,311.75784,2528.229}; special="NONE"; id=262; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_mortar', true];"; synchronizations[]={34}; }; }; }; class Item35 { side="LOGIC"; class Vehicles { items=5; class Item0 { position[]={6483.9351,350.68698,2080.521}; azimut=105; special="NONE"; id=35; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Sultansafee"; init="nullReturn = [this,""Sultansafee"",""+"",10,50,500] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={37,36,58,59}; }; class Item1 { position[]={6739.0522,314.901,1967.033}; azimut=235; special="NONE"; id=37; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={35}; }; class Item2 { position[]={6337.9736,350.01486,1925.063}; azimut=30; special="NONE"; id=36; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={35}; }; class Item3 { position[]={6332.7764,350.11078,1912.769}; azimut=205; special="NONE"; id=58; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={35}; }; class Item4 { position[]={6753.647,314.52094,1957.4954}; azimut=150; special="NONE"; id=59; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={35}; }; }; }; class Item36 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={7461.6216,271.00354,74.223694}; id=48; side="LOGIC"; vehicle="LocationLogicOwnerEast"; leader=1; skill=0.60000002; text="WFBE_L_OPF"; synchronizations[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; }; }; }; class Item37 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={2741.5068,217.10669,7949.7593}; id=66; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; }; }; }; class Item38 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={1725.1185,307.85635,10833.553}; azimut=90; id=67; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; }; }; }; class Item39 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={4416.6357,113.01561,9650.1953}; id=68; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; }; }; }; class Item40 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={7316.9438,109.77742,9809.5518}; id=69; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; }; }; }; class Item41 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={8397.6875,230.83188,10703.76}; azimut=180; id=70; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; }; }; }; class Item42 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={9516.7969,155.15056,10237.701}; id=71; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; }; }; }; class Item43 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={8382.8018,198.57539,8586.1377}; id=72; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; }; }; }; class Item44 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={11539.412,210.90933,9516.5488}; azimut=270; id=73; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; }; }; }; class Item45 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={12755.166,123.53198,10951.833}; azimut=270; id=74; side="LOGIC"; vehicle="LocationLogicStart"; leader=1; skill=0.60000002; }; }; }; class Item46 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={8077.6948,296.04001,1726.6863}; azimut=330; id=75; side="LOGIC"; vehicle="LocationLogicAirport"; leader=1; skill=0.60000002; }; }; }; class Item47 { side="LOGIC"; class Vehicles { items=4; class Item0 { position[]={9231.8721,341.16577,1832.2489}; azimut=225; special="NONE"; id=77; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Jaza"; init="nullReturn = [this,""Jaza"",""+"",10,40,400] execVM ""Common\Init\Init_Town.sqf"""; synchronizations[]={78,79,80}; }; class Item1 { position[]={9128.7773,319.93552,1996.6206}; azimut=235; special="NONE"; id=78; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={77}; }; class Item2 { position[]={9120.1553,321.76996,1972.521}; azimut=325; special="NONE"; id=79; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={77}; }; class Item3 { position[]={9171.8164,321.08301,2010.7388}; placement=25; azimut=325; special="NONE"; id=80; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={77}; }; }; }; class Item48 { side="LOGIC"; class Vehicles { items=5; class Item0 { position[]={10276.688,354.39871,2331.5151}; azimut=345; special="NONE"; id=81; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Chardarakht"; init="nullReturn = [this,""Chardarakht"",""+"",10,60,500] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={83,82,84,85}; }; class Item1 { position[]={10525.924,366.83987,2356.9063}; azimut=260; special="NONE"; id=83; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={81}; }; class Item2 { position[]={10034.369,344.4585,2313.1604}; azimut=95; special="NONE"; id=82; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={81}; }; class Item3 { position[]={10018.022,344.00671,2314.5979}; azimut=280; special="NONE"; id=84; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={81}; }; class Item4 { position[]={10551.453,370.13593,2363.511}; azimut=80; special="NONE"; id=85; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={81}; }; }; }; class Item49 { side="LOGIC"; class Vehicles { items=3; class Item0 { position[]={11925.729,373.47464,2642.0129}; azimut=350; special="NONE"; id=86; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="HazarBagh"; init="nullReturn = [this,""Hazar Bagh"",""+"",10,30,400] execVM ""Common\Init\Init_Town.sqf"""; synchronizations[]={87,88}; }; class Item1 { position[]={11646.932,381.00061,2546.7891}; azimut=75; special="NONE"; id=87; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={86}; }; class Item2 { position[]={11634.898,381.73907,2543.0806}; azimut=245; special="NONE"; id=88; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={86}; }; }; }; class Item50 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={5688.3525,83.04277,11177.583}; azimut=315; id=89; side="LOGIC"; vehicle="LocationLogicAirport"; leader=1; skill=0.60000002; }; }; }; class Item51 { side="LOGIC"; class Vehicles { items=3; class Item0 { position[]={513.2121,248.23599,2805.5681}; azimut=170; special="NONE"; id=90; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Chaman"; init="nullReturn = [this,""Chaman"",""+"",10,50,500] execVM ""Common\Init\Init_Town.sqf"""; synchronizations[]={91,92}; }; class Item1 { position[]={731.58246,236.99146,2949.3616}; azimut=130; special="NONE"; id=91; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={90}; }; class Item2 { position[]={753.74457,236.61855,2979.1633}; azimut=40; special="NONE"; id=92; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={90}; }; }; }; class Item52 { side="LOGIC"; class Vehicles { items=7; class Item0 { position[]={1480.6228,215.45502,3513.2825}; azimut=75; special="NONE"; id=93; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Shukurkalay"; init="nullReturn = [this,""Shukurkalay"",""+"",10,60,600] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={96,94,95,97,98,99}; }; class Item1 { position[]={1276.7197,219.35074,3353.9348}; azimut=35; special="NONE"; id=94; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={93}; }; class Item2 { position[]={1651.6429,211.1864,3680.7617}; azimut=230; special="NONE"; id=95; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={93}; }; class Item3 { position[]={1284.4696,259.07007,3752.7312}; azimut=145; special="NONE"; id=96; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={93}; }; class Item4 { position[]={1253.4847,218.92102,3370.9612}; azimut=220; special="NONE"; id=97; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={93}; }; class Item5 { position[]={1277.6179,261.05252,3763.6709}; azimut=330; special="NONE"; id=98; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={93}; }; class Item6 { position[]={1661.4391,211.13023,3689.5825}; azimut=45; special="NONE"; id=99; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={93}; }; }; }; class Item53 { side="LOGIC"; class Vehicles { items=8; class Item0 { position[]={3673.4937,232.35826,4347.6406}; azimut=135; special="NONE"; id=100; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Sakhee"; init="nullReturn = [this,""Sakhee"",""+"",20,80,800] execVM ""Common\Init\Init_Town.sqf"""; synchronizations[]={103,101,102,104,105,106,107}; }; class Item1 { position[]={3520.6792,235.16782,4181.3975}; special="NONE"; id=101; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={100}; }; class Item2 { position[]={3677.0044,220.84164,4596.6992}; azimut=335; special="NONE"; id=102; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={100}; }; class Item3 { position[]={3871.7114,226.66293,4364.9751}; azimut=260; special="NONE"; id=103; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={100}; }; class Item4 { position[]={3511.9614,236.52719,4153.5625}; azimut=145; special="NONE"; id=104; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={100}; }; class Item5 { position[]={3652.4888,220.15085,4636.1812}; azimut=350; special="NONE"; id=105; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={100}; }; class Item6 { position[]={3390.2742,308.39551,4327.0103}; azimut=120; special="NONE"; id=106; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['AT','AA']];"; synchronizations[]={100}; }; class Item7 { position[]={3492.311,236.87392,4146.7925}; azimut=220; special="NONE"; id=107; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={100}; }; }; }; class Item54 { side="LOGIC"; class Vehicles { items=7; class Item0 { position[]={2545.771,194.25186,5043.1738}; azimut=275; special="NONE"; id=108; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Jilavur"; init="nullReturn = [this,""Jilavur"",""+"",10,50,500] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={111,109,110,112,113,114}; }; class Item1 { position[]={2426.7229,197.12711,4911.6157}; azimut=25; special="NONE"; id=109; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={108}; }; class Item2 { position[]={2739.9919,193.42213,5190.1411}; azimut=225; special="NONE"; id=110; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={108}; }; class Item3 { position[]={2395.8669,197.59174,5212.4409}; azimut=160; special="NONE"; id=111; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={108}; }; class Item4 { position[]={2400.6902,196.40793,4907.3779}; azimut=195; special="NONE"; id=112; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={108}; }; class Item5 { position[]={2389.4604,197.84451,5220.5791}; azimut=330; special="NONE"; id=113; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={108}; }; class Item6 { position[]={2747.8259,192.47025,5199.5801}; azimut=45; special="NONE"; id=114; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={108}; }; }; }; class Item55 { side="LOGIC"; class Vehicles { items=7; class Item0 { position[]={1613.3105,228.69585,5626.646}; azimut=210; special="NONE"; id=115; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Khushab"; init="nullReturn = [this,""Khushab"",""+"",10,50,500] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={118,116,117,119,120,121}; }; class Item1 { position[]={1443.1365,256.81509,5491.8184}; azimut=50; special="NONE"; id=116; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={115}; }; class Item2 { position[]={1764.8268,229.24545,5654.3789}; azimut=270; special="NONE"; id=117; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={115}; }; class Item3 { position[]={1464.2251,246.4585,5837.5464}; azimut=170; special="NONE"; id=118; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={115}; }; class Item4 { position[]={1458.7655,256.70715,5470.5825}; azimut=240; special="NONE"; id=119; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={115}; }; class Item5 { position[]={1463.9121,249.51059,5855.5562}; azimut=10; special="NONE"; id=120; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={115}; }; class Item6 { position[]={1787.7178,227.1889,5657.5156}; azimut=105; special="NONE"; id=121; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={115}; }; }; }; class Item56 { side="LOGIC"; class Vehicles { items=7; class Item0 { position[]={2094.9248,270.05127,7657.3301}; azimut=340; special="NONE"; id=122; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Mulladoost"; init="nullReturn = [this,""Mulladoost"",""+"",10,60,600] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={125,123,124,126,127,128}; }; class Item1 { position[]={1944.8483,306.42572,7510.2886}; azimut=125; special="NONE"; id=123; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={122}; }; class Item2 { position[]={2335.3188,242.79515,7747.3872}; azimut=260; special="NONE"; id=124; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={122}; }; class Item3 { position[]={1897.1591,330.15854,7852.2451}; azimut=205; special="NONE"; id=125; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={122}; }; class Item4 { position[]={1937.7437,309.04895,7500.2266}; azimut=210; special="NONE"; id=126; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={122}; }; class Item5 { position[]={1860.7133,338.27524,7867.6538}; azimut=285; special="NONE"; id=127; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={122}; }; class Item6 { position[]={2341.1667,241.46356,7778.6792}; azimut=80; special="NONE"; id=128; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={122}; }; }; }; class Item57 { side="LOGIC"; class Vehicles { items=5; class Item0 { position[]={5267.8716,236.37106,4772.9478}; special="NONE"; id=129; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Kakaru"; init="nullReturn = [this,""Kakaru"",""+"",10,50,500] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={131,130,132,133}; }; class Item1 { position[]={5360.6621,259.30011,4533.4243}; azimut=260; special="NONE"; id=131; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={129}; }; class Item2 { position[]={5296.9956,218.33594,5038.3354}; azimut=235; special="NONE"; id=130; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={129}; }; class Item3 { position[]={5293.0562,218.38866,5052.0718}; azimut=315; special="NONE"; id=132; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={129}; }; class Item4 { position[]={5362.5137,261.05542,4522.7729}; azimut=170; special="NONE"; id=133; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={129}; }; }; }; class Item58 { side="LOGIC"; class Vehicles { items=8; class Item0 { position[]={6045.2646,303.84998,5707.21}; azimut=355; special="NONE"; id=134; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Anar"; init="nullReturn = [this,""Anar"",""+"",10,50,500] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={137,135,136,138,139,140,141}; }; class Item1 { position[]={6137.936,311.61005,5368.1938}; azimut=65; special="NONE"; id=135; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={134}; }; class Item2 { position[]={6271.647,322.73837,5966.6978}; azimut=250; special="NONE"; id=136; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={134}; }; class Item3 { position[]={5905.6099,270.79477,5858.5869}; azimut=20; special="NONE"; id=137; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={134}; }; class Item4 { position[]={6137.0845,311.91675,5354.584}; azimut=155; special="NONE"; id=138; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={134}; }; class Item5 { position[]={5867.6152,261.28418,5874.8584}; azimut=305; special="NONE"; id=139; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={134}; }; class Item6 { position[]={6284.0713,324.77548,5972.4536}; azimut=65; special="NONE"; id=140; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={134}; }; class Item7 { position[]={6008.9297,322.63696,5941.5371}; azimut=220; special="NONE"; id=141; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['AT','GL']];"; synchronizations[]={134}; }; }; }; class Item59 { side="LOGIC"; class Vehicles { items=11; class Item0 { position[]={5203.1616,145.39999,6070.1782}; azimut=255; id=142; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="FeeruzAbad"; init="nullReturn = [this,""Feeruz Abad"",""+"",30,120,1200] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={143,144,145,146,147,148,149,150,255,256}; }; class Item1 { position[]={4983.2793,149.95169,6051.9727}; azimut=55; special="NONE"; id=143; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={142}; }; class Item2 { position[]={5392.2852,140.2348,6260.7998}; azimut=245; special="NONE"; id=144; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={142}; }; class Item3 { position[]={5097.6216,176.46721,6364.1797}; azimut=330; special="NONE"; id=145; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={142}; }; class Item4 { position[]={4883.9673,246.24709,6270.9556}; placement=100; azimut=125; special="NONE"; id=146; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['AT','AA']];"; synchronizations[]={142}; }; class Item5 { position[]={4972.2905,150.90872,6047.2524}; azimut=225; special="NONE"; id=147; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={142}; }; class Item6 { position[]={5374.5376,140.17963,6289.769}; azimut=70; special="NONE"; id=148; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={142}; }; class Item7 { position[]={5514.0459,210.55431,6045.1387}; placement=50; azimut=290; special="NONE"; id=149; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['AA']];"; synchronizations[]={142}; }; class Item8 { position[]={5101.6611,174.87888,6353.3755}; azimut=250; special="NONE"; id=150; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={142}; }; class Item9 { position[]={5132.3481,145.40526,6039.0791}; azimut=255; special="NONE"; id=255; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_mortar', true];"; synchronizations[]={142}; }; class Item10 { position[]={5278.1001,146.07187,6188.6563}; azimut=305; special="NONE"; id=256; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_mortar', true];"; synchronizations[]={142}; }; }; }; class Item60 { side="LOGIC"; class Vehicles { items=7; class Item0 { position[]={8994.1221,261.58069,5337.1387}; azimut=315; special="NONE"; id=151; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Timurkalay"; init="nullReturn = [this,""Timurkalay"",""+"",10,50,500] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={154,152,153,155,156,157}; }; class Item1 { position[]={8761.9238,272.16211,5184.9048}; azimut=305; special="NONE"; id=152; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={151}; }; class Item2 { position[]={8968.6201,246.01193,5627.8252}; azimut=90; special="NONE"; id=153; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={151}; }; class Item3 { position[]={8707.6963,316.49615,5426.3804}; azimut=170; special="NONE"; id=154; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={151}; }; class Item4 { position[]={8754.0918,272.58011,5176.7124}; azimut=210; special="NONE"; id=155; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={151}; }; class Item5 { position[]={8696.8359,318.93222,5424.8159}; azimut=255; special="NONE"; id=156; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={151}; }; class Item6 { position[]={8966.0088,244.81956,5640.5371}; azimut=20; special="NONE"; id=157; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={151}; }; }; }; class Item61 { side="LOGIC"; class Vehicles { items=8; class Item0 { position[]={5960.6426,122.29,7358.1055}; azimut=20; special="NONE"; id=158; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Falar"; init="nullReturn = [this,""Falar"",""+"",10,60,600] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={161,159,160,162,163,164,165}; }; class Item1 { position[]={5932.5215,128.38368,7122.6162}; azimut=245; special="NONE"; id=159; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={158}; }; class Item2 { position[]={5993.6958,112.2033,7644.6743}; azimut=265; special="NONE"; id=160; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={158}; }; class Item3 { position[]={6220.6191,132.34521,7310.4712}; azimut=350; special="NONE"; id=161; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={158}; }; class Item4 { position[]={5959.02,132.24954,7076.1182}; azimut=170; special="NONE"; id=162; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={158}; }; class Item5 { position[]={6239.1128,133.61604,7312.9058}; azimut=75; special="NONE"; id=163; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={158}; }; class Item6 { position[]={5980.3862,111.36918,7656.8418}; azimut=345; special="NONE"; id=164; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={158}; }; class Item7 { position[]={5684.4141,238.51712,7300.2891}; placement=100; azimut=70; special="NONE"; id=165; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['AT','GL']];"; synchronizations[]={158}; }; }; }; class Item62 { side="LOGIC"; class Vehicles { items=7; class Item0 { position[]={9180.4844,210.32375,6674.5767}; azimut=245; special="NONE"; id=166; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Garmarud"; init="nullReturn = [this,""Garmarud"",""+"",10,60,600] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={169,167,168,170,171,172}; }; class Item1 { position[]={9112.5479,209.7502,6480.9932}; azimut=350; special="NONE"; id=167; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={166}; }; class Item2 { position[]={8954.1309,202.1468,6895.6445}; azimut=45; special="NONE"; id=168; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={166}; }; class Item3 { position[]={9330.8672,221.89035,6614.8047}; azimut=195; special="NONE"; id=169; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={166}; }; class Item4 { position[]={9121.4209,209.48445,6472.3076}; azimut=170; special="NONE"; id=170; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={166}; }; class Item5 { position[]={9344.75,225.65118,6581.2119}; azimut=95; special="NONE"; id=171; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={166}; }; class Item6 { position[]={8950.6816,202.0779,6909.29}; azimut=355; special="NONE"; id=172; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={166}; }; }; }; class Item63 { side="LOGIC"; class Vehicles { items=11; class Item0 { position[]={10925.13,287.39938,6320.6157}; azimut=15; id=173; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Garmsar"; init="nullReturn = [this,""Garmsar"",""+"",30,120,1000] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={176,174,175,177,178,179,180,181,253,254}; }; class Item1 { position[]={10721.884,278.93216,6467.333}; azimut=70; special="NONE"; id=176; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={173,176}; }; class Item2 { position[]={10690.27,272.59695,6318.6016}; azimut=180; special="NONE"; id=174; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={173}; }; class Item3 { position[]={10972.967,310.03049,6510.3652}; azimut=45; special="NONE"; id=175; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={173}; }; class Item4 { position[]={10715.197,276.70654,6453.1855}; azimut=250; special="NONE"; id=177; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={173}; }; class Item5 { position[]={10802.158,346.25116,6614.0376}; placement=100; azimut=230; special="NONE"; id=178; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['AT','AA']];"; synchronizations[]={173}; }; class Item6 { position[]={10686.196,272.87997,6280.3315}; azimut=285; special="NONE"; id=179; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={173}; }; class Item7 { position[]={10933.954,303.27997,6489.605}; azimut=220; special="NONE"; id=180; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={173}; }; class Item8 { position[]={11067.058,349.57089,6087.8027}; placement=50; azimut=305; special="NONE"; id=181; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['AA']];"; synchronizations[]={173}; }; class Item9 { position[]={10990.977,292.75467,6274.2788}; azimut=90; special="NONE"; id=253; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_mortar', true];"; synchronizations[]={173}; }; class Item10 { position[]={10790.64,284.03552,6427.6606}; special="NONE"; id=254; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_mortar', true];"; synchronizations[]={173}; }; }; }; class Item64 { side="LOGIC"; class Vehicles { items=7; class Item0 { position[]={8208.2012,174.14801,7770.2744}; azimut=220; special="NONE"; id=182; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Imarat"; init="nullReturn = [this,""Imarat"",""+"",10,50,500] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={185,183,184,186,187,188}; }; class Item1 { position[]={8369.998,177.43961,7620.9731}; azimut=45; special="NONE"; id=183; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={182}; }; class Item2 { position[]={8397.9385,219.42001,8084.1323}; azimut=120; special="NONE"; id=184; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={182}; }; class Item3 { position[]={7978.5908,157.29704,7972.9355}; azimut=200; special="NONE"; id=185; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={182}; }; class Item4 { position[]={8378.5049,178.42372,7613.6729}; azimut=130; special="NONE"; id=186; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={182}; }; class Item5 { position[]={7964.8003,157.20493,7977.042}; azimut=275; special="NONE"; id=187; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={182}; }; class Item6 { position[]={8405.7725,220.40819,8093.5713}; azimut=45; special="NONE"; id=188; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={182}; }; }; }; class Item65 { side="LOGIC"; class Vehicles { items=7; class Item0 { position[]={3666.8521,152.94328,8540.1348}; azimut=195; special="NONE"; id=189; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Gospandi"; init="nullReturn = [this,""Gospandi"",""+"",10,50,500] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={191,190,192,193,194,246}; }; class Item1 { position[]={3475.5562,161.59602,8356.4844}; azimut=135; special="NONE"; id=191; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={189}; }; class Item2 { position[]={3698.1021,142.65678,8852.0254}; azimut=115; special="NONE"; id=190; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={189}; }; class Item3 { position[]={3694.9602,142.39392,8867.5547}; azimut=340; special="NONE"; id=192; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={189}; }; class Item4 { position[]={3469.4585,161.77704,8348.0107}; azimut=215; special="NONE"; id=193; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={189}; }; class Item5 { position[]={3834.0916,155.78865,8833.0186}; azimut=330; special="NONE"; id=194; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={189}; }; class Item6 { position[]={3704.1326,145.20921,8785.5488}; azimut=30; special="NONE"; id=246; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={189}; }; }; }; class Item66 { side="LOGIC"; class Vehicles { items=3; class Item0 { position[]={11483.861,272.78976,8302.2217}; azimut=115; special="NONE"; id=195; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Ravanay"; init="nullReturn = [this,""Ravanay"",""+"",10,40,400] execVM ""Common\Init\Init_Town.sqf"""; synchronizations[]={196,197}; }; class Item1 { position[]={11564.133,261.07483,8575.252}; azimut=100; special="NONE"; id=196; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={195}; }; class Item2 { position[]={11600.04,260.7132,8589.5576}; azimut=10; special="NONE"; id=197; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={195}; }; }; }; class Item67 { side="LOGIC"; class Vehicles { items=4; class Item0 { position[]={12295.607,149.42511,10398.317}; azimut=275; special="NONE"; id=198; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Karachinar"; init="nullReturn = [this,""Karachinar"",""+"",10,50,500] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={199,200,201}; }; class Item1 { position[]={12245.141,132.62407,10663.257}; azimut=265; special="NONE"; id=199; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={198}; }; class Item2 { position[]={12215.143,132.00217,10711.861}; azimut=315; special="NONE"; id=200; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={198}; }; class Item3 { position[]={12454.929,171.1852,10162.431}; azimut=260; special="NONE"; id=201; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={198}; }; }; }; class Item68 { side="LOGIC"; class Vehicles { items=3; class Item0 { position[]={1784.3358,145.85266,11932.754}; azimut=45; special="NONE"; id=202; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Nur"; init="nullReturn = [this,""Nur"",""+"",10,50,500] execVM ""Common\Init\Init_Town.sqf"""; synchronizations[]={203,204}; }; class Item1 { position[]={1960.0695,144.31718,11749.218}; azimut=25; special="NONE"; id=203; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={202}; }; class Item2 { position[]={2005.468,144.05687,11755.955}; azimut=135; special="NONE"; id=204; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={202}; }; }; }; class Item69 { side="LOGIC"; class Vehicles { items=6; class Item0 { position[]={9813.3555,116.57287,11495.399}; azimut=120; special="NONE"; id=205; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Zavarak"; init="nullReturn = [this,""Zavarak"",""+"",20,80,800] execVM ""Common\Init\Init_Town.sqf"""; synchronizations[]={207,206,208,209,210}; }; class Item1 { position[]={9808.8525,126.39202,11193.063}; azimut=285; special="NONE"; id=206; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={205}; }; class Item2 { position[]={10005.126,121.3481,11410.518}; azimut=35; special="NONE"; id=207; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={205}; }; class Item3 { position[]={9807.752,127.05304,11178.53}; azimut=195; special="NONE"; id=208; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={205}; }; class Item4 { position[]={10063.612,124.74895,11375.321}; azimut=105; special="NONE"; id=209; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={205}; }; class Item5 { presence=0.65986133; position[]={9928.2266,164.9671,11167.146}; placement=50; azimut=225; special="NONE"; id=210; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['AT','AA']];"; synchronizations[]={205}; }; }; }; class Item70 { side="LOGIC"; class Vehicles { items=11; class Item0 { position[]={5949.1978,103.54388,8950.9473}; azimut=345; special="NONE"; id=211; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Bastam"; init="nullReturn = [this,""Bastam"",""+"",20,80,800] execVM ""Common\Init\Init_Town.sqf"""; synchronizations[]={214,212,213,215,216,217,218,219,251,252}; }; class Item1 { position[]={5758.1309,94.29039,8778.2041}; azimut=250; special="NONE"; id=212; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={211}; }; class Item2 { position[]={5672.0107,78.279999,9186.707}; azimut=270; special="NONE"; id=213; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={211}; }; class Item3 { position[]={6267.583,104.88329,8939.8584}; azimut=185; special="NONE"; id=214; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={211}; }; class Item4 { position[]={5738.708,96.661339,8755.29}; azimut=195; special="NONE"; id=215; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={211}; }; class Item5 { position[]={5671.9146,78.290001,9215.2959}; azimut=350; special="NONE"; id=216; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={211}; }; class Item6 { position[]={6158.3677,104.19555,8976.7734}; azimut=50; special="NONE"; id=218; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={211}; }; class Item7 { position[]={6351.0098,105.05694,8948.7051}; azimut=65; special="NONE"; id=217; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={211}; }; class Item8 { position[]={5664.4077,78.276947,9155.6641}; azimut=270; special="NONE"; id=219; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={211}; }; class Item9 { position[]={6127.5181,104.12869,8910.8633}; azimut=90; special="NONE"; id=251; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_mortar', true];"; synchronizations[]={211}; }; class Item10 { position[]={5894.7422,104.7438,9067.4424}; special="NONE"; id=252; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_mortar', true];"; synchronizations[]={211}; }; }; }; class Item71 { side="LOGIC"; class Vehicles { items=10; class Item0 { position[]={3144.1062,60.312023,9960.8809}; azimut=320; id=220; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Nagara"; init="nullReturn = [this,""Nagara"",""+"",30,120,1000] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={223,221,222,224,225,226,227,228,250}; }; class Item1 { position[]={3008.666,112.48525,10224.496}; azimut=225; special="NONE"; id=223; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={220,223}; }; class Item2 { position[]={3131.2356,71.015854,9764.3975}; azimut=45; special="NONE"; id=221; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={220}; }; class Item3 { position[]={3317.9773,52.252544,10086.441}; azimut=65; special="NONE"; id=222; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={220}; }; class Item4 { position[]={2995.6509,113.28396,10231.182}; azimut=305; special="NONE"; id=224; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={220}; }; class Item5 { position[]={3015.0076,82.360138,9727.6699}; placement=60; azimut=25; special="NONE"; id=225; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['AT','AA']];"; synchronizations[]={220}; }; class Item6 { position[]={3138.7402,72.342674,9756.0527}; azimut=115; special="NONE"; id=226; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={220}; }; class Item7 { position[]={3365.22,51.223553,10103.29}; azimut=40; special="NONE"; id=227; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={220}; }; class Item8 { position[]={3246.5156,84.955536,10203.634}; placement=50; azimut=150; special="NONE"; id=228; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['AA']];"; synchronizations[]={220}; }; class Item9 { position[]={2908.927,59.447445,9875.0732}; azimut=270; special="NONE"; id=250; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_mortar', true];"; synchronizations[]={220}; }; }; }; class Item72 { side="LOGIC"; class Vehicles { items=15; class Item0 { position[]={6204.29,60.363018,11162.907}; azimut=30; id=229; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Rasman"; init="nullReturn = [this,""Rasman"",""+"",30,120,1000] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={232,230,231,233,234,235,236,237,238,239,240,247,248,249}; }; class Item1 { position[]={6100.0439,81.443291,11456.517}; azimut=135; special="NONE"; id=232; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={229,232}; }; class Item2 { position[]={6114.5161,66.586823,10951.041}; azimut=110; special="NONE"; id=230; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={229}; }; class Item3 { position[]={6465.2524,60.799866,11271.192}; azimut=135; special="NONE"; id=231; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={229}; }; class Item4 { position[]={6171.4175,82.181114,11532.823}; azimut=70; special="NONE"; id=233; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={229}; }; class Item5 { position[]={6452.5322,60.567745,11063.354}; placement=60; azimut=305; special="NONE"; id=234; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['AT','AA']];"; synchronizations[]={229}; }; class Item6 { position[]={6113.7632,66.521896,10941.001}; azimut=195; special="NONE"; id=235; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={229}; }; class Item7 { position[]={6510.2988,61.374199,11312.694}; azimut=45; special="NONE"; id=236; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={229}; }; class Item8 { position[]={6006.0156,83.040001,11396.914}; placement=50; azimut=285; special="NONE"; id=237; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['AA']];"; synchronizations[]={229}; }; class Item9 { position[]={6431.6343,60.469677,11243.912}; azimut=130; special="NONE"; id=238; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={229}; }; class Item10 { position[]={6101.8892,66.196495,10956.585}; azimut=235; special="NONE"; id=239; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={229}; }; class Item11 { position[]={5987.4741,83.040001,11532.191}; azimut=225; special="NONE"; id=240; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MG']];"; synchronizations[]={229}; }; class Item12 { position[]={5922.9541,83.073456,11275.428}; azimut=305; special="NONE"; id=247; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_mortar', true];"; synchronizations[]={229}; }; class Item13 { position[]={6323.8232,61.050743,11371.017}; azimut=25; special="NONE"; id=248; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_mortar', true];"; synchronizations[]={229}; }; class Item14 { position[]={6320.2275,61.199459,11020.381}; azimut=215; special="NONE"; id=249; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_mortar', true];"; synchronizations[]={229}; }; }; }; class Item73 { side="LOGIC"; class Vehicles { items=5; class Item0 { position[]={4080.543,25.790739,11720.006}; azimut=170; special="NONE"; id=241; side="LOGIC"; vehicle="LocationLogicDepot"; leader=1; skill=0.60000002; text="Shamali"; init="nullReturn = [this,""Shamali"",""+"",10,50,500] execVM ""Common\Init\Init_Town.sqf"";"; synchronizations[]={243,242,244,245}; }; class Item1 { position[]={4176.7358,30.927736,11450.697}; azimut=260; special="NONE"; id=243; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={241}; }; class Item2 { position[]={4397.2661,54.245022,11879.999}; azimut=340; special="NONE"; id=242; side="LOGIC"; vehicle="LocationLogicCamp"; skill=0.60000002; synchronizations[]={241}; }; class Item3 { position[]={4414.2876,55.44968,11880.861}; azimut=45; special="NONE"; id=244; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={241}; }; class Item4 { position[]={4146.1353,30.715107,11450.808}; azimut=170; special="NONE"; id=245; side="LOGIC"; vehicle="Logic"; skill=0.60000002; init="this setVariable ['wfbe_defense_kind', ['MGNest']];"; synchronizations[]={241}; }; }; }; class Item74 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={7180.7705,42.053402,12787.43}; id=263; side="WEST"; vehicle="OFrP_Soldier_CoS_Saboteur"; player="PLAYER COMMANDER"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={279}; }; }; }; class Item75 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={7182.8994,42.093628,12787.44}; id=264; side="WEST"; vehicle="OFrP_Soldier_CoS_Saboteur"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={279}; }; }; }; class Item76 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={7184.877,42.126404,12787.465}; id=265; side="WEST"; vehicle="OFrP_Soldier_Inf_TeamLeader"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={279}; }; }; }; class Item77 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={7186.7153,42.155807,12787.465}; id=266; side="WEST"; vehicle="OFrP_Soldier_Inf_TeamLeader"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={279}; }; }; }; class Item78 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={7188.3682,42.184769,12787.489}; id=267; side="WEST"; vehicle="OFrP_Soldier_Inf_SniperFRF2"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={279}; }; }; }; class Item79 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={7189.9507,42.211369,12787.464}; id=268; side="WEST"; vehicle="OFrP_Soldier_Inf_SniperFRF2"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={279}; }; }; }; class Item80 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={7191.4634,42.23917,12787.488}; id=269; side="WEST"; vehicle="OFrP_Soldier_FELIN_TeamLeader"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={279}; }; }; }; class Item81 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={7193.0928,42.267838,12787.488}; id=270; side="WEST"; vehicle="OFrP_Soldier_FELIN_TeamLeader"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={279}; }; }; }; class Item82 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={7194.5586,42.468052,12787.513}; id=271; side="WEST"; vehicle="OFrP_Soldier_FELIN_TeamLeader"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={279}; }; }; }; class Item83 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={7196.1641,42.841217,12787.534}; id=272; side="WEST"; vehicle="OFrP_Soldier_FELIN_TeamLeader"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={279}; }; }; }; class Item84 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={7180.7705,41.963596,12785.952}; id=273; side="WEST"; vehicle="OFrP_Soldier_OFF"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={279}; }; }; }; class Item85 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={7182.8994,42.025059,12785.963}; id=274; side="WEST"; vehicle="OFrP_Soldier_CoS_TeamLeader"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={279}; }; }; }; class Item86 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={7184.877,42.057835,12785.987}; id=275; side="WEST"; vehicle="OFrP_Soldier_Inf_Medic"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={279}; }; }; }; class Item87 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={7186.7153,42.087238,12785.987}; id=276; side="WEST"; vehicle="OFrP_Soldier_Inf_Medic"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={279}; }; }; }; class Item88 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={7188.3682,42.114861,12786.013}; id=277; side="WEST"; vehicle="OFrP_Soldier_Inf_Medic"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={279}; }; }; }; class Item89 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={7189.9507,42.140472,12785.986}; id=278; side="WEST"; vehicle="OFrP_Soldier_Inf_Medic"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=0.60000002; synchronizations[]={279}; }; }; }; class Item90 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={7184.728,42.313332,12800.883}; id=279; side="LOGIC"; vehicle="LocationLogicOwnerWest"; leader=1; skill=0.60000002; text="WFBE_L_BLU"; synchronizations[]={263,273,274,264,265,275,276,266,267,277,278,268,269,270,271,272}; }; }; }; }; class Markers { items=3; class Item0 { position[]={12210.017,206.29274,12687.579}; name="WestTempRespawnMarker"; type="Empty"; }; class Item1 { position[]={12681.201,219.81429,12278.717}; name="EastTempRespawnMarker"; type="Empty"; }; class Item2 { position[]={12505.479,208.02589,12528.001}; name="GuerTempRespawnMarker"; type="Empty"; }; }; }; class Intro { addOns[]= { "takistan" }; addOnsAuto[]= { "takistan" }; randomSeed=12595034; class Intel { startWeather=0.40000001; forecastWeather=0.40000001; year=2009; day=28; hour=16; minute=20; }; }; class OutroWin { addOns[]= { "takistan" }; addOnsAuto[]= { "takistan" }; randomSeed=7691969; class Intel { startWeather=0.40000001; forecastWeather=0.40000001; year=2009; day=28; hour=16; minute=20; }; }; class OutroLoose { addOns[]= { "takistan" }; addOnsAuto[]= { "takistan" }; randomSeed=14932386; class Intel { startWeather=0.40000001; forecastWeather=0.40000001; year=2009; day=28; hour=16; minute=20; }; }; ############################################################################# ############################################################################# __ __ __ / / /\ \ \__ _ _ __ / _| __ _ _ __ ___ \ \/ \/ / _` | '__| |_ / _` | '__/ _ \ \ /\ / (_| | | | _| (_| | | | __/ \/ \/ \__,_|_| |_| \__,_|_| \___| _ _ _ _ _ | |__ ___ _ __ _ __ _ _ ___ __| (_) |_(_) ___ _ __ | '_ \ / _ \ '_ \| '_ \| | | | / _ \/ _` | | __| |/ _ \| '_ \ | |_) | __/ | | | | | | |_| | | __/ (_| | | |_| | (_) | | | | |_.__/ \___|_| |_|_| |_|\__, | \___|\__,_|_|\__|_|\___/|_| |_| |___/ ############################################################################# ############################################################################# DOWNLOADS: - http://dev-heaven.net/projects/warfare-be/files CHANGELOG: - http://dev-heaven.net/projects/show/warfare-be WIKI: - http://dev-heaven.net/projects/warfare-be/wiki CONTACT: - benny_boy66@hotmail.fr/* Dialogs */ //--- WF3 Groups Menu. class WFBE_GroupsMenu { movingEnable = 1; idd = 508000; onLoad = "(_this) ExecVM 'Client\GUI\GUI_GroupsMenu.sqf'"; class controlsBackground { class CA_Background : RscText { x = 0; y = 0; w = 0.8; h = 0.8; colorBackground[] = WFBE_Background_Color; moving = 1; }; class CA_Background_Header : CA_Background { x = 0; y = 0; w = 0.8; h = 0.06; colorBackground[] = WFBE_Background_Color_Header; }; class CA_Background_Footer : CA_Background { x = 0; y = 0.76; w = 0.8; h = 0.04; colorBackground[] = WFBE_Background_Color_Sub; }; class CA_Menu_Title : RscText_Title { x = 0.007; y = 0.01; w = 0.5; text = "Groups Menu :"; colorText[] = WFBE_Menu_Title_Color; }; class CA_Quit_Button: RscButton_Main { x = 0.75; y = 0.0075; w = 0.045; h = 0.045; text = "X"; shadow = 2; sizeEx = 0.03; onButtonClick = "closeDialog 0;"; }; class CA_Back_Button : CA_Quit_Button { x = 0.695; text = "<<"; onButtonClick = "WFBE_MenuAction = 1000;"; tooltip = $STR_WF_TOOLTIP_BackButton; }; class CA_Menu_Details : RscText { x = 0.405; y = 0.07; w = 0.39; h = 0.215; colorBackground[] = {0.5, 0.5, 0.5, 0.15}; style = ST_TEXT_BG; }; class CA_Menu_Links : CA_Menu_Details { y = 0.29; h = 0.46; }; class CA_Menu_Groups : RscText { x = 0.005; y = 0.07; w = 0.396; h = 0.425; colorBackground[] = {0.5, 0.5, 0.5, 0.15}; style = ST_TEXT_BG; }; class CA_Menu_Requests : RscText { x = 0.005; y = 0.5; w = 0.396; h = 0.25; colorBackground[] = {0.5, 0.5, 0.5, 0.15}; style = ST_TEXT_BG; }; }; class controls { class CA_GroupsList : RscListnBox { idc = 508001; x = 0.01; y = 0.12; w = 0.386; h = 0.36; columns[] = {0.01, 0.35}; rowHeight = 0.03; onLBDblClick = "WFBE_MenuAction = 1"; onLBSelChanged = "WFBE_MenuAction = 2"; }; class CA_Icon : RscPicture { x = 0.67; y = 0.090; w = 0.128; h = 0.128; style = 0x30 + 0x800; text = "Client\Images\upgrade_infantry.paa"; }; class CA_GroupsDetails : RscStructuredText { idc = 508002; x = 0.41; y = 0.080; w = 0.26; h = 0.195; size = 0.0260; shadow = 2; class Attributes { font = "Zeppelin32"; color = "#E8F0FF"; align = "left"; shadow = true; }; }; class CA_UnitsList : RscListnBox { idc = 508003; x = 0.41; y = 0.34; w = 0.38; h = 0.40; columns[] = {0.01, 0.35}; rowHeight = 0.045; sizeEx = 0.0240; }; class CA_MembersDetails : CA_GroupsDetails { idc = 508004; y = 0.3; h = 0.035; }; class CA_Join : RscButton_Main { x = 0.595; y = 0.762; w = 0.2; h = 0.035; sizeEx = 0.035; text = "Join"; action = "WFBE_MenuAction = 1"; }; class CA_Groups : CA_GroupsDetails { idc = 508005; x = 0.01; h = 0.035; }; class CA_Request : CA_GroupsDetails { idc = 508006; x = 0.01; y = 0.51; h = 0.035; }; class CA_RequestsList : RscListnBox { idc = 508007; x = 0.01; y = 0.55; w = 0.386; h = 0.19; columns[] = {0.01, 0.35}; rowHeight = 0.0316; onLBDblClick = "WFBE_MenuAction = 3"; // onLBSelChanged = "WFBE_MenuAction = 2"; }; class CA_Accept_Button : RscButton { idc = 508008; x = 0.01; y = 0.762; w = 0.15; h = 0.035; sizeEx = 0.035; text = "Accept"; colorBackground[] = WFBE_Menu_Button_Sub_Color; colorBackgroundActive[] = WFBE_Menu_Button_Sub_Color; colorFocused[] = WFBE_Menu_Button_Sub_Focused_Color; onButtonClick = "WFBE_MenuAction = 3;"; }; class CA_Deny_Button : CA_Accept_Button { idc = 508009; x = 0.17; text = "Deny"; onButtonClick = "WFBE_MenuAction = 4;"; }; class CA_Kick_Button : CA_Accept_Button { idc = 508009; x = 0.33; text = "Kick"; onButtonClick = "WFBE_MenuAction = 5;"; }; }; }; //--- WF3 Upgrade Menu. class WFBE_UpgradeMenu { movingEnable = 1; idd = 504000; onLoad = "(_this) ExecVM 'Client\GUI\GUI_UpgradeMenu.sqf'"; class controlsBackground { class CA_Background : RscText { x = 0; y = 0; w = 0.8; h = 0.8; colorBackground[] = WFBE_Background_Color; moving = 1; }; class CA_Background_Header : CA_Background { x = 0; y = 0; w = 0.8; h = 0.06; colorBackground[] = WFBE_Background_Color_Header; }; class CA_Background_Footer : CA_Background { x = 0; y = 0.76; w = 0.8; h = 0.04; colorBackground[] = WFBE_Background_Color_Sub; }; class CA_Menu_Title : RscText_Title { x = 0.007; y = 0.01; w = 0.5; text = "Upgrade Menu :"; colorText[] = WFBE_Menu_Title_Color; }; class CA_Quit_Button: RscButton_Main { x = 0.75; y = 0.0075; w = 0.045; h = 0.045; text = "X"; shadow = 2; sizeEx = 0.03; onButtonClick = "closeDialog 0;"; }; class CA_Back_Button : CA_Quit_Button { x = 0.695; text = "<<"; onButtonClick = "WFBE_MenuAction = 1000;"; tooltip = $STR_WF_TOOLTIP_BackButton; }; class CA_Menu_Details : RscText { x = 0.345; y = 0.075; w = 0.45; h = 0.20; colorBackground[] = {0.5, 0.5, 0.5, 0.15}; style = ST_TEXT_BG; }; class CA_Menu_Links : CA_Menu_Details { y = 0.29; h = 0.16; }; class CA_Menu_Desc : CA_Menu_Details { y = 0.465; h = 0.28; }; }; class controls { class CA_UpgradeList : RscListnBox { idc = 504001; x = 0.000983551; y = 0.065; w = 0.34; h = 0.69; columns[] = {0.01, 0.25, 0.75}; rowHeight = 0.03; onLBDblClick = "WFBE_MenuAction = 1"; onLBSelChanged = "WFBE_MenuAction = 2"; }; class CA_Icon : RscPicture { idc = 504002; x = 0.67; y = 0.095; w = 0.128; h = 0.128; style = 0x30 + 0x800; }; class CA_UpgradeDetails : RscStructuredText { idc = 504003; x = 0.35; y = 0.08; w = 0.32; h = 0.195; size = 0.0260; shadow = 2; class Attributes { font = "Zeppelin32"; color = "#E8F0FF"; align = "left"; shadow = true; }; }; class CA_UpgradeLinks : CA_UpgradeDetails { idc = 504004; y = 0.295; h = 0.155; w = 0.45; }; class CA_UpgradeDesc : CA_UpgradeLinks { idc = 504005; y = 0.47; h = 0.275; }; class CA_Upgrade : RscButton_Main { idc = 504007; x = 0.595; y = 0.762; w = 0.2; h = 0.035; sizeEx = 0.035; text = "Upgrade"; action = "WFBE_MenuAction = 1"; }; class CA_Details : CA_UpgradeDetails { idc = 504006; x = 0.01; y = 0.765; w = 0.4; h = 0.035; size = 0.0250; shadow = 2; }; }; }; //--- WF3 Vote Menu. class WFBE_VoteMenu { movingEnable = 1; idd = 500000; onLoad = "(_this) ExecVM 'Client\GUI\GUI_VoteMenu.sqf'"; class controlsBackground { class CA_Background : RscText { x = 0.273; y = 0.134; w = 0.5; h = 0.8; colorBackground[] = WFBE_Background_Color; moving = 1; }; class CA_Background_Header : CA_Background { x = 0.273; y = 0.134; w = 0.5; h = 0.06; colorBackground[] = WFBE_Background_Color_Header; }; class CA_Background_Footer : CA_Background { x = 0.273; y = 0.134 + 0.76; w = 0.5; h = 0.04; colorBackground[] = WFBE_Background_Color_Sub; }; class CA_Menu_Title : RscText_Title { x = 0.28; y = 0.134 + 0.01; w = 0.5; text = $STR_WF_VOTING_Title; colorText[] = WFBE_Menu_Title_Color; }; class CA_Quit_Button: RscButton_Main { x = 0.273 + 0.45; y = 0.134 + 0.0075; w = 0.045; h = 0.045; text = "X"; shadow = 2; sizeEx = 0.03; onButtonClick = "closeDialog 0;"; }; }; class controls { class CA_Vote_List : RscListnBox { idc = 500100; x = 0.28; y = 0.134 + 0.07; w = 0.489; h = 0.665; columns[] = {0.01, 0.75}; colorSelectBackground[] = WFBE_Menu_ListBox_Select_Color; colorSelectBackground2[] = WFBE_Menu_ListBox_Select_Color; onLBSelChanged = "WFBE_MenuAction = 1"; }; class CA_Menu_TimeLeft : RscText { idc = 500101; x = 0.28; y = 0.134 + 0.762; w = 0.25; sizeEx = 0.03; text = ""; colorText[] = WFBE_Menu_Text_Color; shadow = 2; }; class CA_Menu_Elected : CA_Menu_TimeLeft { idc = 500102; x = 0.273 + 0.20; y = 0.134 + 0.762; w = 0.3; style = ST_RIGHT; text = ""; }; class CA_Menu_Time_Static : CA_Menu_TimeLeft { idc = 500103; x = 0.273 + 0.16; y = 0.134 + 0.762; w = 0.3; style = ST_RIGHT; text = $STR_WF_VOTING_TimeLeft; }; }; }; //--- WF3 Respawn menu. class WFBE_RespawnMenu { movingEnable = 1; idd = 511000; onLoad = "(_this) ExecVM 'Client\GUI\GUI_RespawnMenu.sqf'"; class controlsBackground { class CA_Background : RscText { x = 0; y = 0; w = 1; h = 1; colorBackground[] = WFBE_Background_Color; moving = 1; }; class CA_Background_Header : CA_Background { x = 0; y = 0; w = 1; h = 0.06; colorBackground[] = WFBE_Background_Color_Header; }; class CA_Background_Footer : CA_Background { x = 0; y = 0.96; w = 1; h = 0.04; colorBackground[] = WFBE_Background_Color_Sub; }; class CA_Menu_Title : RscText_Title { x = 0.007; y = 0.01; w = 0.5; text = $STR_WF_RESPAWN_Title; colorText[] = WFBE_Menu_Title_Color; }; class CA_Quit_Button: RscButton_Main { x = 0.95; y = 0.0075; w = 0.045; h = 0.045; text = "X"; shadow = 2; sizeEx = 0.03; onButtonClick = "closeDialog 0;"; }; }; class controls { class WF_MiniMap : RscMapControl { idc = 511001; x = 0.01; y = 0.07; w = 0.98; h = 0.8; ShowCountourInterval = 1; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseButtonDown = "mouseButtonDown = _this select 1;"; onMouseButtonUp = "mouseButtonUp = _this select 1;"; }; class CA_RespawnDetails : RscStructuredText { idc = 511002; x = 0.01; y = 0.965; w = 0.49; h = 0.13; size = 0.0275; shadow = 2; }; class CA_RespawnDelay : CA_RespawnDetails { idc = 511003; x = 0.5; w = 0.49; h = 0.13; }; class CA_Gear_Button : RscButton { idc = 511004; x = 0.68; y = 0.00940119; w = 0.25; sizeEx = 0.03221; colorBackground[] = WFBE_Menu_Button_Sub_Color; colorBackgroundActive[] = WFBE_Menu_Button_Sub_Color; colorFocused[] = WFBE_Menu_Button_Sub_Focused_Color; tooltip = $STR_WF_TOOLTIP_RespawnDefault; onButtonClick = "WFBE_MenuAction = 1;"; }; }; }; //--- WF3 Funds Menu. class WFBE_TransferMenu { movingEnable = 1; idd = 505000; onLoad = "(_this) ExecVM 'Client\GUI\GUI_TransferMenu.sqf'"; class controlsBackground { class CA_Background : RscText { x = 0; y = 0; w = 0.8; h = 0.6; colorBackground[] = WFBE_Background_Color; moving = 1; }; class CA_Background_Header : CA_Background { x = 0; y = 0; w = 0.8; h = 0.06; colorBackground[] = WFBE_Background_Color_Header; }; class CA_Background_Footer : CA_Background { x = 0; y = 0.56; w = 0.8; h = 0.04; colorBackground[] = WFBE_Background_Color_Sub; }; class CA_Menu_Title : RscText_Title { x = 0.007; y = 0.01; w = 0.5; text = $STR_WF_MAIN_FundsMenu; colorText[] = WFBE_Menu_Title_Color; }; class CA_Quit_Button: RscButton_Main { x = 0.75; y = 0.0075; w = 0.045; h = 0.045; text = "X"; shadow = 2; sizeEx = 0.03; onButtonClick = "closeDialog 0;"; }; class CA_Menu_Details : RscText { x = 0.405; y = 0.075; w = 0.385; h = 0.18; colorBackground[] = {0.5, 0.5, 0.5, 0.15}; style = ST_TEXT_BG; }; class CA_Edit_BG : RscText { x = 0.415; y = 0.165; w = 0.15; colorBackground[] = WFBE_Background_Color_Header; }; }; class controls { class CA_TransferList : RscListnBox { idc = 505001; x = 0.000983551; y = 0.065; w = 0.4; h = 0.488; columns[] = {0.01, 0.3, 0.75}; rowHeight = 0.03; onLBDblClick = "WFBE_MenuAction = 1"; }; class CA_Send : RscButton_Main { x = 0.595; y = 0.562; w = 0.2; h = 0.035; sizeEx = 0.035; text = $STR_WF_Send; action = "WFBE_MenuAction = 1"; }; class CA_AmountDetails : RscText { x = 0.415; y = 0.08; w = 0.2; sizeEx = 0.030; text = $STR_WF_Amount; }; class CA_Funds_Slider : RscXSliderH { idc = 505002; x = 0.415; y = 0.12; w = 0.365; h = 0.029412; onSliderPosChanged = "WFBE_MenuAction = 2"; }; class CA_Funds_Edit : RscEdit { idc = 505003; x = 0.415; y = 0.165; w = 0.15; text = "0"; sizeEx = 0.035; }; class CA_Funds : RscStructuredText { idc = 505004; x = 0.415; y = 0.21; w = 0.3; h = 0.035; size = 0.03; colorText[] = {0.543, 0.5742, 0.4102, 1.0}; }; }; }; //--- WF3 Gear Menu. class WFBE_BuyGearMenu { movingEnable = 1; idd = 503000; onLoad = "(_this) ExecVM 'Client\GUI\GUI_BuyGearMenu.sqf'"; class controlsBackground { class CA_Background : RscText { x = 0; y = 0; w = 1; h = 1; colorBackground[] = WFBE_Background_Color; moving = 1; }; class CA_Background_Header : CA_Background { x = 0; y = 0; w = 1; h = 0.06; colorBackground[] = WFBE_Background_Color_Header; }; class CA_Background_Footer : CA_Background { x = 0; y = 0.96; w = 1; h = 0.04; colorBackground[] = WFBE_Background_Color_Sub; }; class CA_Menu_Title : RscText_Title { x = 0.007; y = 0.01; w = 0.5; text = "Gear Purchase Menu :"; colorText[] = WFBE_Menu_Title_Color; }; class CA_Menu_Gear : RscText { x = 0.5; y = 0.06; w = 0.5; h = 0.9; colorBackground[] = {0.5, 0.5, 0.5, 0.15}; }; class LineTRH1 : RscText { x = 0; y = 0.768; w = 0.5; h = 0.001; colorBackground[] = {0.2588, 0.7137, 1, 0.7}; }; class CA_Label_View : RscText { x = 0.01; y = 0.195; w = 0.20; text = "View:"; sizeEx = 0.035; }; class CA_Label_Target : CA_Label_View { y = 0.15; text = "Target:"; }; class CA_Quit_Button: RscButton_Main { x = 0.95; y = 0.0075; w = 0.045; h = 0.045; text = "X"; shadow = 2; sizeEx = 0.03; onButtonClick = "closeDialog 0;"; }; class CA_Back_Button : CA_Quit_Button { x = 0.895; text = "<<"; onButtonClick = "WFBE_MenuAction = 1000;"; tooltip = $STR_WF_TOOLTIP_BackButton; }; }; class controls { class CA_GearList : RscListnBox { idc = 503001; x = 0.000983551; // y = 0.24; y = 0.28; w = 0.493697; // h = 0.505; h = 0.48; columns[] = {0.01, 0.25, 0.75}; rowHeight = 0.03; onLBDblClick = "WFBE_MenuAction = 1"; onLBSelChanged = "WFBE_MenuAction = 2"; }; class CA_AmmoList : CA_GearList { idc = 503002; // y = 0.76; y = 0.775; // h = 0.195; h = 0.180; onLBDblClick = "WFBE_MenuAction = 3"; }; class CA_Combo_View : RscCombo { idc = 503003; x = 0.15; y = 0.195; w = 0.34; h = 0.037; onLBSelChanged = "WFBE_MenuAction = 301"; }; class CA_Combo_Target : CA_Combo_View { idc = 503004; y = 0.15; onLBSelChanged = "WFBE_MenuAction = 302"; }; class FilterButtonTemplate : RscClickableText { idc = 503301; style = 48 + 0x800; x = 0.00642873; y = 0.034482; w = 0.0699999; h = 0.11; text = "Client\Images\gearicontemplate.paa"; action = "UINamespace setVariable ['wfbe_display_buygear_tab', 0];"; }; class FilterButtonAll : FilterButtonTemplate { idc = 503302; x = 0.0814287; text = "Client\Images\geariconall.paa"; action = "UINamespace setVariable ['wfbe_display_buygear_tab', 1];"; }; class FilterButtonPrimary : FilterButtonTemplate { idc = 503303; x = 0.16979; text = "Client\Images\geariconprimary.paa"; action = "UINamespace setVariable ['wfbe_display_buygear_tab', 2];"; }; class FilterButtonSecondary : FilterButtonTemplate { idc = 503304; x = 0.259109; text = "Client\Images\geariconsecondary.paa"; action = "UINamespace setVariable ['wfbe_display_buygear_tab', 3];"; }; class FilterButtonSidearm : FilterButtonTemplate { idc = 503305; x = 0.33979; text = "Client\Images\geariconsidearm.paa"; action = "UINamespace setVariable ['wfbe_display_buygear_tab', 4];"; }; class FilterButtonMisc : FilterButtonTemplate { idc = 503306; x = 0.421555; text = "Client\Images\geariconmisc.paa"; action = "UINamespace setVariable ['wfbe_display_buygear_tab', 5];"; }; class PrimaryWeapon : RscClickableText { idc = 503401; x = 0.502842; y = 0.200302; w = 0.310369; h = 0.198179; style = 48 + 0x800; soundDoubleClick[] = {"", 0.1, 1}; colorBackground[] = {0.6, 0.83, 0.47, 1}; colorBackgroundSelected[] = {0.6, 0.83, 0.47, 1}; colorFocused[] = {0, 0, 0, 0}; color[] = {0.85, 0.85, 0.85, 1}; colorText[] = {0.85, 0.85, 0.85, 1}; colorActive[] = {1, 1, 1, 1}; text = "\Ca\UI\Data\ui_gear_gun_gs.paa"; action = "WFBE_MenuAction = 901"; }; class SecondaryWeapon : PrimaryWeapon { idc = 503402; y = 0.401362; text = "\Ca\UI\Data\ui_gear_sec_gs.paa"; action = "WFBE_MenuAction = 902"; }; class Sidearm : PrimaryWeapon { idc = 503403; x = 0.576806; y = 0.607022; w = 0.113; h = 0.15; text = "\Ca\UI\Data\ui_gear_hgun_gs.paa"; action = "WFBE_MenuAction = 903"; }; class InventorySlot0 : RscClickableText { idc = 503501; x = 0.816052; y = 0.250721; w = 0.06; h = 0.08; text = "\Ca\UI\Data\ui_gear_mag_gs.paa"; action = "UINamespace setVariable ['wfbe_display_buygear_pool_main', 1]"; }; class InventorySlot1 : InventorySlot0 { idc = 503502; x = 0.878093; y = 0.250721; action = "UINamespace setVariable ['wfbe_display_buygear_pool_main', 2]"; }; class InventorySlot2 : InventorySlot0 { idc = 503503; x = 0.940501; y = 0.250721; action = "UINamespace setVariable ['wfbe_display_buygear_pool_main', 3]"; }; class InventorySlot3 : InventorySlot0 { idc = 503504; x = 0.816052; y = 0.341169; action = "UINamespace setVariable ['wfbe_display_buygear_pool_main', 4]"; }; class InventorySlot4 : InventorySlot0 { idc = 503505; x = 0.878093; y = 0.341169; action = "UINamespace setVariable ['wfbe_display_buygear_pool_main', 5]"; }; class InventorySlot5 : InventorySlot0 { idc = 503506; x = 0.940501; y = 0.341169; action = "UINamespace setVariable ['wfbe_display_buygear_pool_main', 6]"; }; class InventorySlot6 : InventorySlot0 { idc = 503507; x = 0.816052; y = 0.429373; action = "UINamespace setVariable ['wfbe_display_buygear_pool_main', 7]"; }; class InventorySlot7 : InventorySlot0 { idc = 503508; x = 0.878093; y = 0.429373; action = "UINamespace setVariable ['wfbe_display_buygear_pool_main', 8]"; }; class InventorySlot8 : InventorySlot0 { idc = 503509; x = 0.940501; y = 0.429373; action = "UINamespace setVariable ['wfbe_display_buygear_pool_main', 9]"; }; class InventorySlot9 : InventorySlot0 { idc = 503510; x = 0.816052; y = 0.519938; action = "UINamespace setVariable ['wfbe_display_buygear_pool_main', 10]"; }; class InventorySlot10 : InventorySlot0 { idc = 503511; x = 0.878093; y = 0.519938; action = "UINamespace setVariable ['wfbe_display_buygear_pool_main', 11]"; }; class InventorySlot11 : InventorySlot0 { idc = 503512; x = 0.940501; y = 0.519938; action = "UINamespace setVariable ['wfbe_display_buygear_pool_main', 12]"; }; class SidearmInventorySlot0 : RscClickableText { idc = 503513; x = 0.695848; y = 0.607022; w = 0.055; h = 0.074; text = "\Ca\UI\Data\ui_gear_hgunmag_gs.paa"; action = "UINamespace setVariable ['wfbe_display_buygear_pool_gun', 1]"; }; class SidearmInventorySlot1 : SidearmInventorySlot0 { idc = 503514; x = 0.75653; y = 0.607022; action = "UINamespace setVariable ['wfbe_display_buygear_pool_gun', 2]"; }; class SidearmInventorySlot2 : SidearmInventorySlot0 { idc = 503515; x = 0.816892; y = 0.607022; action = "UINamespace setVariable ['wfbe_display_buygear_pool_gun', 3]"; }; class SidearmInventorySlot3 : SidearmInventorySlot0 { idc = 503516; x = 0.877253; y = 0.607022; action = "UINamespace setVariable ['wfbe_display_buygear_pool_gun', 4]"; }; class SidearmInventorySlot4 : SidearmInventorySlot0 { idc = 503517; x = 0.695848; y = 0.688504; action = "UINamespace setVariable ['wfbe_display_buygear_pool_gun', 5]"; }; class SidearmInventorySlot5 : SidearmInventorySlot0 { idc = 503518; x = 0.756529; y = 0.688504; action = "UINamespace setVariable ['wfbe_display_buygear_pool_gun', 6]"; }; class SidearmInventorySlot6 : SidearmInventorySlot0 { idc = 503519; x = 0.816892; y = 0.688504; action = "UINamespace setVariable ['wfbe_display_buygear_pool_gun', 7]"; }; class SidearmInventorySlot7 : SidearmInventorySlot0 { idc = 503520; x = 0.877252; y = 0.688505; action = "UINamespace setVariable ['wfbe_display_buygear_pool_gun', 8]"; }; class MiscInventorySlot0 : RscClickableText { idc = 503521; x = 0.575126; y = 0.774467; w = 0.055; h = 0.074; colorActive[] = {0.85, 0.85, 0.85, 1}; text = "\Ca\UI\Data\ui_gear_eq_gs.paa"; action = "UINamespace setVariable ['wfbe_display_buygear_misc', 0]"; }; class MiscInventorySlot1 : MiscInventorySlot0 { idc = 503522; x = 0.635487; y = 0.774468; action = "UINamespace setVariable ['wfbe_display_buygear_misc', 1]"; }; class MiscInventorySlot2 : MiscInventorySlot0 { idc = 503523; x = 0.695848; y = 0.774468; action = "UINamespace setVariable ['wfbe_display_buygear_misc', 2]"; }; class MiscInventorySlot3 : MiscInventorySlot0 { idc = 503524; x = 0.75653; y = 0.774468; action = "UINamespace setVariable ['wfbe_display_buygear_misc', 3]"; }; class MiscInventorySlot4 : MiscInventorySlot0 { idc = 503525; x = 0.816892; y = 0.774468; action = "UINamespace setVariable ['wfbe_display_buygear_misc', 4]"; }; class MiscInventorySlot5 : MiscInventorySlot0 { idc = 503526; x = 0.877252; y = 0.774468; action = "UINamespace setVariable ['wfbe_display_buygear_misc', 5]"; }; class MiscInventorySlot6 : MiscInventorySlot0 { idc = 503527; x = 0.575126; y = 0.85595; action = "UINamespace setVariable ['wfbe_display_buygear_misc', 6]"; }; class MiscInventorySlot7 : MiscInventorySlot0 { idc = 503528; x = 0.635487; y = 0.85595; action = "UINamespace setVariable ['wfbe_display_buygear_misc', 7]"; }; class MiscInventorySlot8 : MiscInventorySlot0 { idc = 503529; x = 0.695848; y = 0.85595; action = "UINamespace setVariable ['wfbe_display_buygear_misc', 8]"; }; class MiscInventorySlot9 : MiscInventorySlot0 { idc = 503530; x = 0.75653; y = 0.85595; action = "UINamespace setVariable ['wfbe_display_buygear_misc', 9]"; }; class MiscInventorySlot10 : MiscInventorySlot0 { idc = 503531; x = 0.816892; y = 0.85595; action = "UINamespace setVariable ['wfbe_display_buygear_misc', 10]"; }; class MiscInventorySlot11 : MiscInventorySlot0 { idc = 503532; x = 0.877253; y = 0.85595; action = "UINamespace setVariable ['wfbe_display_buygear_misc', 11]"; }; class SpecialInventorySlot0 : InventorySlot0 { idc = 503533; x = 0.507043; y = 0.0586288; w = 0.11384; h = 0.136554; colorActive[] = {0.85, 0.85, 0.85, 1}; text = "\Ca\UI\Data\ui_gear_eq_gs.paa"; action = "WFBE_MenuAction = 904"; }; class SpecialInventorySlot1 : SpecialInventorySlot0 { idc = 503534; x = 0.880612; y = 0.0575075; action = "WFBE_MenuAction = 905"; }; class CA_CargoList : CA_GearList { idc = 503005; x = 0.500983551; w = 0.493697; h = 0.505; onLBDblClick = "WFBE_MenuAction = 906"; }; class CA_CargoDetails : RscStructuredText { idc = 503006; x = 0.500983551; y = 0.08; w = 0.24; h = 0.13; size = 0.0250; shadow = 2; }; class CA_CargoDetails2 : CA_CargoDetails { idc = 503007; x = 0.755983551; }; class CA_Purchase : RscButton_Main { x = 0.875; y = 0.962; w = 0.12; h = 0.035; sizeEx = 0.035; text = "Buy"; action = "WFBE_MenuAction = 501"; }; class CA_PurchaseDetails : CA_CargoDetails { idc = 503008; x = 0.51; y = 0.965; w = 0.3; h = 0.13; }; class CA_MakeTemplate : CA_Purchase { idc = 503009; x = 0.005; w = 0.24; sizeEx = 0.03221; colorBackground[] = WFBE_Menu_Button_Sub_Color; colorBackgroundActive[] = WFBE_Menu_Button_Sub_Color; colorFocused[] = WFBE_Menu_Button_Sub_Focused_Color; text = "Create Template"; action = "WFBE_MenuAction = 601"; }; class CA_DeleteTemplate : CA_MakeTemplate { idc = 503010; x = 0.255; text = "Delete Template"; action = "WFBE_MenuAction = 602"; }; class CA_FundsDetails : CA_CargoDetails { idc = 503011; x = 0.01; y = 0.245; w = 0.3; h = 0.13; }; class CA_QuickReload : CA_MakeTemplate { idc = 503012; x = 0.505; y = 0.01; w = 0.17; text = "Reload"; action = "WFBE_MenuAction = 701"; }; class CA_QuickClear : CA_MakeTemplate { idc = 503013; x = 0.685; y = 0.01; w = 0.17; text = "Clear"; action = "WFBE_MenuAction = 702"; }; }; }; //--- Main Menu. | ALL DONE! class WF_Menu { movingEnable = 1; idd = 11000; onLoad = "ExecVM ""Client\GUI\GUI_Menu.sqf"""; class controlsBackground { class Background_M : RscText { x = 0.17467; y = 0.186955; w = 0.65066; h = 0.63192; moving = 1; colorBackground[] = WFBE_Background_Color; }; class Background_H : RscText { x = 0.17467; y = 0.186955; w = 0.65066; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Header; }; class Background_F : RscText { x = 0.17467; y = 0.766375; w = 0.65066; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Footer; }; class Background_L : RscText { x = 0.17467; y = 0.238455; w = 0.65066; h = WFBE_Background_Border_Thick; colorBackground[] = WFBE_Background_Border; }; }; class controls { class Button_A : RscShortcutButtonMain { idc = 11001; x = 0.17598; y = 0.250358; w = 0.313727; h = 0.104575; text = $STR_WF_MAIN_Purchase_Units; tooltip = $STR_WF_TOOLTIP_MainMenu_Purchase_Units; action = "MenuAction = 1"; }; class Button_B : RscShortcutButtonMain { idc = 11002; x = 0.17598; y = 0.35116; w = 0.313727; h = 0.104575; text = $STR_WF_MAIN_Purchase_Gear; tooltip = $STR_WF_TOOLTIP_MainMenu_Purchase_Gear; action = "MenuAction = 2"; }; class Button_C : RscShortcutButtonMain { idc = 11003; x = 0.17598; y = 0.451959; w = 0.313727; h = 0.104575; text = $STR_WF_MAIN_TeamMenu; tooltip = $STR_WF_TOOLTIP_MainMenu_TeamMenu; action = "MenuAction = 3"; }; class Button_D : RscShortcutButtonMain { idc = 11004; x = 0.510943; y = 0.65356; w = 0.313727; h = 0.104575; text = $STR_WF_MAIN_VotingMenu; tooltip = $STR_WF_TOOLTIP_MainMenu_VoteForCommander; action = "MenuAction = 4"; }; class Button_E : RscShortcutButtonMain { idc = 11005; x = 0.510943; y = 0.250358; w = 0.313727; h = 0.104575; text = $STR_WF_MAIN_CommandMenu; tooltip = $STR_WF_TOOLTIP_CommandMenu_Commandteam; action = "MenuAction = 5"; }; class Button_F : RscShortcutButtonMain { idc = 11006; x = 0.17598; y = 0.55276; w = 0.313727; h = 0.104575; text = $STR_WF_MAIN_TacticalMenu; tooltip = $STR_WF_TOOLTIP_CommandMenu_SpecialMenu; action = "MenuAction = 6"; }; class Button_G : RscShortcutButtonMain { idc = 11007; x = 0.510943; y = 0.451959; w = 0.313727; h = 0.104575; text = $STR_WF_MAIN_UpgradeMenu; tooltip = $STR_WF_TOOLTIP_CommandMenu_Upgrade_Menu; action = "MenuAction = 7"; }; class Button_H : RscShortcutButtonMain { idc = 11008; x = 0.510943; y = 0.35116; w = 0.313727; h = 0.104575; text = $STR_WF_MAIN_EconomyMenu; tooltip = $STR_WF_TOOLTIP_CommandMenu_Commander_Menu; action = "MenuAction = 8"; }; class Button_I : RscShortcutButtonMain { idc = 11009; x = 0.17598; y = 0.65356; w = 0.313727; h = 0.104575; text = $STR_WF_SupportMenu; tooltip = $STR_WF_TOOLTIP_CommandMenu_SupportMenu; action = "MenuAction = 9"; }; class Button_J : RscShortcutButtonMain { idc = 11010; x = 0.510943; y = 0.55276; w = 0.313727; h = 0.104575; text = $STR_WF_MAIN_GroupsMenu; action = "MenuAction = 13"; }; class TitleMenu: RscText_Title { idc = 11015; x = 0.178164; y = 0.19379; w = 0.800001; sizeEx = 0.035; }; class CA_PA_Button : RscClickableText { idc = 11012; x = 0.776399; y = 0.191982; w = 0.04; h = 0.04; text = "\ca\ui\data\iconvehicle_ca.paa"; action = "MenuAction = 12"; tooltip = $STR_WF_TOOLTIP_Parameter; }; class CA_UN_Button : RscClickableText { idc = 11013; x = 0.194088; y = 0.767144; w = 0.045; h = 0.045; text = "\ca\ui\data\stats_soft_ca.paa"; action = "MenuAction = 10"; tooltip = $STR_WF_TOOLTIP_Unflip; }; class CA_HB_Button : RscClickableText { idc = 11014; x = 0.265514; y = 0.766938; w = 0.045; h = 0.045; text = "\ca\ui\data\editor_2d_camera_ca.paa"; action = "MenuAction = 11"; tooltip = $STR_WF_TOOLTIP_HeadBugFix; }; /* Exit */ class Exit_Button : RscButton_Exit { x = 0.778103; y = 0.769671; onButtonClick = "closeDialog 0;"; tooltip = $STR_WF_TOOLTIP_CloseButton; }; }; }; //--- Team Menu. | ALL DONE! class RscMenu_Team { movingEnable = 1; idd = 13000; onLoad = "_this ExecVM ""Client\GUI\GUI_Menu_Team.sqf"""; class controlsBackground { class Background_M : RscText { x = 0.187276; y = 0.200401; w = 0.625448; h = 0.599268; colorBackground[] = WFBE_Background_Color; moving = 1; }; class Background_H : RscText { x = 0.187276; y = 0.200401; w = 0.625448; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Header; }; class Background_F : RscText { x = 0.187276; y = 0.747169; w = 0.625448; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Footer; }; class Background_L : RscText { x = 0.187276; y = 0.251901; w = 0.625448; h = WFBE_Background_Border_Thick; colorBackground[] = WFBE_Background_Border; }; }; class controls { class Title_TeamMenu : RscText_Title { idc = 13001; x = 0.192941; y = 0.206879; w = 0.3; text = $STR_WF_MAIN_TeamMenu; }; /* Video */ class Video_Subtitle : RscText_SubTitle { idc = 13101; x = 0.19634; y = 0.265506; w = 0.3; text = $STR_WF_TEAM_VideoOptionsLabel; }; class CA_VD_Label : RscText { idc = 13002; x = 0.197022; y = 0.314747; w = 0.3; }; class CA_VD_Slider : RscXSliderH { idc = 13003; x = 0.513947; y = 0.31565; w = 0.279999; h = 0.029412; }; class CA_TG_Label : RscText { idc = 13004; x = 0.197022; y = 0.35722; w = 0.3; }; class CA_TG_Slider : RscXSliderH { idc = 13005; x = 0.514313; y = 0.363086; w = 0.279999; h = 0.029412; }; /* Transfer */ class CA_Transfer_SubTitle : RscText_SubTitle { idc = 13012; x = 0.19634; y = 0.465507; w = 0.3; text = $STR_WF_TEAM_MoneyTransferLabel; }; class CA_TM_Label : RscText { idc = 13006; x = 0.196002; y = 0.57032; w = 0.3; }; class CA_TM_Slider : RscXSliderH { idc = 13007; x = 0.513947; y = 0.517846; w = 0.279999; h = 0.029412; }; class CA_TM_Combo : RscCombo { idc = 13008; x = 0.202366; y = 0.517987; w = 0.279999; h = 0.035; }; class CA_TM_Button : RscButton { idc = 13009; x = 0.513949; y = 0.572956; w = 0.279999; text = $STR_WF_TEAM_TransferButton; action = "MenuAction = 1"; }; class CA_TA_Button : RscButton_Main { idc = 13109; x = 0.513949; y = 0.465; w = 0.279999; text = "Transfer (Adv)"; action = "MenuAction = 101"; }; class CA_IC_SubTitle : RscText_SubTitle { idc = 13010; x = 0.380877; y = 0.20787; w = 0.426891; style = ST_RIGHT; }; /* Disband */ class CA_Disband_SubTitle : RscText_SubTitle { idc = 13011; x = 0.19532; y = 0.642376; w = 0.3; text = $STR_WF_TEAM_DisbandLabel; }; class CA_DB_Combo : RscCombo { idc = 13013; x = 0.202364; y = 0.691727; w = 0.279999; h = 0.035; }; class CA_DB_Button : RscButton { idc = 13014; x = 0.513951; y = 0.691511; w = 0.279999; text = $STR_WF_TEAM_DisbandButton; action = "MenuAction = 3"; }; /* FX */ class CA_FX_Label : RscText { idc = 13015; x = 0.19634; y = 0.405641; w = 0.3; text = $STR_WF_TEAM_GraphicFilterLabel; }; class CA_FX_Combo : RscCombo { idc = 13018; x = 0.514313; y = 0.406464; w = 0.0999999; h = 0.035; onLBSelChanged = "MenuAction = 6"; }; /* Vote PopUp */ class VPOPON_Button : RscButton { idc = 13019; x = 0.203; y = 0.755; w = 0.279; text = ""; action = "MenuAction = 13"; } /* Seperator */ class Line_TRH1 : RscText { x = 0.192941; y = 0.455916; w = 0.614486; h = WFBE_SPT1; colorBackground[] = WFBE_SPC1; }; class Line_TRH2 : RscText { x = 0.192941; y = 0.629907; w = 0.614486; h = WFBE_SPT1; colorBackground[] = WFBE_SPC1; }; /* Back */ class Back_Button : RscButton_Back { x = 0.704632; y = 0.753185; action = "MenuAction = 8"; tooltip = $STR_WF_TOOLTIP_BackButton; }; /* Exit */ class Exit_Button : RscButton_Exit { x = 0.766877; y = 0.753185; onButtonClick = "closeDialog 0;"; tooltip = $STR_WF_TOOLTIP_CloseButton; }; }; }; //--- BuyUnits Menu. | ALL DONE! class RscMenu_BuyUnits { movingEnable = 1; idd = 12000; onLoad = "_this ExecVM ""Client\GUI\GUI_Menu_BuyUnits.sqf"""; class controlsBackground { class Background_M : RscText { x = -0.000119045; y = 0.000960164; w = 1.00024; h = 1.00046; moving = 1; colorBackground[] = WFBE_Background_Color; }; class Background_H : RscText { x = -0.000119045; y = 0.000960164; w = 1.00024; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Header; }; class Background_F : RscText { x = -0.000119045; y = 0.948079045; w = 1.00024; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Footer; }; class Background_L : RscText { x = -0.000119045; y = 0.051619045; w = 1.00024; h = WFBE_Background_Border_Thick; colorBackground[] = WFBE_Background_Border; }; }; class controls { /* Controls */ class CA_BuyList : RscListBoxA { idc = 12001; x = 0.000983551; y = 0.184483; w = 0.493697; h = 0.493299; columns[] = {0.01, 0.19, 0.75}; drawSideArrows = 0; idcRight = -1; idcLeft = -1; onLBSelChanged = "MenuAction = 302"; onLBDblClick = "MenuAction = 1"; }; class CA_Purchase : RscButton { idc = 12002; x = 0.688983; y = 0.956626; w = 0.12; text = $STR_WF_Purchase; action = "MenuAction = 1"; }; class Title_BuyUnits : RscText_Title { idc = 12004; x = 0.00477695; y = 0.00775912; w = 0.3; text = $STR_WF_MAIN_Purchase_Units; }; /* Factory-Picture */ class WF_Con1 : RscClickableText { idc = 12005; x = 0.499874; y = 0.0612043; w = 0.072; h = 0.072; text = "\CA\warfare2\Images\con_barracks.paa"; tooltip = $STR_WF_TOOLTIP_UnitPurchase_Con1; action = "MenuAction = 101"; }; class WF_Con2 : WF_Con1 { idc = 12006; x = 0.585001; text = "\CA\warfare2\Images\con_light.paa"; tooltip = $STR_WF_TOOLTIP_UnitPurchase_Con2; action = "MenuAction = 102"; }; class WF_Con3 : WF_Con1 { idc = 12007; x = 0.670123; text = "\CA\warfare2\Images\con_heavy.paa"; tooltip = $STR_WF_TOOLTIP_UnitPurchase_Con3; action = "MenuAction = 103"; }; class WF_Con4 : WF_Con1 { idc = 12008; x = 0.753571; text = "\CA\warfare2\Images\con_aircraft.paa"; tooltip = $STR_WF_TOOLTIP_UnitPurchase_Con4; action = "MenuAction = 104"; }; class WF_Con7 : WF_Con1 { idc = 12021; x = 0.838699; text = "\CA\warfare2\Images\con_airport.paa"; tooltip = $STR_WF_TOOLTIP_UnitPurchase_Con5; action = "MenuAction = 106"; }; class WF_Con5 : WF_Con1 { idc = 12020; x = 0.923826; text = "Client\Images\con_depot.paa"; tooltip = $STR_WF_TOOLTIP_UnitPurchase_Con6; action = "MenuAction = 105"; }; /**/ class CA_Portrait : RscPicture { idc = 12009; x = 0.00434637; y = 0.726386; w = 0.186974; h = 0.219467; style = 0x30 + 0x800; }; /* Vehicle-Crew */ class WF_Lock : RscClickableText { idc = 12023; x = 0.443363; y = 0.128362; w = 0.05; h = 0.05; text = "Client\Images\i_lock.paa"; tooltip = $STR_WF_TOOLTIP_Buy_Locked; action = "MenuAction = 401"; }; class WF_Driver : WF_Lock { idc = 12012; x = 0.242185; text = "Client\Images\i_driver.paa"; tooltip = $STR_WF_TOOLTIP_Buy_Driver; action = "MenuAction = 201"; }; class WF_Gunner : WF_Lock { idc = 12013; x = 0.292267; text = "Client\Images\i_gunner.paa"; tooltip = $STR_WF_TOOLTIP_Buy_Gunner; action = "MenuAction = 202"; }; class WF_Commander : WF_Lock { idc = 12014; x = 0.343194; text = "Client\Images\i_commander.paa"; tooltip = $STR_WF_TOOLTIP_Buy_Commander; action = "MenuAction = 203"; }; class WF_Extra : WF_Lock { idc = 12041; x = 0.393278; text = "Client\Images\i_extra.paa"; tooltip = $STR_WF_TOOLTIP_Buy_Extra; action = "MenuAction = 204"; }; /**/ class WF_MiniMap : RscMapControl { idc = 12015; x = 0.5; y = 0.185168; w = 0.499378; h = 0.493457; ShowCountourInterval = 1; }; class CA_Factory_Label : RscText { idc = 12016; x = 0.5; y = 0.140446; w = 0.3; text = $STR_WF_UNITS_Factory; sizeEx = 0.035; }; class CA_Combo_Factory : RscCombo { idc = 12018; x = 0.626048; y = 0.140446; w = 0.368908; h = 0.037; onLBSelChanged = "MenuAction = 301"; }; class CA_Cash_SubTitle : RscText_SubTitle { idc = 12019; x = 0.694657; y = 0.007759; w = 0.3; style = ST_RIGHT; }; class CA_Details : RscStructuredText { idc = 12022; x = 0.5; y = 0.699494; w = 0.500294; h = 0.242927; size = 0.0250; }; class CA_Queu_SubTitle : RscText_SubTitle { idc = 12024; x = 0.350419; y = 0.00775906; w = 0.3; style = ST_CENTER; }; class CA_Faction_Label : RscText { idc = 12025; x = 0.000797182; y = 0.062964; w = 0.3; sizeEx = 0.035; }; class CA_Combo_Faction : RscCombo { idc = 12026; x = 0.218874; y = 0.0652035; w = 0.261343; h = 0.035; onLBSelChanged = "MenuAction = 303"; }; /* Info-Labels */ class CA_Faction_Small : RscText_Small { idc = 12027; x = 0.194959; y = 0.692771; w = 0.3; h = 0.037; text = $STR_WF_UNITS_FactionLabel; }; class CA_Price_Small : CA_Faction_Small { idc = 12010; x = 0.194959; y = 0.730336; text = $STR_WF_Price; }; class CA_Time_Small : CA_Faction_Small { idc = 12028; x = 0.194957; y = 0.76566; text = $STR_WF_UNITS_DurationLabel; }; class CA_Skill_Small : CA_Faction_Small { idc = 12029; x = 0.194959; y = 0.803222; text = $STR_WF_UNITS_SkillLabel; }; class CA_TransportCapacity_Small : CA_Faction_Small { idc = 12030; x = 0.194959; y = 0.838545; text = $STR_WF_UNITS_TransportCabilityLabel; }; class CA_MaxSpeed_Small : CA_Faction_Small { idc = 12031; x = 0.194959; y = 0.876108; text = $STR_WF_UNITS_MaxSpeedLabel; }; class CA_Armor_Small : CA_Faction_Small { idc = 12032; x = 0.194959; y = 0.911431; text = $STR_WF_UNITS_ArmorLabel; }; /* Info-Values */ class CA_Faction_Value : RscText_Small { idc = 12033; x = 0.305041; y = 0.692773; w = 0.19; h = 0.037; style = 1; }; class CA_Price_Value : CA_Faction_Value { idc = 12034; x = 0.305042; y = 0.730336; colorText[] = {1, 0, 0, 1}; }; class CA_Time_Value : CA_Faction_Value { idc = 12035; x = 0.305041; y = 0.765659; }; class CA_Skill_Value : CA_Faction_Value { idc = 12036; x = 0.305041; y = 0.803222; }; class CA_TransportCapacity_Value : CA_Faction_Value { idc = 12037; x = 0.305042; y = 0.838545; }; class CA_MaxSpeed_Value : CA_Faction_Value{ idc = 12038; x = 0.305041; y = 0.876109; }; class CA_Armor_Value : CA_Faction_Value { idc = 12039; x = 0.30504; y = 0.911432; }; /**/ class CA_Unit_SubTitle : RscText_SubTitle { idc = 12040; x = 0.000575542; y = 0.686365; w = 0.3; text = $STR_WF_UNITS_InformationLabel; }; /* Seperator */ class LineTRH1 : RscText { x = 0.00470637; y = 0.685127; w = 0.990954; h = WFBE_SPT1; colorBackground[] = WFBE_SPC1; }; /* Back */ class Back_Button : RscButton_Back { x = 0.892748; y = 0.953506; action = "MenuAction = 2"; tooltip = $STR_WF_TOOLTIP_BackButton; }; /* Exit */ class Exit_Button : RscButton_Exit { x = 0.953972; y = 0.953506; onButtonClick = "closeDialog 0;"; tooltip = $STR_WF_TOOLTIP_CloseButton; }; }; }; //--- Command Menu. | ALL DONE! class RscMenu_Command { movingEnable = 1; idd = 14000; onLoad = "_this ExecVM 'Client\GUI\GUI_Menu_Command.sqf'"; class controlsBackground { class Background_M : RscText { x = 0.000960961; y = 0.00128184; w = 0.999761; h = 1.00023; moving = 1; colorBackground[] = WFBE_Background_Color; }; class Background_H : RscText { x = 0.000960961; y = 0.00128184; w = 0.999761; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Header; }; class Background_F : RscText { x = 0.000960961; y = 0.94901184; w = 0.999761; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Footer; }; class Background_L : RscText { x = 0.000960961; y = 0.05278184; w = 0.999761; h = WFBE_Background_Border_Thick; colorBackground[] = WFBE_Background_Border; }; }; class controls { class WF_MiniMap : RscMapControl { idc = 14002; x = 0.468907; y = 0.0563169; w = 0.532152; h = 0.892336; ShowCountourInterval = 1; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseButtonDown = "mouseButtonDown = _this Select 1"; onMouseButtonUp = "mouseButtonUp = _this Select 1"; }; class Title_OrderMenu : RscText_Title { idc = 14003; x = 0.00561695; y = 0.00775909; w = 0.3; text = $STR_WF_MAIN_CommandMenu; }; class CA_TakeTowns : RscButton { idc = 14005; x = 0.0057147; y = 0.423585; w = 0.22; text = $STR_WF_COMMAND_TakeTowns; action = "MenuAction = 101"; }; class CA_Move : CA_TakeTowns { idc = 14006; x = 0.00487578; y = 0.473669; text = $STR_WF_COMMAND_Move; action = "MenuAction = 102"; /* spezial */ colorBackground[] = {0.5882, 0.5882, 0.3529, 0.7}; colorBackgroundActive[] = {0.5882, 0.5882, 0.3529, 1}; colorFocused[] = {0.5882, 0.5882, 0.3529, 1}; }; class CA_Patrol : CA_TakeTowns { idc = 14007; x = 0.24437; y = 0.424035; text = $STR_WF_COMMAND_Patrol; action = "MenuAction = 103"; /* spezial */ colorBackground[] = {0.5882, 0.5882, 0.3529, 0.7}; colorBackgroundActive[] = {0.5882, 0.5882, 0.3529, 1}; colorFocused[] = {0.5882, 0.5882, 0.3529, 1}; }; class CA_Defend : CA_TakeTowns { idc = 14008; x = 0.24353; y = 0.472995; text = $STR_WF_COMMAND_Defense; action = "MenuAction = 104"; /* spezial */ colorBackground[] = {0.5882, 0.5882, 0.3529, 0.7}; colorBackgroundActive[] = {0.5882, 0.5882, 0.3529, 1}; colorFocused[] = {0.5882, 0.5882, 0.3529, 1}; }; /**/ class CA_BuyType_Label : RscText { idc = 14009; x = -0.000420049; y = 0.752941; w = 0.17; text = $STR_WF_COMMAND_BuyType; }; class CA_BuyType_Combo : RscCombo { idc = 14010; x = 0.162328; y = 0.755179; w = 0.302101; h = 0.035; }; class CA_Respawn : RscButton { idc = 14011; x = 0.631344; y = 0.957504; w = 0.23; text = $STR_WF_COMMAND_RespawnButton; action = "MenuAction = 201"; }; class CA_TeamList : RscListBox { idc = 14012; x = 0.00518636; y = 0.178967; w = 0.459244; h = 0.229759; rowHeight = 0.0219091; sizeEx = 0.03; style = 0x20;//--- MultiSelect LB. onLBSelChanged = "MenuAction = 1"; onLBDblClick = "MenuAction = 2"; }; class CA_Mission_Type : RscText { idc = 14013; x = 0.000842094; y = 0.142566; w = 0.3; }; class CA_AutoAIOn : RscButton { idc = 14014; x = 0.00470574; y = 0.957504; w = 0.3; text = $STR_WF_COMMAND_AutoAI; action = "MenuAction = 301"; }; class CA_AutoAIOff : CA_AutoAIOn { idc = 14015; x = 0.318572; text = $STR_WF_COMMAND_AutoAIOff; action = "MenuAction = 301"; }; class CA_SetBuy : RscButton { idc = 14016; x = 0.0440367; y = 0.801901; w = 0.42; text = $STR_WF_COMMAND_SetBuyType; action = "MenuAction = 302"; }; /**/ class CA_Behavior_Combo : RscCombo { idc = 14017; x = 0.214428; y = 0.531822; w = 0.25; h = 0.035; }; class CA_Combat_Combo : CA_Behavior_Combo { idc = 14018; x = 0.214428; y = 0.572941; }; class CA_Formation_Combo : CA_Behavior_Combo { idc = 14019; x = 0.214428; y = 0.614061; }; class CA_Speed_Combo : CA_Behavior_Combo { idc = 14020; x = 0.214428; y = 0.656302; }; /**/ class CA_Behavior_Label : RscText { idc = 14021; x = -0.000420049; y = 0.52958; w = 0.17; text = $STR_WF_COMMAND_Behavior; }; class CA_Combat_Label : CA_Behavior_Label { idc = 14022; x = -0.000420049; y = 0.5707; text = $STR_WF_COMMAND_CombatMode; }; class CA_Formation_Label : CA_Behavior_Label { idc = 14031; x = -0.000420049; y = 0.61182; text = $STR_WF_COMMAND_Formation; }; class CA_Speed_Label : CA_Behavior_Label { idc = 14023; x = -0.000420049; y = 0.654061; text = $STR_WF_COMMAND_Speed; }; class CA_SetToTeam : RscButton { idc = 14024; x = 0.0440339; y = 0.703026; w = 0.42; text = $STR_WF_COMMAND_SetTeamProperties; action = "MenuAction = 303"; }; class CA_Respawn_Combo : RscCombo { idc = 14025; x = 0.160647; y = 0.855182; w = 0.303781; h = 0.035; onLBSelChanged = "MenuAction = 305"; }; class CA_Respawn_Label : CA_Behavior_Label { idc = 14026; x = -0.000420049; y = 0.852941; text = $STR_WF_COMMAND_Respawn; }; class CA_SetRespawn : RscButton { idc = 14027; x = 0.0440337; y = 0.900783; w = 0.42; text = $STR_WF_COMMAND_SetRespawn; action = "MenuAction = 304"; }; class CA_Funds_Label : RscText { idc = 14028; x = 0.168488; y = 0.142689; w = 0.3; style = ST_RIGHT; }; class CA_Tab_Label : RscText_SubTitle { idc = 14030; x = 0.335; y = 0.0107146; w = 0.3; style = ST_CENTER; text = $STR_WF_COMMAND_SquadSettingsLabel; }; class CA_SetTask : RscButton { idc = 14032; x = 0.0440328; y = 0.621904; w = 0.42; text = $STR_WF_COMMAND_TaskTO_Set; action = "MenuAction = 306"; /* spezial */ colorBackground[] = {0.5882, 0.5882, 0.3529, 0.7}; colorBackgroundActive[] = {0.5882, 0.5882, 0.3529, 1}; colorFocused[] = {0.5882, 0.5882, 0.3529, 1}; }; /* HQ Team units details */ class CA_UnitsDetailList : RscListBoxA { idc = 14041; x = 0.00518636; y = 0.527339; w = 0.463445; h = 0.366386; columns[] = {0.01, 0.19}; drawSideArrows = 0; idcRight = -1; idcLeft = -1; rowHeight = 0.05; sizeEx = 0.023; onLBSelChanged = "MenuAction = 401"; onLBDblClick = "MenuAction = 3"; /* spezial */ colorText[] = {0, 0.875, 0, 0.8}; colorSelect[] = {0, 0.875, 0, 0.8}; colorSelect2[] = {0, 0.875, 0, 0.8}; /* extra */ colorSelectBackground[] = {0, 0, 0, 0.5}; colorSelectBackground2[] = {0, 0, 0, 0.5}; }; class CA_FUnflip : RscButton { idc = 14042; x = 0.24384; y = 0.900286; w = 0.22; text = $STR_WF_COMMAND_UnflipButton; action = "MenuAction = 402"; }; class CA_FDisband : RscButton { idc = 14043; x = 0.00493164; y = 0.900296; w = 0.22; text = $STR_WF_TEAM_DisbandButton; action = "MenuAction = 403"; }; class WF_Con1 : RscClickableText { idc = 14500; x = 0.136976; y = 0.0589629; w = 0.072; h = 0.072; text = "\CA\warfare2\Images\con_barracks.paa"; tooltip = $STR_WF_TOOLTIP_TeamOrders_Con1; action = "MenuAction = 601"; }; class WF_Con2 : WF_Con1 { idc = 14501; x = 0.290419; text = "Client\Images\con_task.paa"; tooltip = $STR_WF_TOOLTIP_TeamOrders_Con2; action = "MenuAction = 602"; }; class WF_Con3 : WF_Con1 { idc = 14502; x = 0.213698; text = "\CA\warfare2\Images\con_hq.paa"; tooltip = $STR_WF_TOOLTIP_TeamOrders_Con3; action = "MenuAction = 603"; }; /* Separators */ class LineTRH1 : RscText { idc = 14900; x = 0.00554727; y = 0.518182; w = 0.458181; h = WFBE_SPT1; colorBackground[] = WFBE_SPC1; }; class LineTRH2 : LineTRH1 { idc = 14901; x = 0.00554727; y = 0.845784; }; class LineTRH3 : LineTRH1 { idc = 14902; x = 0.00554727; y = 0.746904; }; /* Back */ class Back_Button : RscButton_Back { x = 0.892507; y = 0.953825; action = "MenuAction = 4"; tooltip = $STR_WF_TOOLTIP_BackButton; }; /* Exit */ class Exit_Button : RscButton_Exit { x = 0.955773; y = 0.953825; onButtonClick = "closeDialog 0;"; tooltip = $STR_WF_TOOLTIP_CloseButton; }; }; }; //--- Tactical Menu. | ALL DONE! class RscMenu_Tactical { movingEnable = 1; idd = 17000; onLoad = "_this ExecVM 'Client\GUI\GUI_Menu_Tactical.sqf'"; class controlsBackground { class Background_M : RscText { x = 0.000960961; y = 0.00128125; w = 0.999759; h = 1.00023; moving = 1; colorBackground[] = WFBE_Background_Color; }; class Background_H : RscText { x = 0.000960961; y = 0.00128125; w = 0.999759; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Header; }; class Background_F : RscText { x = 0.000960961; y = 0.94901125; w = 0.999759; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Footer; }; class Background_L : RscText { x = 0.000960961; y = 0.05278125; w = 0.999759; h = WFBE_Background_Border_Thick; colorBackground[] = WFBE_Background_Border; }; }; class controls { class WF_MiniMap : RscMapControl { idc = 17002; x = 0.374789; y = 0.0574369; w = 0.625427; h = 0.888975; ShowCountourInterval = 1; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseButtonDown = "mouseButtonDown = _this Select 1"; onMouseButtonUp = "mouseButtonUp = _this Select 1"; }; class Title_Tactical : RscText_Title { idc = 17003; x = 0.00561695; y = 0.00999998; w = 0.3; text = $STR_WF_MAIN_TacticalMenu; }; class CA_Artillery_SubTitle : RscText_SubTitle { idc = 17004; x = 0.00434637; y = 0.0596783; w = 0.2; text = $STR_WF_TACTICAL_Artillery; }; class CA_Artillery_Label_Radius : RscText { idc = 17030; x = 0.00602637; y = 0.182926; w = 0.2; text = $STR_WF_TACTICAL_ArtilleryRadius; }; class CA_Artillery_Label_Unit : RscText { idc = 17031; x = 0.00434496; y = 0.14259; w = 0.2; text = $STR_WF_TACTICAL_Artillery; }; class CA_Artillery_Slider : RscXSliderH { idc = 17005; x = 0.14652; y = 0.188795; w = 0.224033; h = 0.029412; }; class CA_SetFMission_Button : RscButton { idc = 17006; x = 0.12047; y = 0.515631; w = 0.25; text = $STR_WF_TACTICAL_ArtillerySetFireMission; action = "MenuAction = 1"; /* spezial */ colorBackground[] = {0.5882, 0.5882, 0.3529, 0.7}; colorBackgroundActive[] = {0.5882, 0.5882, 0.3529, 1}; colorFocused[] = {0.5882, 0.5882, 0.3529, 1}; }; class CA_FireMission_Button : RscButton { idc = 17007; x = 0.12047; y = 0.566833; w = 0.25; text = $STR_WF_TACTICAL_ArtilleryCallFireMission; action = "MenuAction = 2"; }; class CA_Artillery_Combo : RscCombo { idc = 17008; x = 0.145945; y = 0.146217; w = 0.147; h = 0.029412; onLBSelChanged = "MenuAction = 200"; }; class CA_Support_SubTitle : RscText_SubTitle { idc = 17009; x = 0.00518464; y = 0.622955; w = 0.2; text = $STR_WF_TACTICAL_Support; }; class CA_Artillery_Label_Status : RscText { idc = 17032; x = 0.00602637; y = 0.102254; w = 0.2; text = $STR_WF_TACTICAL_ArtilleryStatus; }; class CA_ArtilleryTimeout : RscStructuredText { idc = 17016; x = 0.139245; y = 0.107786; w = 0.213025; size = 0.03; shadow = 2; }; class SupportList : RscListBox { idc = 17019; x = 0.00602497; y = 0.663556; w = 0.365965; h = 0.237187; rowHeight = 0.01; sizeEx = 0.026; }; class CA_Button_Use : RscButton { idc = 17020; x = 0.22021; y = 0.905171; w = 0.15; text = $STR_WF_TACTICAL_RequestButton; action = "MenuAction = 20"; /* spezial */ colorBackground[] = {0.5882, 0.5882, 0.3529, 0.7}; colorBackgroundActive[] = {0.5882, 0.5882, 0.3529, 1}; colorFocused[] = {0.5882, 0.5882, 0.3529, 1}; }; class CA_SupportCost_Label : RscText { idc = 17026; x = 0.0119054; y = 0.907169; w = 0.11; text = "$STR_WF_TACTICAL_Price"; sizeEx = 0.032; }; class CA_SupportCost : RscText { idc = 17021; x = 0.111905; y = 0.907169; w = 0.11; sizeEx = 0.032; colorText[] = {1, 0, 0, 1}; }; class CA_InformationText : RscStructuredText { idc = 17022; x = 0.380816; y = 0.0188458; w = 0.614286; h = 0.035; size = 0.03; class Attributes { align = "center"; }; }; class Ca_ArtilleryToggle : RscClickableText { idc = 17023; x = 0.310672; y = 0.121233; w = 0.064; h = 0.064; text = "Client\Images\tog_arty.paa"; action = "MenuAction = 40"; tooltip = $STR_WF_TOOLTIP_ArtilleryToggle; }; class CA_ArtilleryList : RscListBoxA { idc = 17024; x = 0.00459768; y = 0.270084; w = 0.365209; h = 0.235; columns[] = {0.02, 0.55}; drawSideArrows = 0; idcRight = -1; idcLeft = -1; rowHeight = 0.05; sizeEx = 0.023; /* extra */ colorSelectBackground[] = {0, 0, 0, 0.5}; colorSelectBackground2[] = {0, 0, 0, 0.5}; onLBSelChanged = "MenuAction = 60"; }; class CA_ArtilleryTable_Label : RscText { idc = 17025; x = 0.00495766; y = 0.226604; w = 0.339999; }; /* Separators */ class LineTRH1 : RscText { x = 0.00638635; y = 0.61566; w = 0.364063; h = WFBE_SPT1; colorBackground[] = WFBE_SPC1; }; /* Back */ class Back_Button : RscButton_Back { x = 0.892328; y = 0.953825; action = "MenuAction = 30"; tooltip = $STR_WF_TOOLTIP_BackButton; }; /* Exit */ class Exit_Button : RscButton_Exit { x = 0.956614; y = 0.953825; onButtonClick = "closeDialog 0;"; tooltip = $STR_WF_TOOLTIP_CloseButton; }; }; }; //--- Upgrade Menu. | ALL DONE! class RscMenu_Upgrade { movingEnable = 1; idd = 18000; onLoad = "_this ExecVM ""Client\GUI\GUI_Menu_Upgrade.sqf"""; class controlsBackground { class Background_M : RscText { x = 0.0933989; y = 0.151421; w = 0.813204; h = 0.699949; moving = 1; colorBackground[] = WFBE_Background_Color; }; class Background_H : RscText { x = 0.0933989; y = 0.151421; w = 0.813204; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Header; }; class Background_F : RscText { x = 0.0933989; y = 0.798870; w = 0.813204; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Footer; }; class Background_L : RscText { x = 0.0933989; y = 0.202921; w = 0.813204; h = WFBE_Background_Border_Thick; colorBackground[] = WFBE_Background_Border; }; }; class controls { class Title_Upgrade : RscText_Title { idc = 18801; x = 0.1; y = 0.157621; w = 0.399999; text = $STR_WF_MAIN_UpgradeMenu; }; class CA_Label_TimeLeft : RscText { idc = 18802; x = 0.443216; y = 0.158741; w = 0.45; style = ST_RIGHT; }; /* Aircraft */ class LineTRH1 : RscText { x = 0.812039; y = 0.3; w = 0.0025; h = 0.4; colorBackground[] = {0.6941,0.6902,0.4431,1}; }; class LineTRH2 : LineTRH1 { x = 0.812674; y = 0.336547; w = 0.05; h = 0.00300001; }; class LineTRH3 : LineTRH1 { x = 0.763215; y = 0.439469; w = 0.05; h = 0.00300001; }; class LineTRH4 : LineTRH1 { x = 0.763394; y = 0.540148; w = 0.05; h = 0.00300001; }; class LineTRH5 : LineTRH1 { x = 0.812737; y = 0.5648; w = 0.05; h = 0.00300001; }; class LineTRH6 : LineTRH1 { x = 0.700909; y = 0.640347; w = 0.113265; h = 0.00300001; }; class LineTRH7 : LineTRH1 { x = 0.76336; y = 0.439833; w = 0.0025; h = 0.0300001; }; class LineTRH8 : LineTRH1 { x = 0.76336; y = 0.540672; w = 0.0025; h = 0.0300001; }; class LineTRH9 : LineTRH1 { x = 0.76336; y = 0.640393; w = 0.0025; h = 0.0300001; }; class LineTRH10 : LineTRH1 { x = 0.700997; y = 0.640154; w = 0.0025; h = 0.0300001; }; class LineTRH11 : LineTRH1 { x = 0.862185; y = 0.352101; w = 0.0025; h = 0.14; }; /* Heavy-Vehicle */ class LineTRH20 : LineTRH1 { x = 0.593264; y = 0.3; w = 0.0025; h = 0.4; }; class LineTRH21 : LineTRH1 { x = 0.545447; y = 0.439629; w = 0.0489796; h = 0.00300001; }; class LineTRH22 : LineTRH1 { x = 0.545713; y = 0.439833; w = 0.0025; h = 0.0300001; }; class LineTRH23 : LineTRH1 { x = 0.545713; y = 0.496975; w = 0.0025; h = 0.185; }; /* Light-Vehicle */ class LineTRH30 : LineTRH1 { x = 0.374489; y = 0.3; w = 0.0025; h = 0.4; }; class LineTRH31 : LineTRH1 { x = 0.375701; y = 0.339909; w = 0.05; h = 0.00300001; }; class LineTRH32 : LineTRH1 { x = 0.327268; y = 0.540469; w = 0.0489797; h = 0.00300001; }; class LineTRH33 : LineTRH1 { x = 0.327226; y = 0.540672; w = 0.0025; h = 0.0300001; }; /* Barracks */ class LineTRH40 : LineTRH1 { x = 0.186325; y = 0.3; w = 0.0025; h = 0.4; }; class LineTRH41 : LineTRH1 { x = 0.187465; y = 0.339909; w = 0.05; h = 0.00300001; }; class LineTRH42 : LineTRH1 { x = 0.137885; y = 0.439629; w = 0.05; h = 0.00300001; }; class LineTRH43 : LineTRH1 { x = 0.138151; y = 0.439831; w = 0.0025; h = 0.0300001; }; class LineTRH44 : LineTRH1 { x = 0.138149; y = 0.492493; w = 0.0025; h = 0.185; }; /* Normal GUI Ctrls */ class WF_Con1 : RscClickableText { idc = 18001; x = 0.156325; y = 0.238231; w = 0.064; h = 0.064; text = "Client\Images\wf_b.paa"; action = "MenuAction = 1"; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseEnter = "displayUpgrade = 'infantry'"; onMouseExit = "displayUpgrade = ''"; }; class WF_Con2 : WF_Con1 { idc = 18002; x = 0.34449; y = 0.238231; text = "Client\Images\wf_lvf.paa"; action = "MenuAction = 1"; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseEnter = "displayUpgrade = 'light'"; onMouseExit = "displayUpgrade = ''"; }; class WF_Con3 : WF_Con1 { idc = 18003; x = 0.561224; y = 0.238231; text = "Client\Images\wf_hvf.paa"; action = "MenuAction = 1"; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseEnter = "displayUpgrade = 'heavy'"; onMouseExit = "displayUpgrade = ''"; }; class WF_Con4 : WF_Con1 { idc = 18004; x = 0.779999; y = 0.238231; text = "Client\Images\wf_air.paa"; action = "MenuAction = 1"; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseEnter = "displayUpgrade = 'air'"; onMouseExit = "displayUpgrade = ''"; }; class WF_Con5 : WF_Con1 { idc = 18005; x = 0.724129; y = 0.457148; text = "Client\Images\wf_par.paa"; action = "MenuAction = 1"; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseEnter = "displayUpgrade = 'parachutist'"; onMouseExit = "displayUpgrade = ''"; }; class WF_Con6 : WF_Con1 { idc = 18006; x = 0.723951; y = 0.557871; text = "Client\Images\wf_uav.paa"; action = "MenuAction = 1"; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseEnter = "displayUpgrade = 'uav'"; onMouseExit = "displayUpgrade = ''"; }; class WF_Con7 : WF_Con1 { idc = 18007; x = 0.400177; y = 0.329419; text = "Client\Images\wf_sup.paa"; action = "MenuAction = 1"; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseEnter = "displayUpgrade = 'supply'"; onMouseExit = "displayUpgrade = ''"; }; class WF_Con8 : WF_Con1 { idc = 18008; x = 0.287599; y = 0.55879; text = "Client\Images\wf_fia.paa"; action = "MenuAction = 1"; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseEnter = "displayUpgrade = 'ambuSpawn'"; onMouseExit = "displayUpgrade = ''"; }; class WF_Con9 : WF_Con1 { idc = 18009; x = 0.836891; y = 0.32942; text = "Client\Images\wf_lif.paa"; action = "MenuAction = 1"; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseEnter = "displayUpgrade = 'airlift'"; onMouseExit = "displayUpgrade = ''"; }; class WF_Con10 : WF_Con1 { idc = 18010; x = 0.836891; y = 0.558514; text = "Client\Images\wf_fla.paa"; action = "MenuAction = 1"; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseEnter = "displayUpgrade = 'flares'"; onMouseExit = "displayUpgrade = ''"; }; class WF_Con11 : WF_Con1 { idc = 18011; x = 0.50587; y = 0.457871; text = "Client\Images\wf_art.paa"; action = "MenuAction = 1"; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseEnter = "displayUpgrade = 'artillery'"; onMouseExit = "displayUpgrade = ''"; }; class WF_Con12 : WF_Con1 { idc = 18012; x = 0.660492; y = 0.657666; text = "Client\Images\wf_mib.paa"; action = "MenuAction = 1"; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseEnter = "displayUpgrade = 'icbm'"; onMouseExit = "displayUpgrade = ''"; }; class WF_Con13 : WF_Con1 { idc = 18013; x = 0.212198; y = 0.329419; text = "Client\Images\wf_fas.paa"; action = "MenuAction = 1"; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseEnter = "displayUpgrade = 'fasttravel'"; onMouseExit = "displayUpgrade = ''"; }; class WF_Con14 : WF_Con1 { idc = 18014; x = 0.100274; y = 0.456988; text = "Client\Images\wf_gea.paa"; action = "MenuAction = 1"; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseEnter = "displayUpgrade = 'gear'"; onMouseExit = "displayUpgrade = ''"; }; class WF_Con15 : WF_Con1 { idc = 18015; x = 0.100274; y = 0.658312; text = "Client\Images\wf_amm.paa"; action = "MenuAction = 1"; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseEnter = "displayUpgrade = 'ammo'"; onMouseExit = "displayUpgrade = ''"; }; class WF_Con16 : WF_Con1 { idc = 18016; x = 0.72413; y = 0.658312; text = "Client\Images\wf_eas.paa"; action = "MenuAction = 1"; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseEnter = "displayUpgrade = 'easa'"; onMouseExit = "displayUpgrade = ''"; }; class WF_Con17 : WF_Con1 { idc = 18017; x = 0.837035; y = 0.457147; text = "Client\Images\wf_pas.paa"; action = "MenuAction = 1"; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseEnter = "displayUpgrade = 'paradrop'"; onMouseExit = "displayUpgrade = ''"; }; class WF_Con18 : WF_Con1 { idc = 18018; x = 0.505869; y = 0.657837; text = "Client\Images\wf_shl.paa"; action = "MenuAction = 1"; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseEnter = "displayUpgrade = 'shells'"; onMouseExit = "displayUpgrade = ''"; }; /* Tooltip */ class TooltipHelper : RscText { idc = 18998; x = 0.0; y = 0.0; w = 0.0; h = 0.0; style = 128; colorBackground[] = {0, 0, 0, 0.6}; }; class TooltipHelperText : RscStructuredText { idc = 18999; x = 0.0; y = 0.0; w = 0.0; h = 0.0; size = 0.035; class Attributes { font = "Zeppelin32"; color = "#B6F862"; align = "left"; shadow = true; }; }; /* Back */ class Back_Button : RscButton_Back { x = 0.799231; y = 0.804806; action = "MenuAction = 2"; tooltip = $STR_WF_TOOLTIP_BackButton; }; /* Exit */ class Exit_Button : RscButton_Exit { x = 0.862497; y = 0.804806; onButtonClick = "closeDialog 0;"; tooltip = $STR_WF_TOOLTIP_CloseButton; }; }; }; //--- Service Menu. | ALL DONE! class RscMenu_Service { movingEnable = 1; idd = 20000; onLoad = "ExecVM ""Client\GUI\GUI_Menu_Service.sqf"""; class controlsBackground { class Background_M : RscText { x = 0.157263; y = 0.151421; w = 0.687155; h = 0.699949; moving = 1; colorBackground[] = WFBE_Background_Color; }; class Background_H : RscText { x = 0.157263; y = 0.151421; w = 0.687155; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Header; }; class Background_F : RscText { x = 0.157263; y = 0.798870; w = 0.687155; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Footer; }; class Background_L : RscText { x = 0.157263; y = 0.202921; w = 0.687155; h = WFBE_Background_Border_Thick; colorBackground[] = WFBE_Background_Border; }; }; class controls { class Title_Service : RscText_Title { idc = 20001; x = 0.161008; y = 0.157731; w = 0.3; text = $STR_WF_SupportMenu; }; class CA_UnitList : RscListBox { idc = 20002; x = 0.162101; y = 0.209804; w = 0.677143; h = 0.429553; rowHeight = 0.025; sizeEx = 0.035; }; class CA_Rearm_Button : RscButton { idc = 20003; x = 0.161261; y = 0.650391; w = 0.22; text = $STR_WF_SERVICE_Rearm; action = "MenuAction = 1"; }; class CA_Repair_Button : RscButton { idc = 20004; x = 0.50748; y = 0.650391; w = 0.22; text = $STR_WF_SERVICE_Repair; action = "MenuAction = 2"; }; class CA_Refuel_Button : RscButton { idc = 20005; x = 0.161261; y = 0.697899; w = 0.22; text = $STR_WF_SERVICE_Refuel; action = "MenuAction = 3"; }; class CA_Heal_Button : RscButton { idc = 20008; x = 0.50748; y = 0.697899; w = 0.22; text = $STR_WF_SERVICE_Heal; action = "MenuAction = 5"; }; class CA_EASA_Button : RscButton { idc = 20010; x = 0.161261; y = 0.747311; w = 0.565918; text = $STR_WF_SERVICE_EASA; action = "MenuAction = 7"; }; class CA_LabelRearm: RscText { idc = 20011; x = 0.388739; y = 0.653752; w = 0.12; }; class CA_LabelRepair : CA_LabelRearm { idc = 20012; x = 0.734957; y = 0.653752; w = 0.12; }; class CA_LabelRefuel : CA_LabelRearm { idc = 20013; x = 0.388739; y = 0.699691; w = 0.12; }; class CA_LabelHeal : CA_LabelRearm { idc = 20014; x = 0.734957; y = 0.699691; w = 0.12; }; /* Back */ class Back_Button : RscButton_Back { x = 0.737046; y = 0.803685; action = "MenuAction = 8"; tooltip = $STR_WF_TOOLTIP_BackButton; }; /* Exit */ class Exit_Button : RscButton_Exit { x = 0.800311; y = 0.803685; onButtonClick = "closeDialog 0;"; tooltip = $STR_WF_TOOLTIP_CloseButton; }; }; }; //--- UnitCamera Menu. | ALL DONE! class RscMenu_UnitCamera { movingEnable = 1; idd = 21000; onLoad = "_this ExecVM ""Client\GUI\GUI_Menu_UnitCamera.sqf"""; class controlsBackground { class Background_M : RscText { x = 0.000119537; y = 0.70044; w = 0.999761; h = 0.298829; moving = 1; colorBackground[] = WFBE_Background_Color; }; class Background_H : RscText { x = 0.000119537; y = 0.70044; w = 0.999761; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Header; }; class Background_F : RscText { x = 0.000119537; y = 0.946769; w = 0.999761; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Footer; }; class Background_L : RscText { x = 0.000119537; y = 0.75194; w = 0.999761; h = WFBE_Background_Border_Thick; colorBackground[] = WFBE_Background_Border; }; }; class controls { class Title_UnitCam : RscText_Title { idc = 21001; x = 0.00470497; y = 0.706961; w = 0.3; text = $STR_WF_TACTICAL_UnitCam; }; class CA_Camera_UnitList : RscListBox { idc = 21002; x = -0.000335053; y = 0.755239; w = 0.311932; h = 0.190877; rowHeight = 0.01; sizeEx = 0.024; onLBSelChanged = "MenuAction = 101"; }; class CA_SquadKI_Label : RscText { idc = 21003; x = 0.312271; y = 0.714061; w = 0.3; colorText[] = {0.2588, 0.7137, 1, 1}; text = $STR_WF_UNITCAM_SquadKI; }; class CA_Camera_AIList : RscListBox { idc = 21004; x = 0.312269; y = 0.754063; w = 0.311932; h = 0.190877; rowHeight = 0.01; sizeEx = 0.024; onLBSelChanged = "MenuAction = 102"; }; class CA_Camera_Mode : RscText { idc = 21005; x = 0.629077; y = 0.713836; w = 0.3; colorText[] = {0.2588, 0.7137, 1, 1}; text = $STR_WF_UNITCAM_CamMode; }; class CA_Camera_Combo : RscCombo { idc = 21006; x = 0.831595; y = 0.711259; w = 0.163193; h = 0.035; onLBSelChanged = "MenuAction = 103"; }; class CA_MiniMap : RscMapControl { idc = 21007; x = 0.625041; y = 0.75514; w = 0.374504; h = 0.191614; ShowCountourInterval = 1; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseButtonDown = "mouseButtonDown = _this Select 1"; onMouseButtonUp = "mouseButtonUp = _this Select 1"; }; /* Exit */ class Exit_Button : RscButton_Exit { x = 0.954933; y = 0.953825; onButtonClick = "closeDialog 0;"; tooltip = $STR_WF_TOOLTIP_CloseButton; }; }; }; //--- Prameters Display. | ALL DONE! class RscDisplay_Parameters { movingEnable = 1; idd = 22000; onLoad = "_this ExecVM ""Client\GUI\GUI_Display_Parameters.sqf"""; class controlsBackground { class Background_M : RscText { x = -0.000478864; y = 0.151421; w = 1.00096; h = 0.699949; moving = 1; colorBackground[] = WFBE_Background_Color; }; class Background_H : RscText { x = -0.000478864; y = 0.151421; w = 1.00096; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Header; }; class Background_F : RscText { x = -0.000478864; y = 0.798870; w = 1.00096; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Footer; }; class Background_L : RscText { x = -0.000478864; y = 0.202921; w = 1.00096; h = WFBE_Background_Border_Thick; colorBackground[] = WFBE_Background_Border; }; }; class controls { class Title_Parameter : RscText_Title { idc = 22002; x = 0.00510308; y = 0.157759; w = 0.3; text = $STR_WF_PARAMETER_Parameters; }; class LB_ParamsTitles : RscListBoxA { idc = 22003; columns[] = {0.01, 0.55}; rowHeight = 0.036; drawSideArrows = 0; idcRight = -1; idcLeft = -1; x = 0.00204286; y = 0.211603; w = 0.997959; h = 0.579722; }; /* Back */ class Back_Button : RscButton_Back { x = 0.892509; y = 0.804806; action = "MenuAction = 1"; tooltip = $STR_WF_TOOLTIP_BackButton; }; /* Exit */ class Exit_Button : RscButton_Exit { x = 0.955774; y = 0.804806; onButtonClick = "closeDialog 0;"; tooltip = $STR_WF_TOOLTIP_CloseButton; }; }; }; //--- EASA Menu. | ALL DONE! class RscMenu_EASA { movingEnable = 1; idd = 23000; onLoad = "_this ExecVM ""Client\GUI\GUI_Menu_EASA.sqf"""; class controlsBackground { class Background_M : RscText { x = 0.157263; y = 0.200721; w = 0.687155; h = 0.601349; moving = 1; colorBackground[] = WFBE_Background_Color; }; class Background_H : RscText { x = 0.157263; y = 0.200721; w = 0.687155; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Header; }; class Background_F : RscText { x = 0.157263; y = 0.749570; w = 0.687155; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Footer; }; class Background_L : RscText { x = 0.157263; y = 0.252221; w = 0.687155; h = WFBE_Background_Border_Thick; colorBackground[] = WFBE_Background_Border; }; }; class controls { class Title_EASA : RscText_Title { idc = 23002; x = 0.162105; y = 0.207843; w = 0.6; text = $STR_WF_EASA; }; class LB_EASA : RscListBoxA { idc = 23003; columns[] = {0.01, 0.16}; rowHeight = 0.036; drawSideArrows = 0; idcRight = -1; idcLeft = -1; x = 0.162186; y = 0.263187; w = 0.67689; h = 0.476481; onLBDblClick = "MenuAction = 101"; }; class CA_Purchase : RscButton { idc = 22004; x = 0.613615; y = 0.758018; w = 0.1; text = $STR_WF_Purchase; action = "MenuAction = 101"; }; /* Exit */ class Exit_Button : RscButton_Exit { x = 0.799471; y = 0.755506; onButtonClick = "closeDialog 0;"; tooltip = $STR_WF_TOOLTIP_CloseButton; }; }; }; //--- Economy Menu. | ALL DONE! class RscMenu_Economy { movingEnable = 1; idd = 23000; onLoad = "_this ExecVM 'Client\GUI\GUI_Menu_Economy.sqf'"; class controlsBackground { class Background_M : RscText { x = 0.0318137; y = 0.2004; w = 0.938056; h = 0.59934; moving = 1; colorBackground[] = WFBE_Background_Color; }; class Background_H : RscText { x = 0.0318137; y = 0.2004; w = 0.938056; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Header; }; class Background_F : RscText { x = 0.0318137; y = 0.74724; w = 0.938056; h = 0.0525; moving = 1; colorBackground[] = WFBE_Background_Color_Footer; }; class Background_L : RscText { x = 0.0318137; y = 0.2519; w = 0.938056; h = WFBE_Background_Border_Thick; colorBackground[] = WFBE_Background_Border; }; }; class controls { class WF_MiniMap : RscMapControl { idc = 23002; x = 0.5; y = 0.254636; w = 0.469125; h = 0.492337; ShowCountourInterval = 1; onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; onMouseButtonDown = "mouseButtonDown = _this Select 1"; onMouseButtonUp = "mouseButtonUp = _this Select 1"; }; class Title_CommanderMenu : RscText_Title { idc = 23003; x = 0.0367093; y = 0.207199; w = 0.3; text = $STR_WF_MAIN_EconomyMenu; }; /* Workers */ class CA_LabelPartWorkers : RscText_SubTitle { idc = 23008; x = 0.0322372; y = 0.264119; w = 0.25; text = $STR_WF_ECONOMY_Workers; }; class CA_HireWorker_Button : RscButton { idc = 23004; x = 0.0372772; y = 0.315322; w = 0.279999; text = $STR_WF_ECONOMY_HireWorker; action = "MenuAction = 1"; }; class CA_LabelWorkers : RscText { idc = 23005; x = 0.331681; y = 0.317564; w = 0.15; colorText[] = {1, 0, 0, 1}; }; class CA_DisbandWorker_Button : RscButton { idc = 23006; x = 0.0372786; y = 0.373248; w = 0.279999; text = $STR_WF_ECONOMY_DisbandWorker; action = "MenuAction = 2"; }; class CA_Workers_Combo : RscCombo { idc = 23007; x = 0.33168; y = 0.37601; w = 0.15; h = 0.035; onLBSelChanged = "MenuAction = 100"; }; /* Income */ class CA_LabelPartIncome : CA_LabelPartWorkers { idc = 23009; x = 0.0322358; y = 0.456346; w = 0.25; text = $STR_WF_ECONOMY_Income_Sys; }; class CA_Slider_Income : RscXSliderH { idc = 23010; x = 0.0372786; y = 0.514272; w = 0.333109; h = 0.029412; }; class CA_LabelIncomePercent : RscText { idc = 23011; x = 0.394873; y = 0.512032; w = 0.15; }; class CA_IncomeSet_Button : RscButton { idc = 23012; x = 0.0372772; y = 0.567717; w = 0.334; text = $STR_WF_ECONOMY_SetIncome; action = "MenuAction = 3"; }; class CA_LabelIncomeCommander : RscText { idc = 23013; x = 0.0372772; y = 0.634608; w = 0.399999; }; class CA_LabelPlayerCommander : CA_LabelIncomeCommander { idc = 23014; x = 0.0372772; y = 0.687535; w = 0.399999; }; /* Selling Structures */ class CA_Sell : RscButton { idc = 23015; x = 0.501454; y = 0.757255; w = 0.28; text = $STR_WF_ECONOMY_SellStructure; action = "MenuAction = 105"; /* spezial */ colorBackground[] = {0.5882, 0.5882, 0.3529, 0.7}; colorBackgroundActive[] = {0.5882, 0.5882, 0.3529, 1}; colorFocused[] = {0.5882, 0.5882, 0.3529, 1}; }; /* Respawn Supply Truck Debug */ class CA_RespST_Button : RscClickableText { idc = 23016; x = 0.0368904; y = 0.751251; w = 0.05; h = 0.05; text = "Client\Images\picturepapercar_ca.paa"; action = "MenuAction = 4"; tooltip = $STR_WF_TOOLTIP_RespawnST; }; /* Separators */ class LineTRH1 : RscText { x = 0.0349591; y = 0.449622; w = 0.459861; h = WFBE_SPT1; colorBackground[] = WFBE_SPC1; }; /* Back */ class Back_Button : RscButton_Back { x = 0.861415; y = 0.754385; action = "MenuAction = 5"; tooltip = $STR_WF_TOOLTIP_BackButton; }; /* Exit */ class Exit_Button : RscButton_Exit { x = 0.924681; y = 0.754385; onButtonClick = "closeDialog 0;"; tooltip = $STR_WF_TOOLTIP_CloseButton; }; }; }; /* Header */ //--- Respawn options. respawn = 3; respawnDelay = WF_RESPAWNDELAY; respawnDialog = false; //--- Require briefing.html to show up. onLoadMission = WF_MISSIONNAME; onLoadMissionTime = false; #ifndef VANILLA //--- ArrowHead / CO loadscreen. loadScreen = WF_LOADSCREEN; //--- Prevent gear from being dropped in water, not vanilla compatible. enableItemsDropping = 0; #endif //--- Properties. class Header { gameType = CTI; minPlayers = 1; maxPlayers = WF_MAXPLAYERS; };/* Identities (Radio) */ class CfgIdentities { class WFHQ_EN0_EP1 { name = "Benny"; face = "Default"; glasses = "None"; speaker = "Male01EN"; pitch = 1.0; }; class WFHQ_EN1_EP1 : WFHQ_EN0_EP1 { speaker = "Male02EN"; }; class WFHQ_EN2_EP1 : WFHQ_EN0_EP1 { speaker = "Male03EN"; }; class WFHQ_EN3_EP1 : WFHQ_EN0_EP1 { speaker = "Male04EN"; }; class WFHQ_EN4_EP1 : WFHQ_EN0_EP1 { speaker = "Male05EN"; }; class WFHQ_EN5_EP1 : WFHQ_EN0_EP1 { speaker = "Female01EN_EP1"; }; class WFHQ_TK0_EP1 : WFHQ_EN0_EP1 { speaker = "Male01TK"; }; class WFHQ_TK1_EP1 : WFHQ_EN0_EP1 { speaker = "Male02TK"; }; class WFHQ_TK2_EP1 : WFHQ_EN0_EP1 { speaker = "Male03TK"; }; class WFHQ_TK3_EP1 : WFHQ_EN0_EP1 { speaker = "Male04TK"; }; class WFHQ_TK4_EP1 : WFHQ_EN0_EP1 { speaker = "Male05TK"; }; };/* Parameters */ class Params { class WFBE_C_AI_DELEGATION { title = "$STR_WF_PARAMETER_AI_Delegation"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled", "$STR_WF_Enabled"}; default = 0; }; class WFBE_C_AI_MAX { title = "$STR_WF_PARAMETER_GroupSizeAI"; values[] = {2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,35,40,45,50,60,70,80,90,100}; texts[] = {"2","4","6","8","10","12","14","16","18","20","22","24","26","28","30","35","40","45","50","60","70","80","90","100"}; default = 10; }; class WFBE_C_PLAYERS_AI_MAX { title = "$STR_WF_PARAMETER_GroupSizePlayer"; values[] = {2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,35,40,45,50,60,70,80,90,100}; texts[] = {"2","4","6","8","10","12","14","16","18","20","22","24","26","28","30","35","40","45","50","60","70","80","90","100"}; default = 12; }; class WFBE_C_AI_TEAMS_JIP_PRESERVE { title = "$STR_WF_PARAMETER_KeepAI"; values[] = {0,1}; texts[] = {"$STR_WF_PARAMETER_No","$STR_WF_PARAMETER_Yes"};//{"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 0; }; class WFBE_C_AI_TEAMS_ENABLED { title = "$STR_WF_PARAMETER_AI"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 1; }; class WFBE_C_ARTILLERY { title = "$STR_WF_PARAMETER_Arty"; values[] = {0,1,2,3}; texts[] = {"$STR_WF_Disabled","$STR_WF_PARAMETER_Long","$STR_WF_PARAMETER_Medium","$STR_WF_PARAMETER_Short"}; default = 3; }; #ifndef VANILLA class WFBE_C_ARTILLERY_COMPUTER { title = "$STR_WF_PARAMETER_ArtilleryComputer"; values[] = {0,1,2}; texts[] = {"$STR_WF_Disabled","$STR_WF_PARAMETER_Enabled_Upgrade","$STR_WF_Enabled"}; default = 0; }; #endif class WFBE_C_ARTILLERY_UI { title = "$STR_WF_PARAMETER_ArtilleryUI"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 0; }; class WFBE_C_AI_COMMANDER_ENABLED { title = "$STR_WF_PARAMETER_AICommander"; values[] = {0,1}; texts[] = {"$STR_WF_PARAMETER_No","$STR_WF_PARAMETER_Yes"};//{"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 1; }; //--- OA has no suitable allies for both side (yet). #ifndef ARROWHEAD class WFBE_C_BASE_ALLIES { title = "$STR_WF_PARAMETER_Allies"; values[] = {0,1,2,3}; texts[] = {"$STR_WF_Disabled","$STR_WF_PARAMETER_Side_West","$STR_WF_PARAMETER_Side_East","$STR_WF_PARAMETER_Both"}; default = 0; }; #endif class WFBE_C_STRUCTURES_ANTIAIRRADAR { title = "$STR_WF_PARAMETER_AntiAirRadar"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 0; }; class WFBE_C_BASE_AREA { title = "$STR_WF_PARAMETER_BaseArea"; values[] = {0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24}; texts[] = {"$STR_WF_Disabled","1","2","3","4","5","6","7","8","9","10","12","14","16","18","20","22","24"}; default = 2; }; class WFBE_C_BASE_DEFENSE_MAX_AI { title = "$STR_WF_PARAMETER_AutoMannedDefense"; values[] = {0,10,20,30,40,50,60,70,80,90,100}; texts[] = {"$STR_WF_Disabled","10","20","30","40","50","60","70","80","90","100"}; default = 30; }; class WFBE_C_BASE_DEFENSE_MANNING_RANGE { title = "$STR_WF_PARAMETER_AutoDefense_Range"; values[] = {50,100,150,200,250,300,350,400,450,500,600,700,800,900,1000}; texts[] = {"50m","100m","150m","200m","250m","300m","350m","400m","450m","500m","600m","700m","800m","900m","1000m"}; default = 250; }; class WFBE_C_STRUCTURES_MAX { title = "$STR_WF_PARAMETER_BuildingsLimit"; values[] = {1,2,3,4,5,6,7,8,9,10}; texts[] = {"1","2","3","4","5","6","7","8","9","10"}; default = 2; }; class WFBE_C_STRUCTURES_CONSTRUCTION_MODE { title = "$STR_WF_PARAMETER_ConstructionMode"; values[] = {0,1}; texts[] = {"$STR_WF_PARAMETER_Time","$STR_WF_PARAMETER_HQWorkers"}; default = 0; }; class WFBE_C_STRUCTURES_HQ_COST_DEPLOY { title = "$STR_WF_PARAMETER_HQDeployCost"; values[] = {100,200,300,400,500,600,700,800,900,1000,1500,2000,2500,3000,3500,4000,5000,6000,7000,8000,9000,10000}; texts[] = {"S 100","S 200","S 300","S 400","S 500","S 600","S 700","S 800","S 900","S 1000","S 1500","S 2000","S 2500","S 3000","S 3500","S 4000","S 5000","S 6000","S 7000","S 8000","S 9000","S 10000"}; default = 100; }; class WFBE_C_STRUCTURES_HQ_RANGE_DEPLOYED { title = "$STR_WF_PARAMETER_HQDeployRange"; values[] = {50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,220,240,260,280,300,320,340,360,380,400}; texts[] = {"50m","60m","70m","80m","90m","100m","110m","120m","130m","140m","150m","160m","170m","180m","190m","200m","220m","240m","260m","280m","300m","320m","340m","360m","380m","400m"}; default = 120; }; class WFBE_C_BASE_PATROLS_INFANTRY { title = "$STR_WF_PARAMETER_BasePatrols_Infantry"; values[] = {0,1,2,3,4}; texts[] = {"$STR_WF_Disabled","1","2","3","4"}; default = 0; }; class WFBE_C_BASE_START_TOWN { title = "$STR_WF_PARAMETER_SpawnSystemRestrict"; values[] = {0,1}; texts[] = {"$STR_WF_PARAMETER_No","$STR_WF_PARAMETER_Yes"};//{"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 1; }; class WFBE_C_BASE_STARTING_DISTANCE { title = "$STR_WF_PARAMETER_StartingDistance"; values[] = {-1,1000,1500,2000,2500,3000,3500,4000,4500,5000,5500,6000,6500,7000,7500,8000,8500,9000}; texts[] = {"$STR_WF_PARAMETER_StartingLocations_Random","1000m","1500m","2000m","2500m","3000m","3500m","4000m","4500m","5000m","5500m","6000m","6500m","7000m","7500m","8000m","8500m","9000m"}; default = 5500; }; class WFBE_C_BASE_STARTING_MODE { title = "$STR_WF_PARAMETER_StartingLocations"; values[] = {0,1,2}; texts[] = {"$STR_WF_PARAMETER_StartingLocations_WestNorth","$STR_WF_PARAMETER_StartingLocations_WestSouth","$STR_WF_PARAMETER_StartingLocations_Random"}; default = 2; }; class WFBE_C_STRUCTURES_COLLIDING { title = "$STR_WF_PARAMETER_StructurePlacement"; values[] = {0,1}; texts[] = {"$STR_WF_PARAMETER_Collide_Strict","$STR_WF_PARAMETER_Collide_Smooth"}; default = 0; }; class WFBE_C_ECONOMY_CURRENCY_SYSTEM { title = "$STR_WF_PARAMETER_Currency"; values[] = {0,1}; texts[] = {"$STR_WF_PARAMETER_Money_Supply","$STR_WF_PARAMETER_Money"}; default = 0; }; class WFBE_C_ECONOMY_INCOME_INTERVAL { title = "$STR_WF_PARAMETER_IncomeInterval"; values[] = {60,75,90,105,120,150,180,240,300,360,420,480,540,600}; texts[] = {"1 Minute","1 Minute 15 Seconds","1 Minute 30 Seconds","1 Minute 45 Seconds","2 Minutes","2 Minutes 30 Seconds","3 Minutes","4 Minutes","5 Minutes","6 Minutes","7 Minutes","8 Minutes","9 Minutes","10 Minutes"}; default = 75; }; class WFBE_C_ECONOMY_INCOME_SYSTEM { title = "$STR_WF_PARAMETER_IncomeSystem"; values[] = {1,2,3,4}; texts[] = {"$STR_WF_PARAMETER_IncomeSystem_Full","$STR_WF_PARAMETER_IncomeSystem_Half","$STR_WF_PARAMETER_Income_Sys_Param","$STR_WF_PARAMETER_Income_Sys_Param_Full"}; default = 4; }; class WFBE_C_ECONOMY_FUNDS_START_EAST { title = "$STR_WF_PARAMETER_Funds_East"; values[] = {800,1600,2400,3200,4000,4800,6400,8000,12800,25600,51200,102400,204800,409600,819200}; texts[] = {"$ 800","$ 1600","$ 2400","$ 3200","$ 4000","$ 4800","$ 6400","$ 8000","$ 12800","$ 25600","$ 51200","$ 102400","$ 204800","$ 409600","$ 819200"}; default = 800; }; class WFBE_C_ECONOMY_FUNDS_START_WEST { title = "$STR_WF_PARAMETER_Funds_West"; values[] = {800,1600,2400,3200,4000,4800,6400,8000,12800,25600,51200,102400,204800,409600,819200}; texts[] = {"$ 800","$ 1600","$ 2400","$ 3200","$ 4000","$ 4800","$ 6400","$ 8000","$ 12800","$ 25600","$ 51200","$ 102400","$ 204800","$ 409600","$ 819200"}; //default = 819200; //@@@Hybrid debug default = 800; }; class WFBE_C_ECONOMY_FUNDS_START_GUER { title = "$STR_WF_PARAMETER_Funds_Guer"; values[] = {800,1600,2400,3200,4000,4800,6400,8000,12800,25600,51200,102400,204800,409600,819200}; texts[] = {"$ 800","$ 1600","$ 2400","$ 3200","$ 4000","$ 4800","$ 6400","$ 8000","$ 12800","$ 25600","$ 51200","$ 102400","$ 204800","$ 409600","$ 819200"}; default = 800; }; class WFBE_C_ECONOMY_SUPPLY_START_EAST { title = "$STR_WF_PARAMETER_Supply_East"; values[] = {1200,2400,3600,4800,6000,7200,8400,9600,19200,38400,76800}; texts[] = {"S 1200","S 2400","S 3600","S 4800","S 6000","S 7200","S 8400","S 9600","S 19200","S 38400","S 76800"}; default = 1200; }; class WFBE_C_ECONOMY_SUPPLY_START_WEST { title = "$STR_WF_PARAMETER_Supply_West"; values[] = {1200,2400,3600,4800,6000,7200,8400,9600,19200,38400,76800}; texts[] = {"S 1200","S 2400","S 3600","S 4800","S 6000","S 7200","S 8400","S 9600","S 19200","S 38400","S 76800"}; //default = 76800; //@@@Hybrid Debug default = 1200; }; class WFBE_C_ECONOMY_SUPPLY_START_GUER { title = "$STR_WF_PARAMETER_Supply_Guer"; values[] = {1200,2400,3600,4800,6000,7200,8400,9600,19200,38400,76800}; texts[] = {"S 1200","S 2400","S 3600","S 4800","S 6000","S 7200","S 8400","S 9600","S 19200","S 38400","S 76800"}; default = 1200; }; class WFBE_C_ECONOMY_SUPPLY_SYSTEM { title = "$STR_WF_PARAMETER_SupplySystem"; values[] = {0,1}; texts[] = {"$STR_WF_PARAMETER_SupplySystem_Truck","$STR_WF_PARAMETER_Time"}; default = 1; }; class WFBE_C_ENVIRONMENT_FAST_TIME { title = "$STR_WF_PARAMETER_FastTime"; values[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13}; texts[] = {"$STR_WF_Disabled","24H = 10H","24H = 9H30","24H = 9H","24H = 8H30","24H = 8H","24H = 7H30","24H = 7H","24H = 6H30", "24H = 6H","24H = 5H30","24H = 5H","24H = 4H30","24H = 4H"}; default = 0; }; class WFBE_C_ENVIRONMENT_STARTING_HOUR { title = "$STR_WF_PARAMETER_Hour"; values[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23}; texts[] = {"00:00","01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00", "12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"}; default = 9; }; class WFBE_C_ENVIRONMENT_STARTING_MONTH { title = "$STR_WF_PARAMETER_Month"; values[] = {1,2,3,4,5,6,7,8,9,10,11,12}; texts[] = {"January","February","March","April","May","June","July","August","September","October","November","December"}; default = 6; }; class WFBE_C_ENVIRONMENT_WEATHER_VOLUMETRIC { title = "$STR_WF_PARAMETER_Clouds"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 0; }; class WFBE_C_ENVIRONMENT_WEATHER { title = "$STR_WF_PARAMETER_Weather"; values[] = {0,1,2,3}; texts[] = {"$STR_WF_PARAMETER_Weather_Clear","$STR_WF_PARAMETER_Weather_Cloudy","$STR_WF_PARAMETER_Weather_Rainy","$STR_WF_PARAMETER_Weather_Dynamic"}; default = 0; }; #ifndef VANILLA class WFBE_C_MODULE_BIS_BAF { title = "$STR_WF_PARAMETER_BAF"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 1; }; class WFBE_C_MODULE_BIS_PMC { title = "$STR_WF_PARAMETER_PMC"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 1; }; #endif class WFBE_C_GAMEPLAY_HANGARS_ENABLED { title = "$STR_WF_PARAMETER_Hangars"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 1; }; class WFBE_C_UNITS_CLEAN_TIMEOUT { title = "$STR_WF_PARAMETER_BodiesTimeout"; values[] = {60,120,180,240,300,600,1200,1800,2400,3000,3600}; texts[] = {"1 Minute","2 Minutes","3 Minutes","4 Minutes","5 Minutes","10 Minutes","20 Minutes","30 Minutes","40 Minutes","50 Minutes","1 Hour"}; default = 240; }; class WFBE_C_UNITS_EMPTY_TIMEOUT { title = "$STR_WF_PARAMETER_VehicleDelay"; values[] = {60,120,180,240,300,600,1200,1800,2400,3000,3600}; texts[] = {"1 Minute","2 Minutes","3 Minutes","4 Minutes","5 Minutes","10 Minutes","20 Minutes","30 Minutes","40 Minutes","50 Minutes","1 Hour"}; default = 1200; }; class WFBE_C_GAMEPLAY_FAST_TRAVEL { title = "$STR_WF_PARAMETER_FastTravel"; values[] = {0,1,2}; texts[] = {"$STR_WF_Disabled","$STR_WF_PARAMETER_Free","$STR_WF_PARAMETER_Fee"}; default = 0; }; class WFBE_C_GAMEPLAY_HANDLE_FRIENDLYFIRE { title = "$STR_WF_PARAMETER_FriendlyFire"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 0; }; class WFBE_C_ENVIRONMENT_MAX_CLUTTER { title = "$STR_WF_PARAMETER_Grass"; values[] = {10,20,30,50}; texts[] = {"Far","Medium","Short","Toggleable"}; default = 50; }; class WFBE_C_GAMEPLAY_TEAMSWAP_DISABLE { title = "$STR_WF_PARAMETER_KickTeamswapper"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 1; }; class WFBE_C_GAMEPLAY_BOUNDARIES_ENABLED { title = "$STR_WF_PARAMETER_LimitedBoundaries"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 1; }; class WFBE_C_GAMEPLAY_MISSILES_RANGE { title = "$STR_WF_PARAMETER_MissileRange"; values[] = {0,500,1000,1500,2000,2500,3000,3500,4000,4500,5000,5500,6000,6500,7000,7500,8000,8500,9000,9500,10000}; texts[] = {"$STR_WF_Disabled","500m","1000m","1500m","2000m","2500m","3000m","3500m","4000m","4500m","5000m","5500m","6000m","6500m","7000m","7500m","8000m","8500m","9000m","9500m","10000m"}; default = 0; }; class WFBE_C_MODULE_WFBE_MISSIONS { title = "$STR_WF_PARAMETER_SecondaryMissions"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 0; }; class WFBE_C_GAMEPLAY_UID_SHOW { title = "$STR_WF_PARAMETER_ShowUID"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 1; }; class WFBE_C_UNITS_PRICING { title = "$STR_WF_PARAMETER_Specialization"; values[] = {0,1,2,3}; texts[] = {"$STR_WF_PARAMETER_None","$STR_WF_PARAMETER_Infantry","$STR_WF_PARAMETER_LandVehicles","$STR_WF_PARAMETER_Aircraft"}; default = 0; }; class WFBE_C_GAMEPLAY_THERMAL_IMAGING { title = "$STR_WF_PARAMETER_ThermalImaging"; values[] = {0,1,2,3}; texts[] = {"$STR_WF_Disabled","$STR_WF_PARAMETER_Weapons","$STR_WF_PARAMETER_Vehicles","$STR_WF_Enabled"}; default = 3; }; class WFBE_C_UNITS_TRACK_INFANTRY { title = "$STR_WF_PARAMETER_TrackAI"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 0; }; class WFBE_C_UNITS_TRACK_LEADERS { title = "$STR_WF_PARAMETER_TrackPlayers"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 1; }; class WFBE_C_UNITS_BALANCING { title = "$STR_WF_PARAMETER_Balance"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 0; }; class WFBE_C_UNITS_BOUNTY { title = "$STR_WF_PARAMETER_UnitsBounty"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 1; }; class WFBE_C_GAMEPLAY_UPGRADES_CLEARANCE { title = "$STR_WF_PARAMETER_Upgrades"; values[] = {0,1,2,3,4,5,6,7}; texts[] = {"$STR_WF_Disabled","West","East","Resistance","West + East","West + Resistance","East + Resistance","All"}; default = 0; }; class WFBE_C_GAMEPLAY_VICTORY_CONDITION { title = "$STR_WF_PARAMETER_VictoryCondition"; values[] = {0,1,2,3}; texts[] = {"$STR_WF_PARAMETER_Victory_Annihilation","$STR_WF_PARAMETER_Victory_Assassination","$STR_WF_PARAMETER_Victory_Supremacy","$STR_WF_PARAMETER_Victory_Towns"}; default = 2; }; class WFBE_C_ENVIRONMENT_MAX_VIEW { title = "$STR_WF_PARAMETER_ViewDistance"; values[] = {200,500,800,1000,1500,2000,2500,3000,3500,4000,4500,5000}; texts[] = {"200m","500m","800m","1000m","1500m","2000m","2500m","3000m","3500m","4000m","4500m","5000m"}; default = 4000; }; class WFBE_C_MODULE_WFBE_FLARES { title = "$STR_WF_PARAMETER_Countermeasures"; values[] = {0,1,2}; texts[] = {"$STR_WF_Disabled","$STR_WF_PARAMETER_Enabled_Upgrade","$STR_WF_Enabled"}; default = 1; }; class WFBE_C_MODULE_WFBE_EASA { title = "$STR_WF_PARAMETER_EASA"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 1; }; class WFBE_C_MODULE_BIS_HC { title = "$STR_WF_PARAMETER_HighCommand"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 1; }; class WFBE_C_MODULE_WFBE_ICBM { title = "$STR_WF_PARAMETER_ICBM"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 0; }; class WFBE_C_MODULE_WFBE_IRS { title = "$STR_WF_PARAMETER_IRS"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 1; }; class WFBE_C_MODULE_UPSMON { title = "$STR_WF_PARAMETER_UPSMON"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 0; }; class WFBE_C_RESPAWN_CAMPS_MODE { title = "$STR_WF_PARAMETER_Camp"; values[] = {0,1,2,3}; texts[] = {"$STR_WF_Disabled","$STR_WF_PARAMETER_Classic","$STR_WF_PARAMETER_Respawn_CampsNearby","$STR_WF_PARAMETER_Respawn_Defender"}; default = 2; }; class WFBE_C_RESPAWN_CAMPS_RULE_MODE { title = "$STR_WF_PARAMETER_CampRespawnRule"; values[] = {0,1,2}; texts[] = {"$STR_WF_Disabled","$STR_WF_PARAMETER_Respawn_CampsRule_WestEast","$STR_WF_PARAMETER_Respawn_CampsRule_WestEastRes"}; default = 2; }; class WFBE_C_RESPAWN_DELAY { title = "$STR_WF_PARAMETER_Respawn"; values[] = {10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90}; texts[] = {"10 Seconds","15 Seconds","20 Seconds","25 Seconds","30 Seconds","35 Seconds","40 Seconds","45 Seconds","50 Seconds", "55 Seconds","60 Seconds","65 Seconds","70 Seconds","75 Seconds","80 Seconds","85 Seconds","90 Seconds"}; default = 30; }; class WFBE_C_RESPAWN_LEADER { title = "$STR_WF_PARAMETER_LeaderRespawn"; values[] = {0,1,2}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled","$STR_WF_Enabled_DefaultGear"}; default = 2; }; class WFBE_C_RESPAWN_MASH { title = "$STR_WF_PARAMETER_Respawn_MASH"; values[] = {0,1,2}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled","$STR_WF_Enabled_DefaultGear"}; default = 2; }; class WFBE_C_RESPAWN_MOBILE { title = "$STR_WF_PARAMETER_MobileRespawn"; values[] = {0,1,2}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled","$STR_WF_Enabled_DefaultGear"}; default = 2; }; class WFBE_C_RESPAWN_PENALTY { title = "$STR_WF_PARAMETER_Respawn_Penalty"; values[] = {0,1,2,3,4,5}; texts[] = {"$STR_WF_Disabled","$STR_WF_PARAMETER_Respawn_Penalty_Remove","$STR_WF_PARAMETER_Respawn_Penalty_Full","$STR_WF_PARAMETER_Respawn_Penalty_OneHalf","$STR_WF_PARAMETER_Respawn_Penalty_OneFourth","$STR_WF_PARAMETER_Respawn_Penalty_Mobile"}; default = 5; }; class WFBE_C_RESPAWN_CAMPS_RANGE { title = "$STR_WF_PARAMETER_TownRespawnRange"; values[] = {50,100,150,200,250,300,350,400,450,500,550,600,650,700,750,800,850,900,950,1000,1500,2000,2500,3000,3500,4000}; texts[] = {"50m","100m","150m","200m","250m","300m","350m","400m","450m","500m","550m","600m","650m","700m","750m","800m","850m","900m","950m","1000m","1500m","2000m","2500m","3000m","3500m","4000m"}; default = 400; }; class WFBE_C_UNITS_RESTRICT_AIR { title = "$STR_WF_PARAMETER_AdvancedAir"; values[] = {0,1,2}; texts[] = {"$STR_WF_Disabled","$STR_WF_PARAMETER_Restriction_Air_H","$STR_WF_PARAMETER_Restriction_Air_HTransport"}; default = 0; }; #ifndef ARROWHEAD class WFBE_C_UNITS_KAMOV_DISABLED { title = "$STR_WF_PARAMETER_Kamov"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 0; }; #endif class WFBE_C_TOWNS_AMOUNT { title = "$STR_WF_PARAMETER_TownsAmount"; values[] = {0,1,2,3,4}; texts[] = {"$STR_WF_PARAMETER_Extra_Small","$STR_WF_PARAMETER_Small","$STR_WF_PARAMETER_Medium","$STR_WF_PARAMETER_Large","$STR_WF_PARAMETER_Full"}; default = 3; }; class WFBE_C_CAMPS_CREATE { title = "$STR_WF_PARAMETER_TownsCamps"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 1; }; class WFBE_C_TOWNS_CAPTURE_MODE { title = "$STR_WF_PARAMETER_TownsCaptureMode"; values[] = {0,1,2}; texts[] = {"$STR_WF_PARAMETER_Classic","$STR_WF_PARAMETER_TownsCaptureMode_Threshold","$STR_WF_PARAMETER_TownsCaptureMode_AllCamps"}; default = 1; }; class WFBE_C_TOWNS_CONQUEST_MODE { title = "$STR_WF_PARAMETER_TownsConquestMode"; values[] = {0,1}; texts[] = {"$STR_WF_PARAMETER_Classic","$STR_WF_PARAMETER_Territorial"}; default = 0; }; class WFBE_C_TOWNS_DEFENDER { title = "$STR_WF_PARAMETER_Defender"; values[] = {0,1,2,3,4}; texts[] = {"$STR_WF_Disabled","$STR_WF_PARAMETER_Light","$STR_WF_PARAMETER_Medium","$STR_WF_PARAMETER_Hard","$STR_WF_PARAMETER_Impossible"}; default = 1; }; class WFBE_C_TOWNS_GEAR { title = "$STR_WF_PARAMETER_TownsGear"; values[] = {0,1,2,3}; texts[] = {"$STR_WF_Disabled","$STR_WF_PARAMETER_CampSel","$STR_WF_PARAMETER_Depot","$STR_WF_PARAMETER_CampnDepot"}; default = 1; }; class WFBE_C_TOWNS_OCCUPATION { title = "$STR_WF_PARAMETER_Occupation"; values[] = {0,1,2,3,4}; texts[] = {"$STR_WF_Disabled","$STR_WF_PARAMETER_Light","$STR_WF_PARAMETER_Medium","$STR_WF_PARAMETER_Hard","$STR_WF_PARAMETER_Impossible"}; default = 3; }; #ifdef VANILLA class WFBE_C_UNITS_FACTION_EAST { title = "$STR_WF_PARAMETER_Occupation_Type_East"; values[] = {0,1}; texts[] = {"Insurgents","Russians"}; default = 1; }; #endif #ifdef VANILLA class WFBE_C_UNITS_FACTION_WEST { title = "$STR_WF_PARAMETER_Occupation_Type_West"; values[] = {0}; texts[] = {"French"}; default = 0; }; #endif #ifdef ARROWHEAD class WFBE_C_UNITS_FACTION_EAST { title = "$STR_WF_PARAMETER_Occupation_Type_East"; values[] = {0}; texts[] = {"Takistan Army"}; default = 0; }; #endif #ifdef ARROWHEAD class WFBE_C_UNITS_FACTION_WEST { title = "$STR_WF_PARAMETER_Occupation_Type_West"; values[] = {0}; texts[] = {"French"}; default = 0; }; #endif #ifdef COMBINEDOPS class WFBE_C_UNITS_FACTION_EAST { title = "$STR_WF_PARAMETER_Occupation_Type_East"; values[] = {0,1,2}; texts[] = {"Insurgents","Russians","Takistan Army"}; default = 1; }; #endif #ifdef COMBINEDOPS class WFBE_C_UNITS_FACTION_WEST { title = "$STR_WF_PARAMETER_Occupation_Type_West"; values[] = {0}; texts[] = {"French"}; default = 0; }; #endif class WFBE_C_TOWNS_REINFORCEMENT_OCCUPATION { title = "$STR_WF_PARAMETER_Reinforcement_Occupation"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 1; }; class WFBE_C_TOWNS_PATROLS { title = "$STR_WF_PARAMETER_MaxResPatrols"; values[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,24,26,28,30,32,34,36,38,40,50,60,70,80,90,100}; texts[] = {"$STR_WF_Disabled","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","22","24","26","28","30","32","34","36","38","40","50","60","70","80","90","100"}; default = 0; }; class WFBE_C_TOWNS_BUILD_PROTECTION_RANGE { title = "$STR_WF_PARAMETER_TownProtectionRange"; values[] = {0,50,100,150,200,250,300,350,400,450,500}; texts[] = {"0m","50m","100m","150m","200m","250m","300m","350m","400m","450m","500m"}; default = 400; }; class WFBE_C_UNITS_TOWN_PURCHASE { title = "$STR_WF_PARAMETER_TownsPurchaseMilita"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 1; }; #ifdef VANILLA class WFBE_C_UNITS_FACTION_GUER { title = "$STR_WF_PARAMETER_Reinforcement_Type"; values[] = {0}; texts[] = {"Guerillas"}; default = 0; }; #endif #ifdef ARROWHEAD class WFBE_C_UNITS_FACTION_GUER { title = "$STR_WF_PARAMETER_Reinforcement_Type"; values[] = {0,1}; texts[] = {"Private Military Company","Takistani Locals"}; default = 1; }; #endif #ifdef COMBINEDOPS class WFBE_C_UNITS_FACTION_GUER { title = "$STR_WF_PARAMETER_Reinforcement_Type"; values[] = {0,1,2}; texts[] = {"Guerillas","Private Military Company","Takistani Locals"}; default = 2; }; #endif class WFBE_C_TOWNS_REINFORCEMENT_DEFENDER { title = "$STR_WF_PARAMETER_Reinforcement_Resistance"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 0; }; class WFBE_C_TOWNS_VEHICLES_LOCK_DEFENDER { title = "$STR_WF_PARAMETER_Resistance_VehLock"; values[] = {0,1}; texts[] = {"$STR_WF_Disabled","$STR_WF_Enabled"}; default = 0; }; class WFBE_C_TOWNS_STARTING_MODE { title = "$STR_WF_PARAMETER_StartingMode"; values[] = {0,1,2,3}; texts[] = {"$STR_WF_PARAMETER_None","$STR_WF_PARAMETER_Divided_Towns","$STR_WF_PARAMETER_Nearby_Town","$STR_WF_PARAMETER_StartingLocations_Random"}; default = 0; }; };/* Controls Definitions */ #define CT_STATIC 0 #define CT_BUTTON 1 #define CT_EDIT 2 #define CT_COMBO 4 #define CT_LISTBOX 5 #define CT_CLICKABLETEXT 11 #define CT_STRUCTUREDTEXT 13 #define CT_LISTNBOX 102 #define ST_POS 0x0F #define ST_HPOS 0x03 #define ST_VPOS 0x0C #define ST_LEFT 0x00 #define ST_RIGHT 0x01 #define ST_CENTER 0x02 #define ST_DOWN 0x04 #define ST_UP 0x08 #define ST_VCENTER 0x0c #define ENABLE_SHADOW shadow = 2 #define ST_PICTURE 48 #define ST_TEXT_BG 128 #ifdef VANILLA /* Green */ #define subcolor1 {0.7,1,0.7,1} #define subcolor1hex "#eee58b" #define WFBE_SoundClick "ui\ui_ok" #define WFBE_SoundEnter "ui\ui_over" #define WFBE_SoundEscape "ui\ui_cc" #else /* Yellow */ #define subcolor1 {1,1,0.7,1} #define subcolor1hex "#eee58b" #define WFBE_SoundClick "\ca\ui\data\sound\onclick" #define WFBE_SoundEnter "\ca\ui\data\sound\onover" #define WFBE_SoundEscape "\ca\ui\data\sound\onescape" #endif /* RscPicture */ class RscPicture { type = 0; idc = -2; style = 48; colorText[] = {0.75, 0.75, 0.75, 1}; colorBackground[] = {0, 0, 0, 0}; font = "Bitstream"; sizeEx = 0.025; soundClick[] = {WFBE_SoundClick, 0.2, 1}; soundEnter[] = {WFBE_SoundEnter, 0.2, 1}; soundEscape[] = {WFBE_SoundEscape, 0.2, 1}; soundPush[] = {"", 0.2, 1}; w = 0.275; h = 0.04; text = ""; }; class RscPictureKeepAspect : RscPicture { //Coin Menu style = 0x30 + 0x800; }; class IGUIBack { //Coin Menu type = CT_STATIC; idc = 124; style = ST_TEXT_BG; text = ""; colorText[] = {0, 0, 0, 0}; font = "Zeppelin32"; sizeEx = 0.0; x = 0.1; y = 0.1; w = 0.1; h = 0.1; colorbackground[] = {0, 0, 0, 0.6}; }; /* RscButton */ class RscButton { type = 1; idc = -2; style = 0x02 + 0x100; x = 0; y = 0; w = 0; h = 0.036; text = ""; font = "Zeppelin32"; sizeEx = 0.035; shadow = 2; colorText[] = {1, 1, 1, 0.8}; colorBackground[] = {0.5882, 0.5882, 0.3529, 0.7}; colorBackgroundActive[] = {0.5882, 0.5882, 0.3529, 1}; colorDisabled[] = {0.5, 0.5, 0.5, 0.8}; colorBackgroundDisabled[] = {0, 0, 0, 0.6}; offsetX = 0.003; offsetY = 0.003; offsetPressedX = 0.002; offsetPressedY = 0.002; colorFocused[] = {0.5882, 0.5882, 0.3529, 0.7}; colorShadow[] = {0.023529, 0, 0.0313725, 1}; colorBorder[] = {0.023529, 0, 0.0313725, 1}; borderSize = 0.0; soundEnter[] = {"\ca\ui\data\sound\mouse2", 0.09, 1}; soundPush[] = {"\ca\ui\data\sound\new1", 0.09, 1}; soundClick[] = {"\ca\ui\data\sound\mouse3", 0.07, 1}; soundEscape[] = {"\ca\ui\data\sound\mouse1", 0.09, 1}; }; class RscButton_Main : RscButton { colorBackground[] = WFBE_Menu_Button_Color; colorBackgroundActive[] = WFBE_Menu_Button_Color; colorFocused[] = WFBE_Menu_Button_Focused_Color; colorText[] = WFBE_Menu_Button_Text_Color; }; class RscButton_Back : RscButton { w = 0.04; h = 0.04; text = "<<"; shadow = 2; sizeEx = 0.035; }; class RscButton_Exit : RscButton { w = 0.04; h = 0.04; text = "X"; shadow = 2; sizeEx = 0.035; colorText[] = {1, 1, 1, 0.8}; colorBackground[] = {0.5020, 0, 0, 1}; colorBackgroundActive[] = {0.9, 0, 0, 1}; colorFocused[] = {0.5020, 0, 0, 1}; }; /* RscShortcutButton */ class RscShortcutButton { type = 16; idc = -2; style = 0; default = 0; w = 0.183825; h = 0.104575; color[] = {0.543, 0.5742, 0.4102, 1.0}; color2[] = {0.95, 0.95, 0.95, 1}; colorBackground[] = {1, 1, 1, 1}; colorbackground2[] = {1, 1, 1, 0.4}; colorDisabled[] = {1, 1, 1, 0.25}; periodFocus = 1.2; periodOver = 0.8; class HitZone { left = 0.004; top = 0.029; right = 0.004; bottom = 0.029; }; class ShortcutPos { left = 0.004; top = 0.026; w = 0.0392157; h = 0.0522876; }; class TextPos { left = 0.05; top = 0.034; right = 0.005; bottom = 0.005; }; animTextureNormal = "\ca\ui\data\ui_button_normal_ca.paa"; animTextureDisabled = "\ca\ui\data\ui_button_disabled_ca.paa"; animTextureOver = "\ca\ui\data\ui_button_over_ca.paa"; animTextureFocused = "\ca\ui\data\ui_button_focus_ca.paa"; animTexturePressed = "\ca\ui\data\ui_button_down_ca.paa"; animTextureDefault = "\ca\ui\data\ui_button_default_ca.paa"; textureNoShortcut = ""; period = 0.4; font = "Zeppelin32"; size = 0.03521; sizeEx = 0.03521; text = ""; soundEnter[] = {"\ca\ui\data\sound\mouse2", 0.09, 1}; soundPush[] = {"\ca\ui\data\sound\new1", 0.09, 1}; soundClick[] = {"\ca\ui\data\sound\mouse3", 0.07, 1}; soundEscape[] = {"\ca\ui\data\sound\mouse1", 0.09, 1}; action = ""; class Attributes { font = "Zeppelin32"; color = "#E5E5E5"; align = "left"; shadow = "true"; }; class AttributesImage { font = "Zeppelin32"; color = "#E5E5E5"; align = "left"; }; }; class RscIGUIShortcutButton : RscShortcutButton { w = 0.183825; h = 0.0522876; style = 2; color[] = {1, 1, 1, 1}; color2[] = {1, 1, 1, 0.85}; colorBackground[] = {1, 1, 1, 1}; colorbackground2[] = {1, 1, 1, 0.85}; colorDisabled[] = {1, 1, 1, 0.4}; class HitZone { left = 0.002; top = 0.003; right = 0.002; bottom = 0.016; }; class ShortcutPos { left = -0.006; top = -0.007; w = 0.0392157; h = 0.0522876; }; class TextPos { left = 0.02; top = 0.0; right = 0.002; bottom = 0.016; }; animTextureNormal = "\ca\ui\data\igui_button_normal_ca.paa"; animTextureDisabled = "\ca\ui\data\igui_button_disabled_ca.paa"; animTextureOver = "\ca\ui\data\igui_button_over_ca.paa"; animTextureFocused = "\ca\ui\data\igui_button_focus_ca.paa"; animTexturePressed = "\ca\ui\data\igui_button_down_ca.paa"; animTextureDefault = "\ca\ui\data\igui_button_normal_ca.paa"; class Attributes { font = "Zeppelin32"; color = "#E5E5E5"; align = "center"; shadow = "true"; }; }; class RscShortcutButtonMain: RscShortcutButton { w = 0.313726; h = 0.104575; color[] = {0.2588, 0.7137, 1, 1}; colorDisabled[] = {1, 1, 1, 0.25}; class HitZone { left = 0.0; top = 0.0; right = 0.0; bottom = 0.0; }; class ShortcutPos { left = 0.0204; top = 0.026; w = 0.0392157; h = 0.0522876; }; class TextPos { left = 0.08; top = 0.034; right = 0.005; bottom = 0.005; }; animTextureNormal = "\ca\ui\data\ui_button_main_normal_ca.paa"; animTextureDisabled = "\ca\ui\data\ui_button_main_disabled_ca.paa"; //animTextureOver = "\ca\ui\data\ui_button_main_over_ca.paa"; animTextureOver = "Client\Images\ui_button_main_over.paa"; //animTextureFocused = "\ca\ui\data\ui_button_main_focus_ca.paa"; animTextureFocused = "Client\Images\ui_button_main_focus.paa"; //animTexturePressed = "\ca\ui\data\ui_button_main_down_ca.paa"; animTexturePressed = "Client\Images\ui_button_main_down.paa"; animTextureDefault = "\ca\ui\data\ui_button_main_normal_ca.paa"; period = 0.5; font = "Zeppelin32"; size = 0.03921; sizeEx = 0.03921; text = ""; soundEnter[] = {"\ca\ui\data\sound\mouse2", 0.09, 1}; soundPush[] = {"\ca\ui\data\sound\new1", 0.09, 1}; soundClick[] = {"\ca\ui\data\sound\mouse3", 0.07, 1}; soundEscape[] = {"\ca\ui\data\sound\mouse1", 0.09, 1}; action = ""; class Attributes { font = "Zeppelin32"; color = "#E5E5E5"; align = "left"; shadow = "false"; }; class AttributesImage { font = "Zeppelin32"; color = "#E5E5E5"; align = "false"; }; }; /* RscListBox */ class RscListBox { idc = -2; type = 5; style = 0 + 0x10; font = "Zeppelin32"; sizeEx = 0.04221; color[] = {0.2588, 0.7137, 1, 1}; colorText[] = {1, 1, 1, 0.75}; colorScrollbar[] = {0.95, 0, 0, 1}; colorSelect[] = {0, 0, 0, 0.7}; colorSelect2[] = {0, 0, 0, 0.7}; colorSelectBackground[] = {0.2588, 0.7137, 1, 1}; colorSelectBackground2[] = {0.2588, 0.7137, 1, 1}; columns[] = {0.1, 0.7, 0.1, 0.1}; period = 0; colorBackground[] = {0, 0, 0, 1}; maxHistoryDelay = 1.0; autoScrollSpeed = -1; autoScrollDelay = 5; autoScrollRewind = 0; soundSelect[] = {"\ca\ui\data\sound\new1", 0.09, 1}; class ScrollBar { color[] = {1, 1, 1, 0.6}; colorActive[] = {1, 1, 1, 1}; colorDisabled[] = {1, 1, 1, 0.3}; thumb = "\ca\ui\data\igui_scrollbar_thumb_ca.paa"; arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa"; arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa"; border = "\ca\ui\data\igui_border_scroll_ca.paa"; }; }; class RscListnBox : RscListBox { type = 102; lineSpacing = 1; sizeEx = 0.029; rowHeight = 0.03; style = 16; arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)"; arrowFull = "#(argb,8,8,3)color(1,1,1,1)"; idcRight = -1; idcLeft = -1; drawSideArrows = 0; }; class RscListBoxA : RscListBox { type = 102; lineSpacing = 1; sizeEx = 0.029; rowHeight = 0.03; style = 16; arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)"; arrowFull = "#(argb,8,8,3)color(1,1,1,1)"; }; /* RscText */ class RscText { idc = -2; type = 0; x = 0; y = 0; h = 0.037; w = 0; style = 256; font = "Zeppelin32"; text = ""; sizeEx = 0.03; shadow = 2; colorText[] = {0.9333, 0.8980, 0.5451, 0.9}; colorBackground[] = {0, 0, 0, 0}; }; class RscText_Title : RscText { h = 0.04; colorText[] = {0.2588, 0.7137, 1, 1}; sizeEx = 0.045; shadow = 1; }; class RscText_SubTitle : RscText { h = 0.04; colorText[] = {0.2588, 0.7137, 1, 0.9}; sizeEx = 0.035; shadow = 1; }; class RscText_Small : RscText { h = 0.037; colorText[] = {0.9333, 0.8980, 0.5451, 0.9}; sizeEx = 0.025; shadow = 2; }; class RscEdit : RscText { type = CT_EDIT; font = "Zeppelin32"; sizeEx = 0.03; colorText[] = {1, 1, 1, 0.75}; colorSelection[] = {0.2588, 0.7137, 1, 1}; autocomplete = true; }; /* RscStructuredText */ class RscStructuredText { type = 13; idc = -2; style = 0; x = 0; y = 0; h = 0.035; w = 0.1; text = ""; size = 0.03421; colorText[] = subcolor1; class Attributes { font = "Zeppelin32"; color = subcolor1hex; align = "left"; shadow = true; }; }; /* RscXSliderH */ class RscXSliderH { idc = -2; type = 43; style = 0x400 + 0x10; x = 0; y = 0; h = 0.029412; w = 0.4; color[] = {1, 1, 1, 0.4}; colorActive[] = {1, 1, 1, 1}; colorDisabled[] = {1, 1, 1, 0.2}; arrowEmpty = "\ca\ui\data\ui_arrow_left_ca.paa"; arrowFull = "\ca\ui\data\ui_arrow_left_active_ca.paa"; border = "\ca\ui\data\ui_border_frame_ca.paa"; thumb = "\ca\ui\data\ui_slider_bar_ca.paa"; }; /* RscCombo */ class RscCombo { idc = -2; type = 4; style = 1; x = 0; y = 0; w = 0.3; h = 0.035; colorSelect[] = {0, 0, 0, 0.7}; colorText[] = {1, 1, 1, 0.75}; colorBackground[] = {0,0,0,0.75}; colorSelectBackground[] = {0.2588, 0.7137, 1, 1}; colorScrollbar[] = {0.023529, 0, 0.0313725, 1}; arrowEmpty = "\ca\ui\data\ui_arrow_combo_ca.paa"; arrowFull = "\ca\ui\data\ui_arrow_combo_active_ca.paa"; wholeHeight = 0.45; color[] = {0.2588, 0.7137, 1, 1}; colorActive[] = {0, 0, 0, 1}; colorDisabled[] = {0, 0, 0, 0.3}; font = "Zeppelin32"; sizeEx = 0.031; soundSelect[] = {"\ca\ui\data\sound\new1", 0.09, 1}; soundExpand[] = {"\ca\ui\data\sound\new1", 0.09, 1}; soundCollapse[] = {"\ca\ui\data\sound\new1", 0.09, 1}; maxHistoryDelay = 1.0; class ScrollBar { color[] = {1, 1, 1, 0.6}; colorActive[] = {1, 1, 1, 1}; colorDisabled[] = {1, 1, 1, 0.3}; thumb = "\ca\ui\data\ui_scrollbar_thumb_ca.paa"; arrowFull = "\ca\ui\data\ui_arrow_top_active_ca.paa"; arrowEmpty = "\ca\ui\data\ui_arrow_top_ca.paa"; border = "\ca\ui\data\ui_border_scroll_ca.paa"; }; }; /* RscClickableText */ class RscClickableText { idc = -2; type = 11; style = 48 + 0x800; color[] = {0.75,0.75,0.75,1}; colorActive[] = {1,1,1,1}; colorBackground[] = {0.6, 0.8392, 0.4706, 1}; colorBackgroundSelected[] = {0.6, 0.8392, 0.4706, 1}; colorFocused[] = {0.0, 0.0, 0.0, 0}; font = "Zeppelin32"; sizeEx = 0.03921; soundClick[] = {WFBE_SoundClick,0.2,1}; soundDoubleClick[] = {"", 0.1, 1}; soundEnter[] = {WFBE_SoundEnter,0.2,1}; soundEscape[] = {WFBE_SoundEscape,0.2,1}; soundPush[] = {, 0.2, 1}; w = 0.275; h = 0.04; text = ""; }; /* RscMapControl */ class RscMapControl { type = 101; moveOnEdges = 1; sizeEx = 0.025; style = 48; x = 0.2; y = 0.2; w = 0.2; h = 0.2; ptsPerSquareSea = 8; ptsPerSquareTxt = 10; ptsPerSquareCLn = 10; ptsPerSquareExp = 10; ptsPerSquareCost = 10; ptsPerSquareFor = "6.0f"; ptsPerSquareForEdge = "15.0f"; ptsPerSquareRoad = "3f"; ptsPerSquareObj = 15; showCountourInterval = "false"; maxSatelliteAlpha = 0.75; alphaFadeStartScale = 0.15; alphaFadeEndScale = 0.29; colorLevels[] = {0.65, 0.6, 0.45, 1}; colorSea[] = {0.46, 0.65, 0.74, 0.5}; colorForest[] = {0.45, 0.64, 0.33, 0.5}; colorRocks[] = {0, 0, 0, 0.3}; colorCountlines[] = {0.85, 0.8, 0.65, 1}; colorMainCountlines[] = {0.45, 0.4, 0.25, 1}; colorCountlinesWater[] = {0.25, 0.4, 0.5, 0.3}; colorMainCountlinesWater[] = {0.25, 0.4, 0.5, 0.9}; colorPowerLines[] = {0.1, 0.1, 0.1, 1}; colorRailWay[] = {0.8, 0.2, 0, 1}; colorForestBorder[] = {0, 0, 0, 0}; colorRocksBorder[] = {0, 0, 0, 0}; colorNames[] = {0.1, 0.1, 0.1, 0.9}; colorInactive[] = {1, 1, 1, 0.5}; colorText[] = {0, 0, 0, 1}; colorBackground[] = {0.8, 0.8, 0.8, 1}; font = "EtelkaNarrowMediumPro"; colorOutside[] = {0, 0, 0, 1}; fontLabel = "Zeppelin32"; sizeExLabel = 0.034; fontGrid = "Zeppelin32"; sizeExGrid = 0.03; fontUnits = "Zeppelin32"; sizeExUnits = 0.034; fontNames = "Zeppelin32"; sizeExNames = 0.056; fontInfo = "Zeppelin32"; sizeExInfo = 0.034; fontLevel = "Zeppelin32"; sizeExLevel = 0.024; text = "\ca\ui\data\map_background2_co.paa"; class Task { icon = "\ca\ui\data\ui_taskstate_current_CA.paa"; iconCreated = "\ca\ui\data\ui_taskstate_new_CA.paa"; iconCanceled = "#(argb,8,8,3)color(0,0,0,0)"; iconDone = "\ca\ui\data\ui_taskstate_done_CA.paa"; iconFailed = "\ca\ui\data\ui_taskstate_failed_CA.paa"; color[] = {0.863, 0.584, 0.0, 1}; colorCreated[] = {0.95, 0.95, 0.95, 1}; colorCanceled[] = {0.606, 0.606, 0.606, 1}; colorDone[] = {0.424, 0.651, 0.247, 1}; colorFailed[] = {0.706, 0.0745, 0.0196, 1}; size = 27; importance = 1; coefMin = 1; coefMax = 1; }; class CustomMark { icon = "\ca\ui\data\map_waypoint_ca.paa"; color[] = {0.6471, 0.6706, 0.6235, 1.0}; size = 18; importance = 1; coefMin = 1; coefMax = 1; }; class Legend { //todo - current left corner top x = "SafeZoneX"; y = "SafeZoneY"; w = 0.34; h = 0.152; font = "Zeppelin32"; sizeEx = 0.03921; colorBackground[] = {0.906, 0.901, 0.88, 0}; color[] = {0, 0, 0, 1}; }; class Bunker { icon = "\ca\ui\data\map_bunker_ca.paa"; size = 14; color[] = {0, 0, 1, 1}; importance = 1.5 * 14 * 0.05; coefMin = 0.25; coefMax = 4; }; class Bush { icon = "\ca\ui\data\map_bush_ca.paa"; color[] = {0.55, 0.64, 0.43, 1}; size = 14; importance = 0.2 * 14 * 0.05; coefMin = 0.25; coefMax = 4; }; class BusStop { icon = "\ca\ui\data\map_busstop_ca.paa"; color[] = {0, 0, 1, 1}; size = 12; importance = 1 * 10 * 0.05; coefMin = 0.25; coefMax = 4; }; class Command { icon = "\ca\ui\data\map_waypoint_ca.paa"; color[] = {0, 0.9, 0, 1}; size = 18; importance = 1; coefMin = 1; coefMax = 1; }; class Cross { icon = "\ca\ui\data\map_cross_ca.paa"; size = 16; color[] = {0, 0.9, 0, 1}; importance = 0.7 * 16 * 0.05; coefMin = 0.25; coefMax = 4; }; class Fortress { icon = "\ca\ui\data\map_bunker_ca.paa"; size = 16; color[] = {0, 0.9, 0, 1}; importance = 2 * 16 * 0.05; coefMin = 0.25; coefMax = 4; }; class Fuelstation { icon = "\ca\ui\data\map_fuelstation_ca.paa"; size = 16; color[] = {0, 0.9, 0, 1}; importance = 2 * 16 * 0.05; coefMin = 0.75; coefMax = 4; }; class Fountain { icon = "\ca\ui\data\map_fountain_ca.paa"; color[] = {0.2, 0.45, 0.7, 1}; size = 11; importance = 1 * 12 * 0.05; coefMin = 0.25; coefMax = 4; }; class Hospital { icon = "\ca\ui\data\map_hospital_ca.paa"; color[] = {0.78, 0, 0.05, 1}; size = 16; importance = 2 * 16 * 0.05; coefMin = 0.5; coefMax = 4; }; class Chapel { icon = "\ca\ui\data\map_chapel_ca.paa"; color[] = {0, 0, 1, 1}; size = 16; importance = 1 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class Church { icon = "\ca\ui\data\map_church_ca.paa"; size = 16; color[] = {0, 0.9, 0, 1}; importance = 2 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class Lighthouse { icon = "\ca\ui\data\map_lighthouse_ca.paa"; size = 14; color[] = {0, 0.9, 0, 1}; importance = 3 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class Quay { icon = "\ca\ui\data\map_quay_ca.paa"; size = 16; color[] = {0, 0.9, 0, 1}; importance = 2 * 16 * 0.05; coefMin = 0.5; coefMax = 4; }; class Rock { icon = "\ca\ui\data\map_rock_ca.paa"; color[] = {0.1, 0.1, 0.1, 0.8}; size = 12; importance = 0.5 * 12 * 0.05; coefMin = 0.25; coefMax = 4; }; class Ruin { icon = "\ca\ui\data\map_ruin_ca.paa"; size = 16; color[] = {0, 0.9, 0, 1}; importance = 1.2 * 16 * 0.05; coefMin = 1; coefMax = 4; }; class SmallTree { icon = "\ca\ui\data\map_smalltree_ca.paa"; color[] = {0.45, 0.64, 0.33, 0.4}; size = 12; importance = 0.6 * 12 * 0.05; coefMin = 0.25; coefMax = 4; }; class Stack { icon = "\ca\ui\data\map_stack_ca.paa"; size = 20; color[] = {0, 0.9, 0, 1}; importance = 2 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class Tree { icon = "\ca\ui\data\map_tree_ca.paa"; color[] = {0.45, 0.64, 0.33, 0.4}; size = 12; importance = 0.9 * 16 * 0.05; coefMin = 0.25; coefMax = 4; }; class Tourism { icon = "\ca\ui\data\map_tourism_ca.paa"; size = 16; color[] = {0.78, 0, 0.05, 1}; importance = 1 * 16 * 0.05; coefMin = 0.7; coefMax = 4; }; class Transmitter { icon = "\ca\ui\data\map_transmitter_ca.paa"; color[] = {0, 0.9, 0, 1}; size = 20; importance = 2 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class ViewTower { icon = "\ca\ui\data\map_viewtower_ca.paa"; color[] = {0, 0.9, 0, 1}; size = 16; importance = 2.5 * 16 * 0.05; coefMin = 0.5; coefMax = 4; }; class Watertower { icon = "\ca\ui\data\map_watertower_ca.paa"; color[] = {0.2, 0.45, 0.7, 1}; size = 20; importance = 1.2 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class Waypoint { icon = "\ca\ui\data\map_waypoint_ca.paa"; color[] = {0, 0, 1, 1}; size = 14; importance = 2.5 * 16 * 0.05; coefMin = 0.5; coefMax = 4; }; class WaypointCompleted { icon = "\ca\ui\data\map_waypoint_completed_ca.paa"; color[] = {0, 0, 1, 1}; size = 14; importance = 2.5 * 16 * 0.05; coefMin = 0.5; coefMax = 4; }; class ActiveMarker { icon = ""; color[] = {0, 0, 1, 1}; size = 14; importance = 2.5 * 16 * 0.05; coefMin = 0.5; coefMax = 4; }; }; /* Background */ #define WFBE_OA_Icon {0.2588, 0.7137, 1, 1} #define WFBE_EOGS_Background {0, 0, 0, 0.7} #define WFBE_EOGS_SRVBBar {0.2588, 0.7137, 1, 1} #define WFBE_EOGS_SLVLBar {0.2588, 0.7137, 1, 1} //---Coloration #define WFBE_Background_Color {0, 0, 0, 0.7} #define WFBE_Background_Color_Header {0, 0, 0, 0.4} #define WFBE_Background_Color_Footer {0, 0, 0, 0.3} #define WFBE_Background_Color_Sub {0, 0, 0, 0.3} #define WFBE_Background_Color_Gear {0.5, 0.5, 0.5, 0.15} #define WFBE_Background_Border {0.2588, 0.7137, 1, 1} //---Thick #define WFBE_Background_Border_Thick 0.001 /* ListBox */ //---ListBox Coloration #define WFBE_LBC_Select_Color {0.2588, 0.7137, 1, 1} /* Separator */ //---Coloration #define WFBE_SPC1 {0.2588, 0.7137, 1, 1} #define WFBE_SPC2 {0.543, 0.5742, 0.4102, 1} //unused //---Thick #define WFBE_SPT1 0.001 #define WFBE_SPT2 0.0005 //unused #define WFBE_Menu_Button_Color {0.258823529, 0.713725490, 1, 0.7} #define WFBE_Menu_Button_Text_Color {1, 1, 1, 0.8} #define WFBE_Menu_Button_Focused_Color {0.258823529, 0.713725490, 1, 1} #define WFBE_Menu_Button_Sub_Color {0.388235294, 0.925490196, 0.494117647, 0.7} #define WFBE_Menu_Button_Sub_Focused_Color {0.388235294, 0.925490196, 0.494117647, 1} #define WFBE_Menu_ListBox_Select_Color {0.258823529, 0.713725490, 1, 1} #define WFBE_Menu_Text_Color {0.258823529, 0.713725490, 1, 1} #define WFBE_Menu_Title_Color {0.258823529, 0.713725490, 1, 1}/* Titles */ #ifdef VANILLA #define usflag "\ca\data\flag_usa_co.paa" #define ruflag "\ca\data\flag_rus_co.paa" #endif #ifdef ARROWHEAD #define usflag "\ca\ca_e\data\flag_us_co.paa" #define ruflag "\ca\ca_e\data\flag_tkg_co.paa" #endif #ifdef COMBINEDOPS #define usflag "\ca\ca_e\data\flag_us_co.paa" #define ruflag "\ca\data\flag_rus_co.paa" #endif #ifndef usflag #define usflag "\ca\ca_e\data\flag_us_co.paa" #define ruflag "\ca\ca_e\data\flag_tkg_co.paa" #endif class RscTitles { titles[] = {CaptureBar,OptionsAvailable,EndOfGameStats}; class CaptureBar { idd = 600100; duration = 15000; name = "Capture Bar"; onLoad = "uiNamespace setVariable ['wfbe_title_capture', _this select 0]"; onUnload = "uiNamespace setVariable ['wfbe_title_capture', displayNull]"; class controls { class CA_Progress_Bar_Background : RscText { style = ST_TEXT_BG; idc = 601000; x = 0.3; y = "((SafeZoneH + SafeZoneY) - (1 + 0.165))*-1"; w = 0.4; h = 0.06; colorBackground[] = {0,0,0,0.001}; }; class CA_Progress_Bar : CA_Progress_Bar_Background { idc = 601001; x = 0.31; y = "((SafeZoneH + SafeZoneY) - (1 + 0.175))*-1"; w = 0.38; h = 0.04; }; class CA_Progress_Label : RscText { idc = 601002; style = ST_CENTER; colorText[] = {1,1,1,0.8}; shadow = 2; x = 0.31; w = 0.38; y = "((SafeZoneH + SafeZoneY) - (1 + 0.177))*-1"; }; }; }; class OptionsAvailable { idd = 10200; movingEnable = 0; objects[] = {}; duration = 15000; name = "OptionsAvailable"; onLoad = "_this ExecVM ""Client\GUI\GUI_SetCurrentCutDisplay.sqf"""; onUnload = "_this ExecVM ""Client\GUI\GUI_ClearCurrentCutDisplay.sqf"""; controls[] = {"OptionsIcon0", "OptionsIcon1", "OptionsIcon2", "OptionsIcon3", "OptionsIcon4", "OptionsIcon5", "OptionsIcon6", "OptionsIcon7", "OptionsIcon8", "OptionsIcon9", "OptionsIcon10", "OptionsIcon11", "OptionsIcon12", "OptionsIcon13", "OptionsIcon14", "OptionsIcon15", "OptionsIcon16", "OptionsIcon17"}; controlsBackground[] = {}; class OptionsImageAspectRatio : RscPicture { w = 0.0784314; h = 0.104575; style = 0x30+0x800; }; class OptionsIcon0 : OptionsImageAspectRatio { idc = 3500; x = "(SafeZoneW + SafeZoneX) - (0.0392157)"; y = 0+(0.0522876*17); w = 0.0392157; h = 0.0522876; colorText[] = WFBE_OA_Icon; text = ""; }; class OptionsIcon1 : OptionsIcon0 { idc = 3500 + 1; y = 0+(0.0522876*16); }; class OptionsIcon2 : OptionsIcon0 { idc = 3500 + 2; y = 0+(0.0522876*15); }; class OptionsIcon3 : OptionsIcon0 { idc = 3500 + 3; y = 0+(0.0522876*14); }; class OptionsIcon4 : OptionsIcon0 { idc = 3500 + 4; y = 0+(0.0522876*13); }; class OptionsIcon5 : OptionsIcon0 { idc = 3500 + 5; y = 0+(0.0522876*12); }; class OptionsIcon6 : OptionsIcon0 { idc = 3500 + 6; y = 0+(0.0522876*11); }; class OptionsIcon7 : OptionsIcon0 { idc = 3500 + 7; y = 0+(0.0522876*10); }; class OptionsIcon8 : OptionsIcon0 { idc = 3500 + 8; y = 0+(0.0522876*9); }; class OptionsIcon9 : OptionsIcon0 { idc = 3500 + 9; y = 0+(0.0522876*8); }; class OptionsIcon10 : OptionsIcon0 { idc = 3500 + 10; y = 0+(0.0522876*7); }; class OptionsIcon11 : OptionsIcon0 { idc = 3500 + 11; y = 0+(0.0522876*6); }; class OptionsIcon12 : OptionsIcon0 { idc = 3500 + 12; y = 0+(0.0522876*5); }; class OptionsIcon13 : OptionsIcon0 { idc = 3500 + 13; y = 0+(0.0522876*4); }; class OptionsIcon14 : OptionsIcon0 { idc = 3500 + 14; y = 0+(0.0522876*3); }; class OptionsIcon15 : OptionsIcon0 { idc = 3500 + 15; y = 0+(0.0522876*2); }; class OptionsIcon16 : OptionsIcon0 { idc = 3500 + 16; y = 0+(0.0522876*1); }; class OptionsIcon17 : OptionsIcon0 { idc = 3500 + 17; y = 0.0522876; }; }; class EndOfGameStats { idd = 90000; duration = 15000; movingEnable = 0; objects[] = {}; name = "EndOfGameStats"; onLoad = "_this ExecVM ""Client\GUI\GUI_SetCurrentCutDisplay.sqf"""; onUnload = "_this ExecVM ""Client\GUI\GUI_ClearCurrentCutDisplay.sqf"""; controls[] = {StatsBackGroundHeader,SideWinsText,StatsBackGround,EastImage,WestImage,SoldiersRecruitedLabel,SoldiersLostLabel,VehiclesCreatedLabel,VehiclesLostLabel, EastSoldiersRecruitedBar,EastSoldiersRecruitedCount,WestSoldiersRecruitedBar,WestSoldiersRecruitedCount, EastSoldiersLostBar,EastSoldiersLostCount,WestSoldiersLostBar,WestSoldiersLostCount, EastVehiclesCreatedBar,EastVehiclesCreatedCount,WestVehiclesCreatedBar,WestVehiclesCreatedCount, EastVehiclesLostBar,EastVehiclesLostCount,WestVehiclesLostBar,WestVehiclesLostCount}; controlsBackground[] = {}; class StatsBackGroundHeader : RscText { style = 128; idc = 90002; x = 0; y = 0.06; w = 1; h = 0.18; colorBackground[] = WFBE_EOGS_Background; }; class SideWinsText : RscText { idc = 90001; style = 2; sizeEx = 0.05; x = 0.211224; y = 0.1; w = 0.579592; h = 0.08; colorText[] = {1.0,1.0,1.0,1}; }; class StatsBackGround : RscText { style = 128; idc = 90003; x = 0; y = 0.24; w = 1; h = 0.62; colorBackground[] = WFBE_EOGS_Background; }; class EastImage : RscPicture { style = 48 + 0x800; x = 0.00612286; y = 0.05; w = 0.2; h = 0.2; text = ruflag; }; class WestImage:EastImage { x = 0.792857; text = usflag; }; class SoldiersRecruitedLabel : RscText { style = 2; sizeEx = 0.03; x = 0.05; y = 0.25; w = 0.9; h = 0.04; colorText[] = {1.0,1.0,1.0,1}; text = $STR_WF_END_Soldier_Recruited; }; class SoldiersRecruitedCountBase : RscText { idc = 90100; style = 0; sizeEx = 0.06; x = 0.05; y = 0.3; w = 0.2; h = 0.1; colorText[] = {1.0,1.0,1.0,1}; }; class EastSoldiersRecruitedCount : SoldiersRecruitedCountBase { idc = 90101; }; class EastSoldiersRecruitedBar : RscText { style = 128; idc = 90102; x = 0.05; y = 0.31; w = 0.4; h = 0.08; colorBackground[] = WFBE_EOGS_SRVBBar; }; class WestSoldiersRecruitedCount : SoldiersRecruitedCountBase { idc = 90200; x = 0.55; }; class WestSoldiersRecruitedBar : EastSoldiersRecruitedBar { idc = 90201; x = 0.55; }; class SoldiersLostLabel : SoldiersRecruitedLabel { y = 0.4; text = $STR_WF_END_Soldier_Lost; }; class EastSoldiersLostCount : SoldiersRecruitedCountBase { idc = 90103; y = 0.45; }; class EastSoldiersLostBar : EastSoldiersRecruitedBar { idc = 90104; y = 0.46; colorBackground[] = WFBE_EOGS_SLVLBar; }; class WestSoldiersLostCount : SoldiersRecruitedCountBase { idc = 90202; y = 0.45; x = 0.55; }; class WestSoldiersLostBar : EastSoldiersLostBar { idc = 90203; x = 0.55; }; class VehiclesCreatedLabel : SoldiersRecruitedLabel { y = 0.55; text = $STR_WF_END_Vehicle_Built; }; class EastVehiclesCreatedCount : SoldiersRecruitedCountBase { idc = 90105; y = 0.6; }; class EastVehiclesCreatedBar : EastSoldiersRecruitedBar { idc = 90106; y = 0.61; colorBackground[] = WFBE_EOGS_SRVBBar; }; class WestVehiclesCreatedCount : SoldiersRecruitedCountBase { idc = 90204; x = 0.55; y = 0.6; }; class WestVehiclesCreatedBar : EastVehiclesCreatedBar { idc = 90205; x = 0.55; }; class VehiclesLostLabel : SoldiersRecruitedLabel { y = 0.7; text = $STR_WF_END_Vehicle_Lost; }; class EastVehiclesLostCount : SoldiersRecruitedCountBase { idc = 90107; y = 0.75; }; class EastVehiclesLostBar : EastSoldiersRecruitedBar { idc = 90108; y = 0.76; colorBackground[] = WFBE_EOGS_SLVLBar; }; class WestVehiclesLostCount : SoldiersRecruitedCountBase { idc = 90206; x = 0.55; y = 0.75; }; class WestVehiclesLostBar : EastVehiclesLostBar { idc = 90207; x = 0.55; }; }; class WFBE_ConstructionInterface { idd = 112200; movingEnable = 0; duration = 1e+011; name = "Construction Interface"; onLoad = "uiNamespace setVariable ['wfbe_title_coin', _this select 0]"; onUnload = "uiNamespace setVariable ['wfbe_title_coin', displayNull]"; class controls { class center : RscPictureKeepAspect { idc = 112201; x = 0.4; y = 0.4; w = 0.2; h = 0.2; colorText[] = {1, 1, 1, 0.1}; text = "\ca\ui\data\cursor_w_laserlock_gs.paa"; }; class descBackLeft : IGUIBack { idc = 112211; x = "SafezoneX + 0.01"; y = "SafezoneY + SafezoneH - 0.13 + 0.01"; w = 0.3; h = 0.12; }; class descBackCenter : descBackLeft { idc = 112212; x = "SafezoneX + 0.01 + 0.3"; w = "SafeZoneW - 0.02 - 0.3*2"; }; class descBackRight : descBackLeft { idc = 112213; x = "SafezoneX + SafeZoneW - 0.01 - 0.3"; w = 0.3; }; class descText : RscStructuredText { idc = 112214; x = "SafezoneX + 0.01 + 0.3"; y = "SafezoneY + SafezoneH - 0.13 + 0.021"; w = "SafeZoneW - 0.02 - 0.3*2"; h = 0.11; size = 0.035; class Attributes { font = "Zeppelin32"; color = "#B6F862"; align = "left"; shadow = true; }; }; class controlsText : descText { idc = 112215; x = "SafezoneX + SafeZoneW - 0.01 - 0.3"; y = "SafezoneY + SafezoneH - 0.13 + 0.015"; w = 0.3; h = 0.11; }; class cashText : descText { idc = 112224; x = "SafezoneX + 0.012*2"; y = "SafezoneY + SafezoneH - 0.13 + 0.02"; w = 0.2; h = 0.1; }; }; }; };(leader _this) addMPEventHandler ['MPRespawn',{if (isServer && !(isPlayer (_this select 0))) then {_this Spawn AIAdvancedRespawn}}];/* Enhanced Respawn Management via Multiplayer Event Handler - Experimental */ Private ['_autonomous','_availableSpawn','_buildings','_checks','_closestRespawn','_corpse','_deathLoc','_hq','_i','_isForcedRespawn','_mobileRespawns','_moveMode','_pos','_ran','_range','_rcm','_rd','_respawn','_respawnLoc','_respawnedUnit','_side','_sideID','_sideText','_skip','_team','_update','_upgrades']; _respawnedUnit = _this select 0; _corpse = _this select 1; _deathLoc = getPos _corpse; _rd = missionNamespace getVariable "WFBE_C_RESPAWN_DELAY"; _rcm = missionNamespace getVariable "WFBE_C_RESPAWN_CAMPS_MODE"; _side = side _respawnedUnit; _sideID = (_side) Call GetSideID; //--- Ensure that the side is not civilian. if (_side == civilian) then { _side = switch (getNumber(configFile >> "CfgVehicles" >> typeOf _respawnedUnit >> "side")) do {case 0: {east}; case 1: {west}; case 2: {resistance}; default {civilian}}; }; _sideText = str _side; _team = group _respawnedUnit; _respawn = (_team) Call GetTeamRespawn; _respawnLoc = objNull; ["INFORMATION", Format ["AI_AdvancedRespawn.sqf: [%1] AI Team Leader [%2] [%3] has respawned.", _sideText, _team, _respawnedUnit]] Call WFBE_CO_FNC_LogContent; //--- Remove previous EH. _respawnedUnit removeAllEventHandlers "Killed"; _respawnedUnit addEventHandler ['Killed', Format["[_this select 0,_this select 1,%1] Spawn WFBE_CO_FNC_OnUnitKilled", _sideID]]; //--- Place the leader on a 'safe' position. _respawnedUnit setPos getMarkerPos Format["%1TempRespawnMarker",_sideText]; _availableSpawn = []; _isForcedRespawn = false; //--- Ensure that the ai is not forced to respawn. if (typeName _respawn == 'STRING') then {if (_respawn == "forceRespawn") then {_isForcedRespawn = true}}; //--- Towns. if (_rcm > 0 && !_isForcedRespawn) then { _availableSpawn = _availableSpawn + ([_deathLoc, _side] Call GetRespawnCamps); }; _upgrades = (_side) Call WFBE_CO_FNC_GetSideUpgrades; //--- Mobile Respawn. if ((missionNamespace getVariable "WFBE_C_RESPAWN_MOBILE") > 0 && !_isForcedRespawn) then { _mobileRespawns = missionNamespace getVariable Format ["WFBE_%1AMBULANCES",_sideText]; _range = (missionNamespace getVariable "WFBE_C_RESPAWN_RANGES") select (_upgrades select WFBE_UP_RESPAWNRANGE); _checks = _deathLoc nearEntities[_mobileRespawns,_range]; if (count _checks > 0) then { {if (alive _x) then {_availableSpawn = _availableSpawn + [_x]}} forEach _checks; }; }; //--- Wait. _i = _rd; _skip = false; while {_i > 0} do { if (isPlayer(_respawnedUnit) || !(alive _respawnedUnit)) exitWith {_skip = true}; _i = _i - 1; sleep 1; }; //--- Make sure that the AI didn't die or that a player hasn't replaced him before going any further. if !(_skip) then { //--- Equip the AI. _loadout = missionNamespace getVariable Format["WFBE_%1_AI_Loadout_%2", _sideText, _upgrades select 13]; if !(isNil '_loadout') then { _loadout = _loadout select floor (random count _loadout); if (count _loadout <= 3) then { [_respawnedUnit, _loadout select 0, _loadout select 1, _loadout select 2] Call WFBE_CO_FNC_EquipUnit; } else { [_respawnedUnit, _loadout select 0, _loadout select 1, _loadout select 2, _loadout select 3, _loadout select 4] Call WFBE_CO_FNC_EquipUnit; }; }; _hq = (_side) Call WFBE_CO_FNC_GetSideHQ; _buildings = (_side) Call WFBE_CO_FNC_GetSideStructures; //--- Check whether AI has a spawn set or not. _update = false; switch (typeName _respawn) do { case "STRING": { //--- Not defined. _update = true; if (_isForcedRespawn) then {[_team,""] Call SetTeamRespawn}; }; case "OBJECT": { //--- Defined. _respawnLoc = _respawn; if (!alive _respawn || isNull _respawn) then { [_team, ""] Call SetTeamRespawn; _update = true; }; }; }; //--- Default respawn. if (_update) then { _respawnLoc = _hq; if (count _buildings > 0) then { _respawnLoc = [_hq,_buildings] Call WFBE_CO_FNC_GetClosestEntity; }; }; //--- Alternative spawn location. if (count _availableSpawn > 0) then { _respawnLoc = _availableSpawn select floor (random count _availableSpawn); }; ["INFORMATION", Format ["AI_AdvancedRespawn.sqf: [%1] AI Team Leader [%2] [%3] has respawned at [%4].", _sideText, _team, _respawnedUnit, _respawnLoc]] Call WFBE_CO_FNC_LogContent; _pos = [getPos _respawnLoc,20,30] Call GetRandomPosition; _pos set [2,0]; _respawnedUnit setPos _pos; //--- Assign fresh order if the AI is not on autonomous mode. _autonomous = (_team) Call GetTeamAutonomous; if !(_autonomous) then { _moveMode = (_team) Call GetTeamMoveMode; if (_moveMode == "towns") then {_team setVariable ["wfbe_teamgoto", objNull, true]}; if (_moveMode == "move") then {[_team,"resetMove"] Call SetTeamMoveMode}; if (_moveMode == "patrol") then {[_team,"resetPatrol"] Call SetTeamMoveMode}; if (_moveMode == "defense") then {[_team,"resetDefense"] Call SetTeamMoveMode}; }; };Private ["_action","_position","_range","_team"]; _team = _this select 0; _position = _this select 1; _range = _this select 2; _action = _this select 3; switch (_action) do { case "Patrol": {[_team,_position,_range] Call BIS_fnc_taskPatrol}; case "Defend": { _team setFormation "STAG COLUMN"; _team setBehaviour "AWARE"; _team setSpeedMode "NORMAL"; [_team, true, [[_position, 'SAD', 40, 30, "", []]]] Call AIWPAdd; }; case "CPatrol": {[_team,_position,_range] Spawn AIPatrol}; };Private ["_availableSpawn","_autonomous","_buildings","_checks","_closestRespawn","_deathLoc","_enemySide","_hq","_isForcedRespawn","_leader","_loadout","_mobileRespawns","_moveMode","_pos","_ran","_range","_rcm'","_rd","_respawn","_respawnLoc","_side","_sideID","_sideText","_team","_update","_upgrades"]; _side = _this select 0; _team = _this select 1; _sideText = str _side; _deathLoc = objNull; _respawnLoc = objNull; _sideID = (_side) Call GetSideID; _rd = missionNamespace getVariable "WFBE_C_RESPAWN_DELAY"; _rcm = missionNamespace getVariable "WFBE_C_RESPAWN_CAMPS_MODE"; sleep (random 0.5); while {!gameOver} do { if (isPlayer leader _team) exitWith {}; [str _side,'UnitsCreated',1] Call UpdateStatistics; waitUntil {!alive leader _team || isPlayer leader _team}; _deathLoc = getPos (leader _team); ["INFORMATION", Format ["AI_AdvancedRespawn.sqf: [%1] AI Team Leader [%2] [%3] has respawned.", _sideText, _team, leader _team]] Call WFBE_CO_FNC_LogContent; if (isPlayer leader _team) exitWith {}; waitUntil {alive leader _team || isPlayer leader _team}; if (isPlayer leader _team) exitWith {}; _respawn = (_team) Call GetTeamRespawn; //--- Place the AI. _leader = leader _team; _leader removeAllEventHandlers "Killed"; _leader addEventHandler ['Killed', Format["[_this select 0,_this select 1,%1] Spawn WFBE_CO_FNC_OnUnitKilled", _sideID]]; _leader setPos getMarkerPos Format["%1TempRespawnMarker",_sideText]; _availableSpawn = []; _isForcedRespawn = false; if (typeName _respawn == 'STRING') then {if (_respawn == "forceRespawn") then {_isForcedRespawn = true}}; //--- Towns. if (_rcm > 0 && !_isForcedRespawn) then { _availableSpawn = _availableSpawn + ([_deathLoc, _side] Call GetRespawnCamps); }; _upgrades = (_side) Call WFBE_CO_FNC_GetSideUpgrades; //--- Mobile Respawn. if ((missionNamespace getVariable "WFBE_C_RESPAWN_MOBILE") > 0 && !_isForcedRespawn) then { _mobileRespawns = missionNamespace getVariable Format ["WFBE_%1AMBULANCES",_sideText]; _range = (missionNamespace getVariable "WFBE_C_RESPAWN_RANGES") select (_upgrades select WFBE_UP_RESPAWNRANGE); _checks = _deathLoc nearEntities[_mobileRespawns,_range]; if (count _checks > 0) then { {if (alive _x) then {_availableSpawn = _availableSpawn + [_x]}} forEach _checks; }; }; sleep _rd; //--- Equip the AI. _loadout = missionNamespace getVariable Format["WFBE_%1_AI_Loadout_%2", _sideText, _upgrades select 13]; if !(isNil '_loadout') then { _loadout = _loadout select floor (random count _loadout); if (count _loadout <= 3) then { [_leader, _loadout select 0, _loadout select 1, _loadout select 2] Call WFBE_CO_FNC_EquipUnit; } else { [_leader, _loadout select 0, _loadout select 1, _loadout select 2, _loadout select 3, _loadout select 4] Call WFBE_CO_FNC_EquipUnit; }; }; _hq = (_side) Call WFBE_CO_FNC_GetSideHQ; _buildings = (_side) Call WFBE_CO_FNC_GetSideStructures; //--- Check whether AI has a spawn set or not. _update = false; switch (typeName _respawn) do { case "STRING": { _update = true; if (_isForcedRespawn) then {[_team,""] Call SetTeamRespawn}; }; //--- Not defined. case "OBJECT": { _respawnLoc = _respawn; if (!alive _respawn || isNull _respawn) then { [_team, ""] Call SetTeamRespawn; _update = true; }; //--- Defined. }; }; //--- Default respawn. if (_update) then { _respawnLoc = _hq; if (count _buildings > 0) then { _respawnLoc = [_hq,_buildings] Call WFBE_CO_FNC_GetClosestEntity; }; }; //--- Alternative spawn location. if (count _availableSpawn > 0) then { _respawnLoc = _availableSpawn select floor (random count _availableSpawn); }; ["INFORMATION", Format ["AI_AdvancedRespawn.sqf: [%1] AI Team Leader [%2] [%3] has respawned at [%4].", _sideText, _team, leader _team, _respawnLoc]] Call WFBE_CO_FNC_LogContent; _pos = [getPos _respawnLoc,20,30] Call GetRandomPosition; _pos set [2,0]; _leader setPos _pos; //--- Assign fresh order (tbc). _autonomous = (_team) Call GetTeamAutonomous; if !(_autonomous) then { _moveMode = (_team) Call GetTeamMoveMode; if (_moveMode == "towns") then {_team setVariable ["wfbe_teamgoto", objNull, true]}; if (_moveMode == "move") then {[_team,"resetMove"] Call SetTeamMoveMode}; if (_moveMode == "patrol") then {[_team,"resetPatrol"] Call SetTeamMoveMode}; if (_moveMode == "defense") then {[_team,"resetDefense"] Call SetTeamMoveMode}; }; };Private ["_group","_i","_timeSince","_unit","_units","_waitForMembers","_wpPos"] _group = _this select 0 _wpPos = _this select 1 _timeSince = 0 if (vehicle (leader _group) isKindOf "Air") then {Goto "Exit";} #Main ~5 _timeSince = _timeSince + 5 ;Check for the group's status. _units = ((units _group) Call GetLiveUnits) - [leader _group] ;Exit if the leader is the only member. if (count _units < 2) then {Goto "Exit";} _i = 0 _waitForMembers = false ;Iterate through all members. #Loop _unit = _units select _i if (_unit distance (leader _group) > 150 && !(_unit isKindOf 'Air')) then {_waitForMembers = true; if (_timeSince > 240) then {[vehicle _unit,getPos (leader _group),75] Call PlaceSafe;};} _i = _i + 1 if (_i == count _units) then {if (_waitForMembers) then {Goto "Main";} else {Goto "Exit";}}; Goto "Loop" Goto "Main" #Exit ExitPrivate ["_AITrucks","_hq","_isDeployed","_maist","_side"]; _side = _this select 0; _maist = missionNamespace getVariable "WFBE_C_AI_COMMANDER_SUPPLY_TRUCKS_MAX"; waitUntil {townInit}; sleep random 1; while {!gameOver} do { sleep 60; _AITrucks = ((_side) Call WFBE_CO_FNC_GetSideLogic) getVariable "wfbe_ai_supplytrucks"; if (count _AITrucks < _maist) then { _isDeployed = (_side) Call WFBE_CO_FNC_GetSideHQDeployStatus; _hq = (_side) Call WFBE_CO_FNC_GetSideHQ; if (_isDeployed && alive _hq) then { ["INFORMATION", Format ["AI_UpdateSupplyTruck.sqf: [%1] Supply truck was created.", _side]] Call WFBE_CO_FNC_LogContent; [_side] ExecFSM "Server\FSM\supplytruck.fsm"; }; }; }; Private ["_destination","_formations","_mission","_radius","_team","_update"]; _team = _this select 0; _destination = _this select 1; _mission = _this select 2; _radius = if (count _this > 3) then {_this select 3} else {30}; _update = true; if (side _team == west || side _team == east) then { _update = (_team) Call CanUpdateTeam; }; //--- Override. if (_update) then {_team Call UpdateTeam}; ["INFORMATION", Format ["AI_MoveTo.sqf: [%1] Team [%2] is heading to [%3].", side _team,_team,_destination]] Call WFBE_CO_FNC_LogContent; [_team,true,[[_destination, _mission, _radius, 20, "", []]]] Call AIWPAdd;Private ["_destination","_maxWaypoints","_pos","_radius","_rand1","_rand2","_team","_type","_update","_wps","_z"]; _team = _this select 0; _destination = _this select 1; _radius = if (count _this > 2) then {_this select 2} else {30}; if (typeName _destination == 'OBJECT') then {_destination = getPos _destination}; _update = true; if (side _team == west || side _team == east) then { _update = (_team) Call CanUpdateTeam; }; //--- Override. if (_update) then {_team Call UpdateTeam}; _maxWaypoints = 8; _wps = []; for [{_z=0},{_z<=_maxWaypoints},{_z=_z+1}] do { _rand1 = random _radius - random _radius; _rand2 = random _radius - random _radius; _pos = [(_destination select 0)+_rand1,(_destination select 1)+_rand2,0]; while {surfaceIsWater _pos} do { _rand1 = random _radius - random _radius; _rand2 = random _radius - random _radius; _pos = [(_destination select 0)+_rand1,(_destination select 1)+_rand2,0]; }; _type = if (_z != _maxWaypoints) then {'MOVE'} else {'CYCLE'}; _wps = _wps + [[_pos,_type,35,40,"",[]]]; }; ["INFORMATION", Format ["AI_Patrol.sqf: [%1] Team [%2] is patrolling at [%3].", side _team,_team,_destination]] Call WFBE_CO_FNC_LogContent; [_team, true, _wps] Call AIWPAdd;/* Author: Benny Name: AI_TownPatrol.sqf Parameters: 0 - Team 1 - Town 2 - (Radius) Description: This file is called upon a resistance / occupation patrol, AI will randomly patrol in towns, including the camps and the depots. */ Private ['_camps','_insert','_insertObject','_insertStep','_maxWaypoints','_pos','_radius','_rand1','_rand2','_team','_town','_townPos','_type','_update','_usable','_wpcompletionRadius','_wpradius','_wps','_z']; _team = _this select 0; _town = _this select 1; _radius = if (count _this > 2) then {_this select 2} else {30}; if (typeName _town != 'OBJECT') exitWith {["ERROR", Format ["AI_TownPatrol.sqf: Entitie expected, [%1] given", _town]] Call WFBE_CO_FNC_LogContent}; if (isNull _team) exitWith {["ERROR", Format ["AI_TownPatrol.sqf: The given group is null for town [%1]", _town]] Call WFBE_CO_FNC_LogContent}; _townPos = getPos _town; _camps = _town getVariable 'camps'; _usable = [_town] + _camps; _maxWaypoints = (missionNamespace getVariable "WFBE_C_TOWNS_PATROL_HOPS") + count(_usable); _wps = []; //--- Randomize the behaviours. if (random 100 > 50) then {_team setFormation "DIAMOND"} else {_team setFormation "STAG COLUMN"}; if (random 100 > 50) then {_team setCombatMode "YELLOW"} else {_team setCombatMode "RED"}; if (random 100 > 50) then {_team setBehaviour "AWARE"} else {_team setBehaviour "COMBAT"}; if (random 100 > 50) then {_team setSpeedMode "NORMAL"} else {_team setSpeedMode "LIMITED"}; //--- Dyn insert. _insertStep = if (count(_usable) != 0) then {floor(_maxWaypoints / count(_usable))} else {-1}; _insert = _insertStep; _insertObject = objNull; _wpradius = -1; _wpcompletionRadius = -1; for [{_z=0},{_z<=_maxWaypoints},{_z=_z+1}] do { if (_z == _insert && count _usable > 0) then { _insert = _insert + _insertStep; _insertObject = _usable select (round(random((count _usable)-1))); _usable = _usable - [_insertObject]; }; if (isNull _insertObject) then { _rand1 = random _radius - random _radius; _rand2 = random _radius - random _radius; _pos = [(_townPos select 0)+_rand1,(_townPos select 1)+_rand2,0]; while {surfaceIsWater _pos} do { _rand1 = random _radius - random _radius; _rand2 = random _radius - random _radius; _pos = [(_townPos select 0)+_rand1,(_townPos select 1)+_rand2,0]; }; _wpradius = 32; _wpcompletionRadius = 44; } else { _pos = getPos _insertObject; _wpradius = 35; _wpcompletionRadius = 68; }; _type = if (_z != _maxWaypoints) then {'MOVE'} else {'CYCLE'}; _wps = _wps + [[_pos,_type,_wpradius,_wpcompletionRadius, "", []]]; }; ["INFORMATION", Format ["AI_TownPatrol.sqf: [%1] Team [%2] is patrolling around [%3].", side _team,_team,_town]] Call WFBE_CO_FNC_LogContent; [_team, true, _wps] Call AIWPAdd;/* Author: Benny Name: AI_WPAdd.sqf Parameters: 0 - Team 1 - Clear (Remove WPs) 2 - Waypoints (given in an Array) Description: This file is used to give a detailed WP system. Exemple: [_team, true, [[getPos _camp, 'MOVE', 10, 20, "", []],[[1560,2560,0], 'SAD', 50, 70, "", ["canComplete", "this sidechat 'lets roll'"]]...]] Call AddWP; */ Private ['_clear','_completionRadius','_position','_radius','_scripted','_statements','_team','_type','_waypoint','_waypoints','_WPCount']; _team = _this select 0; _clear = _this select 1; _waypoints = _this select 2; if (_clear) then {_team Call AIWPRemove}; { _position = _x select 0; _type = _x select 1; _radius = _x select 2; _completionRadius = _x select 3; _scripted = _x select 4; _statements = _x select 5; if (typeName _position == 'OBJECT') then {_position = getPos _position}; _WPCount = count (waypoints _team); _waypoint = _team addWaypoint [_position,_radius]; [_team, _WPCount] setWaypointType _type; [_team, _WPCount] setWaypointCompletionRadius _completionRadius; if (_type == 'SCRIPTED') then {[_team, _WPCount] setWaypointScript _scripted}; if (count _statements > 0) then {[_team, _WPCount] setWaypointStatements [_statements select 0, _statements select 1]}; if (_WPCount == 0) then {_team setCurrentWaypoint [_team, _WPCount]}; } forEach _waypoints;Private ['_team','_z']; _team = _this; for [{_z = (count (waypoints _team))-1},{_z > -1},{_z = _z - 1}] do { deleteWaypoint [_team, _z]; };Private ['_alliesTeamCost','_alliesTeamTemplates','_alliesTeamTemplateRequires','_alliesTeamTypes','_d','_f','_get','_p','_u']; /* ALLIES TEAM TEMPLATES */ /* CDF*/ _alliesTeamTemplates = []; _alliesTeamTemplateRequires = []; _alliesTeamTypes = []; //--- 0 Inf, 2 Light, 3 Armor, 4 Air _alliesTeamCost = []; _d = ["Infantry - Infantry Squad"]; _u = ["CDF_Soldier_TL"]; _u = _u + ["CDF_Soldier_MG"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier_GL"]; _u = _u + ["CDF_Soldier"]; _u = _u + ["CDF_Soldier_MG"]; _u = _u + ["CDF_Soldier_GL"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier"]; _u = _u + ["CDF_Soldier_Medic"]; _f = [true,false,false,false]; _p = 0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [0]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Infantry - Rifle Squad"]; _u = ["CDF_Soldier_TL"]; _u = _u + ["CDF_Soldier_AR"]; _u = _u + ["CDF_Soldier_MG"]; _u = _u + ["CDF_Soldier_MG"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier_Marksman"]; _u = _u + ["CDF_Soldier_Marksman"]; _f = [true,false,false,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [0]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Infantry - Rifle Squad"]; _u = ["CDF_Soldier_TL"]; _u = _u + ["CDF_Soldier_AR"]; _u = _u + ["CDF_Soldier_MG"]; _u = _u + ["CDF_Soldier_MG"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier_Marksman"]; _u = _u + ["CDF_Soldier_Marksman"]; _f = [true,false,false,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [0]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Infantry - Weapon Squad"]; _u = ["CDF_Soldier_Officer"]; _u = _u + ["CDF_Soldier_AR"]; _u = _u + ["CDF_Soldier_Engineer"]; _u = _u + ["CDF_Soldier_Light"]; _u = _u + ["CDF_Soldier_Strela"]; _u = _u + ["CDF_Soldier_Strela"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier_Sniper"]; _u = _u + ["CDF_Soldier_Spotter"]; _f = [true,false,false,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [0]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Motorized - Infantry Squad"]; _u = ["CDF_Soldier_TL"]; _u = _u + ["Ural_CDF"]; _u = _u + ["CDF_Soldier_MG"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier_GL"]; _u = _u + ["CDF_Soldier"]; _u = _u + ["CDF_Soldier_MG"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier"]; _u = _u + ["CDF_Soldier_Medic"]; _f = [true,true,false,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [1]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Motorized - Infantry Section"]; _u = ["UAZ_AGS30_CDF"]; _u = _u + ["UAZ_AGS30_CDF"]; _u = _u + ["UAZ_MG_CDF"]; _f = [false,true,false,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [1]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Motorized - AA Patrol"]; _u = ["Ural_ZU23_CDF"]; _u = _u + ["Ural_ZU23_CDF"]; _f = [false,true,false,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [1]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Motorized - BRDM"]; _u = ["BRDM2_CDF"]; _u = _u + ["BRDM2_ATGM_CDF"]; _f = [false,true,false,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [1]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Mechanized - Rifle Squad"]; _u = ["CDF_Soldier_TL"]; _u = _u + ["BMP2_CDF"]; _u = _u + ["CDF_Soldier_MG"]; _u = _u + ["CDF_Soldier_MG"]; _u = _u + ["CDF_Soldier_Marksman"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier"]; _f = [true,false,true,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [2]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Mechanized - BMP2"]; _u = ["BMP2_CDF"]; _u = _u + ["BMP2_CDF"]; _u = _u + ["BMP2_CDF"]; _f = [false,false,true,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [2]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Armored - T72"]; _u = ["T72_CDF"]; _u = _u + ["T72_CDF"]; _u = _u + ["T72_CDF"]; _f = [false,false,true,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [2]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Armored - Mix"]; _u = ["T72_CDF"]; _u = _u + ["ZSU_CDF"]; _u = _u + ["BMP2_CDF"]; _f = [false,false,true,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [2]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Air - Hinds"]; _u = ["Mi24_D"]; _u = _u + ["Mi24_D"]; _f = [false,false,false,true]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [3]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Airborn Infantry - Hind"]; _u = ["CDF_Soldier_TL"]; _u = _u + ["Mi24_D"]; _u = _u + ["CDF_Soldier_MG"]; _u = _u + ["CDF_Soldier_Strela"]; _u = _u + ["CDF_Soldier_Strela"]; _f = [true,false,false,true]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [3]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Airborn Infantry - Mi17"]; _u = ["CDF_Soldier_TL"]; _u = _u + ["Mi17_CDF"]; _u = _u + ["CDF_Soldier_MG"]; _u = _u + ["CDF_Soldier_AR"]; _u = _u + ["CDF_Soldier_Marksman"]; _u = _u + ["CDF_Soldier_RPG"]; _u = _u + ["CDF_Soldier_Strela"]; _u = _u + ["CDF_Soldier_Medic"]; _f = [true,false,false,true]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [3]; _alliesTeamCost = _alliesTeamCost + [_p]; missionNamespace setVariable ['WFBE_WESTALLIESTEAMTEMPLATES',_alliesTeamTemplates]; missionNamespace setVariable ['WFBE_WESTALLIESTEAMTEMPLATEREQUIRES',_alliesTeamTemplateRequires]; missionNamespace setVariable ['WFBE_WESTALLIESTEAMTYPES',_alliesTeamTypes]; missionNamespace setVariable ['WFBE_WESTALLIESTEAMCOST',_alliesTeamCost]; missionNamespace setVariable ['WFBE_WESTALLIESCREW','CDF_Soldier_Crew']; missionNamespace setVariable ['WFBE_WESTALLIESSOLDIER','CDF_Soldier']; missionNamespace setVariable ['WFBE_WESTALLIESPILOT','CDF_Soldier_Pilot']; /* Insurgent*/ _alliesTeamTemplates = []; _alliesTeamTemplateRequires = []; _alliesTeamTypes = []; //--- 0 Inf, 2 Light, 3 Armor, 4 Air _alliesTeamCost = []; _d = ["Infantry - Group"]; _u = ["Ins_Soldier_CO"]; _u = _u + ["Ins_Soldier_AR"]; _u = _u + ["Ins_Soldier_GL"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_2"]; _u = _u + ["Ins_Soldier_AR"]; _u = _u + ["Ins_Soldier_1"]; _u = _u + ["Ins_Soldier_Medic"]; _f = [true,false,false,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [0]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Infantry - Weapons Group"]; _u = ["Ins_Soldier_CO"]; _u = _u + ["Ins_Soldier_MG"]; _u = _u + ["Ins_Soldier_MG"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_AR"]; _u = _u + ["Ins_Soldier_AR"]; _u = _u + ["Ins_Soldier_2"]; _f = [true,false,false,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [0]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Infantry - Weapon Squad"]; _u = ["Ins_Soldier_CO"]; _u = _u + ["Ins_Soldier_AR"]; _u = _u + ["Ins_Soldier_Sapper"]; _u = _u + ["Ins_Soldier_2"]; _u = _u + ["Ins_Soldier_AA"]; _u = _u + ["Ins_Soldier_AA"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_Sniper"]; _u = _u + ["Ins_Soldier_Sab"]; _f = [true,false,false,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [0]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Motorized - Infantry Squad"]; _u = ["Ins_Soldier_CO"]; _u = _u + ["Ural_INS"]; _u = _u + ["Ins_Soldier_MG"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_GL"]; _u = _u + ["Ins_Soldier_1"]; _u = _u + ["Ins_Soldier_MG"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_1"]; _u = _u + ["Ins_Soldier_Medic"]; _f = [true,true,false,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [1]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Motorized - Infantry Section"]; _u = ["UAZ_AGS30_INS"]; _u = _u + ["UAZ_SPG9_INS"]; _u = _u + ["UAZ_MG_INS"]; _f = [false,true,false,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [1]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Motorized - AA Patrol"]; _u = ["Ural_ZU23_INS"]; _u = _u + ["Ural_ZU23_INS"]; _f = [false,true,false,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [1]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Motorized - BRDM"]; _u = ["BRDM2_INS"]; _u = _u + ["BRDM2_ATGM_INS"]; _f = [false,true,false,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [1]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Mechanized - Rifle Squad"]; _u = ["Ins_Soldier_CO"]; _u = _u + ["BMP2_INS"]; _u = _u + ["Ins_Soldier_MG"]; _u = _u + ["Ins_Soldier_MG"]; _u = _u + ["Ins_Soldier_Sniper"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_1"]; _f = [true,false,true,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [2]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Mechanized - BMP2"]; _u = ["BMP2_INS"]; _u = _u + ["BMP2_INS"]; _u = _u + ["BMP2_INS"]; _f = [false,false,true,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [2]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Armored - T72"]; _u = ["T72_INS"]; _u = _u + ["T72_INS"]; _u = _u + ["T72_INS"]; _f = [false,false,true,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [2]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Armored - Mix"]; _u = ["T72_INS"]; _u = _u + ["ZSU_INS"]; _u = _u + ["BMP2_INS"]; _f = [false,false,true,false]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [2]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Air - Sukhoi 25"]; _u = ["Su25_Ins"]; _u = _u + ["Su25_Ins"]; _f = [false,false,false,true]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [3]; _alliesTeamCost = _alliesTeamCost + [_p]; _d = ["Airborn Infantry - Mi17"]; _u = ["Ins_Soldier_CO"]; _u = _u + ["Mi17_Ins"]; _u = _u + ["Ins_Soldier_MG"]; _u = _u + ["Ins_Soldier_AR"]; _u = _u + ["Ins_Soldier_Sab"]; _u = _u + ["Ins_Soldier_AT"]; _u = _u + ["Ins_Soldier_AA"]; _u = _u + ["Ins_Soldier_Medic"]; _f = [true,false,false,true]; _p =0; {_get = missionNamespace getVariable _x;if (!isNil '_get') then {_p = _p + (_get select QUERYUNITPRICE)}} forEach _u; _alliesTeamTemplates = _alliesTeamTemplates + [_u]; _alliesTeamTemplateRequires = _alliesTeamTemplateRequires + [_f]; _alliesTeamTypes = _alliesTeamTypes + [3]; _alliesTeamCost = _alliesTeamCost + [_p]; missionNamespace setVariable ['WFBE_EASTALLIESTEAMTEMPLATES',_alliesTeamTemplates]; missionNamespace setVariable ['WFBE_EASTALLIESTEAMTEMPLATEREQUIRES',_alliesTeamTemplateRequires]; missionNamespace setVariable ['WFBE_EASTALLIESTEAMTYPES',_alliesTeamTypes]; missionNamespace setVariable ['WFBE_EASTALLIESTEAMCOST',_alliesTeamCost]; missionNamespace setVariable ['WFBE_EASTALLIESCREW','Ins_Soldier_Crew']; missionNamespace setVariable ['WFBE_EASTALLIESSOLDIER','Ins_Soldier_1']; missionNamespace setVariable ['WFBE_EASTALLIESPILOT','Ins_Soldier_Pilot'];Private ["_areas","_commanderTeam","_deployed","_direction","_grp","_HQ","_HQName","_logic","_logik","_MHQ","_near","_position","_side","_sideText","_site","_type","_update"]; _type = _this select 0; _side = _this select 1; _position = _this select 2; _direction = _this select 3; _sideText = _side; _sideID = (_side) Call GetSideID; _logik = (_side) Call WFBE_CO_FNC_GetSideLogic; if (typeName _position == "OBJECT") then {_position = position _position}; /* Handle the LAG. */ waitUntil {!(_logik getVariable "wfbe_hqinuse")}; _logik setVariable ["wfbe_hqinuse", true]; _HQ = (_side) Call WFBE_CO_FNC_GetSideHQ; _deployed = (_side) Call WFBE_CO_FNC_GetSideHQDeployStatus; if (!_deployed) then { _HQ setPos [1,1,1]; _site = createVehicle [_type, _position, [], 0, "NONE"]; _site setDir _direction; _site setPos _position; _site setVariable ["wfbe_side", _side]; _site setVariable ["wfbe_structure_type", "Headquarters"]; _logik setVariable ['wfbe_hq_deployed', true, true]; _logik setVariable ["wfbe_hq", _site, true]; _site setVehicleInit Format["[this,true,%1] ExecVM 'Client\Init\Init_BaseStructure.sqf'",_sideID]; processInitCommands; [_side,"Deployed", ["Base", _site]] Spawn SideMessage; _site addEventHandler ['killed', {_this Spawn WFBE_SE_FNC_OnHQKilled}]; _site addEventHandler ["hit",{_this Spawn BuildingDamaged}]; if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_HANDLE_FRIENDLYFIRE") > 0) then {_site addEventHandler ['handleDamage',{[_this select 0,_this select 2,_this select 3] Call BuildingHandleDamages}]}; //--- base area limits. if ((missionNamespace getVariable "WFBE_C_BASE_AREA") > 0) then { _update = true; _areas = _logik getVariable "wfbe_basearea"; _near = [_position,_areas] Call WFBE_CO_FNC_GetClosestEntity; if (!isNull _near) then { if (_near distance _position < ((missionNamespace getVariable "WFBE_C_BASE_AREA_RANGE") + (missionNamespace getVariable "WFBE_C_BASE_HQ_BUILD_RANGE"))) then {_update = false}; }; if (_update) then { _grp = createGroup sideLogic; _logic = _grp createUnit ["Logic",[0,0,0],[],0,"NONE"]; _logic setPos _position; _logik setVariable ["wfbe_basearea", _areas + [_logic], true]; }; }; ["INFORMATION", Format ["Construction_HQSite.sqf: [%1] MHQ has been deployed.", _sideText]] Call WFBE_CO_FNC_LogContent; deleteVehicle _HQ; } else { _position = getPos _HQ; _direction = getDir _HQ; _HQName = missionNamespace getVariable Format["WFBE_%1MHQNAME",_sideText]; _HQ setPos [1,1,1]; _MHQ = [_HQName, _position, _sideID, _direction, true, false] Call WFBE_CO_FNC_CreateVehicle; _MHQ setVelocity [0,0,-1]; _MHQ setVariable ["WFBE_Taxi_Prohib", true]; _MHQ setVariable ["wfbe_side", _side]; _MHQ setVariable ["wfbe_trashable", false]; _MHQ setVariable ["wfbe_structure_type", "Headquarters"]; _logik setVariable ["wfbe_hq", _MHQ, true]; _logik setVariable ['wfbe_hq_deployed', false, true]; //--- [>1.62] Set the HQ to be local to the commander. _commanderTeam = (_side) Call WFBE_CO_FNC_GetCommanderTeam; if !(isNull _commanderTeam) then { if (!WF_A2_Vanilla && isMultiplayer && isPlayer(leader _commanderTeam)) then { [_MHQ, leader _commanderTeam] Spawn {sleep 1.7; _this Spawn WFBE_SE_FNC_SetLocalityOwner}; }; }; [_side,"Mobilized", ["Base", _MHQ]] Spawn SideMessage; _MHQ addEventHandler ['killed', {_this Spawn WFBE_SE_FNC_OnHQKilled}]; if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_HANDLE_FRIENDLYFIRE") > 0) then {_MHQ addEventHandler ['handleDamage',{[_this select 0,_this select 2,_this select 3] Call BuildingHandleDamages}]}; ["INFORMATION", Format ["Construction_HQSite.sqf: [%1] MHQ has been mobilized.", _sideText]] Call WFBE_CO_FNC_LogContent; deleteVehicle _HQ; }; /* Handle the LAG. */ _logik setVariable ["wfbe_hqinuse", false];//***************************************************************************************** //Description: Creates a small construction site. //***************************************************************************************** Private ["_construct","_constructed","_direction","_group","_index","_logik","_nearLogic","_objects","_position","_rlType","_side","_sideID","_site","_siteName","_startTime","_structures","_structuresNames","_time","_timeNextUpdate","_type"]; _type = _this select 0; _side = _this select 1; _position = _this select 2; _direction = _this select 3; _index = _this select 4; _logik = (_side) Call WFBE_CO_FNC_GetSideLogic; _sideID = (_side) Call WFBE_CO_FNC_GetSideID; _time = ((missionNamespace getVariable Format ["WFBE_%1STRUCTURETIMES",str _side]) select _index) / 2; _siteName = missionNamespace getVariable Format["WFBE_%1CONSTRUCTIONSITE",str _side]; _structures = missionNamespace getVariable Format ['WFBE_%1STRUCTURES',str _side]; _structuresNames = missionNamespace getVariable Format ['WFBE_%1STRUCTURENAMES',str _side]; _rlType = _structures select (_structuresNames find _type); _startTime = time; _timeNextUpdate = _startTime + _time; _objects = []; if (WF_A2_Arrowhead) then {_objects = [[_siteName,[0,0,0.00242043],359.958,1,0],["Paleta2",[0.430908,-5.60693,-0.30535],359.945,1,0],["Paleta1",[-2.62598,-6.0437,0.000275612],359.951,1,0],["Land_Barrel_sand",[-10.1826,0.356689,7.62939e-005],0.00146227,1,0],["Land_Barrel_sand",[-10.7854,-1.97974,0.000187874],359.987,1,0],["Paleta1",[-9.7251,5.53955,0.000106812],359.976,1,0],["Land_Barrel_sand",[-11.053,-4.12183,0.00019455],359.987,1,0],["Land_Barrel_sand",[-12.3416,-1.57056,7.43866e-005],0.00146227,1,0],["Barrels",[-12.5134,0.682861,0.000136375],0.00146227,1,0],["RoadBarrier_long",[1.63794,-12.8806,-0.000716209],359.92,1,0],["Land_Barrel_sand",[-11.5149,-6.25757,0.00084877],359.938,1,0],["Land_Barrel_sand",[-12.7363,-3.63184,0.000207901],359.938,1,0],["Barrel4",[14.1938,0.500732,0.000412941],359.98,1,0],["Land_Barrel_sand",[-13.0708,-5.9082,0.000863075],359.938,1,0],["Barrel5",[14.7661,-1.11182,0.000411987],359.98,1,0],["Barrel1",[14.7314,2.21338,0.000409126],359.98,1,0],["Paleta2",[12.0034,9.8418,-0.305568],0.0412118,1,0],["RoadCone",[-12.2202,-13.7024,0.000279427],359.984,1,0],["RoadCone",[-12.1877,15.0469,0.000328064],359.969,1,0],["RoadCone",[14.5701,-13.311,0.000322342],359.995,1,0],["RoadCone",[14.6084,14.6824,0.000889778],359.994,1,0]]}; if (WF_A2_Vanilla || WF_A2_CombinedOps) then {_objects = [[_siteName,[0,0,0.00242043],359.958,1,0],["Paleta2",[0.430908,-5.60693,-0.30535],359.945,1,0],["Paleta1",[-2.62598,-6.0437,0.000275612],359.951,1,0],["Land_Ind_BoardsPack1",[-0.82251,-9.15479,0.00291061],49.9467,1,0],["Land_Barrel_sand",[-10.1826,0.356689,7.62939e-005],0.00146227,1,0],["Land_Barrel_sand",[-10.7854,-1.97974,0.000187874],359.987,1,0],["Paleta1",[-9.7251,5.53955,0.000106812],359.976,1,0],["Land_Ind_Timbers",[1.88354,11.1238,-0.487763],95.0061,1,0],["Land_Barrel_sand",[-11.053,-4.12183,0.00019455],359.987,1,0],["Land_Ind_BoardsPack1",[-6.6582,-10.0774,0.0021534],324.956,1,0],["Land_Ind_BoardsPack1",[9.50244,-7.4668,0.00151634],270,1,0],["Land_Ind_Timbers",[12.0264,4.19629,-0.534346],359.98,1,0],["Land_Barrel_sand",[-12.3416,-1.57056,7.43866e-005],0.00146227,1,0],["Barrels",[-12.5134,0.682861,0.000136375],0.00146227,1,0],["RoadBarrier_long",[1.63794,-12.8806,-0.000716209],359.92,1,0],["Land_Barrel_sand",[-11.5149,-6.25757,0.00084877],359.938,1,0],["Land_Barrel_sand",[-12.7363,-3.63184,0.000207901],359.938,1,0],["Land_Ind_BoardsPack1",[-4.74194,-12.4204,0.00105476],49.9807,1,0],["Barrel4",[14.1938,0.500732,0.000412941],359.98,1,0],["Land_Barrel_sand",[-13.0708,-5.9082,0.000863075],359.938,1,0],["Barrel5",[14.7661,-1.11182,0.000411987],359.98,1,0],["Land_Ind_BoardsPack1",[9.42847,-11.5142,0.00151634],359.964,1,0],["Barrel1",[14.7314,2.21338,0.000409126],359.98,1,0],["Paleta2",[12.0034,9.8418,-0.305568],0.0412118,1,0],["RoadCone",[-12.2202,-13.7024,0.000279427],359.984,1,0],["RoadCone",[-12.1877,15.0469,0.000328064],359.969,1,0],["RoadCone",[14.5701,-13.311,0.000322342],359.995,1,0],["RoadCone",[14.6084,14.6824,0.000889778],359.994,1,0]]}; _construct = Compile PreprocessFile "ca\modules\dyno\data\scripts\objectMapper.sqf"; _constructed = ([_position,_direction,_objects] Call _construct); //--- Create the logic. (createGroup sideLogic) createUnit ["LocationLogicStart",_position,[],0,"NONE"]; _nearLogic = objNull; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_CONSTRUCTION_MODE") == 0) then { //--- Grab the logic. _nearLogic = _position nearEntities [["LocationLogicStart"],15]; _nearLogic = [_position, _nearLogic] Call WFBE_CO_FNC_GetClosestEntity; if (isNull _nearLogic) exitWith {}; //--- Position the logic. _nearLogic setPos _position; _nearLogic setVariable ["WFBE_B_Type", _rlType]; waitUntil {time >= _timeNextUpdate}; _timeNextUpdate = _startTime + _time * 2; } else { //--- Grab the logic. _nearLogic = _position nearEntities [["LocationLogicStart"],15]; _nearLogic = [_position, _nearLogic] Call WFBE_CO_FNC_GetClosestEntity; if (isNull _nearLogic) exitWith {}; //--- Position the logic. _nearLogic setPos _position; //--- Instanciate the logic. _nearLogic setVariable ["WFBE_B_Completion", 0]; _nearLogic setVariable ["WFBE_B_CompletionRatio", 0.6]; _nearLogic setVariable ["WFBE_B_Direction", _direction]; _nearLogic setVariable ["WFBE_B_Position", _position]; _nearLogic setVariable ["WFBE_B_Repair", false]; _nearLogic setVariable ["WFBE_B_Type", _rlType]; //--- Add the logic to the list. _logik setVariable ["wfbe_structures_logic", (_logik getVariable "wfbe_structures_logic") + [_nearLogic]]; //--- Awaits for 33% of completion. while {true} do { sleep 1; if ((_nearLogic getVariable "WFBE_B_Completion") >= 33.33) exitWith {}; }; }; if (WF_A2_Arrowhead) then {_objects = [[_siteName,[2.52539,-0.0065918,-0.000685692],359.928,1,0],["Land_WoodenRamp",[-2.27954,-0.582764,0.377601],270,1,0],["Land_WoodenRamp",[0.94751,-4.2085,0.388518],179.986,1,0],[_siteName,[2.60547,6.20386,-0.000685692],359.928,1,0],["Land_Dirthump01_EP1",[-8.63159,8.021,-0.00167847],29.985,1,0]]}; if (WF_A2_Vanilla || WF_A2_CombinedOps) then {_objects = [[_siteName,[2.52539,-0.0065918,-0.000685692],359.928,1,0],["Land_WoodenRamp",[-2.27954,-0.582764,0.377601],270,1,0],["Land_WoodenRamp",[0.94751,-4.2085,0.388518],179.986,1,0],[_siteName,[2.60547,6.20386,-0.000685692],359.928,1,0],["Land_Dirthump01",[-8.63159,8.021,-0.00167847],29.985,1,0]]}; _constructed = _constructed + ([_position,_direction,_objects] Call _construct); if ((missionNamespace getVariable "WFBE_C_STRUCTURES_CONSTRUCTION_MODE") == 0) then { waitUntil {time >= _timeNextUpdate}; _timeNextUpdate = _startTime + _time * 3; } else { //--- Awaits for 66% while {true} do { sleep 1; if ((_nearLogic getVariable "WFBE_B_Completion") >= 66.66) exitWith {}; }; }; if (WF_A2_Arrowhead) then {_objects = [["Land_Misc_Scaffolding",[5.67456,2.39307,0.0763969],179.92,1,0],["Land_Dirthump02_EP1",[-8.63159,8.021,0.000141144],29.9958,1,0],["Barrels",[11.4519,12.5623,0.00311279],359.877,1,0],["RoadCone",[-12.1465,-13.7354,0.000406265],359.958,1,0]]}; if (WF_A2_Vanilla || WF_A2_CombinedOps) then {_objects = [["Land_Misc_Scaffolding",[5.67456,2.39307,0.0763969],179.92,1,0],["Land_Ind_Timbers",[10.0811,4.63477,-0.127748],359.961,1,0],["Land_Dirthump02",[-8.63159,8.021,0.000141144],29.9958,1,0],["Land_Ind_BoardsPack1",[13.3027,-7.63159,0.00639725],359.838,1,0],["Land_Ind_BoardsPack1",[-9.70117,-12.4263,0.00152397],324.976,1,0],["Land_Ind_BoardsPack1",[-7.78491,-14.7693,0.00152779],49.9774,1,0],["Barrels",[11.4519,12.5623,0.00311279],359.877,1,0],["Land_Ind_BoardsPack1",[13.4668,-11.5061,0.00515175],359.942,1,0],["RoadCone",[-12.1465,-13.7354,0.000406265],359.958,1,0]]}; _constructed = _constructed + ([_position,_direction,_objects] Call _construct); if ((missionNamespace getVariable "WFBE_C_STRUCTURES_CONSTRUCTION_MODE") == 0) then { waitUntil {time >= _timeNextUpdate}; if !(isNull _nearLogic) then { _group = group _nearLogic; deleteVehicle _nearLogic; deleteGroup _group; }; } else { //--- Awaits for 100% while {true} do { sleep 1; if ((_nearLogic getVariable "WFBE_B_Completion") >= 100) exitWith {}; }; //--- Remove the logic from the list since it's built. Add it back if destroyed. _logik setVariable ["wfbe_structures_logic", (_logik getVariable "wfbe_structures_logic") - [_nearLogic]]; }; {if !(isNull _x) then {deleteVehicle _x}} forEach _constructed; _site = createVehicle [_type, _position, [], 0, "NONE"]; _site setDir _direction; _site setPos _position; _site setVariable ["wfbe_side", _side]; _site setVariable ["wfbe_structure_type", _rlType]; [_side, "Constructed", ["Base", _site]] Spawn SideMessage; if (!IsNull _site) then { _logik setVariable ["wfbe_structures", (_logik getVariable "wfbe_structures") + [_site], true]; _site setVehicleInit Format["[this,false,%1] ExecVM 'Client\Init\Init_BaseStructure.sqf'",_sideID]; processInitCommands; _site addEventHandler ["hit",{_this Spawn BuildingDamaged}]; if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_HANDLE_FRIENDLYFIRE") > 0) then { _site addEventHandler ['handleDamage',{[_this select 0,_this select 2,_this select 3] Call BuildingHandleDamages}]; } else { _site addEventHandler ['handleDamage',{[_this select 0, _this select 2] Call HandleBuildingDamage}]; }; Call Compile Format ["_site AddEventHandler ['killed',{[_this select 0,_this select 1,'%1'] Spawn BuildingKilled}];",_type]; ["INFORMATION", Format ["Construction_MediumSite.sqf: [%1] Structure [%2] has been constructed.", str _side, _type]] Call WFBE_CO_FNC_LogContent; };//***************************************************************************************** //Description: Creates a small construction site. //***************************************************************************************** Private ["_construct","_constructed","_direction","_group","_index","_logik","_nearLogic","_objects","_position","_rlType","_side","_sideID","_site","_siteName","_startTime","_structures","_structuresNames","_time","_timeNextUpdate","_type"]; _type = _this select 0; _side = _this select 1; _position = _this select 2; _direction = _this select 3; _index = _this select 4; _logik = (_side) Call WFBE_CO_FNC_GetSideLogic; _sideID = (_side) Call WFBE_CO_FNC_GetSideID; _time = ((missionNamespace getVariable Format ["WFBE_%1STRUCTURETIMES",str _side]) select _index) / 2; _siteName = missionNamespace getVariable Format["WFBE_%1CONSTRUCTIONSITE",str _side]; _structures = missionNamespace getVariable Format ['WFBE_%1STRUCTURES',str _side]; _structuresNames = missionNamespace getVariable Format ['WFBE_%1STRUCTURENAMES',str _side]; _rlType = _structures select (_structuresNames find _type); _startTime = time; _timeNextUpdate = _startTime + _time; _objects = []; if (WF_A2_Arrowhead) then {_objects = [[_siteName,[0,0,-0.000230789],359.997,1,0],["Paleta2",[0.416992,-5.62012,-0.305746],0.0130822,1,0],["Land_Barrel_sand",[-5.59448,3.26929,6.29425e-005],359.997,1,0],["Paleta1",[-2.62976,-6.04736,5.53131e-005],0.0130822,1,0],["Barrel4",[6.63696,0.694336,0.000753403],359.991,1,0],["Land_Barrel_sand",[-6.73267,2.06372,6.10352e-005],359.997,1,0],["Barrel5",[7.19604,2.8855,0.00028801],0.0135841,1,0],["Barrel1",[6.08984,5.5415,0.00028801],0.0135841,1,0],["Land_Barrel_sand",[-7.13452,4.40747,6.29425e-005],359.997,1,0],["RoadBarrier_long",[0.221924,-8.58496,0.00206566],0.0130822,1,0],["Land_Barrel_sand",[-8.27271,2.80054,6.10352e-005],359.997,1,0],["Barrels",[-7.91895,-4.09668,0.00037384],0.0128253,1,0],["RoadCone",[-10.4381,-8.94336,0.000131607],0.0119093,1,0],["RoadCone",[11.1655,-8.79932,0.00034523],359.991,1,0],["RoadCone",[-10.5692,12.6655,0.000509262],359.948,1,0],["RoadCone",[11.0276,12.3904,0.000509262],359.948,1,0]]}; if (WF_A2_Vanilla || WF_A2_CombinedOps) then {_objects = [[_siteName,[0,0,-0.000230789],359.997,1,0],["Paleta2",[0.416992,-5.62012,-0.305746],0.0130822,1,0],["Land_Barrel_sand",[-5.59448,3.26929,6.29425e-005],359.997,1,0],["Paleta1",[-2.62976,-6.04736,5.53131e-005],0.0130822,1,0],["Barrel4",[6.63696,0.694336,0.000753403],359.991,1,0],["Land_Ind_BoardsPack2",[6.41797,-2.52051,0.000915527],270,1,0],["Land_Barrel_sand",[-6.73267,2.06372,6.10352e-005],359.997,1,0],["Barrel5",[7.19604,2.8855,0.00028801],0.0135841,1,0],["Barrel1",[6.08984,5.5415,0.00028801],0.0135841,1,0],["Land_Barrel_sand",[-7.13452,4.40747,6.29425e-005],359.997,1,0],["RoadBarrier_long",[0.221924,-8.58496,0.00206566],0.0130822,1,0],["Land_Barrel_sand",[-8.27271,2.80054,6.10352e-005],359.997,1,0],["Barrels",[-7.91895,-4.09668,0.00037384],0.0128253,1,0],["Land_Ind_BoardsPack1",[6.40332,-7.16162,0.000520706],0.0130822,1,0],["Land_Ind_BoardsPack1",[-6.18384,-8.09961,0.000535965],50.0093,1,0],["RoadCone",[-10.4381,-8.94336,0.000131607],0.0119093,1,0],["RoadCone",[11.1655,-8.79932,0.00034523],359.991,1,0],["RoadCone",[-10.5692,12.6655,0.000509262],359.948,1,0],["RoadCone",[11.0276,12.3904,0.000509262],359.948,1,0]]}; _construct = Compile PreprocessFile "ca\modules\dyno\data\scripts\objectMapper.sqf"; _constructed = ([_position,_direction,_objects] Call _construct); //--- Create the logic. (createGroup sideLogic) createUnit ["LocationLogicStart",_position,[],0,"NONE"]; _nearLogic = objNull; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_CONSTRUCTION_MODE") == 0) then { //--- Grab the logic. _nearLogic = _position nearEntities [["LocationLogicStart"],15]; _nearLogic = [_position, _nearLogic] Call WFBE_CO_FNC_GetClosestEntity; if (isNull _nearLogic) exitWith {}; //--- Position the logic. _nearLogic setPos _position; _nearLogic setVariable ["WFBE_B_Type", _rlType]; waitUntil {time >= _timeNextUpdate}; _timeNextUpdate = _startTime + _time * 2; } else { //--- Grab the logic. _nearLogic = _position nearEntities [["LocationLogicStart"],15]; _nearLogic = [_position, _nearLogic] Call WFBE_CO_FNC_GetClosestEntity; if (isNull _nearLogic) exitWith {}; //--- Position the logic. _nearLogic setPos _position; //--- Instanciate the logic. _nearLogic setVariable ["WFBE_B_Completion", 0]; _nearLogic setVariable ["WFBE_B_CompletionRatio", 1.1]; _nearLogic setVariable ["WFBE_B_Direction", _direction]; _nearLogic setVariable ["WFBE_B_Position", _position]; _nearLogic setVariable ["WFBE_B_Repair", false]; _nearLogic setVariable ["WFBE_B_Type", _rlType]; //--- Add the logic to the list. _logik setVariable ["wfbe_structures_logic", (_logik getVariable "wfbe_structures_logic") + [_nearLogic]]; //--- Awaits for 50% of completion. while {true} do { sleep 1; if ((_nearLogic getVariable "WFBE_B_Completion") >= 50) exitWith {}; }; }; if (WF_A2_Arrowhead) then {_objects = [["Land_WoodenRamp",[-2.45703,-0.593262,0.357508],270,1,0],["Land_WoodenRamp",[-2.5083,1.3811,0.357508],270,1,0],[_siteName,[4.6333,0.338135,0.00393867],90,1,0],["Land_Dirthump02_EP1",[-0.587891,8.57935,0.00207901],359.967,1,0],["Land_Dirthump01_EP1",[-3.97363,-8.49219,-4.57764e-005],29.9804,1,0],["Land_WoodenRamp",[8.8335,-0.125977,0.403545],90,1,0]]}; if (WF_A2_Vanilla || WF_A2_CombinedOps) then {_objects = [["Land_WoodenRamp",[-2.45703,-0.593262,0.357508],270,1,0],["Land_WoodenRamp",[-2.5083,1.3811,0.357508],270,1,0],[_siteName,[4.6333,0.338135,0.00393867],90,1,0],["Land_Dirthump02",[-0.587891,8.57935,0.00207901],359.967,1,0],["Land_Dirthump01",[-3.97363,-8.49219,-4.57764e-005],29.9804,1,0],["Land_WoodenRamp",[8.8335,-0.125977,0.403545],90,1,0]]}; _constructed = _constructed + ([_position,_direction,_objects] Call _construct); if ((missionNamespace getVariable "WFBE_C_STRUCTURES_CONSTRUCTION_MODE") == 0) then { waitUntil {time >= _timeNextUpdate}; if !(isNull _nearLogic) then { _group = group _nearLogic; deleteVehicle _nearLogic; deleteGroup _group; }; } else { //--- Awaits for 100% while {true} do { sleep 1; if ((_nearLogic getVariable "WFBE_B_Completion") >= 100) exitWith {}; }; //--- Remove the logic from the list since it's built. Add it back if destroyed. _logik setVariable ["wfbe_structures_logic", (_logik getVariable "wfbe_structures_logic") + [_nearLogic]]; }; {if !(isNull _x) then {DeleteVehicle _x}} ForEach _constructed; _site = createVehicle [_type, _position, [], 0, "NONE"]; _site setDir _direction; _site setPos _position; _site setVariable ["wfbe_side", _side]; _site setVariable ["wfbe_structure_type", _rlType]; [_side, "Constructed", ["Base", _site]] Spawn SideMessage; if (!isNull _site) then { _logik setVariable ["wfbe_structures", (_logik getVariable "wfbe_structures") + [_site], true]; _site setVehicleInit Format["[this,false,%1] ExecVM 'Client\Init\Init_BaseStructure.sqf'",_sideID]; processInitCommands; _site addEventHandler ["hit",{_this Spawn BuildingDamaged}]; if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_HANDLE_FRIENDLYFIRE") > 0) then { _site addEventHandler ['handleDamage',{[_this select 0,_this select 2,_this select 3] Call BuildingHandleDamages}]; } else { _site addEventHandler ['handleDamage',{[_this select 0, _this select 2] Call HandleBuildingDamage}]; }; Call Compile Format ["_site AddEventHandler ['killed',{[_this select 0,_this select 1,'%1'] Spawn BuildingKilled}];",_type]; ["INFORMATION", Format ["Construction_SmallSite.sqf: [%1] Structure [%2] has been constructed.", str _side, _type]] Call WFBE_CO_FNC_LogContent; }; //--- Base Patrols. if (_rlType == "Barracks" && (missionNamespace getVariable "WFBE_C_BASE_PATROLS_INFANTRY") > 0) then { [_site, _side] ExecFSM 'Server\FSM\basepatrol.fsm'; ["INFORMATION", Format ["Construction_SmallSite.sqf: [%1] Base patrol has been triggered upon Barrack creation.", str _side]] Call WFBE_CO_FNC_LogContent; }/* Description: Creates Defenses. */ Private ["_buildings","_defense","_direction","_isAIQuery","_isArtillery","_manned","_position","_side","_sideID","_type"]; _type = _this select 0; _side = _this select 1; _position = _this select 2; _direction = _this select 3; _manned = _this select 4; _isAIQuery = _this select 5; _manRange = if (count _this > 6) then {_this select 6} else {missionNamespace getVariable "WFBE_C_BASE_DEFENSE_MANNING_RANGE"}; _sideID = (_side) Call GetSideID; _defense = createVehicle [_type, _position, [], 0, "NONE"]; _defense setDir _direction; _defense setPos _position; ["INFORMATION", Format ["Construction_StationaryDefense.sqf: [%1] Defense [%2] has been constructed.", str _side, _type]] Call WFBE_CO_FNC_LogContent; //--- If it's a minefield, we exit the script while spawning it. if (_type == 'Sign_Danger') exitWith { Private ["_c","_h","_mine","_mineType","_toWorld"]; _mineType = if (_side == west) then {'MineMine'} else {'MineMineE'}; _h = -4; _c = 0; for [{_z=0}, {_z<9}, {_z=_z+1}] do{ _array = [((_defense worldToModel (getPos _defense)) select 0) - 16 +_c,((_defense worldToModel (getPos _defense)) select 1) + _h]; _toWorld = _defense modelToWorld _array; _toWorld set[2,0]; _mine = createMine [_mineType, _toWorld,[], 0]; _c = _c + 4; }; _h = 0; _c = 2; for [{_z=0}, {_z<8}, {_z=_z+1}] do{ _array = [((_defense worldToModel (getPos _defense)) select 0) - 16 +_c,((_defense worldToModel (getPos _defense)) select 1) + _h]; _toWorld = _defense modelToWorld _array; _toWorld set[2,0]; _mine = createMine [_mineType, _toWorld,[], 0]; _c = _c + 4; }; _h = 4; _c = 0; for [{_z=0}, {_z<9}, {_z=_z+1}] do{ _array = [((_defense worldToModel (getPos _defense)) select 0) - 16 +_c,((_defense worldToModel (getPos _defense)) select 1) + _h]; _toWorld = _defense modelToWorld _array; _toWorld set[2,0]; _mine = createMine [_mineType, _toWorld,[], 0]; _c = _c + 4; }; deleteVehicle _defense; }; _defense setVariable ["wfbe_defense", true]; //--- This is one of our defenses. if (_type == 'Concrete_Wall_EP1') then { _defense addEventHandler ['handleDamage',{getDammage (_this select 0)+(_this select 2)/160}]; }; Call Compile Format ["_defense addEventHandler ['Killed',{[_this select 0,_this select 1,%1] Spawn WFBE_CO_FNC_OnUnitKilled}]",_sideID]; if (_defense emptyPositions "gunner" > 0 && (((missionNamespace getVariable "WFBE_C_BASE_DEFENSE_MAX_AI") > 0) || _isAIQuery)) then { Private ["_alives","_check","_closest","_team"]; _team = missionNamespace getVariable Format ["WFBE_%1_DefenseTeam", _side]; emptyQueu = emptyQueu + [_defense]; _defense Spawn HandleEmptyVehicle; if (_manned) then { _alives = (units _team) Call GetLiveUnits; if (count _alives < (missionNamespace getVariable "WFBE_C_BASE_DEFENSE_MAX_AI") || _isAIQuery) then { _buildings = (_side) Call WFBE_CO_FNC_GetSideStructures; _closest = ['BARRACKSTYPE',_buildings,_manRange,_side,_defense] Call BuildingInRange; //--- Manning Defenses. if (alive _closest) then { [_defense,_side,_team,_closest] Spawn HandleDefense; }; }; }; }; if ((missionNamespace getVariable "WFBE_C_ARTILLERY_UI") > 0) then { Private ["_isAC","_isVeh"]; _isVeh = getNumber(configFile >> "CfgVehicles" >> typeOf(_defense) >> "ARTY_IsArtyVehicle"); _isAC = getNumber(configFile >> "CfgVehicles" >> typeOf(_defense) >> "artilleryScanner"); if (_isVeh == 1 || _isAC == 1) then { _defense setVehicleInit "[this] ExecVM 'Common\Common_InitArtillery.sqf'"; processInitCommands; ["INFORMATION", Format ["Construction_StationaryDefense.sqf: [%1] Artillery [%2] has been given the BIS ARTY UI interface.", str _side, _type]] Call WFBE_CO_FNC_LogContent; }; }; /* Are we dealing with an artillery unit ? */ _isArtillery = [_type,_side] Call IsArtillery; if (_isArtillery != -1) then {[_defense,_isArtillery,_side] Call EquipArtillery}; _defense/*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,29.117783,-243.242416,119.117828,-193.242630,0.000000,"Init"}; item1[] = {"End",1,250,-216.387955,-52.508366,-126.387947,-2.508394,0.000000,"End"}; item2[] = {"Commander_Check",2,250,-82.090652,-139.314026,7.909359,-89.314034,0.000000,"Commander" \n "Check"}; item3[] = {"AI",4,218,43.444695,-138.881104,133.444702,-88.881126,0.000000,"AI"}; item4[] = {"Gameover",4,218,-216.387955,-139.464890,-126.387947,-89.464890,0.000000,"Gameover"}; item5[] = {"_",8,218,-51.736092,-228.307785,-21.083296,-207.387909,0.000000,""}; item6[] = {"Check_HQ",2,250,167.429672,-138.824554,257.429688,-88.824554,0.000000,"Check HQ"}; item7[] = {"Alive",4,218,167.029816,-63.614120,257.029968,-13.613998,0.000000,"Alive"}; item8[] = {"Dead",4,218,167.829926,-230.037415,257.830078,-180.037399,0.000000,"Dead"}; item9[] = {"Check_HQ_Status",2,250,298.248291,-63.614052,388.248230,-13.614052,0.000000,"Check HQ" \n "Status"}; item10[] = {"Mobilized",4,218,433.250854,-64.045685,523.250732,-14.045616,0.000000,"Mobilized"}; item11[] = {"Deployed",4,218,298.503387,29.438709,388.503357,79.438721,0.000000,"Deployed"}; item12[] = {"Check_Repair",2,250,296.539734,-230.131653,386.539734,-180.131622,0.000000,"Check" \n "Repair"}; item13[] = {"Repair_Moving",4,218,429.166107,-228.948074,519.166382,-178.948105,0.000000,"Repair" \n "Moving"}; item14[] = {"Repair_Null",4,218,429.329987,-153.716705,519.330261,-103.716690,0.000000,"Repair" \n "Null"}; item15[] = {"Check_Status",2,250,563.136597,-243.488693,653.136597,-193.488678,0.000000,"Check" \n "Status"}; item16[] = {"Check_Light",2,250,562.396851,-183.315887,652.396851,-133.315872,0.000000,"Check" \n "Light"}; item17[] = {"Alive",4,218,715.106934,-184.222443,805.106934,-134.222443,0.000000,"Alive"}; item18[] = {"Dead",4,218,715.106995,-243.430771,805.106995,-193.430771,0.000000,"Dead"}; item19[] = {"Create_Repair",2,4346,858.268066,-185.584671,948.268066,-135.584671,0.000000,"Create" \n "Repair"}; item20[] = {"Skip",2,250,859.370850,-245.140686,949.370911,-195.140793,0.000000,"Skip"}; item21[] = {"",7,210,1028.113892,-194.407562,1036.114014,-186.407562,0.000000,""}; item22[] = {"",7,210,1027.204102,-330.018250,1035.203979,-322.018250,0.000000,""}; item23[] = {"",7,210,-41.498245,-331.121155,-33.498249,-323.121155,0.000000,""}; item24[] = {"Check_Status_1",2,250,567.105652,-64.265991,657.105652,-14.265972,0.000000,"Check" \n "Status"}; item25[] = {"Moving",4,218,709.035706,-103.210243,799.035706,-53.210236,0.000000,"Moving"}; item26[] = {"Empty",4,218,703.864319,-36.693626,793.864319,13.306374,0.000000,"Empty"}; item27[] = {"Spawn___Lead",2,250,853.857727,-35.590744,943.857727,14.409276,0.000000,"Spawn & Lead"}; item28[] = {"Check_Position",2,250,852.754883,-103.970093,942.754883,-53.970085,0.000000,"Check" \n "Position"}; item29[] = {"",7,210,1028.114868,-51.031216,1036.114990,-43.031216,0.000000,""}; item30[] = {"Check_Move",2,250,439.100250,29.323673,529.100098,79.323669,0.000000,"Check" \n "Move"}; item31[] = {"Move",4,218,579.575684,29.323677,669.576050,79.323685,0.000000,"Move"}; item32[] = {"Proceed",4,218,436.745636,114.689537,526.745728,164.689575,0.000000,"Proceed"}; item33[] = {"Move",2,250,712.286255,29.029057,802.286255,79.029053,0.000000,"Move"}; item34[] = {"",7,210,1028.016968,50.640667,1036.016846,58.640675,0.000000,""}; item35[] = {"Check_Base",2,250,292.344421,114.037247,382.344421,164.037247,0.000000,"Check" \n "Base"}; item36[] = {"Update",4,218,138.614502,145.674393,228.614502,195.674393,0.000000,"Update"}; item37[] = {"Skip",4,218,138.614502,78.700897,228.614502,128.700897,0.000000,"Skip"}; item38[] = {"Skip_1",2,250,-24.498369,79.781113,65.501648,129.781113,0.000000,"Skip"}; item39[] = {"Update_Base",2,250,-24.498356,146.754593,65.501656,196.754593,0.000000,"Update" \n "Base"}; item40[] = {"_",8,218,-113.658813,123.267853,-83.006012,144.187729,0.000000,""}; item41[] = {"Check_Defenses",2,250,-263.351929,109.838028,-173.352142,159.838013,0.000000,"Check Defenses"}; item42[] = {"Update",4,218,-400.730560,148.182983,-310.730560,198.182983,0.000000,"Update"}; item43[] = {"Skip",4,218,-400.730560,81.209473,-310.730560,131.209488,0.000000,"Skip"}; item44[] = {"Skip_2",2,250,-563.843628,82.289688,-473.843506,132.289688,0.000000,"Skip"}; item45[] = {"Update_Defenses",2,250,-563.843628,149.263184,-473.843384,199.263184,0.000000,"Update" \n "Defenses"}; item46[] = {"_",8,218,-653.004028,125.776443,-622.351196,146.696320,0.000000,""}; item47[] = {"Check_Upgrades",2,250,-683.420288,273.342194,-593.420410,323.342194,0.000000,"Check Upgrades"}; item48[] = {"Update",4,218,-508.776093,300.503662,-418.775909,350.503662,0.000000,"Update"}; item49[] = {"Skip",4,218,-508.776093,233.530121,-418.775909,283.530151,0.000000,"Skip"}; item50[] = {"Skip_3",2,250,-329.947998,234.610321,-239.947815,284.610352,0.000000,"Skip"}; item51[] = {"Update_Upgrades",2,250,-329.947998,301.583862,-239.947693,351.583862,0.000000,"Update" \n "Upgrades"}; item52[] = {"_",8,218,-167.467773,275.580872,-136.814941,296.500732,0.000000,""}; item53[] = {"Check_Types",2,250,-197.088531,386.316132,-107.088661,436.316132,0.000000,"Check Types"}; item54[] = {"Update",4,218,-22.444336,413.477600,67.555847,463.477600,0.000000,"Update"}; item55[] = {"Skip",4,218,-22.444336,346.504059,67.555847,396.504089,0.000000,"Skip"}; item56[] = {"Skip_4",2,250,156.383759,347.584259,246.383911,397.584290,0.000000,"Skip"}; item57[] = {"Update_Types",2,250,156.383759,414.557800,246.384033,464.557800,0.000000,"Update" \n "Types"}; item58[] = {"_",8,218,318.863953,388.554810,349.516785,409.474670,0.000000,""}; item59[] = {"Check_Move_1",2,250,-135.812561,688.819275,-45.812672,738.819336,0.000000,"Check Move"}; item60[] = {"Check_Workers",2,250,289.874207,510.880676,379.874207,560.880615,0.000000,"Check" \n "Workers"}; item61[] = {"Workers",4,218,145.521439,513.043701,235.521378,563.043640,0.000000,"Workers"}; item62[] = {"Time",4,218,140.350052,579.560242,230.349976,629.560242,0.000000,"Time"}; item63[] = {"Nothing",2,250,-6.216207,579.195068,83.783813,629.194946,0.000000,"Nothing"}; item64[] = {"Update_Workers",2,250,-7.319051,510.815735,82.681030,560.815674,0.000000,"Update" \n "Workers"}; item65[] = {"Update",4,218,28.554688,721.853210,118.554871,771.853149,0.000000,"Update"}; item66[] = {"Skip",4,218,28.554688,654.879639,118.554871,704.879700,0.000000,"Skip"}; item67[] = {"Skip_5",2,250,207.382751,655.959839,297.382874,705.959900,0.000000,"Skip"}; item68[] = {"Update_Move",2,250,206.000549,721.551208,296.000916,771.551147,0.000000,"Update" \n "Move"}; item69[] = {"",7,210,1026.111328,696.930481,1034.111206,704.930481,0.000000,""}; item70[] = {"_",8,218,-105.421837,566.197021,-74.769012,587.116821,0.000000,""}; item71[] = {"Being_Fixed",4,218,429.542877,-297.545441,519.542847,-247.545441,0.000000,"Being Fixed"}; item72[] = {"Skip_6",2,250,562.756470,-305.701782,652.756470,-255.701782,0.000000,"Skip"}; item73[] = {"",7,210,760.996826,-287.467224,768.996826,-279.467224,0.000000,""}; item74[] = {"",7,210,364.846039,698.257568,372.846039,706.257568,0.000000,""}; link0[] = {0,5}; link1[] = {2,3}; link2[] = {2,4}; link3[] = {3,6}; link4[] = {4,1}; link5[] = {5,2}; link6[] = {6,7}; link7[] = {6,8}; link8[] = {7,9}; link9[] = {8,12}; link10[] = {9,10}; link11[] = {9,11}; link12[] = {10,24}; link13[] = {11,30}; link14[] = {12,13}; link15[] = {12,14}; link16[] = {12,71}; link17[] = {13,15}; link18[] = {14,16}; link19[] = {15,73}; link20[] = {16,17}; link21[] = {16,18}; link22[] = {17,19}; link23[] = {18,20}; link24[] = {19,21}; link25[] = {20,21}; link26[] = {21,22}; link27[] = {22,23}; link28[] = {23,5}; link29[] = {24,25}; link30[] = {24,26}; link31[] = {25,28}; link32[] = {26,27}; link33[] = {27,29}; link34[] = {28,29}; link35[] = {29,21}; link36[] = {30,31}; link37[] = {30,32}; link38[] = {31,33}; link39[] = {32,35}; link40[] = {33,34}; link41[] = {34,29}; link42[] = {35,36}; link43[] = {35,37}; link44[] = {36,39}; link45[] = {37,38}; link46[] = {38,40}; link47[] = {39,40}; link48[] = {40,41}; link49[] = {41,42}; link50[] = {41,43}; link51[] = {42,45}; link52[] = {43,44}; link53[] = {44,46}; link54[] = {45,46}; link55[] = {46,47}; link56[] = {47,48}; link57[] = {47,49}; link58[] = {48,51}; link59[] = {49,50}; link60[] = {50,52}; link61[] = {51,52}; link62[] = {52,53}; link63[] = {53,54}; link64[] = {53,55}; link65[] = {54,57}; link66[] = {55,56}; link67[] = {56,58}; link68[] = {57,58}; link69[] = {58,60}; link70[] = {59,65}; link71[] = {59,66}; link72[] = {60,61}; link73[] = {60,62}; link74[] = {61,64}; link75[] = {62,63}; link76[] = {63,70}; link77[] = {64,70}; link78[] = {65,68}; link79[] = {66,67}; link80[] = {67,74}; link81[] = {68,74}; link82[] = {69,34}; link83[] = {70,59}; link84[] = {71,72}; link85[] = {72,73}; link86[] = {73,22}; link87[] = {74,69}; globals[] = {0.000000,0,0,0,0,640,480,1,103,6316128,1,174.028687,1082.074341,504.120697,-274.780731,900,772,1}; window[] = {0,-1,-1,-1,-1,917,25,1477,25,1,918}; *//*%FSM*/ class FSM { fsmName = "aicommander"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_side = _this select 0;" \n "_sideText = Str _side;" \n "_sideID = (_side) Call GetSideID;" \n "_hq = (_side) Call WFBE_CO_FNC_GetSideHQ;" \n "_logik = (_side) Call WFBE_CO_FNC_GetSideLogic;" \n "_maxplayers = _logik getVariable ""wfbe_teams_count"";" \n "" \n "_lastHQMoveOrder = 0;" \n "_lastHQMovePos = getPos _hq;" \n "" \n "_lastRepairMoveOrder = 0;" \n "_lastRepairMosPos = [0,0,0];" \n "" \n "_lastUpdate = -500;" \n "_lastUpdateBase = -500;" \n "_lastUpdateDefenses = -500;" \n "_lastUpdateMove = -500;" \n "_lastUpdateTypes = -500;" \n "_lastUpdateUpgrades = -500;" \n "_lastUpdateWorkers = -500;" \n "" \n "//--- Init the base types." \n "_types = missionNamespace getVariable Format[""WFBE_%1STRUCTURES"",_sideText];" \n "_names = missionNamespace getVariable Format[""WFBE_%1STRUCTURENAMES"",_sideText];" \n "_costs = missionNamespace getVariable Format[""WFBE_%1STRUCTURECOSTS"",_sideText];" \n "_scripts = missionNamespace getVariable Format[""WFBE_%1STRUCTURESCRIPTS"",_sideText];" \n "" \n "_eastStructuresNames = missionNamespace getVariable ""WFBE_EASTSTRUCTURENAMES"";" \n "_westStructuresNames = missionNamespace getVariable ""WFBE_WESTSTRUCTURENAMES"";" \n "" \n "_hqCanMove = false;" \n "_hqDeployAt = [_hq, startingLocations] Call WFBE_CO_FNC_GetClosestEntity;" \n "_hqDeployRange = missionNamespace getVariable ""WFBE_C_STRUCTURES_HQ_RANGE_DEPLOYED"";" \n "_hqType = missionNamespace getVariable Format[""WFBE_%1HEADQUARTERSTYPE"",_sideText];" \n "" \n "_baseAiInterval = missionNamespace getVariable ""WFBE_C_AI_COMMANDER_MOVE_INTERVALS"";" \n "_baseAiIntervalLast = time;" \n "_baseAlive = [];" \n "_baseDefenses = [];" \n "_baseDefensesTemplate = [[missionNamespace getVariable Format[""WFBE_%1DEFENSES_MG"",_sideText],[150,150],0,""MG""],[missionNamespace getVariable Format[""WFBE_%1DEFENSES_MG"",_sideText],[-150,150],0,""MG""],[missionNamespace getVariable Format[""WFBE_%1DEFENSES_MG"",_sideText],[-150,-150],180,""MG""],[missionNamespace getVariable Format[""WFBE_%1DEFENSES_MG"",_sideText],[150,-150],180,""MG""],[missionNamespace getVariable Format[""WFBE_%1DEFENSES_AAPOD"",_sideText],[0,135],0,""AAPOD""],[missionNamespace getVariable Format[""WFBE_%1DEFENSES_AAPOD"",_sideText],[110,-145],90,""AAPOD""],[missionNamespace getVariable Format[""WFBE_%1DEFENSES_AAPOD"",_sideText],[-110,-145],270,""AAPOD""],[missionNamespace getVariable Format[""WFBE_%1DEFENSES_MASH"",_sideText],[0,-80],180,""MASH""],[missionNamespace getVariable Format[""WFBE_%1DEFENSES_ATPOD"",_sideText],[0,-130],0,""""],[missionNamespace getVariable Format[""WFBE_%1DEFENSES_ATPOD"",_sideText],[-100,130],315,""""],[missionNamespace getVariable Format[""WFBE_%1DEFENSES_ATPOD"",_sideText],[100,130],45,""""],[missionNamespace getVariable Format[""WFBE_%1DEFENSES_CANNON"",_sideText],[120,120],0,""""],[missionNamespace getVariable Format[""WFBE_%1DEFENSES_CANNON"",_sideText],[-120,-120],180,""""]];" \n "_baseDirections = missionNamespace getVariable Format[""WFBE_%1STRUCTUREDIRECTIONS"",_sideText];" \n "_baseDistances = missionNamespace getVariable Format[""WFBE_%1STRUCTUREDISTANCES"",_sideText];" \n "_baseInProgress = [];" \n "_baseOrder = [""Barracks"",""Light"",""CommandCenter"",""Heavy"",""Aircraft"",""ServicePoint""];" \n "_baseStructureRelPos = [[50,50],[-50,50],[50,0],[50,-50],[-50,-50],[-50,0]];" \n "_baseTimerCheck = [];" \n "_baseWalls = [];" \n "" \n "_currentContent = 0;" \n "_crew = missionNamespace getVariable Format [""WFBE_%1SOLDIER"",_sideText];" \n "_driver = objNull;" \n "_overallDefenses = [];" \n "_repairPrice = missionNamespace getVariable 'WFBE_C_BASE_HQ_REPAIR_PRICE';" \n "_repairTruck = objNull;" \n "_victoryCondition = missionNamespace getVariable ""WFBE_C_GAMEPLAY_VICTORY_CONDITION"";" \n "" \n "_teams = (missionNamespace getVariable Format[""WFBE_%1TEAMS"",_sideText]);" \n "_templates = missionNamespace getVariable Format [""WFBE_%1AITEAMTEMPLATES"",_sideText];" \n "_teamTypes = missionNamespace getVariable Format [""WFBE_%1AITEAMTYPES"",_sideText];" \n "_teamUpgrades = missionNamespace getVariable Format [""WFBE_%1AITEAMUPGRADES"",_sideText];" \n "_totalSupply = 0;" \n "{_totalSupply = _totalSupply + (_x getVariable 'maxSupplyValue')} forEach towns;" \n "" \n "_currency_system = missionNamespace getVariable ""WFBE_C_ECONOMY_CURRENCY_SYSTEM"";" \n "_workers_enabled = if ((missionNamespace getVariable ""WFBE_C_STRUCTURES_CONSTRUCTION_MODE"") == 1) then {true} else {false};" \n "_workerPrice = if (_workers_enabled) then {missionNamespace getVariable ""WFBE_C_STRUCTURES_WORKERS_PRICE""} else {0};" \n "" \n "" \n "_overallDefenses = missionNamespace getVariable Format [""WFBE_Defenses_%1_Global"",_sideText];" \n "_currentContent = 0;" \n "_totalContent = 0;" \n "if !(isNil ""_overallDefenses"") then {_totalContent = count _overallDefenses} else {_overallDefenses = []};" \n "" \n "_baseDefenses = [];" \n "_defenses = missionNamespace getVariable Format [""WFBE_Defenses_%1"",_sideText];" \n "for '_i' from 0 to count(_baseDefensesTemplate)-1 do {_baseDefenses set [_i,["""",[]]]};" \n "if (isNil '_defenses') then {" \n " missionNamespace setVariable [Format [""WFBE_Defenses_%1"",_sideText],_baseDefenses];" \n "} else {" \n " //--- Check the distance;" \n " _currentContent = -1;" \n " for '_i' from 0 to _totalContent-1 do { " \n " _defenses = _overallDefenses select _i;" \n " {" \n " if (count(_x select 1) > 0) then {" \n " if (alive (_x select 0)) then {" \n " if ((_x select 0) distance _hq < 750) then {" \n " _baseDefenses = _defenses;" \n " _currentContent = _i;" \n " };" \n " };" \n " };" \n " if (_currentContent != -1) exitWith {};" \n " } forEach _defenses;" \n " if (_currentContent != -1) exitWith {};" \n " };" \n "};" \n "" \n "if (_currentContent == -1) then {_currentContent = count _overallDefenses};" \n "" \n "_baseAiIntervalLast = time;" \n "_baseAlive = [false,false,false,false,false,false];" \n "_baseInProgress = [false,false,false,false,false,false];" \n "_baseTimerCheck = [0,0,0,0,0,0];" \n "_baseWalls = [[],[],[],[],[],[]];" \n "" \n "_isStartingFSM = true;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Commander_Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 10"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/"_logik setVariable [""wfbe_aicom_running"", false];"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Commander_Check { name = "Commander_Check"; init = /*%FSM*/"_commander = (_side) Call WFBE_CO_FNC_GetCommanderTeam;" \n "" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver || !isNull _commander || !(_logik getVariable ""wfbe_aicom_running"")"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class AI { priority = 0.000000; to="Check_HQ"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!gameOver && isNull _commander"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_HQ { name = "Check_HQ"; init = /*%FSM*/"_hq = (_side) Call WFBE_CO_FNC_GetSideHQ;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Dead { priority = 0.000000; to="Check_Repair"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(alive _hq) && _victoryCondition != 1"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Alive { priority = 0.000000; to="Check_HQ_Status"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"alive _hq"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_HQ_Status { name = "Check_HQ_Status"; init = /*%FSM*/"_hqDeployed = (_side) Call WFBE_CO_FNC_GetSideHQDeployStatus;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Deployed { priority = 0.000000; to="Check_Move"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_hqDeployed"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Mobilized { priority = 0.000000; to="Check_Status_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_hqDeployed"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Repair { name = "Check_Repair"; init = /*%FSM*/"_isBeingRepaired = _logik getVariable ""wfbe_hq_repairing"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Repair_Null { priority = 0.000000; to="Check_Light"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!alive _repairTruck && !_isBeingRepaired"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Being_Fixed { priority = 0.000000; to="Skip_6"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_isBeingRepaired"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Repair_Moving { priority = 0.000000; to="Check_Status"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"alive _repairTruck && !_isBeingRepaired"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Status { name = "Check_Status"; init = /*%FSM*/"if (!(alive _driver) || !canMove(_repairTruck)) then {" \n " {_x setDammage 1} forEach [_driver, _repairTruck];" \n "} else {" \n " if (_lastRepairMosPos distance (getPos _repairTruck) < 20) then {" \n " _lastRepairMoveOrder = _lastRepairMoveOrder + 5;" \n " } else {" \n " _lastRepairMoveOrder = 0;" \n " };" \n "" \n " if (_lastRepairMoveOrder > 40) then {" \n " _lastRepairMoveOrder = 0;" \n " [_hq, getPos _repairTruck, 50] Call PlaceSafe;" \n " (driver _hq) doMove ([getPos _hq,10,20] Call GetRandomPosition);" \n " };" \n "" \n " _lastRepairMosPos = getPos _repairTruck;" \n "};" \n "" \n "//--- Repair if possible." \n "if (_repairTruck distance _hq < 75) then {" \n " if (isEngineOn _repairTruck) then {_repairTruck engineOn false};" \n " _currency = if (_currency_system == 0) then {(_side) Call GetSideSupply} else {(_side) Call GetAICommanderFunds};" \n " if (_currency >= (_repairPrice * (_logik getVariable ""wfbe_hq_repair_count""))) then {" \n " if (_currency_system == 0) then {" \n " [_side,-(_repairPrice * (_logik getVariable ""wfbe_hq_repair_count""))] Call ChangeSideSupply;" \n " } else {" \n " [_side,-(_repairPrice * (_logik getVariable ""wfbe_hq_repair_count""))] Call ChangeAICommanderFunds;" \n " };" \n " " \n " _logik setVariable [""wfbe_hq_repairing"",true,true];" \n " [_side] Spawn MHQRepair;" \n "" \n " if (alive _driver) then {_group = group _driver; deleteVehicle _driver; deleteGroup _group};" \n " deleteVehicle _repairTruck;" \n "" \n " //--- Determine a suitable moving location close by." \n " _sortedLocation = [_hq, startingLocations] Call SortByDistance;" \n "" \n " _hqDeployAt = objNull;" \n " {" \n " if (count (nearestObjects [_x, _names, 400]) > 0 && _x distance _hq < 2000) exitWith {_hqDeployAt = _x};" \n " } forEach _sortedLocation;" \n "" \n " if (isNull _hqDeployAt) then {_hqDeployAt = getPos _hq};" \n " _isStartingFSM = false;" \n " };" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Commander_Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 10"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Light { name = "Check_Light"; init = /*%FSM*/"_buildings = (_side) Call WFBE_CO_FNC_GetSideStructures;" \n "_checks = [_side,missionNamespace getVariable Format [""WFBE_%1LIGHTTYPE"",_sideText],_buildings] Call GetFactories;" \n "_light = objNull;" \n "" \n "if (count _checks > 0) then {" \n " _light = [_hq,_checks] Call WFBE_CO_FNC_GetClosestEntity;" \n "};" \n "" \n "if (alive _driver) then {_group = group _driver; deleteVehicle _driver; deleteGroup _group};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Dead { priority = 0.000000; to="Skip"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(alive _light)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Alive { priority = 0.000000; to="Create_Repair"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"alive _light"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Create_Repair { name = "Create_Repair"; init = /*%FSM*/"_type = typeOf _light;" \n "_index = _names find _type;" \n "_distance = (missionNamespace getVariable Format[""WFBE_%1STRUCTUREDISTANCES"",_sideText]) select _index;" \n "_direction = (missionNamespace getVariable Format[""WFBE_%1STRUCTUREDIRECTIONS"",_sideText]) select _index;" \n "_position = [getPos _light,_distance,getDir _light + _direction] Call GetPositionFrom;" \n "" \n "_repairTruck = [missionNamespace getVariable Format[""WFBE_%1REPAIRTRUCK"",_sideText], _position, _sideID, 0, true] Call WFBE_CO_FNC_CreateVehicle;" \n "_group = createGroup _side;" \n "_driver = [_crew,_group,_position,_sideID] Call WFBE_CO_FNC_CreateUnit;" \n "[_driver] allowGetIn true;" \n "_driver moveInDriver _repairTruck;" \n "_repairAlive = true;" \n "" \n "[_sideText,'VehiclesCreated',1] Call UpdateStatistics;" \n "[_sideText,'UnitsCreated',1] Call UpdateStatistics;" \n "_driver doMove ([GetPos _hq,10,20] Call GetRandomPosition);"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Commander_Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 10"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Skip { name = "Skip"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Commander_Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 10"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Status_1 { name = "Check_Status_1"; init = /*%FSM*/"_inRange = if (_hq distance _hqDeployAt < 200) then {true} else {false};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Empty { priority = 0.000000; to="Spawn___Lead"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_isStartingFSM || !_inRange"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Moving { priority = 0.000000; to="Check_Position"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_isStartingFSM || _inRange"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Spawn___Lead { name = "Spawn___Lead"; init = /*%FSM*/"if !(alive(driver _hq)) then {" \n " _HQDriver = [_crew,(createGroup _side),getPos _hq,_sideID] Call WFBE_CO_FNC_CreateUnit;" \n " [_HQDriver] allowGetIn true;" \n " _HQDriver moveInDriver _hq;" \n " _HQDriver assignAsDriver _hq;" \n " [_HQDriver] orderGetIn true;" \n " _HQDriver doMove ([GetPos _hqDeployAt,10,20] Call GetRandomPosition);" \n "};" \n "" \n "if (alive(driver _hq)) then {" \n "" \n " if (_lastHQMovePos distance (getPos _hq) < 20 && !surfaceIsWater(getPos _hq)) then {" \n " _lastHQMoveOrder = _lastHQMoveOrder + 5;" \n " } else {" \n " _lastHQMoveOrder = 0;" \n " };" \n "" \n " if (_lastHQMoveOrder > 40) then {" \n " _lastHQMoveOrder = 0;" \n " [_hq, getPos _hq, 50] Call PlaceSafe;" \n " (driver _hq) doMove ([GetPos _hqDeployAt,10,20] Call GetRandomPosition);" \n " };" \n "" \n " _lastHQMovePos = getPos _hq;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Commander_Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 10"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Position { name = "Check_Position"; init = /*%FSM*/"_canBeDeploy = true;" \n "" \n "//--- On multiplayer, ensure that there is no exploits." \n "if (isMultiplayer) then {" \n " _tbpr = missionNamespace getVariable ""WFBE_C_TOWNS_BUILD_PROTECTION_RANGE"";" \n " _isPlayerOnSide = false;" \n " " \n " {if (!isNull _x) then {if (side _x == _side && isPlayer _x) exitWith {_isPlayerOnSide = true}}} forEach playableUnits;" \n " " \n " if (_isPlayerOnSide) then {" \n " {if (_x distance _hq < _tbpr) exitWith {_canBeDeploy = false}} forEach towns;" \n " };" \n "};" \n "" \n "//--- HQ Can be deployed." \n "if (_canBeDeploy) then {" \n " if (alive(driver _hq)) then {(driver _hq) setDammage 1};" \n "" \n " _pos = getPos _hq;" \n " _pos set [2,0];" \n " _pos = [_pos,((missionNamespace getVariable 'WFBE_C_BASE_COIN_AREA_HQ_UNDEPLOYED') select 0)+20] Call GetSafePlace;" \n " if (count _pos < 1) then {_pos = [_pos,((missionNamespace getVariable 'WFBE_C_BASE_COIN_AREA_HQ_UNDEPLOYED') select 0)+50] Call GetSafePlace};" \n " if (count _pos < 1) then {_pos = getPos (_logik getVariable ""wfbe_startpos"")};" \n " _dir = getDir _hq;" \n " _currency = if (_currency_system == 0) then {(_side) Call GetSideSupply} else {(_side) Call GetAICommanderFunds};" \n "" \n " //--- Ensure that we have the supply required to deploy the HQ." \n " if (_currency >= (_costs select _hqType)) then {" \n " [(_names select _hqType),_side,_pos,_dir] ExecVM 'Server\Construction\Construction_HQSite.sqf';" \n "" \n " if (_currency_system == 0) then {" \n " [_side, -(_costs select _hqType)] Call ChangeSideSupply;" \n " } else {" \n " [_side, -(_costs select _hqType)] Call ChangeAICommanderFunds;" \n " };" \n " " \n " if (_isStartingFSM) then {_isStartingFSM = false};" \n " };" \n "" \n " //--- Reset local variable." \n " _overallDefenses = missionNamespace getVariable Format [""WFBE_Defenses_%1_Global"",_sideText];" \n " _currentContent = 0;" \n " _totalContent = 0;" \n " if !(isNil ""_overallDefenses"") then {_totalContent = count _overallDefenses} else {_overallDefenses = []};" \n "" \n " _baseDefenses = [];" \n " _defenses = missionNamespace getVariable Format [""WFBE_Defenses_%1"",_sideText];" \n " for '_i' from 0 to count(_baseDefensesTemplate)-1 do {_baseDefenses set [_i,["""",[]]]};" \n " if (isNil '_defenses') then {" \n " missionNamespace setVariable [Format [""WFBE_Defenses_%1"",_sideText],_baseDefenses];" \n " } else {" \n " //--- Check the distance;" \n " _currentContent = -1;" \n " for '_i' from 0 to _totalContent-1 do { " \n " _defenses = _overallDefenses select _i;" \n " {" \n " if (count(_x select 1) > 0) then {" \n " if (alive (_x select 0)) then {" \n " if ((_x select 0) distance _hq < 750) then {" \n " _baseDefenses = _defenses;" \n " _currentContent = _i;" \n " };" \n " };" \n " };" \n " if (_currentContent != -1) exitWith {};" \n " } forEach _defenses;" \n " if (_currentContent != -1) exitWith {};" \n " };" \n " };" \n "" \n " if (_currentContent == -1) then {_currentContent = count _overallDefenses};" \n "" \n " _baseAiIntervalLast = time;" \n " _baseAlive = [false,false,false,false,false,false];" \n " _baseInProgress = [false,false,false,false,false,false];" \n " _baseTimerCheck = [time,time,time,time,time,time];" \n " _baseWalls = [[],[],[],[],[],[]];" \n "};" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Commander_Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 10"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Move { name = "Check_Move"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Proceed { priority = 0.000000; to="Check_Base"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_hqCanMove"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Move { priority = 0.000000; to="Move"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_hqCanMove"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Move { name = "Move"; init = /*%FSM*/"_hqCanMove = false;" \n "" \n "[(_names select _hqType),_side,getPos _hq,getDir _hq] ExecVM 'Server\Construction\Construction_HQSite.sqf';"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Commander_Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 10"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Base { name = "Check_Base"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Skip { priority = 0.000000; to="Skip_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdateBase <= 45"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Update { priority = 0.000000; to="Update_Base"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdateBase > 45"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Skip_1 { name = "Skip_1"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Check_Defenses"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_Base { name = "Update_Base"; init = /*%FSM*/"_lastUpdateBase = time;" \n "" \n "_buildings = (_side) Call WFBE_CO_FNC_GetSideStructures;" \n "" \n "//--- Get the buildings close of the HQ by type (repair if downed)." \n "_barracks = ['BARRACKSTYPE',_buildings,750,_side,_hq] Call BuildingInRange;" \n "_light = ['LIGHTTYPE',_buildings,750,_side,_hq] Call BuildingInRange;" \n "_heavy = ['HEAVYTYPE',_buildings,750,_side,_hq] Call BuildingInRange;" \n "_air = ['AIRCRAFTTYPE',_buildings,750,_side,_hq] Call BuildingInRange;" \n "_servicePoint = ['SERVICEPOINTTYPE',_buildings,750,_side,_hq] Call BuildingInRange;" \n "_commandCenter = ['COMMANDCENTERTYPE',_buildings,750,_side,_hq] Call BuildingInRange;" \n "" \n "//--- Get the building in progress." \n "_contentInProgress = [objNull,objNull,objNull,objNull,objNull,objNull];" \n "_nearLogics = _hq nearEntities [[""LocationLogicStart""],550];" \n "{" \n " _get = _x getVariable 'WFBE_B_Type';" \n " " \n " if !(isNil '_get') then {" \n " switch (_get) do {" \n " case ""Barracks"": {_contentInProgress set [0, _x]};" \n " case ""Light"": {_contentInProgress set [1, _x]};" \n " case ""CommandCenter"": {_contentInProgress set [2, _x]};" \n " case ""Heavy"": {_contentInProgress set [3, _x]};" \n " case ""Aircraft"": {_contentInProgress set [4, _x]};" \n " case ""ServicePoint"": {_contentInProgress set [5, _x]};" \n " };" \n " };" \n "} forEach _nearLogics;" \n "" \n "//--- Is there a CC at least." \n "_check = [_side, missionNamespace getVariable Format [""WFBE_%1COMMANDCENTERTYPE"",_sideText],_buildings] Call GetFactories;" \n "_ccAvailable = if (count _check == 0) then {false} else {true};" \n "" \n "_content = [_barracks,_light,_commandCenter,_heavy,_air,_servicePoint];" \n "_baseStructurePos = [];" \n "{_baseStructurePos = _baseStructurePos + [getPos _x]} forEach _content;" \n "" \n "//--- Check for construction etc." \n "for '_i' from 0 to count(_content)-1 do {" \n " _currency = if (_currency_system == 0) then {(_side) Call GetSideSupply} else {(_side) Call GetAICommanderFunds};" \n "" \n " _currentStructure = _content select _i;" \n " _isInProgress = _baseInProgress select _i;" \n " _isAlive = _baseAlive select _i;" \n " _timer = _baseTimerCheck select _i;" \n " _isLogicInProgress = _contentInProgress select _i;" \n "" \n " //--- Bad Catch?" \n " if (_isInProgress && !_isAlive && _timer > 400) then {" \n " _baseInProgress set [_i, false];" \n " };" \n "" \n " //--- Alive?" \n " if (alive _currentStructure) then {if !(_isAlive) then {_baseAlive set [_i , true]}};" \n "" \n " //--- Destroyed?" \n " if (_isInProgress && _isAlive && !(alive _currentStructure)) then {" \n " _baseAlive set [_i , false];" \n " _baseInProgress set [_i, false];" \n " };" \n "" \n " //--- Not in progress, we can build it." \n " if (!_isInProgress && isNull(_currentStructure) && isNull(_isLogicInProgress)) then {" \n " _currentType = _baseOrder select _i;" \n " _type = _types find _currentType;" \n "" \n " //--- Check the supply." \n " _cost = _costs select _type;" \n " if (_cost <= _currency) then {" \n "" \n " //--- check about the building limit." \n " _buildLimit = false;" \n " _current = _logik getVariable ""wfbe_structures_live"";" \n " _limit = missionNamespace getVariable (Format['WFBE_C_STRUCTURES_MAX_%1',_currentType]);" \n " if (isNil '_limit') then {_limit = 4}; //--- Default." \n " if ((_current select (_type-1)) >= _limit) then {_buildLimit = true};" \n "" \n " //--- Can build." \n " if !(_buildLimit) then {" \n " _pos = getPos _hq;" \n " _x = _pos select 0;" \n " _y = _pos select 1;" \n " _pos = [];" \n " _pos set [0,((_baseStructureRelPos select _i) select 0) + _x];" \n " _pos set [1,((_baseStructureRelPos select _i) select 1) + _y];" \n " _newPos = [0,0,0];" \n " _roads = [];" \n "" \n " _attempts = 0;" \n " _max = 100;" \n " while {true} do {" \n " _newPos = [_pos,30,_max,10,0,50,0] Call BIS_fnc_findSafePos;" \n " _aiSpawnPos = [_newPos,_baseDistances select _i,_baseDirections select _i] Call GetPositionFrom;" \n " _aiSpawnPos set [2,0];" \n " _roads = _newPos nearRoads 30;" \n " _roads2 = _aiSpawnPos nearRoads 30;" \n " " \n " _isFlat = _aiSpawnPos isFlatEmpty [" \n " 5, //--- Minimal distance from another object" \n " 0, //--- If 0, just check position. If >0, select new one" \n " 0.6, //--- Max gradient" \n " 5, //--- Gradient area" \n " 0, //--- 0 for restricted water, 2 for required water," \n " false, //--- True if some water can be in 25m radius" \n " objNull //--- Ignored object" \n " ];" \n " " \n " _isTooClose = false;" \n " {if (_x distance _newPos < 70) exitWith {_isTooClose = true}} forEach _baseStructurePos;" \n " if (count _roads == 0 && count _roads2 == 0 && !_isTooClose && count _isFlat != 0) exitWith {};" \n " _attempts = _attempts + 1;" \n " if (_attempts > 100 && _max == 100) then {_max = _max + 150};" \n " };" \n " _baseStructurePos set [_i, _newPos];" \n " [(_names select _type),_side,_newPos,0,_type] ExecVM (Format[""Server\Construction\Construction_%1.sqf"",(_scripts select _type)]);" \n " if (_currency_system == 0) then {" \n " [_side, -_cost] Call ChangeSideSupply;" \n " } else {" \n " [_side, -_cost] Call ChangeAICommanderFunds;" \n " };" \n " _baseInProgress set [_i, true];" \n " _baseTimerCheck set [_i, time];" \n " " \n " _current set [_type - 1, (_current select (_type-1)) + 1];" \n " _logik setVariable [""wfbe_structures_live"", _current, true]; " \n " };" \n " };" \n " };" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Check_Defenses"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Defenses { name = "Check_Defenses"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Skip { priority = 0.000000; to="Skip_2"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"isNull _barracks || time - _lastUpdateDefenses <= 80"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Update { priority = 0.000000; to="Update_Defenses"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!isNull _barracks && time - _lastUpdateDefenses > 80"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Skip_2 { name = "Skip_2"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Check_Upgrades"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_Defenses { name = "Update_Defenses"; init = /*%FSM*/"_lastUpdateDefenses = time;" \n "" \n "//--- Buildings checks" \n "for '_i' from 0 to count(_content)-1 do {" \n " _building = _content select _i;" \n " _type = _baseOrder select _i;" \n " _buildingWall = _baseWalls select _i;" \n "" \n " if (alive _building) then {" \n " if (count _buildingWall == 0) then {" \n " //--- Persistent check (Walls), only executed if the array is empty." \n " _defenses = _building getVariable 'WFBE_Walls';" \n " if !(isNil ""_defenses"") then {_baseWalls set [_i,_defenses]};" \n " " \n " _defenses = [_building,missionNamespace getVariable Format [""WFBE_NEURODEF_%1_WALLS"",_type],(_baseWalls select _i)] Call CreateDefenseTemplate;" \n " _baseWalls set [_i ,_defenses];" \n " _building setVariable ['WFBE_Walls', _defenses];" \n " } else {" \n " {" \n " if !(alive _x) exitWith {" \n " _defenses = [_building,missionNamespace getVariable Format [""WFBE_NEURODEF_%1_WALLS"",_type],(_baseWalls select _i)] Call CreateDefenseTemplate;" \n " _baseWalls set [_i ,_defenses];" \n " _building setVariable ['WFBE_Walls', _defenses];" \n " };" \n " } forEach (_baseWalls select _i);" \n " };" \n " } else {" \n " if (count(_buildingWall) > 0) then {" \n " {deleteVehicle _x} forEach (_baseWalls select _i);" \n " _baseWalls set [_i, []];" \n " };" \n " };" \n "} forEach _content;" \n "" \n "//--- Defenses Check." \n "for '_i' from 0 to count(_baseDefenses)-1 do {" \n " _defense = (_baseDefenses select _i) select 0;" \n "" \n " //--- If object, it exist or existed." \n " if (typename _defense == ""OBJECT"") then {" \n " _template = (_baseDefenses select _i) select 1;" \n " " \n " if (alive _defense) then {" \n " {" \n " if !(alive _x) exitWith {" \n " _template = _baseDefensesTemplate select _i;" \n " _defenses = [_defense,missionNamespace getVariable Format [""WFBE_NEURODEF_%1"",_template select 3]] Call CreateDefenseTemplate;" \n " _baseDefenses set [_i, [_defense,_defenses]];" \n " missionNamespace setVariable [Format [""WFBE_Defenses_%1"",_sideText],_baseDefenses];" \n " _overallDefenses set [_currentContent, _baseDefenses];" \n " missionNamespace setVariable [Format [""WFBE_Defenses_%1_Global"",_sideText], _overallDefenses];" \n " };" \n " } forEach _template;" \n "" \n " //--- Keep the defense able to fire." \n " if !(isNull(gunner _defense)) then {" \n " if !(someAmmo _defense) then {[_defense,_side] Call RearmVehicle};" \n " };" \n " } else {" \n " if (count(_template) > 0) then {" \n " {deleteVehicle _x} forEach _template;" \n " _baseDefenses set [_i, ["""",[]]];" \n " _defense = (_baseDefenses select _i) select 0;" \n " missionNamespace setVariable [Format [""WFBE_Defenses_%1"",_sideText],_baseDefenses];" \n " _overallDefenses set [_currentContent, _baseDefenses];" \n " missionNamespace setVariable [Format [""WFBE_Defenses_%1_Global"",_sideText], _overallDefenses];" \n " };" \n " };" \n " };" \n "" \n " //--- If string, it don't exist." \n " if (typename _defense == ""STRING"") then {" \n " _aiComFunds = (_side) Call GetAICommanderFunds;" \n " _template = _baseDefensesTemplate select _i;" \n " _pool = _template select 0;" \n " _picked = _pool select round(random((count _pool)-1));" \n "" \n " //--- Grab the defense price." \n " _details = missionNamespace getVariable _picked;" \n " _price = if !(isNil '_details') then {_details select QUERYUNITPRICE} else {400};" \n "" \n " if (_aiComFunds >= _price) then {" \n " [_side, -_price] Call ChangeAICommanderFunds;" \n " " \n " _pos = getPos _hq;" \n " _x = _pos select 0;" \n " _y = _pos select 1;" \n " _pos = [];" \n " _pos set [0,((_template select 1) select 0) + _x];" \n " _pos set [1,((_template select 1) select 1) + _y];" \n " _newPos = [0,0,0];" \n " _roads = [];" \n "" \n " _attempts = 0;" \n " _max = 100;" \n " while {true} do {" \n " _newPos = [_pos,30,_max,10,0,50,0] Call BIS_fnc_findSafePos;" \n " _roads = _newPos nearRoads 24;" \n "" \n " _isTooClose = false;" \n " {if (_x distance _newPos < 30) exitWith {_isTooClose = true}} forEach _content;" \n " if (count _roads == 0 && !_isTooClose && count(_newPos nearEntities 15) == 0) exitWith {};" \n " _attempts = _attempts + 1;" \n " if (_attempts > 100 && _max == 100) then {_max = _max + 150};" \n " };" \n "" \n " _created = [_picked,_side,_newPos,_template select 2,true,true,(missionNamespace getVariable ""WFBE_C_BASE_DEFENSE_MANNING_RANGE"")*3] Call ConstructDefense;" \n "" \n " //--- Extra?" \n " _defenses = [];" \n " _extra = _template select 3;" \n " if (_extra != """") then {" \n " _defenses = [_created,missionNamespace getVariable Format [""WFBE_NEURODEF_%1"",_extra]] Call CreateDefenseTemplate;" \n " };" \n "" \n " _baseDefenses set [_i, [_created,_defenses]];" \n " missionNamespace setVariable [Format [""WFBE_Defenses_%1"",_sideText],_baseDefenses];" \n " _overallDefenses set [_currentContent, _baseDefenses];" \n " missionNamespace setVariable [Format [""WFBE_Defenses_%1_Global"",_sideText], _overallDefenses];" \n " };" \n " };" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Check_Upgrades"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Upgrades { name = "Check_Upgrades"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Skip { priority = 0.000000; to="Skip_3"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_ccAvailable || time - _lastUpdateUpgrades <= 60"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Update { priority = 0.000000; to="Update_Upgrades"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_ccAvailable && time - _lastUpdateUpgrades > 60"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Skip_3 { name = "Skip_3"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Check_Types"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_Upgrades { name = "Update_Upgrades"; init = /*%FSM*/"_lastUpdateUpgrades = time;" \n "" \n "if !(_logik getVariable ""wfbe_upgrading"") then {" \n " (_side) Spawn WFBE_SE_FNC_AI_Com_Upgrade; " \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Check_Types"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Types { name = "Check_Types"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Skip { priority = 0.000000; to="Skip_4"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdateTypes <= 120"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Update { priority = 0.000000; to="Update_Types"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdateTypes > 120"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Skip_4 { name = "Skip_4"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Check_Workers"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_Types { name = "Update_Types"; init = /*%FSM*/"_lastUpdateTypes = time;" \n "" \n "_totalFunds = 0;" \n "" \n "{" \n " if !(isNil '_x') then {_totalFunds = _totalFunds + ((_x) Call GetTeamFunds)};" \n "} forEach (_logik getVariable ""wfbe_teams"");" \n "" \n "_avgIncome = _totalFunds / _maxplayers;" \n "" \n "_income = _side Call GetTotalSupplyValue;" \n "" \n "_type = 0;" \n "" \n "_infPercent = 0;" \n "_lightPercent = 0;" \n "_heavyPercent = 0;" \n "_airPercent = 0;" \n "if (_income < (_totalSupply - (_totalSupply/1.2)) || _avgIncome < 2000) then {_infPercent = 70; _lightPercent = 30};" \n "if ((_income >= (_totalSupply - (_totalSupply/1.2)) && _income < (_totalSupply - (_totalSupply/1.6))) || _avgIncome > 2000) then {_infPercent = 60; _lightPercent = 30; _heavyPercent = 10};" \n "if ((_income >= (_totalSupply - (_totalSupply/1.6)) && _income < (_totalSupply - (_totalSupply/2))) || _avgIncome > 4000) then {_infPercent = 50; _lightPercent = 30; _heavyPercent = 20};" \n "if ((_income >= (_totalSupply - (_totalSupply/2)) && _income < (_totalSupply - (_totalSupply/3))) || _avgIncome > 12000) then {_infPercent = 40; _lightPercent = 25; _heavyPercent = 30; _airPercent = 5};" \n "if ((_income >= (_totalSupply - (_totalSupply/3)) && _income < (_totalSupply - (_totalSupply/4))) || _avgIncome > 18000) then {_infPercent = 30; _lightPercent = 20; _heavyPercent = 40; _airPercent = 10};" \n "if (_income >= (_totalSupply - (_totalSupply/4)) || _avgIncome > 24000) then {_infPercent = 20; _lightPercent = 20; _heavyPercent = 45; _airPercent = 15};" \n "" \n "_infAssign = round(_maxplayers * (_infPercent / 100));" \n "_lightAssign = round(_maxplayers * (_lightPercent / 100));" \n "_heavyAssign = round(_maxplayers * (_heavyPercent / 100));" \n "_airAssign = round(_maxplayers * (_airPercent / 100));" \n "" \n "_infTemplates = [];" \n "_lightTemplates = [];" \n "_heavyTemplates = [];" \n "_airTemplates = [];" \n "" \n "_i = 0;" \n "" \n "/* Experimental - Start */" \n "_upgrades = (_side) Call WFBE_CO_FNC_GetSideUpgrades;" \n "" \n "//--- Retrieve the available types." \n "{" \n " _upgradesTemplate = _teamUpgrades select _i;" \n " switch (_x) do {" \n " //--- Infantry." \n " case 0: {" \n " _canAdd = true;" \n " for '_k' from 0 to 3 do {" \n " if ((_upgrades select _k) < (_upgradesTemplate select _k)) exitWith {_canAdd = false};" \n " };" \n " if (_canAdd) then {_infTemplates = _infTemplates + [_i]};" \n " };" \n " //--- Light." \n " case 1: {" \n " _canAdd = true;" \n " for '_k' from 0 to 3 do {" \n " if ((_upgrades select _k) < (_upgradesTemplate select _k)) exitWith {_canAdd = false};" \n " };" \n " if (_canAdd) then {_lightTemplates = _lightTemplates + [_i]};" \n " };" \n " //--- Heavy." \n " case 2: {" \n " _canAdd = true;" \n " for '_k' from 0 to 3 do {" \n " if ((_upgrades select _k) < (_upgradesTemplate select _k)) exitWith {_canAdd = false};" \n " };" \n " if (_canAdd) then {_heavyTemplates = _heavyTemplates + [_i]};" \n " };" \n " //--- Air." \n " case 3: {" \n " _canAdd = true;" \n " for '_k' from 0 to 3 do {" \n " if ((_upgrades select _k) < (_upgradesTemplate select _k)) exitWith {_canAdd = false};" \n " };" \n " if (_canAdd) then {_airTemplates = _airTemplates + [_i]};" \n " };" \n " };" \n " _i = _i + 1;" \n "} forEach _teamTypes;" \n "" \n "//--- How many types are available." \n "_templates_infavailable = count _infTemplates;" \n "_templates_ligavailable = count _lightTemplates;" \n "_templates_heaavailable = count _heavyTemplates;" \n "_templates_airavailable = count _airTemplates;" \n "" \n "//--- Assign if possible." \n "if (_templates_infavailable > 0 || _templates_ligavailable > 0 || _templates_heaavailable > 0 || _templates_airavailable > 0) then {" \n " //--- Reallocate if necessary - Infantry." \n " if (_templates_infavailable == 0 && _infAssign > 0) then {" \n " _dividedEnd = _infAssign;" \n " _ressourceDivision = [_dividedEnd / 2, (_dividedEnd/2) - ((_dividedEnd/2) / 4), (_dividedEnd/2)/4];" \n " " \n " _infAssign = 0;" \n " _i = 0;" \n " " \n " if (_templates_ligavailable != 0) then {" \n " _lightAssign = _lightAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " " \n " if (_templates_heaavailable == 0) then {" \n " _lightAssign = _lightAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " " \n " if (_templates_airavailable == 0) then {" \n " _lightAssign = _lightAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " };" \n " " \n " if (_i < 3) then {" \n " if (_templates_heaavailable != 0) then {" \n " _heavyAssign = _heavyAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " " \n " if (_templates_ligavailable == 0 && _i < 3) then {" \n " _heavyAssign = _heavyAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " " \n " if (_templates_airavailable == 0 && _i < 3) then {" \n " _heavyAssign = _heavyAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " };" \n " " \n " if (_i < 3) then {" \n " if (_templates_airavailable != 0) then {" \n " _airAssign = _airAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " " \n " if (_templates_ligavailable == 0 && _i < 3) then {" \n " _airAssign = _airAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " " \n " if (_templates_heaavailable == 0 && _i < 3) then {" \n " _airAssign = _airAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " };" \n " };" \n " };" \n " };" \n "" \n " //--- Reallocate if necessary - Light." \n " if (_templates_ligavailable == 0 && _lightAssign > 0) then {" \n " _dividedEnd = _lightAssign;" \n " _ressourceDivision = [_dividedEnd / 2, (_dividedEnd/2) - ((_dividedEnd/2) / 4), (_dividedEnd/2)/4];" \n " " \n " _lightAssign = 0;" \n " _i = 0;" \n " " \n " if (_templates_infavailable != 0) then {" \n " _infAssign = _infAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " " \n " if (_templates_heaavailable == 0) then {" \n " _infAssign = _infAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " " \n " if (_templates_airavailable == 0) then {" \n " _infAssign = _infAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " };" \n " " \n " if (_i < 3) then {" \n " if (_templates_heaavailable != 0) then {" \n " _heavyAssign = _heavyAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " " \n " if (_templates_infavailable == 0 && _i < 3) then {" \n " _heavyAssign = _heavyAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " " \n " if (_templates_airavailable == 0 && _i < 3) then {" \n " _heavyAssign = _heavyAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " };" \n " " \n " if (_i < 3) then {" \n " if (_templates_airavailable != 0) then {" \n " _airAssign = _airAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " " \n " if (_templates_infavailable == 0 && _i < 3) then {" \n " _airAssign = _airAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " " \n " if (_templates_heaavailable == 0 && _i < 3) then {" \n " _airAssign = _airAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " };" \n " };" \n " };" \n " };" \n " " \n " //--- Reallocate if necessary - Heavy." \n " if (_templates_heaavailable == 0 && _heavyAssign > 0) then {" \n " _dividedEnd = _heavyAssign;" \n " _ressourceDivision = [_dividedEnd / 2, (_dividedEnd/2) - ((_dividedEnd/2) / 4), (_dividedEnd/2)/4];" \n " " \n " _heavyAssign = 0;" \n " _i = 0;" \n " " \n " if (_templates_infavailable != 0) then {" \n " _infAssign = _infAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " " \n " if (_templates_ligavailable == 0) then {" \n " _infAssign = _infAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " " \n " if (_templates_airavailable == 0) then {" \n " _infAssign = _infAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " };" \n " " \n " if (_i < 3) then {" \n " if (_templates_ligavailable != 0) then {" \n " _lightAssign = _lightAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " " \n " if (_templates_infavailable == 0 && _i < 3) then {" \n " _lightAssign = _lightAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " " \n " if (_templates_airavailable == 0 && _i < 3) then {" \n " _lightAssign = _lightAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " };" \n " " \n " if (_i < 3) then {" \n " if (_templates_airavailable != 0) then {" \n " _airAssign = _airAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " " \n " if (_templates_infavailable == 0 && _i < 3) then {" \n " _airAssign = _airAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " " \n " if (_templates_ligavailable == 0 && _i < 3) then {" \n " _airAssign = _airAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " };" \n " };" \n " };" \n " };" \n " " \n " //--- Reallocate if necessary - Air." \n " if (_templates_airavailable == 0 && _airAssign > 0) then {" \n " _dividedEnd = _airAssign;" \n " _ressourceDivision = [_dividedEnd / 2, (_dividedEnd/2) - ((_dividedEnd/2) / 4), (_dividedEnd/2)/4];" \n " " \n " _airAssign = 0;" \n " _i = 0;" \n " " \n " if (_templates_infavailable != 0) then {" \n " _infAssign = _infAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " " \n " if (_templates_ligavailable == 0) then {" \n " _infAssign = _infAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " " \n " if (_templates_airavailable == 0) then {" \n " _infAssign = _infAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " };" \n " " \n " if (_i < 3) then {" \n " if (_templates_ligavailable != 0) then {" \n " _lightAssign = _lightAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " " \n " if (_templates_infavailable == 0 && _i < 3) then {" \n " _lightAssign = _lightAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " " \n " if (_templates_airavailable == 0 && _i < 3) then {" \n " _lightAssign = _lightAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " };" \n " " \n " if (_i < 3) then {" \n " if (_templates_heaavailable != 0) then {" \n " _heavyAssign = _heavyAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " " \n " if (_templates_infavailable == 0 && _i < 3) then {" \n " _heavyAssign = _heavyAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " " \n " if (_templates_ligavailable == 0 && _i < 3) then {" \n " _heavyAssign = _heavyAssign + (_ressourceDivision select _i);" \n " _i = _i + 1;" \n " };" \n " };" \n " };" \n " };" \n " };" \n " " \n " {" \n " if !(isNil '_x') then {" \n " _skip = false;" \n " if (_infAssign > 0) then {" \n " _type = _infTemplates select (round(random((count _infTemplates)-1)));" \n " _infAssign = _infAssign - 1;" \n " _skip = true;" \n " };" \n " if (_lightAssign > 0 && !_skip) then {" \n " _type = _lightTemplates select (round(random((count _lightTemplates)-1)));" \n " _lightAssign = _lightAssign - 1;" \n " _skip = true;" \n " };" \n " if (_heavyAssign > 0 && !_skip) then {" \n " _type = _heavyTemplates select (round(random((count _heavyTemplates)-1)));" \n " _heavyAssign = _heavyAssign - 1;" \n " _skip = true;" \n " };" \n " if (_airAssign > 0 && !_skip) then {" \n " _type = _airTemplates select (round(random((count _airTemplates)-1)));" \n " _airAssign = _airAssign - 1;" \n " _skip = true;" \n " };" \n " [_x,_type] Call SetTeamType;" \n " };" \n " } forEach (_logik getVariable ""wfbe_teams"");" \n ";" \n "};" \n "/* Experimental - End */"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Check_Workers"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Move_1 { name = "Check_Move_1"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Skip { priority = 0.000000; to="Skip_5"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdateMove <= 120"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Update { priority = 0.000000; to="Update_Move"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdateMove > 120"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Workers { name = "Check_Workers"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Time { priority = 0.000000; to="Nothing"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_workers_enabled || time - _lastUpdateWorkers <= 20"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Workers { priority = 0.000000; to="Update_Workers"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_workers_enabled && time - _lastUpdateWorkers > 20"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Nothing { name = "Nothing"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Check_Move_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_Workers { name = "Update_Workers"; init = /*%FSM*/"_lastUpdateWorkers = time;" \n "" \n "_workers = _logik getVariable ""wfbe_workers"";" \n "_aliveWorkers = (_workers) Call GetLiveUnits;" \n "" \n "//--- enough workers or?." \n "if (count _aliveWorkers < (missionNamespace getVariable ""WFBE_C_STRUCTURES_WORKERS_MAX"")) then {" \n " _aiComFunds = (_side) Call GetAICommanderFunds;" \n "" \n " if (_aiComFunds >= _workerPrice) then {" \n " [_side, -_workerPrice] Call ChangeAICommanderFunds;" \n " " \n " //--- Which index." \n " _index = 0;" \n " for '_i' from 0 to count(_workers)-1 do {" \n " if (isNull (_workers select _i)) exitWith {_index = _i};" \n " };" \n " " \n " if (_index == 0 && count(_workers) > 0) then {_index = count _workers};" \n " " \n " [_side, _hq, _index] Call SRVFNCRequestWorker;" \n " };" \n "} else {" \n " //--- Max reached, enough in base to build else dispose." \n " {" \n " if (_x distance _hq > 600 && alive _x) then {_x setDammage 1};" \n " } forEach _workers;" \n "};" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Check_Move_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Skip_5 { name = "Skip_5"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Commander_Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 10"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_Move { name = "Update_Move"; init = /*%FSM*/"_lastUpdateMove = time;" \n "" \n "if (time - _baseAiIntervalLast > _baseAiInterval) then {" \n " _hqCanMove = true;" \n "" \n " //--- Build limit Check" \n " _buildLimit = false;" \n " _current = _logik getVariable ""wfbe_structures_live"";" \n " _limit = missionNamespace getVariable 'WFBE_C_STRUCTURES_MAX_BARRACKS';" \n " if (isNil '_limit') then {_limit = 4}; //--- Default." \n " if ((_current select 0) >= _limit) exitWith {_hqCanMove = false};" \n "" \n " //--- check the nearby buildings." \n " {" \n " if !(alive _x) exitWith {_hqCanMove = false}; " \n " } forEach _content;" \n "" \n " if (_hqCanMove) then {" \n " //--- Check Defenses." \n " for '_i' from 0 to count(_baseDefenses)-1 do {" \n " _defense = (_baseDefenses select _i) select 0;" \n " if (typeName _defense == ""STRING"") exitWith {_hqCanMove = false};" \n " };" \n "" \n " if (_hqCanMove) then {" \n " //--- Attempt to get a destination." \n " _sortedLocation = [_hq, startingLocations] Call SortByDistance;" \n "" \n " _hqDeployAt = objNull;" \n " {" \n " if (count (nearestObjects [_x, (_westStructuresNames + _eastStructuresNames), 400]) == 0 && _x distance _hq > 700) exitWith {_hqDeployAt = _x};" \n " } forEach _sortedLocation;" \n " " \n " if !(isNull _hqDeployAt) then {" \n " //--- Location Picked." \n " _hostileTowns = 0;" \n " _distance = _hq distance _hqDeployAt;" \n " {if (_x distance _hq < _distance && ((_x getVariable 'sideID') != _sideID)) then {_hostileTowns = _hostileTowns + 1}} forEach towns;" \n " " \n " if (_hostileTowns != 0) then {_hqCanMove = false};" \n " } else {" \n " _hqCanMove = false;" \n " };" \n " };" \n " };" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Commander_Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 10"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Skip_6 { name = "Skip_6"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Commander_Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 10"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,-81.542984,-257.577942,8.457038,-207.578140,0.000000,"Init"}; item1[] = {"AI",4,218,-82.819679,-169.595276,7.180347,-119.595261,0.000000,"AI"}; item2[] = {"Player",4,218,49.705437,-259.537231,139.705353,-209.537186,1.000000,"Player"}; item3[] = {"End",1,250,321.430817,-171.897736,411.430847,-121.897774,0.000000,"End"}; item4[] = {"_",-1,250,78.086945,-213.540482,78.086945,-208.131866,0.000000,""}; item5[] = {"Advanced_Init",2,250,-85.897964,-82.487251,4.102041,-32.487217,0.000000,"Advanced Init"}; item6[] = {"Loop",4,218,-83.198402,0.114880,6.801598,50.114880,0.000000,"Loop"}; item7[] = {"",7,210,86.608803,29.398537,94.608841,37.398552,0.000000,""}; item8[] = {"_",8,218,62.498558,99.618889,94.074371,122.354271,0.000000,""}; item9[] = {"Towns",4,218,424.040314,260.865143,514.040283,310.865143,1.000000,"Towns"}; item10[] = {"Check",2,250,-83.027481,86.339714,6.972525,136.339722,0.000000,"Check"}; item11[] = {"Handle_AI_Mode",2,250,34.021767,145.371872,124.021767,195.371826,0.000000,"Handle" \n "AI Mode"}; item12[] = {"Handle_Towns",2,4346,645.149963,260.576935,735.150269,310.576996,0.000000,"Handle Towns"}; item13[] = {"Auto_Move",4,218,156.132660,127.149292,246.132660,177.149307,1.000000,"Auto Move"}; item14[] = {"Ind_Move",4,218,151.292526,60.816727,241.292587,110.816818,0.000000,"Ind Move"}; item15[] = {"Handle_Movement",2,250,259.692505,65.755508,349.692505,115.755600,0.000000,"Handle" \n "Movement"}; item16[] = {"",7,210,783.690674,11.963443,791.690674,19.963448,0.000000,""}; item17[] = {"Independant",2,250,258.015839,-8.785803,348.015778,41.214260,0.000000,"Independant"}; item18[] = {"_",8,218,848.837219,4.163350,882.557495,26.575237,0.000000,""}; item19[] = {"Handle_Buildings",2,250,945.165405,-11.593051,1035.166992,38.406914,0.000000,"Handle Buildings"}; item20[] = {"Not_Ready",4,218,1100.195435,17.938362,1190.195313,67.938385,0.000000,"Not Ready"}; item21[] = {"Ready",4,218,1103.682739,-48.457657,1193.682617,1.542370,1.000000,"Ready"}; item22[] = {"Update_Building",2,250,1231.852661,-47.771744,1321.852783,2.228256,0.000000,"Update Building"}; item23[] = {"_",8,218,1364.159546,-1.876722,1397.271606,20.541275,0.000000,""}; item24[] = {"Nil",2,250,1230.162842,18.195518,1320.162720,68.195541,0.000000,"Nil"}; item25[] = {"Handle_NEURO",2,250,936.365967,410.514252,1026.365967,460.514252,0.000000,"Handle NEURO"}; item26[] = {"Not_Ready",4,218,786.411011,385.692657,876.411011,435.692657,0.000000,"Not Ready"}; item27[] = {"Ready",4,218,787.582764,448.519836,877.582764,498.519836,0.000000,"Ready"}; item28[] = {"Update_NEURO",2,250,666.334106,448.291901,756.334106,498.291901,0.000000,"Update NEURO"}; item29[] = {"Nil_1",2,250,667.132202,384.425903,757.132202,434.425903,0.000000,"Nil"}; item30[] = {"_",8,218,594.121155,430.249359,623.907043,450.620209,0.000000,""}; item31[] = {"Handle_Purchases",2,250,301.274597,414.618500,391.274658,464.618500,0.000000,"Handle" \n "Purchases"}; item32[] = {"Skip",4,218,181.354340,379.690796,271.354309,429.690796,0.000000,"Skip"}; item33[] = {"Purchase",4,218,180.375580,442.118439,270.375549,492.118439,0.000000,"Purchase"}; item34[] = {"Nil_2",2,250,52.676552,379.745789,142.676575,429.745789,0.000000,"Nil"}; item35[] = {"Handle_Env",2,250,53.368782,440.550720,143.368713,490.550720,0.000000,"Handle Env"}; item36[] = {"_",8,218,-40.001137,393.311249,-9.106947,416.546387,0.000000,""}; item37[] = {"Done",2,250,-201.887054,5.574802,-111.887016,55.574814,0.000000,"Done"}; item38[] = {"Continue",4,218,111.227577,532.703003,201.227600,582.703003,0.000000,"Continue"}; item39[] = {"Skip",4,218,12.053749,531.477417,102.053658,581.477417,0.000000,"Skip"}; item40[] = {"",7,210,-160.345612,430.631622,-152.345581,438.631622,0.000000,""}; item41[] = {"Handle_Purchase",2,250,72.976715,609.960266,162.976746,659.960266,0.000000,"Handle" \n "Purchase"}; item42[] = {"_",8,218,-166.701218,623.231323,-139.133789,643.141235,0.000000,""}; item43[] = {"Handle_Move",2,250,600.383606,198.903793,690.383606,248.903793,0.000000,"Handle Move"}; item44[] = {"Move",4,218,423.396515,198.786560,513.396484,248.786560,0.000000,"Move"}; item45[] = {"Patrol",4,218,425.609192,137.120514,515.609192,187.120529,0.000000,"Patrol"}; item46[] = {"Handle_Patrol",2,250,577.069885,137.120560,667.069885,187.120560,0.000000,"Handle Patrol"}; item47[] = {"Defense",4,218,424.527344,75.454391,514.527283,125.454391,0.000000,"Defense"}; item48[] = {"Handle_Defense",2,250,557.596313,76.536301,647.596313,126.536301,0.000000,"Handle Defense"}; item49[] = {"Handle_Injured",2,250,1335.737915,79.091011,1425.737915,129.090988,0.000000,"Handle Injured"}; item50[] = {"Not_Ready",4,218,1282.343750,173.416992,1372.343750,223.417023,0.000000,"Not Ready"}; item51[] = {"Ready",4,218,1390.460693,173.416977,1480.460693,223.416962,0.000000,"Ready"}; item52[] = {"Update_Injured",2,250,1392.124146,264.900574,1482.124146,314.900574,0.000000,"Update Injured"}; item53[] = {"Nil_3",2,250,1282.343750,263.237244,1372.343750,313.237244,0.000000,"Nil"}; item54[] = {"_",8,218,1358.857300,424.581024,1397.293823,447.967590,0.000000,""}; item55[] = {"Check_1",2,250,180.789749,-259.549835,270.789703,-209.549866,0.000000,"Check"}; item56[] = {"Gameover",4,218,320.254791,-258.390808,410.254761,-208.390778,1.000000,"Gameover"}; item57[] = {"Idle",4,218,180.499100,-361.358368,270.498993,-311.358368,0.000000,"Idle"}; item58[] = {"Check_2",2,250,44.078018,-361.358368,134.078003,-311.358368,0.000000,"Check"}; item59[] = {"Player",4,218,42.931602,-458.802002,132.931793,-408.802002,0.000000,"Player"}; item60[] = {"AI",4,218,-192.079422,-362.504791,-102.079514,-312.504791,0.000000,"AI"}; item61[] = {"",7,210,-151.955643,-61.002697,-143.955643,-53.002697,0.000000,""}; item62[] = {"Wait",2,250,288.260162,-459.948456,378.260162,-409.948456,0.000000,"Wait"}; item63[] = {"_",8,218,318.144775,-352.061035,349.720581,-329.325653,0.000000,""}; version=1; class LayoutItems { class Item4 { class ItemInfo { FontFace="Arial"; FontHeight=10; lStyle=1; }; }; }; link0[] = {0,1}; link1[] = {0,2}; link2[] = {1,5}; link3[] = {2,55}; link4[] = {5,6}; link5[] = {6,10}; link6[] = {7,2}; link7[] = {8,11}; link8[] = {9,12}; link9[] = {10,7}; link10[] = {10,8}; link11[] = {11,13}; link12[] = {11,14}; link13[] = {12,16}; link14[] = {13,15}; link15[] = {14,17}; link16[] = {15,9}; link17[] = {15,44}; link18[] = {15,45}; link19[] = {15,47}; link20[] = {16,18}; link21[] = {17,16}; link22[] = {18,19}; link23[] = {19,20}; link24[] = {19,21}; link25[] = {20,24}; link26[] = {21,22}; link27[] = {22,23}; link28[] = {23,49}; link29[] = {24,23}; link30[] = {25,26}; link31[] = {25,27}; link32[] = {26,29}; link33[] = {27,28}; link34[] = {28,30}; link35[] = {29,30}; link36[] = {30,31}; link37[] = {31,32}; link38[] = {31,33}; link39[] = {32,34}; link40[] = {33,35}; link41[] = {34,36}; link42[] = {35,38}; link43[] = {35,39}; link44[] = {36,40}; link45[] = {37,6}; link46[] = {38,41}; link47[] = {39,40}; link48[] = {40,37}; link49[] = {41,42}; link50[] = {42,40}; link51[] = {43,16}; link52[] = {44,43}; link53[] = {45,46}; link54[] = {46,16}; link55[] = {47,48}; link56[] = {48,16}; link57[] = {49,50}; link58[] = {49,51}; link59[] = {50,53}; link60[] = {51,52}; link61[] = {52,54}; link62[] = {53,54}; link63[] = {54,25}; link64[] = {55,56}; link65[] = {55,57}; link66[] = {56,3}; link67[] = {57,58}; link68[] = {58,59}; link69[] = {58,60}; link70[] = {59,62}; link71[] = {60,61}; link72[] = {61,5}; link73[] = {62,63}; link74[] = {63,55}; globals[] = {0.000000,0,0,0,0,640,480,1,102,6316128,1,-224.598236,805.957520,475.792480,-387.134033,707,592,1}; window[] = {0,-1,-1,-1,-1,862,125,1538,125,1,725}; *//*%FSM*/ class FSM { fsmName = "aiteam"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_team = _this select 0;" \n "_stored = str _team;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Player { priority = 1.000000; to="Check_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"isPlayer (leader _team) || isNull _team || isNil ""_team"" || gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class AI { priority = 0.000000; to="Advanced_Init"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(isPlayer (leader _team))"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/"diag_log Format[""[WFBE (INFORMATION)][frameno:%2 | ticktime:%3] aiteam.fsm: Team %1 is null or nil, exiting FSM."",_stored,diag_frameno,diag_tickTime];"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Advanced_Init { name = "Advanced_Init"; init = /*%FSM*/"diag_log Format[""[WFBE (INFORMATION)][frameno:%2 | ticktime:%3] aiteam.fsm: Team %1 is ai controlled."",_team,diag_frameno,diag_tickTime];" \n "" \n "_side = side _team;" \n "_sideText = str _side;" \n "_sideID = (_side) Call GetSideID;" \n "" \n "_ccInRange = false;" \n "_ccr = missionNamespace getVariable ""WFBE_C_STRUCTURES_COMMANDCENTER_RANGE"";" \n "_defenseTime = -120;" \n "_dr = missionNamespace getVariable ""WFBE_C_BASE_DEFENSE_MANNING_RANGE"";" \n "_lastBuyType = -1;" \n "_lastCheckBuilding = -200;" \n "_lastCheckInjured = -200;" \n "_lastCheckVehicles = -200;" \n "_lastCheck = -100;" \n "_lastCoord = [0,0,0];" \n "_mbu = missionNamespace getVariable 'WFBE_C_AI_MAX';" \n "_minCheckArray = [800,1600,3200,6400];" \n "_moveAtRunning = false;" \n "_moveAtLast = objNull;" \n "_moveAt = objNull;" \n "_pur = missionNamespace getVariable ""WFBE_C_UNITS_PURCHASE_RANGE"";" \n "_pr = missionNamespace getVariable ""WFBE_C_AI_PATROL_RANGE"";" \n "_templates = missionNamespace getVariable Format [""WFBE_%1AITEAMTEMPLATES"",_sideText];" \n "_templatesRequire = missionNamespace getVariable Format [""WFBE_%1AITEAMTEMPLATEREQUIRES"",_sideText];" \n "_templatesUpgrade = missionNamespace getVariable Format [""WFBE_%1AITEAMUPGRADES"",_sideText];" \n "_town_cvar = if ((missionNamespace getVariable ""WFBE_C_TOWNS_CONQUEST_MODE"") == 1) then {Format[""wfbe_town_capturable_%1"", _side]} else {""""};" \n "_upgradeLevel = -1;" \n "_nextPurchase = time + 60 + (random 120);" \n "_upsmon_enabled = if ((missionNamespace getVariable ""WFBE_C_MODULE_UPSMON"") > 0) then {true} else {false};" \n "" \n "_town_assigned_lastcheck = time;" \n "_town_assigned = objNull;" \n "_town_ispatrolling = false;" \n "_town_ispatrolling_time = time;" \n "" \n "_buyType = (_team) Call GetTeamType;" \n "if (_buyType == -1) then {" \n " _index = round(random(count(_templates) - 1));" \n " _teamType = _templates select _index;" \n " _teamRequire = _templatesRequire select _index;" \n " [_team,_index] Call SetTeamType;" \n "};" \n "" \n "if (isMultiplayer && WF_A2_Vanilla) then {[_side,_team] Spawn AISquadRespawn};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastCheck > 14;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check { name = "Check"; init = /*%FSM*/"_lastCheck = time + random(1);"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Player { priority = 1.000000; to="Check_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"isPlayer (leader _team) || isNull _team || isNil ""_team"" || gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class _ { priority = 0.000000; to="Handle_AI_Mode"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Handle_AI_Mode { name = "Handle_AI_Mode"; init = /*%FSM*/"_commandMode = _team Call GetTeamAutonomous;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Auto_Move { priority = 1.000000; to="Handle_Movement"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_commandMode"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Ind_Move { priority = 0.000000; to="Independant"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_commandMode"/*%FSM*/; action=/*%FSM*/"_commandMode"/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Handle_Towns { name = "Handle_Towns"; init = /*%FSM*/"if (typeName (_team getVariable ""wfbe_teamgoto"") == ""ARRAY"") then {_team setVariable [""wfbe_teamgoto"", objNull, true]};" \n "_reload = if (_town_assigned != (_team getVariable ""wfbe_teamgoto"") || isNull (_team getVariable ""wfbe_teamgoto"")) then {true} else {false};" \n "" \n "//--- No towns were assigned." \n "if (_reload) then { " \n " //--- Commander set one?" \n " _town_ispatrolling = false;" \n " _moveset = _team getVariable ""wfbe_teamgoto"";" \n " " \n " if !(isNull _moveset) then {" \n " _town_assigned = _moveset;" \n " } else {" \n " _town_assigned = [leader _team, _sideID] Call WFBE_CO_FNC_GetClosestEnemyLocation;" \n " };" \n " " \n " if !(isNull _town_assigned) then { //--- Destination is not null." \n " [_team, _town_assigned, _moveset] Call WFBE_SE_FNC_AI_SetTownAttackPath;" \n " " \n " if (_moveset != _town_assigned) then {_team setVariable [""wfbe_teamgoto"", _town_assigned, true]}; //--- AI objective is now the assigned town." \n " " \n " [""INFORMATION"", Format [""ai_lead.fsm : [%1] Team [%2] is heading for the town [%3]."", _side, _team, _town_assigned]] Call WFBE_CO_FNC_LogContent;" \n " };" \n "};" \n "" \n "if !(isNull _town_assigned) then { //--- While a town is assigned, perform some operation related to it." \n " _enemies = [(_town_assigned nearEntities [[""Man"",""Car"",""Motorcycle"",""Tank"",""Air"",""Ship""], 200]) unitsBelowHeight 20, _side] Call WFBE_CO_FNC_GetAreaEnemiesCount;" \n "" \n " if ((_town_assigned getVariable ""sideID"") == _sideID) then { //--- Town is now held by our side, do some operations if needed." \n " _patrol_check = false;" \n " if ((leader _team distance _town_assigned) < 550) then {" \n " if (_enemies > 0) then { //--- Patrol." \n " if !(_town_ispatrolling) then {" \n " [_team, _town_assigned, _patrol_range] Spawn WFBE_CO_FNC_WaypointPatrolTown;" \n " _town_ispatrolling = true;" \n " _town_ispatrolling_time = time;" \n " } else {_patrol_check = true};" \n " } else { //--- Release." \n " _town_assigned = objNull;" \n " _team setVariable [""wfbe_teamgoto"", objNull, true];" \n " _town_ispatrolling = false;" \n " };" \n " } else {" \n " if !(_town_ispatrolling) then {" \n " _town_assigned = objNull;" \n " _team setVariable [""wfbe_teamgoto"", objNull, true];" \n " } else {_patrol_check = true};" \n " };" \n " if (_patrol_check) then {" \n " if (time - _town_ispatrolling_time > 360) then {_town_assigned = objNull;_team setVariable [""wfbe_teamgoto"", objNull, true];_town_ispatrolling = false};" \n " };" \n " };" \n " " \n " if (!isNull _town_assigned && time - _town_assigned_lastcheck > 60 && !_town_ispatrolling) then { //--- Maybe we have a more suitable town closer? don't bother if the unit is currently patroling." \n " _town_assigned_lastcheck = time;" \n " _town_closest = [leader _team, _sideID] Call WFBE_CO_FNC_GetClosestEnemyLocation;" \n " " \n " if !(isNull _town_closest) then { //--- If the distance between this town and the leader is shorter than our assigned one, then we reload the town assignment." \n " if (_town_closest distance (leader _team) < _town_assigned distance (leader _team)) then {_town_assigned = objNull};" \n " };" \n " };" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Handle_Buildings"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Handle_Movement { name = "Handle_Movement"; init = /*%FSM*/"_moveMode = _team Call GetTeamMoveMode;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Towns { priority = 1.000000; to="Handle_Towns"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_moveMode == 'towns' || _moveMode == 'resetTowns'"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Patrol { priority = 0.000000; to="Handle_Patrol"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_moveMode == 'patrol' || _moveMode == 'resetPatrol'"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Defense { priority = 0.000000; to="Handle_Defense"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_moveMode == 'defense' || _moveMode == 'resetDefense'"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Move { priority = 0.000000; to="Handle_Move"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_moveMode == 'move' || _moveMode == 'resetMove'"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Independant { name = "Independant"; init = /*%FSM*/"_moveAt = objNull;" \n "_moveAtLast = objNull;" \n "_moveAtRunning = false;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Handle_Buildings"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Handle_Buildings { name = "Handle_Buildings"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Ready { priority = 1.000000; to="Update_Building"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastCheckBuilding >= 29"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Not_Ready { priority = 0.000000; to="Nil"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastCheckBuilding < 29"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_Building { name = "Update_Building"; init = /*%FSM*/"_lastCheckBuilding = time;" \n "" \n "_purchaseRange = if (_ccInRange) then {_ccr} else {_pur};" \n "_buildings = (_side) Call WFBE_CO_FNC_GetSideStructures;" \n "" \n "_check = ['BARRACKSTYPE',_buildings,_purchaseRange,_side,leader _team] Call BuildingInRange;" \n "_barrack = _check;" \n "_barracksInRange = if (isNull _check) then {false} else {true};" \n "" \n "_check = ['LIGHTTYPE',_buildings,_purchaseRange,_side,leader _team] Call BuildingInRange;" \n "_light = _check;" \n "_lightInRange = if (isNull _check) then {false} else {true};" \n "" \n "_check = ['HEAVYTYPE',_buildings,_purchaseRange,_side,leader _team] Call BuildingInRange;" \n "_heavy = _check;" \n "_heavyInRange = if (isNull _check) then {false} else {true};" \n "" \n "_check = ['AIRCRAFTTYPE',_buildings,_purchaseRange,_side,leader _team] Call BuildingInRange;" \n "_air = _check;" \n "_airInRange = if (isNull _check) then {false} else {true};" \n "" \n "_check = ['COMMANDCENTERTYPE',_buildings,_ccr,_side,leader _team] Call BuildingInRange;" \n "_ccInRange = if (isNull _check) then {false} else {true};" \n "" \n "_buildingArray = [_barrack,_light,_heavy,_air];"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Handle_Injured"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Nil { name = "Nil"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Handle_Injured"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Handle_NEURO { name = "Handle_NEURO"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Ready { priority = 0.000000; to="Update_NEURO"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _lastCheckVehicles >= 30) && !_upsmon_enabled"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Not_Ready { priority = 0.000000; to="Nil_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _lastCheckVehicles < 30) || _upsmon_enabled"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_NEURO { name = "Update_NEURO"; init = /*%FSM*/"_lastCheckVehicles = time;" \n "/*" \n "" \n "_vehicles = [_team, false] Call GetTeamVehicles;" \n "" \n "//--- Update the Path." \n "(_team) Call NEURO_BE_UpdateTeamDestination;" \n "" \n "//--- Update NEURO transportation." \n "_canAssign = true;" \n "" \n "//--- NEURO Security, AI don't need to get in when they are taking a town." \n "if (_moveMode == 'towns') then {" \n " if (leader _team distance _moveAt < 700) then {_canAssign = false};" \n "};" \n "" \n "if (_canAssign) then {[_team, getPos leader _team] Call NEURO_BE_AssignToVehicle};" \n "" \n "*/" \n "" \n "//--- AI Vehicling fix." \n "if (vehicle (leader _team) == leader _team) then {" \n " _vehicles = [_team, false] Call GetTeamVehicles;" \n " " \n " //--- Attempt to get a vehicle from the team." \n " _closest = objNull;" \n " if (count _vehicles > 0) then {" \n " _near = [leader _team, _vehicles] Call WFBE_CO_FNC_GetClosestEntity;" \n " if (alive _near && _near distance (leader _team) < 700) then {" \n " //--- Remove the pilot/driver." \n " (driver _near) setDamage 1;" \n " _closest = _near;" \n " };" \n " } else {" \n " //--- Maybe we have something empty nearby that the ai can use." \n " {" \n " if (isNil {_x getVariable ""WFBE_Taxi_Prohib""}) then {" \n " if (count (crew _x) == 0 && isNull(assignedDriver _x)) then {_closest = _x};" \n " };" \n " if !(isNull _closest) exitWith {};" \n " } forEach ((leader _team) nearEntities [[""Car"", ""Tank""], 400]);" \n " };" \n "" \n " if !(isNull _closest) then {" \n " (leader _team) assignAsDriver _closest;" \n " [leader _team] allowGetIn true; " \n " [leader _team] orderGetIn true;" \n " (leader _team) moveInDriver _closest;" \n " };" \n "} else {" \n " //--- Add vehicles to the team." \n " _vehicles = [_team, false] Call GetTeamVehicles;" \n "" \n " {_team addVehicle _x} forEach _vehicles;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Handle_Purchases"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Nil_1 { name = "Nil_1"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Handle_Purchases"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Handle_Purchases { name = "Handle_Purchases"; init = /*%FSM*/"_size = Count ((units _team) Call GetLiveUnits);" \n "_globalQueu = _team getVariable ""wfbe_queue"";" \n "if (isNil ""_globalQueu"") then {_globalQueu = []};" \n "_cpt = count _globalQueu;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Purchase { priority = 0.000000; to="Handle_Env"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_cpt + _size) <= _mbu && alive (leader _team) && time > _nextPurchase"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Skip { priority = 0.000000; to="Nil_2"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_cpt + _size) > _mbu || time <= _nextPurchase"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Nil_2 { name = "Nil_2"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Done"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Handle_Env { name = "Handle_Env"; init = /*%FSM*/"_buyType = (_team) Call GetTeamType;" \n "" \n "_teamType = _templates select _buyType;" \n "_teamRequire = _templatesRequire select _buyType;" \n "_teamUpgrade = _templatesUpgrade select _buyType;" \n "" \n "_upgrades = (_side) Call WFBE_CO_FNC_GetSideUpgrades;" \n "" \n "_barrackUpLevel = _upgrades select WFBE_UP_BARRACKS;" \n "_lightUpLevel = _upgrades select WFBE_UP_LIGHT;" \n "_heavyUpLevel = _upgrades select WFBE_UP_HEAVY;" \n "_airUpLevel = _upgrades select WFBE_UP_AIR;" \n "" \n "_upArray = [_barrackUpLevel,_lightUpLevel,_heavyUpLevel,_airUpLevel];" \n "_funds = _team Call GetTeamFunds;" \n "" \n "_canBuy = true;" \n "for '_i' from 0 to 3 do {" \n " if ((_upArray select _i) < (_teamUpgrade select _i)) then {" \n " _canBuy = false;" \n " } else {" \n " if (_teamRequire select _i) then {" \n " if (_funds < (_minCheckArray select _i)) then {" \n " _canBuy = false;" \n " };" \n " };" \n " };" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Skip { priority = 0.000000; to="Done"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_canBuy"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Continue { priority = 0.000000; to="Handle_Purchase"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_canBuy"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Done { name = "Done"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastCheck > 14;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Handle_Purchase { name = "Handle_Purchase"; init = /*%FSM*/"_nextPurchase = time + 60 + (random 120);" \n "" \n "_buyType = (_team) Call GetTeamType;" \n "if (_lastBuyType != _buyType) then {" \n " if (_buyType != -1) then {" \n " _teamType = _templates select _buyType;" \n " _teamRequire = _templatesRequire select _buyType;" \n " };" \n " _lastBuyType = _buyType;" \n "};" \n "" \n "//--- Final types." \n "_types = +_teamType;" \n "" \n "//--- Prevent class stacking, use an existing type compare system." \n "_units = (units _team) Call GetLiveUnits;" \n "_units = _units + ([_team, true] Call GetTeamVehicles);" \n "_typesU = [];" \n "{_typesU = _typesU + [typeOf _x]} forEach _units;" \n "" \n "_difference = round(_mbu / count _types);" \n "_maxAllowed = [];" \n "" \n "for '_i' from 0 to count(_types)-1 do {" \n " _type = _types select _i;" \n " //--- IMPORTANT TODO: Do the godamn ratio for each vehicle over the count of teamtypes. 4 = 20% each" \n " _maxAllowed set [_i, _difference - ({_x == _type} count _typesU)];" \n "};" \n "" \n "for '_i' from 0 to count(_maxAllowed) do {" \n " if ((_maxAllowed select _i) <= 0) then {" \n " _maxAllowed set [_i, -1];" \n " _types set [_i, -1];" \n " };" \n "};" \n "" \n "//--- We remove the unecessary types." \n "_types = _types - [-1];" \n "_maxAllowed = _maxAllowed - [-1];" \n "" \n "if (count _types > 0) then {" \n " //--- Use CIPHER module to order the array with priority." \n " _types = ([_maxAllowed, true, _types] Call CIPHER_SortArray) select 1;" \n "};" \n "" \n "//--- Define the needs." \n "_needs = [];" \n "if (_teamRequire select 0) then {_needs = _needs + [_barracksInRange]};" \n "if (_teamRequire select 1) then {_needs = _needs + [_lightInRange]};" \n "if (_teamRequire select 2) then {_needs = _needs + [_heavyInRange]};" \n "if (_teamRequire select 3) then {_needs = _needs + [_airInRange]};" \n "_canBuy = true;" \n "{if (!_x) then {_canBuy = false}} forEach _needs;" \n "" \n "//--- Team purchases." \n "if (_canBuy) then {" \n " _upgrades = (_side) Call WFBE_CO_FNC_GetSideUpgrades;" \n " {" \n " _buyFrom = objNull;" \n " _kindDetail = missionNamespace getVariable _x;" \n " if !(isNil '_kindDetail') then {" \n " _crews = _kindDetail select QUERYUNITCREW;" \n " _price = _kindDetail select QUERYUNITPRICE;" \n " _upgradeRequired = _kindDetail select QUERYUNITUPGRADE;" \n " _unitType = _kindDetail select QUERYUNITFACTORY;" \n " switch (_unitType) do {" \n " case 0: {" \n " _buyFrom = _barrack;" \n " _upgradeLevel = 0;" \n " };" \n " case 1: {" \n " _buyFrom = _light;" \n " _upgradeLevel = 1;" \n " };" \n " case 2: {" \n " _buyFrom = _heavy;" \n " _upgradeLevel = 2;" \n " };" \n " case 3: {" \n " _buyFrom = _air;" \n " _upgradeLevel = 2;" \n " };" \n " };" \n " if !(isNull _buyFrom) then {" \n " _upgradeStatus = _upgrades select _upgradeLevel;" \n " _globalQueu = +(_team getVariable ""wfbe_queue"");" \n " if (isNil ""_globalQueu"") then {_globalQueu = []};" \n " if ((count _globalQueu) + _size < _mbu && _funds > _price && _upgradeStatus >= _upgradeRequired) then {" \n " _vehiSlots = [true,false,false,false];" \n " _IDS = []; " \n " if !(_x isKindOf ""Man"") then {" \n " if (typeName _crews == ""ARRAY"") then {" \n " if (_crews select 0) then {_vehiSlots set [2, true]};" \n " if (_crews select 1) then {_vehiSlots set [1, true]};" \n " if ((_crews select 3) > 0) then {_vehiSlots set [3, true]};" \n " " \n " {" \n " _ran = round(2000 + random(10) + random (100) + random(1000));" \n " _globalQueu set [count _globalQueu, _ran];" \n " _IDS set [count _IDS, _ran];" \n " } forEach _vehiSlots;" \n " } else {" \n " if (_crews < 3 && _crews != 1) then {" \n " _ran2 = round(2000 + random(10) + random (100) + random(1000));" \n " _globalQueu = _globalQueu + [_ran2];" \n " _vehiSlots = [true,true,false];" \n " _IDS = _IDS + [_ran2];" \n " };" \n " if (_crews > 2) then {" \n " _ran2 = round(2000 + random(10) + random (100) + random(1000));" \n " _ran3 = round(2000 + random(10) + random (100) + random(1000));" \n " _globalQueu = _globalQueu + [_ran2,_ran3];" \n " _vehiSlots = [true,true,true];" \n " _IDS = _IDS + [_ran2,_ran3];" \n " };" \n " };" \n " } else {" \n " _ran = round(2000 + random(10) + random (100) + random(1000));" \n " _IDS = [_ran];" \n " _globalQueu = _globalQueu + [_ran];" \n " };" \n " [_IDS,_buyFrom,_x,_side,_team,_vehiSlots] Spawn AIBuyUnit;" \n " [_team,-_price] Call ChangeTeamFunds;" \n " _team setVariable [""wfbe_queue"", _globalQueu];" \n " };" \n " };" \n " } else {" \n " diag_log Format[""[WFBE (ERROR)][frameno:%2 | ticktime:%3] aiteam.fsm: Element %1 is not defined within the core system."",_x,diag_frameno,diag_tickTime];" \n " };" \n " } forEach _types;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Done"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Handle_Move { name = "Handle_Move"; init = /*%FSM*/"if (_moveMode == 'resetMove') then {" \n " _lastCoord = [0,0,0];" \n " [_team,'move'] Call SetTeamMoveMode;" \n "};" \n "" \n "_coord = (_team) Call GetTeamMovePos;" \n "if ((_coord select 0 != _lastCoord select 0)&&(_coord select 1 != _lastCoord select 1)) then {" \n " _lastCoord = _coord;" \n " _update = (_team) Call CanUpdateTeam;" \n " if (_update) then {_team Call UpdateTeam};" \n " [_team,true,[[_coord, 'MOVE', 40, 20, """", []]]] Call AIWPAdd;" \n "" \n " _moveAtLast = _moveAt;" \n " _moveAt = objNull;" \n " _moveAtRunning = false;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Handle_Buildings"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Handle_Patrol { name = "Handle_Patrol"; init = /*%FSM*/"if (_moveMode == 'resetPatrol') then {" \n " _lastCoord = [0,0,0];" \n " [_team,'patrol'] Call SetTeamMoveMode;" \n "};" \n "" \n "_coord = (_team) Call GetTeamMovePos;" \n "if ((_coord select 0 != _lastCoord select 0)&&(_coord select 1 != _lastCoord select 1)) then {" \n " _lastCoord = _coord;" \n " [_team,_coord,_pr] Call AIPatrol;" \n "" \n " _moveAtLast = _moveAt;" \n " _moveAt = objNull;" \n " _moveAtRunning = false;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Handle_Buildings"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Handle_Defense { name = "Handle_Defense"; init = /*%FSM*/"if (_moveMode == 'resetDefense') then {" \n " _lastCoord = [0,0,0];" \n " [_team,'defense'] Call SetTeamMoveMode;" \n "};" \n "" \n "_coord = (_team) Call GetTeamMovePos;" \n "if ((_coord select 0 != _lastCoord select 0)&&(_coord select 1 != _lastCoord select 1)) then {" \n " _lastCoord = _coord;" \n " [_team,_coord,_pr] Call AIPatrol;" \n "" \n " _moveAtLast = _moveAt;" \n " _moveAt = objNull;" \n " _moveAtRunning = false;" \n "};" \n "" \n "if (time - _defenseTime > 60) then {" \n " _defenseTime = time;" \n " [units _team,_dr] Call UseStationaryDefense;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Handle_Buildings"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Handle_Injured { name = "Handle_Injured"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Ready { priority = 0.000000; to="Update_Injured"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastCheckInjured >= 119"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Not_Ready { priority = 0.000000; to="Nil_3"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastCheckInjured < 119"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_Injured { name = "Update_Injured"; init = /*%FSM*/"_lastCheckInjured = time;" \n "" \n "_alives = (units _team) Call GetLiveUnits;" \n "" \n "{" \n " if (vehicle _x == _x) then {" \n " if !(canStand _x) then {" \n " _x playMove ""amovppnemstpsraswrfldnon_healed"";" \n " _x setDammage 0;" \n " };" \n " };" \n "} forEach _alives;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Handle_NEURO"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Nil_3 { name = "Nil_3"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Handle_NEURO"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_1 { name = "Check_1"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 1.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver || isNil ""_team"" || isNull _team"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Idle { priority = 0.000000; to="Check_2"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!gameOver && !isNull _team"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_2 { name = "Check_2"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class AI { priority = 0.000000; to="Advanced_Init"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!isPlayer (leader _team)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Player { priority = 0.000000; to="Wait"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"isPlayer (leader _team)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Wait { name = "Wait"; init = /*%FSM*/"_wait = time + 20;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Check_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _wait"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Allies_Init",0,4346,-44.418510,-87.799530,45.581596,-37.799454,0.000000,"Allies" \n "Init"}; item1[] = {"loop",4,218,-43.082561,-10.971841,46.917431,39.028156,0.000000,"loop"}; item2[] = {"Check",2,250,-190.853607,-12.100532,-100.853592,37.899467,0.000000,"Check"}; item3[] = {"done",4,218,-314.399872,-10.889294,-224.399902,39.110706,0.000000,"done"}; item4[] = {"end",1,250,-315.611145,69.052460,-225.611130,119.052437,0.000000,"end"}; link0[] = {0,1}; link1[] = {1,2}; link2[] = {2,1}; link3[] = {2,3}; link4[] = {3,4}; globals[] = {0.000000,0,0,0,0,640,480,1,23,6316128,1,-472.927826,92.799797,435.032471,-147.570496,704,700,1}; window[] = {0,-1,-1,-1,-1,985,110,1455,145,1,722}; *//*%FSM*/ class FSM { fsmName = "allies"; class States { /*%FSM*/ class Allies_Init { name = "Allies_Init"; init = /*%FSM*/"_side = _this select 0;" \n "_sideText = str _side;" \n "_sideID = (_side) Call WFBE_CO_FNC_GetSideID;" \n "_timeStart = time;" \n "" \n "_startingLocation = getPos ((_side Call WFBE_CO_FNC_GetSideLogic) getVariable ""wfbe_startpos"");" \n "_allysLoc = [_startingLocation,(startingLocations - [_startingLocation])] Call WFBE_CO_FNC_GetClosestEntity;" \n "" \n "_types = if (_side == west) then {[""CDF_WarfareBBarracks"",""CDF_WarfareBLightFactory"",""CDF_WarfareBUAVterminal"",""CDF_WarfareBHeavyFactory"",""CDF_WarfareBAircraftFactory"",""CDF_WarfareBVehicleServicePoint""]} else {[""Ins_WarfareBBarracks"",""Ins_WarfareBLightFactory"",""Ins_WarfareBUAVterminal"",""Ins_WarfareBHeavyFactory"",""Ins_WarfareBAircraftFactory"",""Ins_WarfareBVehicleServicePoint""]};" \n "_structureRelPos = [[75,75],[-75,75],[75,0],[75,-75],[-75,-75],[-75,0]];" \n "_structurePos = [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]];" \n "_structureLabel = [""B"",""L"",""C"",""H"",""A"",""S""];" \n "_alives = [];" \n "" \n "_checkNeeds = {" \n " Private [""_building"",""_canBuy"",""_needs"",""_require""];" \n " _require = _this select 0;" \n " _building = _this select 1;" \n " _needs = [];" \n " if (_require select 0) then {_needs = _needs + [alive (_building select 0)]};" \n " if (_require select 1) then {_needs = _needs + [alive (_building select 1)]};" \n " if (_require select 2) then {_needs = _needs + [alive (_building select 2)]};" \n " if (_require select 3) then {_needs = _needs + [alive (_building select 3)]};" \n " _canBuy = true;" \n " {if (!_x) then {_canBuy = false}} forEach _needs;" \n " _canBuy" \n "};" \n "" \n "for [{_count = 0},{_count < (count _types)},{_count = _count + 1}] do {" \n " _type = _types select _count;" \n " _x = getPos _allysLoc select 0;" \n " _y = getPos _allysLoc select 1;" \n " _pos = [];" \n " _pos set [0,((_structureRelPos select _count) select 0) + _x];" \n " _pos set [1,((_structureRelPos select _count) select 1) + _y];" \n " _newPos = [0,0,0];" \n " _roads = [];" \n " _continue = true;" \n " while {_continue} do {" \n " _newPos = [_pos,30,100,10,0,50,0] Call BIS_fnc_findSafePos;" \n " _roads = _newPos nearRoads 60;" \n " _isTooClose = false;" \n " {if (_x distance _newPos < 70) then {_isTooClose = true}} forEach _structurePos;" \n " if (count _roads == 0 || _isTooClose) then {_continue = false};" \n " };" \n " _structurePos set [_count, _newPos];" \n " _building = _type createVehicle (_structurePos select _count);" \n " _building setVehicleInit Format[""[this,false,%1,'%2'] ExecVM 'Client\Init\Init_BaseStructure.sqf'"",_sideID,_structureLabel select _count];" \n " processInitCommands;" \n " if (_count in [0,1,3,4]) then {_alives = _alives + [_building]};" \n "};" \n "" \n "_barrack = _alives select 0;" \n "_light = _alives select 1;" \n "_heavy = _alives select 2;" \n "_air = _alives select 3;" \n "" \n "_alliesTemplates = missionNamespace getVariable Format[""WFBE_%1ALLIESTEAMTEMPLATES"",_sideText];" \n "_alliesTemplatesRequire = missionNamespace getVariable Format[""WFBE_%1ALLIESTEAMTEMPLATEREQUIRES"",_sideText];" \n "_alliesTemplatesTypes = missionNamespace getVariable Format[""WFBE_%1ALLIESTEAMTYPES"",_sideText];" \n "_alliesTemplatesCost = missionNamespace getVariable Format[""WFBE_%1ALLIESTEAMCOST"",_sideText];" \n "" \n "_barracksTemplate = [];" \n "_lightTemplate = [];" \n "_heavyTemplate = [];" \n "_airTemplate = [];" \n "_o = 0;" \n "{" \n " if (_alliesTemplatesTypes select _o == 0) then {_barracksTemplate = _barracksTemplate + [_o]};" \n " if (_alliesTemplatesTypes select _o == 1) then {_lightTemplate = _lightTemplate + [_o]};" \n " if (_alliesTemplatesTypes select _o == 2) then {_heavyTemplate = _heavyTemplate + [_o]};" \n " if (_alliesTemplatesTypes select _o == 3) then {_airTemplate = _airTemplate + [_o]};" \n " _o = _o + 1;" \n "} forEach _alliesTemplates;" \n "" \n "WF_Logic setVariable [Format[""%1TeamInfA"",_sideText],false];" \n "WF_Logic setVariable [Format[""%1TeamInfB"",_sideText],false];" \n "WF_Logic setVariable [Format[""%1TeamVehA"",_sideText],false];" \n "WF_Logic setVariable [Format[""%1TeamHVehA"",_sideText],false];" \n "WF_Logic setVariable [Format[""%1TeamAVehA"",_sideText],false];" \n "" \n "_minInfFunds = 2000;" \n "_minLightFunds = 5000;" \n "_minHeavyFunds = 8000;" \n "_minAirFunds = 40000;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class loop { priority = 0.000000; to="Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!gameOver && time - _timeStart > 60"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check { name = "Check"; init = /*%FSM*/"_timeStart = time;" \n "" \n "_funds = Call Compile Format [""%1AlliesFunds"",_sideText];" \n "" \n "_teamInfAAlive = WF_Logic getVariable Format[""%1TeamInfA"",_sideText];" \n "_teamInfBAlive = WF_Logic getVariable Format[""%1TeamInfB"",_sideText];" \n "_teamVehAAlive = WF_Logic getVariable Format[""%1TeamVehA"",_sideText];" \n "_teamHVehAAlive = WF_Logic getVariable Format[""%1TeamHVehA"",_sideText];" \n "_teamAVehAAlive = WF_Logic getVariable Format[""%1TeamAVehA"",_sideText];" \n "" \n "if (!_teamInfAAlive) then {" \n " if (_funds > _minInfFunds) then {" \n " _ranTemp = _barracksTemplate select round(random((count _barracksTemplate)-1));" \n " _templateToUse = _alliesTemplates select _ranTemp;" \n " _templateRequire = _alliesTemplatesRequire select _ranTemp;" \n " _templateCost = _alliesTemplatesCost select _ranTemp;" \n " " \n " _canBuy = [_templateRequire,_alives] Call _checkNeeds;" \n " " \n " if (_funds > _templateCost && _canBuy) then {" \n " Call Compile Format [""%1AlliesFunds = %1AlliesFunds - _templateCost"",_sideText];" \n " _funds = Call Compile Format [""%1AlliesFunds"",_sideText];" \n " [_side,_templateToUse,_templateRequire,_alives,Format[""%1TeamInfA"",_sideText]] ExecFSM ""Server\FSM\allies_team.fsm"";" \n " WF_Logic setVariable [Format[""%1TeamInfA"",_sideText],true];" \n " };" \n " };" \n "};" \n "" \n "if (!_teamInfBAlive) then {" \n " if (_funds > _minInfFunds) then {" \n " _ranTemp = _barracksTemplate select round(random((count _barracksTemplate)-1));" \n " _templateToUse = _alliesTemplates select _ranTemp;" \n " _templateRequire = _alliesTemplatesRequire select _ranTemp;" \n " _templateCost = _alliesTemplatesCost select _ranTemp;" \n " " \n " _canBuy = [_templateRequire,_alives] Call _checkNeeds;" \n " " \n " if (_funds > _templateCost && _canBuy) then {" \n " Call Compile Format [""%1AlliesFunds = %1AlliesFunds - _templateCost"",_sideText];" \n " _funds = Call Compile Format [""%1AlliesFunds"",_sideText];" \n " [_side,_templateToUse,_templateRequire,_alives,Format[""%1TeamInfB"",_sideText]] ExecFSM ""Server\FSM\allies_team.fsm"";" \n " WF_Logic setVariable [Format[""%1TeamInfB"",_sideText],true];" \n " };" \n " };" \n "};" \n "" \n "if (!_teamVehAAlive) then {" \n " if (_funds > _minLightFunds) then {" \n " _ranTemp = _lightTemplate select round(random((count _lightTemplate)-1));" \n " _templateToUse = _alliesTemplates select _ranTemp;" \n " _templateRequire = _alliesTemplatesRequire select _ranTemp;" \n " _templateCost = _alliesTemplatesCost select _ranTemp;" \n " " \n " _canBuy = [_templateRequire,_alives] Call _checkNeeds;" \n " " \n " if (_funds > _templateCost && _canBuy) then {" \n " Call Compile Format [""%1AlliesFunds = %1AlliesFunds - _templateCost"",_sideText];" \n " _funds = Call Compile Format [""%1AlliesFunds"",_sideText];" \n " [_side,_templateToUse,_templateRequire,_alives,Format[""%1TeamVehA"",_sideText]] ExecFSM ""Server\FSM\allies_team.fsm"";" \n " WF_Logic setVariable [Format[""%1TeamVehA"",_sideText],true];" \n " };" \n " };" \n "};" \n "" \n "if (!_teamHVehAAlive) then {" \n " if (_funds > _minHeavyFunds) then {" \n " _ranTemp = _heavyTemplate select round(random((count _heavyTemplate)-1));" \n " _templateToUse = _alliesTemplates select _ranTemp;" \n " _templateRequire = _alliesTemplatesRequire select _ranTemp;" \n " _templateCost = _alliesTemplatesCost select _ranTemp;" \n " " \n " _canBuy = [_templateRequire,_alives] Call _checkNeeds;" \n "" \n " if (_funds > _templateCost && _canBuy) then {" \n " Call Compile Format [""%1AlliesFunds = %1AlliesFunds - _templateCost"",_sideText];" \n " _funds = Call Compile Format [""%1AlliesFunds"",_sideText];" \n " [_side,_templateToUse,_templateRequire,_alives,Format[""%1TeamHVehA"",_sideText]] ExecFSM ""Server\FSM\allies_team.fsm"";" \n " WF_Logic setVariable [Format[""%1TeamHVehA"",_sideText],true];" \n " };" \n " };" \n "};" \n "" \n "if (!_teamAVehAAlive) then {" \n " if (_funds > _minAirFunds) then {" \n " _ranTemp = _airTemplate select round(random((count _airTemplate)-1));" \n " _templateToUse = _alliesTemplates select _ranTemp;" \n " _templateRequire = _alliesTemplatesRequire select _ranTemp;" \n " _templateCost = _alliesTemplatesCost select _ranTemp;" \n " " \n " _canBuy = [_templateRequire,_alives] Call _checkNeeds;" \n " " \n " if (_funds > _templateCost && _canBuy) then {" \n " Call Compile Format [""%1AlliesFunds = %1AlliesFunds - _templateCost"",_sideText];" \n " _funds = Call Compile Format [""%1AlliesFunds"",_sideText];" \n " [_side,_templateToUse,_templateRequire,_alives,Format[""%1TeamAVehA"",_sideText]] ExecFSM ""Server\FSM\allies_team.fsm"";" \n " WF_Logic setVariable [Format[""%1TeamAVehA"",_sideText],true];" \n " };" \n " };" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class done { priority = 0.000000; to="end"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver || ({alive _x} count _alives) == 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class loop { priority = 0.000000; to="Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!gameOver && time - _timeStart > 60"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class end { name = "end"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ }; initState="Allies_Init"; finalStates[] = { "end", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Allies_Init",0,4346,-44.418510,-87.799530,45.581596,-37.799454,0.000000,"Allies" \n "Init"}; item1[] = {"loop",4,218,-43.082561,-10.971841,46.917431,39.028156,0.000000,"loop"}; item2[] = {"Check",2,250,-190.853607,-12.100532,-100.853592,37.899467,0.000000,"Check"}; item3[] = {"done",4,218,-314.399872,-10.889294,-224.399902,39.110706,0.000000,"done"}; item4[] = {"end",1,250,-315.611145,69.052460,-225.611130,119.052437,0.000000,"end"}; link0[] = {0,1}; link1[] = {1,2}; link2[] = {2,1}; link3[] = {2,3}; link4[] = {3,4}; globals[] = {0.000000,0,0,0,0,640,480,1,23,6316128,1,-440.874512,60.746586,402.023224,-114.561028,704,695,1}; window[] = {0,-1,-1,-1,-1,940,100,1445,100,1,722}; *//*%FSM*/ class FSM { fsmName = "allies_team"; class States { /*%FSM*/ class Allies_Init { name = "Allies_Init"; init = /*%FSM*/"_side = _this select 0;" \n "_template = _this select 1;" \n "_templateRequire = _this select 2;" \n "_buildings = _this select 3;" \n "_status = _this select 4;" \n "" \n "_barrack = _buildings select 0;" \n "_light = _buildings select 1;" \n "_heavy = _buildings select 2;" \n "_air = _buildings select 3;" \n "" \n "_destination = objNull;" \n "_lastDestination = objNull;" \n "_orderComplete = true;" \n "_timeStart = time;" \n "_end = false;" \n "" \n "_team = createGroup _side;" \n "" \n "{" \n " _buyFrom = objNull;" \n " _kindDetail = missionNamespace getVariable _x;" \n " _crews = _kindDetail select QUERYUNITCREW;" \n " _unitType = _kindDetail select QUERYUNITFACTORY;" \n " switch (_unitType) do {" \n " case 0: {" \n " _buyFrom = _barrack;" \n " };" \n " case 1: {" \n " _buyFrom = _light;" \n " };" \n " case 2: {" \n " _buyFrom = _heavy;" \n " };" \n " case 3: {" \n " _buyFrom = _air;" \n " };" \n " };" \n " if !(isNull _buyFrom) then {" \n " _vehiSlots = [true,false,false,false];" \n " _IDS = []; " \n " if !(_x isKindOf ""Man"") then {" \n " if (typeName _crews == ""ARRAY"") then {" \n " if (_crews select 0) then {_vehiSlots set [2, true]};" \n " if (_crews select 1) then {_vehiSlots set [1, true]};" \n " if ((_crews select 3) > 0) then {_vehiSlots set [3, true]};" \n " " \n " {" \n " _ran = 2000 + random(10) + random (100) + random(1000);" \n " _IDS set [count _IDS, _ran];" \n " } forEach _vehiSlots;" \n " } else {" \n " if (_crews < 3 && _crews != 1) then {" \n " _ran2 = 2000 + random(10) + random (100) + random(1000);" \n " _vehiSlots = [true,true,false];" \n " _IDS = _IDS + [_ran2];" \n " };" \n " if (_crews > 2) then {" \n " _ran2 = 2000 + random(10) + random (100) + random(1000);" \n " _ran3 = 2000 + random(10) + random (100) + random(1000);" \n " _vehiSlots = [true,true,true];" \n " _IDS = _IDS + [_ran2] + [_ran3];" \n " };" \n " };" \n " };" \n " [_IDS,_buyFrom,_x,_side,_team,_vehiSlots] Spawn AlliesBuyUnit;" \n " };" \n "} forEach _template;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class loop { priority = 0.000000; to="Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_end && time - _timeStart > 120 && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check { name = "Check"; init = /*%FSM*/"_timeStart = time;" \n "" \n "_alives = (units _team) Call GetLiveUnits;" \n "_end = if (count _alives > 0) then {false} else {true};" \n "" \n "if ((leader _team) distance _destination < 30) then {" \n " _locationSide = (_destination getVariable ""sideID"") Call GetSideFromID;" \n " if (_locationSide == _side) then {_orderComplete = true;_lastDestination = _destination};" \n "};" \n "if (((_destination getVariable ""sideID"") Call GetSideFromID) == _side) then {_orderComplete = true;_lastDestination = _destination};" \n "if (!isNull(_lastDestination)) then {if (((_lastDestination getVariable ""sideID"") Call GetSideFromID) != _side) then {_orderComplete = true}};" \n "" \n "if (_orderComplete) then {" \n " _destinations = [];" \n " {" \n " _locationSide = (_x getVariable ""sideID"") Call GetSideFromID;" \n " if (_locationSide != _side) then {_destinations = _destinations + [_x]};" \n " } forEach towns;" \n " if (count _destinations > 0) then {" \n " _orderComplete = false;" \n " _destination = [leader _team,_destinations] Call WFBE_CO_FNC_GetClosestEntity;" \n " [_team,_destination,""move""] Call AIMoveTo;" \n " };" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class done { priority = 0.000000; to="end"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver || _end"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class loop { priority = 0.000000; to="Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_end && time - _timeStart > 120 && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class end { name = "end"; init = /*%FSM*/"WF_Logic setVariable [_status,false];"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ }; initState="Allies_Init"; finalStates[] = { "end", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,4346,-81.542984,-257.577942,8.457038,-207.578140,0.000000,"Init"}; item1[] = {"End",1,250,-216.387955,-52.508366,-126.387947,-2.508394,0.000000,"End"}; item2[] = {"Update_Areas",2,250,-82.090652,-139.314026,7.909359,-89.314034,0.000000,"Update Areas"}; item3[] = {"Loop",4,218,53.846153,-139.681244,143.846161,-89.681236,0.000000,"Loop"}; item4[] = {"Gameover",4,218,-216.387955,-139.464890,-126.387947,-89.464890,0.000000,"Gameover"}; item5[] = {"_",8,218,-51.736092,-184.192123,-21.083296,-163.272247,0.000000,""}; link0[] = {0,5}; link1[] = {2,3}; link2[] = {2,4}; link3[] = {3,2}; link4[] = {4,1}; link5[] = {5,2}; globals[] = {0.000000,0,0,0,0,640,480,1,8,6316128,1,-450.330200,450.329834,163.072220,-391.043060,721,592,1}; window[] = {0,-1,-1,-1,-1,912,175,1588,175,1,739}; *//*%FSM*/ class FSM { fsmName = "basearea"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_brr = missionNamespace getVariable ""WFBE_C_BASE_AREA_RANGE"";" \n "_mbr = missionNamespace getVariable ""WFBE_C_BASE_HQ_BUILD_RANGE"";" \n "" \n "_onAreaRemoved = {" \n " Private [""_areas"", ""_center"", ""_delete"", ""_objects"", ""_side""];" \n " _center = _this select 0;" \n " _side = _this select 1;" \n " _areas = _this select 2;" \n " " \n " _objects = nearestObjects [_center, missionNamespace getVariable Format[""WFBE_%1DEFENSENAMES"", _side], (missionNamespace getVariable ""WFBE_C_BASE_AREA_RANGE"") + (missionNamespace getVariable ""WFBE_C_BASE_HQ_BUILD_RANGE"")];" \n " {_objects = _objects - (nearestObjects [getPos _x, missionNamespace getVariable Format[""WFBE_%1DEFENSENAMES"", _side], (missionNamespace getVariable ""WFBE_C_BASE_AREA_RANGE"") + (missionNamespace getVariable ""WFBE_C_BASE_HQ_BUILD_RANGE"")])} forEach _areas;" \n " " \n " sleep 240;" \n " " \n " {" \n " if !(isNil {_x getVariable ""wfbe_defense""}) then {" \n " _delete = true;" \n " if (_x isKindOf ""StaticWeapon"") then {" \n " _unit = gunner _x;" \n " if (alive _unit) then {" \n " if (isNil {(group _unit) getVariable ""wfbe_funds""}) then {" \n " _unit setPos (getPos _x);" \n " deleteVehicle _unit;" \n " } else {" \n " _delete = false;" \n " };" \n " };" \n " };" \n " if (_delete) then {deleteVehicle _x};" \n " };" \n " } forEach _objects;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Update_Areas"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Update_Areas { name = "Update_Areas"; init = /*%FSM*/"_lastUpdate = time;" \n "" \n "{" \n " _side = _x;" \n " _logik = (_side) Call WFBE_CO_FNC_GetSideLogic;" \n " _buildings = (_side Call WFBE_CO_FNC_GetSideStructures) + [_side Call WFBE_CO_FNC_GetSideHQ];" \n " " \n " _areas_old = _logik getVariable ""wfbe_basearea"";" \n " _areas = _areas_old;" \n " " \n " {" \n " _structure = [_x, _buildings] Call WFBE_CO_FNC_GetClosestEntity;" \n " if (!isNull _structure) then {" \n " if (_structure distance _x > (_brr + _mbr)) then {" \n " //--- On deletion, remove the statics/defenses later." \n " [getPos _x, _side, _areas_old] Spawn _onAreaRemoved;" \n " _areas = _areas - [_x] - [objNull];" \n " _grp = group _x;" \n " deleteVehicle _x;" \n " deleteGroup _grp;" \n " };" \n " };" \n " } forEach _areas_old;" \n " " \n " if (count _areas_old != count _areas) then {" \n " _logik setVariable [""wfbe_basearea"", _areas, true];" \n " };" \n "} forEach WFBE_PRESENTSIDES;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Update_Areas"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!gameOver && time - _lastUpdate > 30"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init_Patrol",0,250,-55.645832,-232.443039,34.354168,-182.443039,0.000000,"Init Patrol"}; item1[] = {"_",8,218,-27.486687,-147.637543,6.009465,-118.394058,0.000000,""}; item2[] = {"Building_Status",2,250,-55.764599,-83.906609,34.235420,-33.906616,0.000000,"Building" \n "Status"}; item3[] = {"Alive",4,218,-57.270676,3.753643,32.729324,53.753662,1.000000,"Alive"}; item4[] = {"Dead",4,218,75.014023,-81.237984,165.014221,-31.238003,0.000000,"Dead"}; item5[] = {"Worth__defending",2,250,201.740265,-81.387749,291.740295,-31.387749,0.000000,"Worth" \n " defending?"}; item6[] = {"Yes",4,218,200.643723,38.075150,290.643738,88.075134,1.000000,"Yes"}; item7[] = {"No",4,218,328.454315,-81.330719,418.454376,-31.330761,0.000000,"No"}; item8[] = {"Exit_Patrol",1,250,453.130798,-80.331696,543.130859,-30.331718,0.000000,"Exit Patrol"}; item9[] = {"Status",2,250,206.126862,235.996475,296.126648,285.996338,0.000000,"Status"}; item10[] = {"Wait",4,218,-234.715958,235.996490,-144.715927,285.996399,1.000000,"Wait"}; item11[] = {"Game_Over",4,218,454.348022,235.593781,544.348022,285.593781,0.000000,"Game Over"}; item12[] = {"Teams_Status",2,250,-55.966236,80.275879,34.033779,130.275909,0.000000,"Teams Status"}; item13[] = {"Skip",4,218,137.039566,80.103676,227.039597,130.103638,0.000000,"Skip"}; item14[] = {"Spawning",4,218,-54.869621,155.942947,35.130379,205.942947,1.000000,"Spawning"}; item15[] = {"Spawn",2,4346,71.483360,157.670105,161.483368,207.670105,0.000000,"Spawn"}; item16[] = {"_",8,218,101.881767,227.152191,135.427612,252.182098,0.000000,""}; link0[] = {0,1}; link1[] = {1,2}; link2[] = {2,3}; link3[] = {2,4}; link4[] = {3,12}; link5[] = {4,5}; link6[] = {5,6}; link7[] = {5,7}; link8[] = {6,9}; link9[] = {7,8}; link10[] = {9,10}; link11[] = {9,11}; link12[] = {10,2}; link13[] = {11,8}; link14[] = {12,13}; link15[] = {12,14}; link16[] = {13,9}; link17[] = {14,15}; link18[] = {15,16}; link19[] = {16,9}; globals[] = {0.000000,0,0,0,0,640,480,1,61,6316128,1,-237.753174,574.318604,329.754883,-285.270081,640,515,1}; window[] = {0,-1,-1,-1,-1,835,200,1499,200,1,658}; *//*%FSM*/ class FSM { fsmName = "basepatrol"; class States { /*%FSM*/ class Init_Patrol { name = "Init_Patrol"; init = /*%FSM*/"_building = _this select 0;" \n "_side = _this select 1;" \n "" \n "_posBuilding = getPos _building;" \n "" \n "_lastCheck = 0;" \n "_teams = [];" \n "_maxTeams = missionNamespace getVariable ""WFBE_C_BASE_PATROLS_INFANTRY"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Building_Status"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Building_Status { name = "Building_Status"; init = /*%FSM*/"_aliveTeams = _teams;" \n "{" \n " _alives = (units _x) Call GetLiveUnits;" \n " if (count _alives < 1 || isNull _x) then {" \n " _aliveTeams = _aliveTeams - [_x] - [objNull];" \n " };" \n "} forEach _teams;" \n "_teams = _aliveTeams;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Alive { priority = 1.000000; to="Teams_Status"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"alive _building"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Dead { priority = 0.000000; to="Worth__defending"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"isNull _building || !(alive _building)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Worth__defending { name = "Worth__defending"; init = /*%FSM*/"_buildings = (_side) Call WFBE_CO_FNC_GetSideStructures;" \n "_sorted = [_posBuilding, _buildings] Call WFBE_CO_FNC_GetClosestEntity;" \n "" \n "_nearby = false;" \n "if (!isNull _sorted) then {" \n " if (_sorted distance _posBuilding < 400) then {_nearby = true};" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Yes { priority = 1.000000; to="Status"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_nearby"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class No { priority = 0.000000; to="Exit_Patrol"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_nearby"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Exit_Patrol { name = "Exit_Patrol"; init = /*%FSM*/"{" \n " _group = _x;" \n " {" \n " deleteVehicle _x;" \n " } forEach (units _x);" \n "" \n " deleteGroup _group;" \n "} forEach _teams;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Status { name = "Status"; init = /*%FSM*/"_lastCheck = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Wait { priority = 1.000000; to="Building_Status"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastCheck > 300 && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Game_Over { priority = 0.000000; to="Exit_Patrol"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Teams_Status { name = "Teams_Status"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Spawning { priority = 1.000000; to="Spawn"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"count _teams < _maxTeams"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Skip { priority = 0.000000; to="Status"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"count _teams >= _maxTeams"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Spawn { name = "Spawn"; init = /*%FSM*/"_group = createGroup _side;" \n "" \n "_currentUpgrades = (_side) Call WFBE_CO_FNC_GetSideUpgrades;" \n "_currentLevel = _currentUpgrades select WFBE_UP_GEAR;" \n "" \n "if (count _teams > 1) then {" \n " _currentLevel = round(random(_currentLevel));" \n "};" \n "" \n "[_building,_side,_group,missionNamespace getVariable Format['WFBE_%1BASEPATROLS_%2',_side,_currentLevel]] Spawn {" \n " Private ['_direction','_distance','_group','_index','_position','_side','_site','_type','_units'];" \n " _site = _this select 0;" \n " _side = _this select 1;" \n " _group = _this select 2;" \n " _units = _this select 3;" \n " " \n " _type = typeOf _site;" \n " _index = (missionNamespace getVariable Format[""WFBE_%1STRUCTURENAMES"",str _side]) find _type;" \n " _distance = (missionNamespace getVariable Format[""WFBE_%1STRUCTUREDISTANCES"",str _side]) select _index;" \n " _direction = (missionNamespace getVariable Format[""WFBE_%1STRUCTUREDIRECTIONS"",str _side]) select _index;" \n " _position = [getPos _site,_distance,getDir _site + _direction] Call GetPositionFrom;" \n " " \n " _created = 0;" \n " " \n " {" \n " if (alive _site) then {" \n " if (_x isKindOf 'Man') then {" \n " sleep 7;" \n " _soldier = [_x,_group,_position,_side] Call WFBE_CO_FNC_CreateUnit;" \n " _created = _created + 1;" \n " };" \n " };" \n " } forEach _units;" \n " " \n " if (_created > 0) then {" \n " _built = WF_Logic getVariable Format [""%1UnitsCreated"",str _side];" \n " _built = _built + 1;" \n " WF_Logic setVariable [Format[""%1UnitsCreated"",str _side],_built,true];" \n " [str _side,'UnitsCreated',_built] Call UpdateStatistics;" \n " [_group,_site,missionNamespace getVariable ""WFBE_C_AI_PATROL_RANGE""] Spawn AIPatrol;" \n " };" \n "};" \n "" \n "_teams = _teams + [_group];"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Status"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init_Patrol"; finalStates[] = { "Exit_Patrol", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,53.240814,-221.988968,143.240845,-171.989166,0.000000,"Init"}; item1[] = {"End",1,250,-216.387955,-52.508366,-126.387947,-2.508394,0.000000,"End"}; item2[] = {"Update_Conquest",2,4346,-82.090652,-139.314026,7.909359,-89.314034,0.000000,"Update" \n "Conquest"}; item3[] = {"Loop",4,218,53.846153,-139.681244,143.846161,-89.681236,0.000000,"Loop"}; item4[] = {"Gameover",4,218,-216.387955,-139.464890,-126.387947,-89.464890,0.000000,"Gameover"}; link0[] = {0,3}; link1[] = {2,3}; link2[] = {2,4}; link3[] = {3,2}; link4[] = {4,1}; globals[] = {0.000000,0,0,0,0,640,480,1,8,6316128,1,-348.696411,348.696136,79.849762,-328.514618,654,592,1}; window[] = {0,-1,-1,-1,-1,812,75,1488,75,1,672}; *//*%FSM*/ class FSM { fsmName = "conquest"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_ntime = 0;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Update_Conquest"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _ntime"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Update_Conquest { name = "Update_Conquest"; init = /*%FSM*/"{" \n " _side = _x;" \n " _towns = (_side) Call WFBE_CO_FNC_GetSideTowns;" \n " _sideID = (_side) Call WFBE_CO_FNC_GetSideID;" \n " _set = [];" \n " " \n " //--- Check if this side has any towns, otherwise we use the HQ as a reference." \n " if (count _towns > 0) then {" \n " {" \n " _neighbors = _x getVariable ""wfbe_town_neighbors"";" \n " if !(isNil ""_neighbors"") then {" \n " {" \n " if ((_x getVariable ""sideID"") != _sideID) then {" \n " if !(_x getVariable Format[""wfbe_town_capturable_%1"", _side]) then {_x setVariable [Format[""wfbe_town_capturable_%1"", _side], true]};" \n " if !(_x in _set) then {_set = _set + [_x]};" \n " };" \n " } forEach _neighbors;" \n " };" \n " } forEach _towns;" \n " } else {" \n " _hq = (_side) Call WFBE_CO_FNC_GetSideHQ;" \n " _nearest = [_hq, towns] Call WFBE_CO_FNC_GetClosestEntity;" \n " if !(_nearest getVariable Format[""wfbe_town_capturable_%1"", _side]) then {_nearest setVariable [Format[""wfbe_town_capturable_%1"", _side], true]};" \n " _set = [_nearest];" \n " };" \n " " \n " _set = towns - _set;" \n " {" \n " if (_x getVariable Format[""wfbe_town_capturable_%1"", _side]) then {_x setVariable [Format[""wfbe_town_capturable_%1"", _side], false]};" \n " } forEach _set;" \n "} forEach WFBE_PRESENTSIDES;" \n "" \n "_ntime = time + 10;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Update_Conquest"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _ntime"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,69.011497,-125.277687,159.011566,-75.277672,0.000000,"Init"}; item1[] = {"Update_Empty_Veh",2,4346,67.881363,24.571560,157.881256,74.571510,0.000000,"Update" \n "Empty" \n "Vehicles"}; item2[] = {"End",1,250,-62.454956,96.990730,27.545134,146.990707,0.000000,"End"}; item3[] = {"Loop",4,218,68.212364,-51.053558,158.212402,-1.053517,0.000000,"Loop"}; item4[] = {"Gameover",4,218,-62.855103,24.549839,27.144907,74.549820,0.000000,"Gameover"}; link0[] = {0,3}; link1[] = {1,3}; link2[] = {1,4}; link3[] = {3,1}; link4[] = {4,2}; globals[] = {0.000000,0,0,0,0,640,480,1,19,6316128,1,-421.780701,421.779755,226.237854,-325.234192,748,514,1}; window[] = {0,-1,-1,-1,-1,837,154,1414,203,1,766}; *//*%FSM*/ class FSM { fsmName = "emptyvehiclescollector"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Update_Empty_Veh"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 1 && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_Empty_Veh { name = "Update_Empty_Veh"; init = /*%FSM*/"_vehicles = WF_Logic getVariable ""emptyVehicles"";" \n "{" \n " if !(_x in emptyQueu) then {" \n " _vehicles2 = WF_Logic getVariable ""emptyVehicles"";" \n " emptyQueu = emptyQueu + [_x];" \n " _x Spawn HandleEmptyVehicle;" \n " _reloaded = _vehicles2 - [_x] - [objNull];" \n " WF_Logic setVariable [""emptyVehicles"",_reloaded,true];" \n " };" \n "} forEach _vehicles;" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Update_Empty_Veh"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 1 && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,4346,150.000000,-475.000000,250.000000,-425.000000,0.000000,"Init"}; item1[] = {"Loop",4,218,150.000000,-375.000000,250.000000,-325.000000,0.000000,"Loop"}; item2[] = {"End",1,250,150.000000,-75.000000,250.000000,-25.000000,0.000000,"End"}; item3[] = {"Time",2,250,150.000000,-275.000000,250.000000,-225.000000,0.000000,"Time"}; item4[] = {"Gameover",4,218,150.000000,-175.000000,250.000000,-125.000000,0.000000,"Gameover"}; link0[] = {0,1}; link1[] = {1,3}; link2[] = {3,1}; link3[] = {3,4}; link4[] = {4,2}; globals[] = {25.000000,1,0,0,0,640,480,1,38,6316128,1,-366.140930,481.526276,9.508422,-578.645630,655,489,1}; window[] = {0,-1,-1,-1,-1,809,175,1435,175,1,673}; *//*%FSM*/ class FSM { fsmName = "env_fast_time.fsm"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"/*" \n " Fast Time calculation Formula:" \n " For (Real Life Hour) = (24 Hours Ingame)." \n " > ((((86400/((Real Life Hour)*60*60))*86400)/24/60)/60) * (skipTime Delay) = Needed skipped time." \n " > ((((86400/((1)*60*60))*86400)/24/60)/60) * (2) = 48 >> To have 1H = 24H we need to skipTime 48 seconds each 3 seconds." \n "*/" \n "" \n "_snap = 0;" \n "" \n "_ft = (missionNamespace getVariable ""WFBE_C_ENVIRONMENT_FAST_TIME"")/3600;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Time"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Time { name = "Time"; init = /*%FSM*/"skipTime _ft;" \n "" \n "WFBE_SERVERDATE = date;" \n "publicVariable ""WFBE_SERVERDATE"";" \n "" \n "_snap = time + 2;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Time"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,50.000000,-225.000000,150.000000,-175.000000,0.000000,"Init"}; item1[] = {"End",1,250,-250.000000,-25.000000,-150.000000,25.000000,0.000000,"End"}; item2[] = {"Update_Weather",2,250,-100.000000,-125.000000,0.000000,-75.000000,0.000000,"Update Weather"}; item3[] = {"Loop",4,4314,50.000000,-125.000000,150.000000,-75.000000,0.000000,"Loop"}; item4[] = {"Gameover",4,218,-250.000000,-125.000000,-150.000000,-75.000000,0.000000,"Gameover"}; link0[] = {0,3}; link1[] = {2,3}; link2[] = {2,4}; link3[] = {3,2}; link4[] = {4,1}; globals[] = {25.000000,1,0,0,0,640,480,1,8,6316128,1,-394.886322,302.506226,37.445877,-370.918488,921,592,1}; window[] = {0,-1,-1,-1,-1,762,25,1438,25,1,939}; *//*%FSM*/ class FSM { fsmName = "env_weather"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"WF_Logic setVariable [""overCast"", random 1,true];" \n "_overcast_delay = missionNamespace getVariable ""WFBE_C_ENVIRONMENT_WEATHER_TRANSITION"";" \n "_delay = (_overcast_delay * 2) + 100;" \n "" \n "_snap = -10000;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Update_Weather"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Update_Weather { name = "Update_Weather"; init = /*%FSM*/"_overCast = random 1;" \n "if (isDedicated) then {_overcast_delay setOvercast _overCast};" \n "WF_Logic setVariable [""overCast"",_overCast,true];" \n "" \n "_snap = time + _delay;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Update_Weather"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,-75.000000,-325.000000,25.000000,-275.000000,0.000000,"Init"}; item1[] = {"End",1,250,-75.000000,75.000000,25.000000,125.000000,0.000000,"End"}; item2[] = {"Check_Missions",2,250,-75.000000,-125.000000,25.000000,-75.000000,0.000000,"Check Missions"}; item3[] = {"Loop",4,218,-75.000000,-225.000000,25.000000,-175.000000,0.000000,"Loop"}; item4[] = {"Gameover",4,218,-75.000000,-25.000000,25.000000,25.000000,0.000000,"Gameover"}; item5[] = {"Assign_a_Mission",2,4346,-225.000000,-225.000000,-125.000000,-175.000000,0.000000,"Assign a" \n "Mission"}; item6[] = {"Cannot_Create",4,218,75.000000,-125.000000,175.000000,-75.000000,0.000000,"Cannot" \n "Create"}; item7[] = {"Can_Create",4,218,-225.000000,-125.000000,-125.000000,-75.000000,0.000000,"Can" \n "Create"}; item8[] = {"Skip",2,250,75.000000,-225.000000,175.000000,-175.000000,0.000000,"Skip"}; link0[] = {0,3}; link1[] = {2,4}; link2[] = {2,6}; link3[] = {2,7}; link4[] = {3,2}; link5[] = {4,1}; link6[] = {5,3}; link7[] = {6,8}; link8[] = {7,5}; link9[] = {8,3}; globals[] = {25.000000,1,0,0,0,640,480,1,19,6316128,1,-341.992493,398.498718,171.784286,-353.840118,834,592,1}; window[] = {0,-1,-1,-1,-1,862,125,1538,125,1,852}; *//*%FSM*/ class FSM { fsmName = "missions"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_maxmissionswest = missionNamespace getVariable 'WFBE_MISSIONSMAXIMUM_WEST';" \n "_maxmissionseast = missionNamespace getVariable 'WFBE_MISSIONSMAXIMUM_EAST';" \n "_randomizer = missionNamespace getVariable 'WFBE_MISSIONSRANDOMIZER';" \n "_timeout = missionNamespace getVariable 'WFBE_MISSIONSTIMEOUT';" \n "_canReuseAfter = missionNamespace getVariable 'WFBE_MISSIONSREUSABILITY';" \n "_totalMissions = count(missionNamespace getVariable 'WFBE_M_CONTENT');" \n "" \n "_lastUpdate = 0;" \n "_lastMissionAssignedTime = -6000;" \n "_lastMissionsIndex = [];" \n "{missionNamespace setVariable [Format['_WFBE_M_RUNNINGMISSIONS_%1', _x], 0]} forEach WFBE_PRESENTSIDES;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check_Missions"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!gameOver && time - _lastUpdate > 30"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Check_Missions { name = "Check_Missions"; init = /*%FSM*/"_lastUpdate = time;" \n "" \n "_canAssign = Call WFBE_SE_MOD_Missions_CanAssign;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Cannot_Create { priority = 0.000000; to="Skip"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_canAssign || !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Can_Create { priority = 0.000000; to="Assign_a_Mission"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!gameOver && time - _lastMissionAssignedTime >= _timeout && _canAssign"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Assign_a_Mission { name = "Assign_a_Mission"; init = /*%FSM*/"//--- Retrieve an updated version of the missions array." \n "_missions = missionNamespace getVariable 'WFBE_M_CONTENT';" \n "_missionAssigned = false;" \n "" \n "//--- Retrieve a 'free' mission." \n "_i = -1;" \n "while {_i < 0} do {" \n " _r = floor(random _totalMissions);" \n " if !(_r in _lastMissionsIndex) then {_i = _r};" \n "};" \n "" \n "//--- Retrieve the current mission content." \n "_mission = (_missions select _i);" \n "" \n "//--- Can the mission run?" \n "_get = (_mission) Call WFBE_SE_MOD_Missions_CanRun;" \n "_go = _get select 0;" \n "_sides = _get select 1;" \n "" \n "//--- Go?" \n "if (_go) then {" \n " [_mission select 2,_mission select 3,_sides] ExecVM (_mission select 1);" \n "" \n " //--- Randomize the next mission delay." \n " _lastMissionAssignedTime = (time)+random(_randomizer)-random(_randomizer);" \n "" \n " //--- Increment Mission index (it will apply to the getter, no need to set again)." \n " _mission set [3,(_mission select 3) + 1];" \n "" \n " //--- Push (i.e limit 4, [1,2,3,4] add 5 >> [5,1,2,3])." \n " for [{_z = (count _lastMissionsIndex)},{_z > 0},{_z = _z - 1}] do {" \n " _lastMissionsIndex set [_z, (_lastMissionsIndex select (_z - 1))];" \n " };" \n " " \n " //--- Resize if we're above the limit." \n " _lastMissionsIndex set [0, _i];" \n " if (count _lastMissionsIndex >= _canReuseAfter) then {" \n " _lastMissionsIndex resize (_canReuseAfter - 1);" \n " };" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check_Missions"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!gameOver && time - _lastUpdate > 30"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Skip { name = "Skip"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check_Missions"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!gameOver && time - _lastUpdate > 30"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,150.000000,-475.000000,250.000000,-425.000000,0.000000,"Init"}; item1[] = {"Loop",4,218,150.000000,-375.000000,250.000000,-325.000000,0.000000,"Loop"}; item2[] = {"End",1,250,150.000000,-75.000000,250.000000,-25.000000,0.000000,"End"}; item3[] = {"Arrowhead_Garbag",2,4346,150.000000,-275.000000,250.000000,-225.000000,0.000000,"Arrowhead" \n "Garbage"}; item4[] = {"Gameover",4,218,150.000000,-175.000000,250.000000,-125.000000,0.000000,"Gameover"}; link0[] = {0,1}; link1[] = {1,3}; link2[] = {3,1}; link3[] = {3,4}; link4[] = {4,2}; globals[] = {25.000000,1,0,0,0,640,480,1,38,6316128,1,-366.140930,481.526276,9.508422,-578.645630,655,489,1}; window[] = {0,-1,-1,-1,-1,884,250,1510,250,1,673}; *//*%FSM*/ class FSM { fsmName = "server_collector_garbage.fsm"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_snap = 0;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Arrowhead_Garbag"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Arrowhead_Garbag { name = "Arrowhead_Garbag"; init = /*%FSM*/"_whq = (west) Call WFBE_CO_FNC_GetSideHQ;" \n "_ehq = (east) Call WFBE_CO_FNC_GetSideHQ;" \n "" \n "{" \n " if (isNil {_x getVariable ""wfbe_trashable""} && (isNil {_x getVariable ""wfbe_trashed""}) && (_x != _whq) && (_x != _ehq)) then {" \n " _x spawn TrashObject;" \n " _x setVariable [""wfbe_trashed"", true];" \n " };" \n "} forEach allDead;" \n "" \n "_snap = time + 30;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Arrowhead_Garbag"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,150.000000,-475.000000,250.000000,-425.000000,0.000000,"Init"}; item1[] = {"Loop",4,218,150.000000,-375.000000,250.000000,-325.000000,0.000000,"Loop"}; item2[] = {"End",1,250,150.000000,-75.000000,250.000000,-25.000000,0.000000,"End"}; item3[] = {"Vanilla_Garbage",2,4346,150.000000,-275.000000,250.000000,-225.000000,0.000000,"Vanilla" \n "Garbage"}; item4[] = {"Gameover",4,218,150.000000,-175.000000,250.000000,-125.000000,0.000000,"Gameover"}; link0[] = {0,1}; link1[] = {1,3}; link2[] = {3,1}; link3[] = {3,4}; link4[] = {4,2}; globals[] = {25.000000,1,0,0,0,640,480,1,38,6316128,1,-408.524292,523.909607,38.916161,-608.053345,748,494,1}; window[] = {0,-1,-1,-1,-1,808,132,1392,174,1,766}; *//*%FSM*/ class FSM { fsmName = "server_collector_garbage_va.fsm"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_snap = 0;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Vanilla_Garbage"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Vanilla_Garbage { name = "Vanilla_Garbage"; init = /*%FSM*/"_objects = WF_Logic getVariable ""trash"";" \n "{" \n " if (isNil {_x getVariable ""wfbe_trashed""}) then {" \n " _objects2 = WF_Logic getVariable ""trash"";" \n " _x setVariable [""wfbe_trashed"", true];" \n " _x spawn TrashObject;" \n " _renewed = _objects2 - [_x] - [objNull];" \n " WF_Logic setVariable [""trash"",_renewed,true];" \n " };" \n "} forEach _objects;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Vanilla_Garbage"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,4346,-25.000000,-150.000000,75.000000,-100.000000,0.000000,"Init"}; item1[] = {"_",-1,250,-11.537962,23.713089,-8.193480,23.713089,0.000000,""}; item2[] = {"Check",2,250,-25.000000,50.000000,75.000000,100.000000,0.000000,"Check"}; item3[] = {"Team_is_Dead",4,218,-175.000000,50.000000,-75.000000,100.000000,1.000000,"Team is Dead"}; item4[] = {"End",1,250,-175.000000,-50.000000,-75.000000,0.000000,0.000000,"End"}; item5[] = {"Assign_Objective",4,218,-25.000000,150.000000,75.000000,200.000000,0.000000,"Assign" \n "Objective"}; item6[] = {"Capture",4,218,125.000000,50.000000,225.000000,100.000000,0.000000,"Capture"}; item7[] = {"Eta",2,250,125.000000,150.000000,225.000000,200.000000,0.000000,"Eta"}; item8[] = {"Attempt_to_Captu",2,250,275.000000,50.000000,375.000000,100.000000,0.000000,"Attempt to Capture"}; item9[] = {"Loop",4,218,-25.000000,-50.000000,75.000000,0.000000,0.000000,"Loop"}; item10[] = {"Assigned",4,218,275.000000,150.000000,375.000000,200.000000,0.000000,"Assigned"}; item11[] = {"",7,210,571.000000,-28.999998,579.000000,-21.000004,0.000000,""}; item12[] = {"Not_Assigned",4,218,125.000000,250.000000,225.000000,300.000000,0.000000,"Not Assigned"}; item13[] = {"Check_1",2,250,425.000000,150.000000,525.000000,200.000000,0.000000,"Check"}; item14[] = {"Assign",2,250,275.000000,250.000000,375.000000,300.000000,0.000000,"Assign"}; item15[] = {"",7,210,571.000000,171.000000,579.000000,179.000000,0.000000,""}; item16[] = {"",7,210,571.000000,271.000000,579.000000,279.000000,0.000000,""}; item17[] = {"",7,210,571.000000,71.000000,579.000000,79.000000,0.000000,""}; version=1; class LayoutItems { class Item1 { class ItemInfo { FontFace="Arial"; FontHeight=10; lStyle=1; }; }; }; link0[] = {0,9}; link1[] = {2,3}; link2[] = {2,5}; link3[] = {2,6}; link4[] = {3,4}; link5[] = {5,7}; link6[] = {6,8}; link7[] = {7,10}; link8[] = {7,12}; link9[] = {8,17}; link10[] = {9,2}; link11[] = {10,13}; link12[] = {11,9}; link13[] = {12,14}; link14[] = {13,15}; link15[] = {14,16}; link16[] = {15,17}; link17[] = {16,15}; link18[] = {17,11}; globals[] = {25.000000,1,0,0,0,640,480,1,49,6316128,1,-186.402100,704.050903,558.811401,-282.521301,707,663,1}; window[] = {0,-1,-1,-1,-1,908,100,1440,100,1,725}; *//*%FSM*/ class FSM { fsmName = "server_patrols.fsm"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_location = _this select 0;" \n "_sideID = _this select 1;" \n "_side = (_sideID) Call WFBE_CO_FNC_GetSideFromID;" \n "" \n "_team_job = ""patrol"";" \n "_team_target = objNull;" \n "_team_alive = false;" \n "" \n "_town_conquest_mode = missionNamespace getVariable 'WFBE_C_TOWNS_CONQUEST_MODE';" \n "_town_reuse = missionNamespace getVariable ""WFBE_C_PATROLS_TOWNS_LOCK"";" \n "_town_vehicle_lock_defender = if ((missionNamespace getVariable ""WFBE_C_TOWNS_VEHICLES_LOCK_DEFENDER"") > 0) then {true} else {false};" \n "_towns_visited = [_location];" \n "" \n "_group = [_location, _side] Call WFBE_SE_FNC_GetTownPatrol;" \n "" \n "_team = objNull;" \n "if (count _group > 0) then {" \n " _team_alive = true;" \n " _team = createGroup _side;" \n "" \n " _position = ([getPos _location, 50, 500] Call WFBE_CO_FNC_GetRandomPosition);" \n " _position = [_position, 50] Call WFBE_CO_FNC_GetEmptyPosition;" \n " _lock = if (_side == WFBE_DEFENDER) then {_town_vehicle_lock_defender} else {true};" \n " _retVal = [_group, _position, _side, _lock, _team] Call WFBE_CO_FNC_CreateTeam;" \n "};" \n "" \n "_snap = 0;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check { name = "Check"; init = /*%FSM*/"_snap = time + (30 + random 1);" \n "" \n "_team_alive = if (count ((units _team) Call WFBE_CO_FNC_GetLiveUnits) == 0 || isNull _team) then {false} else {true};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Team_is_Dead { priority = 1.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"WFBE_GameOver || !_team_alive"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Capture { priority = 0.000000; to="Attempt_to_Captu"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_team_job == ""capture"" && !WFBE_GameOver && _team_alive"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Assign_Objective { priority = 0.000000; to="Eta"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_team_job == ""patrol"" && !WFBE_GameOver && _team_alive"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/"_location setVariable [""wfbe_patrol_active"", false];" \n "_location setVariable [""wfbe_patrol_active_last"", time];"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Eta { name = "Eta"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Not_Assigned { priority = 0.000000; to="Assign"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"isNull _team_target"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Assigned { priority = 0.000000; to="Check_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!isNull _team_target"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Attempt_to_Captu { name = "Attempt_to_Captu"; init = /*%FSM*/"if ((_team_target getVariable ""sideID"") == _sideID) then {" \n " //--- Captured, the team can move on." \n " [_towns_visited, _team_target] Call WFBE_CO_FNC_ArrayPush;" \n " _team_target = objNull;" \n " _team_job = ""patrol"";" \n "" \n " //todo, rearm, repair, refuel." \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_1 { name = "Check_1"; init = /*%FSM*/"if ((leader _team) distance _team_target < 200) then {" \n " _town_capturable = true;" \n " if (_town_conquest_mode == 1) then {" \n " if !(_team_target getVariable Format[""wfbe_town_capturable_%1"", _side]) then {_town_capturable = false};" \n " };" \n " if ((_team_target getVariable ""sideID"") == _sideID && _town_capturable) then {" \n " //--- Town is friendly, don't bother." \n " [_towns_visited, _team_target] Call WFBE_CO_FNC_ArrayPush;" \n " _team_target = objNull;" \n " } else {" \n " //--- Attempt to capture the town." \n " _team_job = ""capture"";" \n " };" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Assign { name = "Assign"; init = /*%FSM*/"//--- Refresh the town list which can be visited." \n "" \n "if (count _towns_visited > _town_reuse) then {" \n " _towns_visited = [_towns_visited, 0] Call WFBE_CO_FNC_ArrayRemoveIndex;" \n "};" \n "" \n "//--- Get the closest location which is available to the patrol while excluding previously visited towns." \n "_team_target = [_location, towns - _towns_visited] Call WFBE_CO_FNC_GetClosestEntity;" \n "" \n "//--- Tell our patrol to move to the depot." \n "[_team, getPos _team_target, 'MOVE', 25] Spawn WFBE_CO_FNC_WaypointSimple;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,-75.000000,-400.000000,25.000000,-350.000000,0.000000,"Init"}; item1[] = {"End",1,250,-225.000000,-100.000000,-125.000000,-50.000000,0.000000,"End"}; item2[] = {"Gameover",4,218,-225.000000,-200.000000,-125.000000,-150.000000,0.000000,"Gameover"}; item3[] = {"_",8,218,75.000000,0.000000,175.000000,50.000000,0.000000,""}; item4[] = {"Town_Core",2,250,-75.000000,-200.000000,25.000000,-150.000000,0.000000,"Town Core"}; item5[] = {"Time_Supply",4,218,75.000000,-200.000000,175.000000,-150.000000,1.000000,"Time" \n "Supply"}; item6[] = {"Empty",4,218,-225.000000,0.000000,-125.000000,50.000000,1.000000,"Empty"}; item7[] = {"Not_Empty",4,218,-75.000000,100.000000,25.000000,150.000000,0.000000,"Not Empty"}; item8[] = {"Normal_Supply",4,218,-75.000000,-100.000000,25.000000,-50.000000,0.500000,"Normal" \n "Supply"}; item9[] = {"Check",2,250,-75.000000,0.000000,25.000000,50.000000,0.000000,"Check"}; item10[] = {"Time_Supply",2,250,75.000000,-100.000000,175.000000,-50.000000,0.000000,"Time Supply"}; item11[] = {"_",8,218,-75.000000,475.000000,25.000000,525.000000,0.000000,""}; item12[] = {"Skip",2,250,-375.000000,0.000000,-275.000000,50.000000,0.000000,"Skip"}; item13[] = {"",7,210,-329.000031,-279.000000,-320.999969,-271.000000,0.000000,""}; item14[] = {"Town_Advanced",2,250,-75.000000,575.000000,25.000000,625.000000,0.000000,"Town Advanced"}; item15[] = {"Captured",4,218,75.000000,575.000000,175.000000,625.000000,0.000000,"Captured"}; item16[] = {"Skip",4,218,-375.000000,575.000000,-275.000000,625.000000,1.000000,"Skip"}; item17[] = {"Captured",2,4346,225.000000,575.000000,325.000000,625.000000,0.000000,"Captured"}; item18[] = {"",7,210,270.999969,-279.000000,279.000000,-270.999969,0.000000,""}; item19[] = {"Pick_Capture_Mod",2,250,-75.000000,200.000000,25.000000,250.000000,0.000000,"Pick Capture" \n "Mode"}; item20[] = {"Threshold",4,218,75.000000,200.000000,175.000000,250.000000,0.700000,"Threshold"}; item21[] = {"Classic",4,218,-225.000000,200.000000,-125.000000,250.000000,0.600000,"Classic"}; item22[] = {"Set_Classic",2,250,-225.000000,475.000000,-125.000000,525.000000,0.000000,"Set Classic"}; item23[] = {"Set_Threshold",2,250,75.000000,475.000000,175.000000,525.000000,0.000000,"Set Threshold"}; item24[] = {"Loop",4,218,-75.000000,-300.000000,25.000000,-250.000000,0.000000,"Loop"}; item25[] = {"All_Camps",4,218,-75.000000,275.000000,25.000000,325.000000,0.500000,"All Camps"}; item26[] = {"Set_all_Camps",2,250,-75.000000,375.000000,25.000000,425.000000,0.000000,"Set all Camps"}; link0[] = {0,24}; link1[] = {2,1}; link2[] = {3,9}; link3[] = {4,2}; link4[] = {4,5}; link5[] = {4,8}; link6[] = {5,10}; link7[] = {6,12}; link8[] = {7,19}; link9[] = {8,9}; link10[] = {9,6}; link11[] = {9,7}; link12[] = {10,3}; link13[] = {11,14}; link14[] = {12,13}; link15[] = {13,24}; link16[] = {14,15}; link17[] = {14,16}; link18[] = {15,17}; link19[] = {16,12}; link20[] = {17,18}; link21[] = {18,24}; link22[] = {19,20}; link23[] = {19,21}; link24[] = {19,25}; link25[] = {20,23}; link26[] = {21,22}; link27[] = {22,11}; link28[] = {23,11}; link29[] = {24,4}; link30[] = {25,26}; link31[] = {26,11}; globals[] = {25.000000,1,0,0,0,640,480,1,70,6316128,1,-450.316040,398.898193,717.064209,-235.686615,812,911,1}; window[] = {2,-1,-1,-1,-1,819,50,1442,50,3,830}; *//*%FSM*/ class FSM { fsmName = "server_town.fsm"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_location = _this select 0;" \n "_detectionRange = _this select 1;" \n "" \n "[""INITIALIZATION"",Format [""server_town.fsm : Initialized for [%1]."", _location getVariable ""name""]] Call WFBE_CO_FNC_LogContent;" \n "" \n "_startingSupplyValue = _location getVariable ""startingSupplyValue"";" \n "_maxSupplyValue = _location getVariable ""maxSupplyValue"";" \n "_timeAttacked = 0;" \n "_activeEnemies = 0;" \n "_force = 0;" \n "_lastUp = 0;" \n "" \n "_snap = 0;" \n "_newSID = -1;" \n "_newSide = civilian;" \n "_town_camps_capture_rate = missionNamespace getVariable ""WFBE_C_CAMPS_CAPTURE_RATE_MAX"";" \n "_town_capture_mode = missionNamespace getVariable ""WFBE_C_TOWNS_CAPTURE_MODE"";" \n "_town_capture_range = switch (_town_capture_mode) do {" \n " case 0: {""WFBE_C_TOWNS_CAPTURE_RANGE""};" \n " case 1: {""WFBE_C_TOWNS_CAPTURE_THRESHOLD_RANGE""};" \n " default {""WFBE_C_TOWNS_CAPTURE_RANGE""};" \n "};" \n "_town_capture_range = missionNamespace getVariable _town_capture_range;" \n "_town_capture_rate = missionNamespace getVariable 'WFBE_C_TOWNS_CAPTURE_RATE';" \n "_town_conquest_mode = missionNamespace getVariable 'WFBE_C_TOWNS_CONQUEST_MODE';" \n "" \n "_town_supply_time_delay = missionNamespace getVariable ""WFBE_C_ECONOMY_SUPPLY_TIME_INCREASE_DELAY"";" \n "_town_supply_time = if ((missionNamespace getVariable ""WFBE_C_ECONOMY_SUPPLY_SYSTEM"") == 1) then {true} else {false};" \n "" \n "_town_defender_enabled = if ((missionNamespace getVariable ""WFBE_C_TOWNS_DEFENDER"") > 0) then {true} else {false};" \n "_town_occupation_enabled = if ((missionNamespace getVariable ""WFBE_C_TOWNS_OCCUPATION"") > 0) then {true} else {false};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Town_Core"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Town_Core { name = "Town_Core"; init = /*%FSM*/"_sideID = _location getVariable ""sideID"";" \n "_side = (_sideID) Call WFBE_CO_FNC_GetSideFromID;" \n "_objects = (_location nearEntities[[""Man"",""Car"",""Motorcycle"",""Tank"",""Air"",""Ship""], _town_capture_range]) unitsBelowHeight 40;" \n "" \n "_west = west countSide _objects;" \n "_east = east countSide _objects;" \n "_resistance = resistance countSide _objects;" \n "" \n "_activeEnemies = switch (_sideID) do {" \n " case WFBE_C_WEST_ID: {_east + _resistance};" \n " case WFBE_C_EAST_ID: {_west + _resistance};" \n " case WFBE_C_GUER_ID: {_east + _west};" \n "};" \n "" \n "_supplyValue = _location getVariable ""supplyValue"";" \n "" \n "_snap = time + 5 + random(0.2); "/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Time_Supply { priority = 1.000000; to="Time_Supply"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_town_supply_time && !WFBE_GameOver && _sideID != WFBE_C_UNKNOWN_ID"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Normal_Supply { priority = 0.500000; to="Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(!_town_supply_time || _sideID == WFBE_C_UNKNOWN_ID) && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check { name = "Check"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Empty { priority = 1.000000; to="Skip"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_west == 0 && _east == 0 && _resistance == 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Not_Empty { priority = 0.000000; to="Pick_Capture_Mod"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_west > 0 || _east > 0 || _resistance > 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Time_Supply { name = "Time_Supply"; init = /*%FSM*/"if (_activeEnemies == 0 && (_supplyValue < _maxSupplyValue)) then {" \n " if (time >= _lastUp) then {" \n " _lastUp = time + _town_supply_time_delay;" \n " _increaseOf = 1;" \n " if (missionNamespace getVariable Format [""WFBE_%1_PRESENT"",_side]) then {" \n " _upgrades = (_side) Call WFBE_CO_FNC_GetSideUpgrades;" \n " _increaseOf = (missionNamespace getVariable ""WFBE_C_TOWNS_SUPPLY_LEVELS_TIME"") select (_upgrades select WFBE_UP_SUPPLYRATE);" \n " };" \n " _supplyValue = _supplyValue + _increaseOf;" \n " if (_supplyValue > _maxSupplyValue) then {_supplyValue = _maxSupplyValue};" \n " _location setVariable [""supplyValue"", _supplyValue, true];" \n " };" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Skip { name = "Skip"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Town_Core"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Town_Advanced { name = "Town_Advanced"; init = /*%FSM*/"if !(_skip) then {" \n " _newSID = switch (true) do {case (_west > 0): {WFBE_C_WEST_ID}; case (_east > 0): {WFBE_C_EAST_ID}; case (_resistance > 0): {WFBE_C_GUER_ID};};" \n " _newSide = (_newSID) Call WFBE_CO_FNC_GetSideFromID;" \n " _rate = _town_capture_rate * (([_location,_newSide] Call WFBE_CO_FNC_GetTotalCampsOnSide) / (_location Call WFBE_CO_FNC_GetTotalCamps)) * _town_camps_capture_rate;" \n " if (_rate < 1) then {_rate = 1};" \n "" \n " if (_sideID != WFBE_C_UNKNOWN_ID) then {" \n " if (_activeEnemies > 0 && time > _timeAttacked && (missionNamespace getVariable Format [""WFBE_%1_PRESENT"",_side])) then {_timeAttacked = time + 60;[_side, ""IsUnderAttack"", [""Town"", _location]] Spawn SideMessage};" \n " };" \n "" \n " _supplyValue = round(_supplyValue - (_resistance + _east + _west) * _rate);" \n " if (_supplyValue < 1) then {_supplyValue = _startingSupplyValue; _captured = true};" \n " _location setVariable [""supplyValue"",_supplyValue,true];" \n "};" \n "" \n "if (_protected) then {" \n " if (_supplyValue < _startingSupplyValue) then {" \n " _supplyValue = _supplyValue + _force * _town_capture_rate;" \n " if (_supplyValue > _startingSupplyValue) then {_supplyValue = _startingSupplyValue};" \n " _location setVariable [""supplyValue"",_supplyValue,true];" \n " };" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Skip { priority = 1.000000; to="Skip"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_captured"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Captured { priority = 0.000000; to="Captured"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_captured"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Captured { name = "Captured"; init = /*%FSM*/"if (_sideID != WFBE_C_UNKNOWN_ID) then {" \n " if (missionNamespace getVariable Format [""WFBE_%1_PRESENT"",_side]) then {[_side, ""Lost"", _location] Spawn SideMessage};" \n "};" \n "" \n "if (missionNamespace getVariable Format [""WFBE_%1_PRESENT"",_newSide]) then {[_newSide, ""Captured"", _location] Spawn SideMessage};" \n "" \n "_location setVariable [""sideID"",_newSID,true];" \n "" \n "[nil, ""TownCaptured"", [_location, _sideID, _newSID]] Call WFBE_CO_FNC_SendToClients;" \n "if ((missionNamespace getVariable ""WFBE_C_CAMPS_CREATE"") > 0) then {[_location, _sideID, _newSID] Spawn WFBE_SE_FNC_SetCampsToSide};" \n "" \n "//--- Clear the town defenses, units first then replace the defenses if needed." \n "[_location, _side, ""remove""] Call WFBE_SE_FNC_OperateTownDefensesUnits;" \n "" \n "//--- Check if the side is enabled in town and add defenses if needed." \n "_side_enabled = false;" \n "if (_newSide == WFBE_DEFENDER) then {" \n " if (_town_defender_enabled) then {_side_enabled = true};" \n "} else {" \n " if (_town_occupation_enabled) then {_side_enabled = true};" \n "};" \n "" \n "if (_side_enabled) then {[_location, _newSide, _sideID] Call WFBE_SE_FNC_ManageTownDefenses};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Town_Core"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Pick_Capture_Mod { name = "Pick_Capture_Mod"; init = /*%FSM*/"_skip = false;" \n "_protected = false;" \n "_captured = false;" \n "" \n "//--- Territorial conquest mode (If the side can't cap the town, then that side's detected unit is set to 0)." \n "if (_town_conquest_mode == 1) then {" \n " {" \n " if (!(_location getVariable format [""wfbe_town_capturable_%1"", _x]) && ((_x Call WFBE_CO_FNC_GetSideID) != _sideID)) then {" \n " switch (_x) do { case west: {_west = 0}; case east: {_east = 0}; case resistance: {_resistance = 0}; };" \n " };" \n " } forEach WFBE_PRESENTSIDES;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Threshold { priority = 0.700000; to="Set_Threshold"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_town_capture_mode == 1"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Classic { priority = 0.600000; to="Set_Classic"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_town_capture_mode == 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class All_Camps { priority = 0.500000; to="Set_all_Camps"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_town_capture_mode == 2"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Set_Classic { name = "Set_Classic"; init = /*%FSM*/"//--- Classic capture." \n "if (_sideID == WFBE_C_GUER_ID && _resistance > 0) then {_force = _resistance;_protected = true;_skip = true};" \n "if (_sideID == WFBE_C_EAST_ID && _east > 0) then {_force = _east;_protected = true;_skip = true};" \n "if (_sideID == WFBE_C_WEST_ID && _west > 0) then {_force = _west;_protected = true;_skip = true};" \n "" \n "if (_east > 0 && _west > 0) then {_skip = true};" \n "if (_west > 0 && _resistance > 0) then {_skip = true};" \n "if (_resistance > 0 && _east > 0) then {_skip = true};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Town_Advanced"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Set_Threshold { name = "Set_Threshold"; init = /*%FSM*/"_resistanceDominion = if (_resistance > _east && _resistance > _west) then {true} else {false};" \n "_westDominion = if (_west > _east && _west > _resistance) then {true} else {false};" \n "_eastDominion = if (_east > _west && _east > _resistance) then {true} else {false};" \n "" \n "if (_sideID == WFBE_C_GUER_ID && _resistanceDominion) then {_force = _resistance;_protected = true;_skip = true};" \n "if (_sideID == WFBE_C_EAST_ID && _eastDominion) then {_force = _east;_protected = true;_skip = true};" \n "if (_sideID == WFBE_C_WEST_ID && _westDominion) then {_force = _west;_protected = true;_skip = true};" \n "" \n "if (_resistanceDominion) then {" \n " _resistance = if (_east > _west) then {_resistance - _east} else {_resistance - _west};" \n " _force = _resistance;" \n " _east = 0; " \n " _west = 0;" \n "};" \n "if (_westDominion) then {" \n " _west = if (_east > _resistance) then {_west - _east} else {_west - _resistance};" \n " _force = _west;" \n " _east = 0;" \n " _resistance = 0;" \n "};" \n "if (_eastDominion) then {" \n " _east = if (_west > _resistance) then {_east - _west} else {_east - _resistance};" \n " _force = _east;" \n " _west = 0;" \n " _resistance = 0;" \n "};" \n "" \n "if (!_resistanceDominion && !_westDominion && !_eastDominion) then {_west = 0; _east = 0; _resistance = 0};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Town_Advanced"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Set_all_Camps { name = "Set_all_Camps"; init = /*%FSM*/"_resistanceDominion = if (_resistance > _east && _resistance > _west) then {true} else {false};" \n "_westDominion = if (_west > _east && _west > _resistance) then {true} else {false};" \n "_eastDominion = if (_east > _west && _east > _resistance) then {true} else {false};" \n "" \n "if (_sideID == RESISTANCEID && _resistanceDominion) then {_force = _resistance;_protected = true;_skip = true};" \n "if (_sideID == EASTID && _eastDominion) then {_force = _east;_protected = true;_skip = true};" \n "if (_sideID == WESTID && _westDominion) then {_force = _west;_protected = true;_skip = true};" \n "" \n "if (_resistanceDominion) then {" \n " _resistance = if (_east > _west) then {_resistance - _east} else {_resistance - _west};" \n " _force = _resistance;" \n " _east = 0; " \n " _west = 0;" \n "};" \n "if (_westDominion) then {" \n " _west = if (_east > _resistance) then {_west - _east} else {_west - _resistance};" \n " _force = _west;" \n " _east = 0;" \n " _resistance = 0;" \n "};" \n "if (_eastDominion) then {" \n " _east = if (_west > _resistance) then {_east - _west} else {_east - _resistance};" \n " _force = _east;" \n " _west = 0;" \n " _resistance = 0;" \n "};" \n "" \n "if (!_resistanceDominion && !_westDominion && !_eastDominion) then {_west = 0; _east = 0; _resistance = 0};" \n "" \n "_totalCamps = _location Call GetTotalCamps;" \n "" \n "if (_west > 0 && west in WFBE_PRESENTSIDES) then {" \n " if (_totalCamps != ([_location,west] Call GetTotalCampsOnSide)) then {_skip = true};" \n "};" \n "if (_east > 0 && east in WFBE_PRESENTSIDES) then {" \n " if (_totalCamps != ([_location,east] Call GetTotalCampsOnSide)) then {_skip = true};" \n "};" \n "if (_resistance > 0 && resistance in WFBE_PRESENTSIDES) then {" \n " if (_totalCamps != ([_location,resistance] Call GetTotalCampsOnSide)) then {_skip = true};" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Town_Advanced"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,-675.000000,-150.000000,-575.000000,-100.000000,0.000000,"Init"}; item1[] = {"Check_Side",2,250,100.000000,-150.000000,200.000000,-100.000000,0.000000,"Check" \n "Side"}; item2[] = {"Contact",4,218,-50.000000,250.000000,50.000000,300.000000,0.000000,"Contact"}; item3[] = {"Loop",4,218,-525.000000,-150.000000,-425.000000,-100.000000,0.000000,"Loop"}; item4[] = {"No_Contact",4,218,-200.000000,150.000000,-100.000000,200.000000,1.000000,"No Contact"}; item5[] = {"Skip",2,250,-200.000000,550.000000,-100.000000,600.000000,0.000000,"Skip"}; item6[] = {"Activity",2,250,100.000000,650.000000,200.000000,700.000000,0.000000,"Activity"}; item7[] = {"Kind_of_Contact",2,250,250.000000,150.000000,350.000000,200.000000,0.000000,"Kind of" \n "Contact"}; item8[] = {"Air",4,218,250.000000,250.000000,350.000000,300.000000,0.000000,"Air"}; item9[] = {"Ground",4,218,400.000000,150.000000,500.000000,200.000000,1.000000,"Ground"}; item10[] = {"Activated",2,250,100.000000,250.000000,200.000000,300.000000,0.000000,"Activated"}; item11[] = {"No",4,218,100.000000,150.000000,200.000000,200.000000,1.000000,"No"}; item12[] = {"Yes",4,218,100.000000,350.000000,200.000000,400.000000,0.000000,"Yes"}; item13[] = {"Air_Activated",2,250,250.000000,350.000000,350.000000,400.000000,0.000000,"Air" \n "Activated"}; item14[] = {"Set_Ground_Team",2,250,550.000000,150.000000,650.000000,200.000000,0.000000,"Set Ground" \n "Team"}; item15[] = {"Skip_1",2,250,100.000000,450.000000,200.000000,500.000000,0.000000,"Skip"}; item16[] = {"No",4,218,400.000000,350.000000,500.000000,400.000000,0.000000,"No"}; item17[] = {"Yes",4,218,250.000000,450.000000,350.000000,500.000000,1.000000,"Yes"}; item18[] = {"Set_AA_Team",2,250,550.000000,350.000000,650.000000,400.000000,0.000000,"Set AA" \n "Team"}; item19[] = {"",7,210,696.000000,271.000000,704.000000,278.999969,0.000000,""}; item20[] = {"Create_Template",2,250,650.000000,550.000000,750.000000,600.000000,0.000000,"Create" \n "Template"}; item21[] = {"_",8,218,100.000000,550.000000,200.000000,600.000000,0.000000,""}; item22[] = {"Active",4,218,100.000000,750.000000,200.000000,800.000000,0.000000,"Active"}; item23[] = {"Inactive",4,218,-75.000000,650.000000,25.000000,700.000000,1.000000,"Inactive"}; item24[] = {"Check_Time",2,250,-75.000000,750.000000,25.000000,800.000000,0.000000,"Check Time"}; item25[] = {"Skip_2",2,250,-225.000000,650.000000,-125.000000,700.000000,0.000000,"Skip"}; item26[] = {"Remove",2,4346,-375.000000,850.000000,-275.000000,900.000000,0.000000,"Remove"}; item27[] = {"SideID_Unknown",4,218,100.000000,-250.000000,200.000000,-200.000000,1.000000,"SideID" \n "Unknown"}; item28[] = {"SideID_Known",4,218,100.000000,-50.000000,200.000000,0.000000,2.000000,"SideID" \n "Known"}; item29[] = {"Skip_3",2,250,-525.000000,-250.000000,-425.000000,-200.000000,0.000000,"Skip"}; item30[] = {"Check_Enemies",2,250,-50.000000,150.000000,50.000000,200.000000,0.000000,"Check" \n "Enemies"}; item31[] = {"Timeout",4,218,-75.000000,850.000000,25.000000,900.000000,1.000000,"Timeout"}; item32[] = {"Skip",4,218,-225.000000,750.000000,-125.000000,800.000000,0.000000,"Skip"}; item33[] = {"_",8,218,-375.000000,650.000000,-275.000000,700.000000,0.000000,""}; item34[] = {"End",4,218,250.000000,-150.000000,350.000000,-100.000000,0.000000,"End"}; item35[] = {"Game_Over",1,250,400.000000,-150.000000,500.000000,-100.000000,0.000000,"Game Over"}; item36[] = {"_",8,218,550.000000,250.000000,650.000000,300.000000,0.000000,""}; item37[] = {"Parameter_Patrol",2,250,-525.000000,650.000000,-425.000000,700.000000,0.000000,"Parameter" \n "Patrol"}; item38[] = {"Off",4,218,-525.000000,550.000000,-425.000000,600.000000,0.000000,"Off"}; item39[] = {"On",4,218,-675.000000,650.000000,-575.000000,700.000000,0.000000,"On"}; item40[] = {"Skip_4",2,250,-525.000000,450.000000,-425.000000,500.000000,0.000000,"Skip"}; item41[] = {"",7,210,-479.000000,396.000031,-471.000000,404.000000,0.000000,""}; item42[] = {"Check_or_set",2,250,-675.000000,550.000000,-575.000000,600.000000,0.000000,"Check or set"}; item43[] = {"",7,210,-629.000000,396.000000,-621.000000,404.000000,0.000000,""}; item44[] = {"Check_Side_Enabl",2,250,-50.000000,-50.000000,50.000000,0.000000,0.000000,"Check Side" \n "Enabled"}; item45[] = {"Disabled",4,218,-300.000000,-50.000000,-200.000000,0.000000,0.000000,"Disabled"}; item46[] = {"Enabled",4,218,-50.000000,50.000000,50.000000,100.000000,0.000000,"Enabled"}; item47[] = {"",7,210,-253.999985,571.000000,-246.000000,579.000000,0.000000,""}; link0[] = {0,3}; link1[] = {1,27}; link2[] = {1,28}; link3[] = {1,34}; link4[] = {2,10}; link5[] = {3,1}; link6[] = {4,5}; link7[] = {5,21}; link8[] = {6,22}; link9[] = {6,23}; link10[] = {7,8}; link11[] = {7,9}; link12[] = {8,13}; link13[] = {9,14}; link14[] = {10,11}; link15[] = {10,12}; link16[] = {11,7}; link17[] = {12,15}; link18[] = {13,16}; link19[] = {13,17}; link20[] = {14,36}; link21[] = {15,21}; link22[] = {16,18}; link23[] = {17,15}; link24[] = {18,36}; link25[] = {19,20}; link26[] = {20,21}; link27[] = {21,6}; link28[] = {22,24}; link29[] = {23,25}; link30[] = {24,31}; link31[] = {24,32}; link32[] = {25,33}; link33[] = {26,33}; link34[] = {27,29}; link35[] = {28,44}; link36[] = {29,3}; link37[] = {30,2}; link38[] = {30,4}; link39[] = {31,26}; link40[] = {32,25}; link41[] = {33,37}; link42[] = {34,35}; link43[] = {36,19}; link44[] = {37,38}; link45[] = {37,39}; link46[] = {38,40}; link47[] = {39,42}; link48[] = {40,41}; link49[] = {41,3}; link50[] = {42,43}; link51[] = {43,41}; link52[] = {44,45}; link53[] = {44,46}; link54[] = {45,47}; link55[] = {46,30}; link56[] = {47,5}; globals[] = {25.000000,1,0,0,0,640,480,1,84,6316128,1,-594.135254,798.115967,1022.985229,-403.262939,860,911,1}; window[] = {2,-1,-1,-1,-1,964,125,1437,125,3,878}; *//*%FSM*/ class FSM { fsmName = "server_town_ai.fsm"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_town = _this select 0;" \n "_range = _this select 1;" \n "" \n "[""INITIALIZATION"",Format [""server_town_ai.fsm : Initialized for [%1]."", _town getVariable ""name""]] Call WFBE_CO_FNC_LogContent;" \n "" \n "_range_detect = _range * (missionNamespace getVariable ""WFBE_C_TOWNS_DETECTION_RANGE_COEF"");" \n "_range_detect_active = _range * (missionNamespace getVariable ""WFBE_C_TOWNS_DETECTION_RANGE_ACTIVE_COEF"");" \n "_position = [];" \n "" \n "_town setVariable [""wfbe_active"", false];" \n "_town setVariable [""wfbe_active_air"", false];" \n "_town setVariable [""wfbe_inactivity"", 0];" \n "" \n "_groups = [];" \n "_town_camps = _town getVariable ""camps"";" \n "_town_camps_count = count _town_camps;" \n "" \n "_town_teams = [];" \n "_town setVariable ['wfbe_active_vehicles', []];" \n "" \n "_airHeight = missionNamespace getVariable ""WFBE_C_TOWNS_DETECTION_RANGE_AIR"";" \n "_unitsInactiveMax = missionNamespace getVariable ""WFBE_C_TOWNS_UNITS_INACTIVE"";" \n "" \n "_patrol_delay = missionNamespace getVariable ""WFBE_C_PATROLS_DELAY_SPAWN"";" \n "_patrol_enabled = if (!isNil {_town getVariable ""wfbe_patrol_enabled""}) then {true} else {false};" \n "" \n "_ai_delegation_enabled = if ((missionNamespace getVariable ""WFBE_C_AI_DELEGATION"") > 0) then {true} else {false};" \n "_town_defender_enabled = if ((missionNamespace getVariable ""WFBE_C_TOWNS_DEFENDER"") > 0) then {true} else {false};" \n "_town_occupation_enabled = if ((missionNamespace getVariable ""WFBE_C_TOWNS_OCCUPATION"") > 0) then {true} else {false};" \n "" \n "//--- Towns patrol, if enabled." \n "if (_patrol_enabled) then {" \n " _town setVariable [""wfbe_patrol_active"", false];" \n " _town setVariable [""wfbe_patrol_active_last"", time];" \n "};" \n "" \n "_snap = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check_Side"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Side { name = "Check_Side"; init = /*%FSM*/"_snap = time + 5;" \n "" \n "_sideID = _town getVariable ""sideID"";" \n "_side = (_sideID) Call WFBE_CO_FNC_GetSideFromID;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class SideID_Known { priority = 2.000000; to="Check_Side_Enabl"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_sideID != WFBE_C_UNKNOWN_ID && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class SideID_Unknown { priority = 1.000000; to="Skip_3"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_sideID == WFBE_C_UNKNOWN_ID && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class End { priority = 0.000000; to="Game_Over"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Skip { name = "Skip"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Activity"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Activity { name = "Activity"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Inactive { priority = 1.000000; to="Skip_2"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(_town getVariable ""wfbe_active"") && !(_town getVariable ""wfbe_active_air"")"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Active { priority = 0.000000; to="Check_Time"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_town getVariable ""wfbe_active"") || (_town getVariable ""wfbe_active_air"")"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Kind_of_Contact { name = "Kind_of_Contact"; init = /*%FSM*/"_below = _detected unitsBelowHeight 10;" \n "" \n "_enemies_ground = [_below, _side] Call WFBE_CO_FNC_GetAreaEnemiesCount;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Ground { priority = 1.000000; to="Set_Ground_Team"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_enemies_ground > 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Air { priority = 0.000000; to="Air_Activated"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_enemies_ground == 0 && _enemies > 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Activated { name = "Activated"; init = /*%FSM*/"if (_enemies > 0) then {_town setVariable [""wfbe_inactivity"", time]};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class No { priority = 1.000000; to="Kind_of_Contact"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(_town getVariable ""wfbe_active"")"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Yes { priority = 0.000000; to="Skip_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_town getVariable ""wfbe_active"""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Air_Activated { name = "Air_Activated"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Yes { priority = 1.000000; to="Skip_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_town getVariable ""wfbe_active_air"""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class No { priority = 0.000000; to="Set_AA_Team"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(_town getVariable ""wfbe_active_air"")"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Set_Ground_Team { name = "Set_Ground_Team"; init = /*%FSM*/"_town setVariable [""wfbe_active"", true];" \n "" \n "if (_side == WFBE_DEFENDER) then {" \n " _groups = [_town, _side] Call WFBE_SE_FNC_GetTownGroupsDefender" \n "} else {" \n " _groups = [_town, _side] Call WFBE_SE_FNC_GetTownGroups;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Create_Template"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Skip_1 { name = "Skip_1"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Activity"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Set_AA_Team { name = "Set_AA_Team"; init = /*%FSM*/"_town setVariable [""wfbe_active_air"", true];" \n "" \n "if (_side == WFBE_DEFENDER) then {" \n " _groups = [_town, _side, true] Call WFBE_SE_FNC_GetTownGroupsDefender" \n "} else {" \n " _groups = [_town, _side, true] Call WFBE_SE_FNC_GetTownGroups;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Create_Template"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Create_Template { name = "Create_Template"; init = /*%FSM*/"if (missionNamespace getVariable Format [""WFBE_%1_PRESENT"",_side]) then {[_side,""HostilesDetectedNear"",_town] Spawn SideMessage};" \n "" \n "//--- Man the defenses." \n "[_town, _side, ""spawn""] Call WFBE_SE_FNC_OperateTownDefensesUnits;" \n "" \n "//--- Get the positions and create the groups" \n "_camps = +(_town getVariable ""camps"");" \n "_positions = [];" \n "_teams = [];" \n "for '_i' from 0 to count(_groups)-1 do {" \n " _position = [];" \n " if (count _camps > 0 && random 100 > 50) then {" \n " _camp = _camps select floor (random count _camps);" \n " _camps = _camps - [_camp];" \n " _position = ([getPos _camp, 10, 50] call WFBE_CO_FNC_GetRandomPosition);" \n " } else {" \n " _position = ([getPos _town, 50, 300] call WFBE_CO_FNC_GetRandomPosition);" \n " };" \n " _position = [_position, 50] call WFBE_CO_FNC_GetEmptyPosition;" \n " [_positions, _position] call WFBE_CO_FNC_ArrayPush;" \n " [_teams, createGroup _side] call WFBE_CO_FNC_ArrayPush;" \n "};" \n "" \n "if !(_ai_delegation_enabled) then { //--- Create the units (Server sided)" \n " _retVal = [_town, _side, _groups, _positions, _teams] Call WFBE_CO_FNC_CreateTownUnits;" \n " _town_teams = _town_teams + _teams;" \n " _town setVariable ['wfbe_active_vehicles', (_town getVariable 'wfbe_active_vehicles') + (_retVal select 1)];" \n "} else { //--- Create the units (Client/server sided)" \n " _retVal = [_town, _side, _groups, _positions, _teams] Call WFBE_SE_FNC_DelegateAITown;" \n " _town_teams = _town_teams + _teams;" \n " _town setVariable ['wfbe_active_vehicles', (_town getVariable 'wfbe_active_vehicles') + (_retVal select 1)];" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Activity"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Time { name = "Check_Time"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Timeout { priority = 1.000000; to="Remove"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - (_town getVariable ""wfbe_inactivity"") > _unitsInactiveMax"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Skip { priority = 0.000000; to="Skip_2"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - (_town getVariable ""wfbe_inactivity"") <= _unitsInactiveMax"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Skip_2 { name = "Skip_2"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Parameter_Patrol"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Remove { name = "Remove"; init = /*%FSM*/"_town setVariable [""wfbe_active"", false];" \n "_town setVariable [""wfbe_active_air"", false];" \n "" \n "//--- Teams Units." \n "{" \n " if !(isNil '_x') then {" \n " if !(isNull _x) then {" \n " {deleteVehicle _x} forEach units _x;" \n " deleteGroup _x;" \n " };" \n " };" \n "} forEach _town_teams;" \n "" \n "//--- Teams vehicles." \n "{" \n " if (alive _x) then {" \n " if (!isPlayer _x) then {deleteVehicle _x};" \n " };" \n "} forEach (_town getVariable 'wfbe_active_vehicles');" \n "" \n "_town_teams = [];" \n "_town setVariable ['wfbe_active_vehicles', []];" \n "" \n "//--- Despawn the town defenses unit." \n "[_town, _side, ""remove""] Call WFBE_SE_FNC_OperateTownDefensesUnits;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Parameter_Patrol"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Skip_3 { name = "Skip_3"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check_Side"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Enemies { name = "Check_Enemies"; init = /*%FSM*/"_dynRange = if (_town getVariable ""wfbe_active"" || _town getVariable ""wfbe_active_air"") then {_range_detect_active} else {_range_detect};" \n "_detected = (_town nearEntities [[""Man"",""Car"",""Motorcycle"",""Tank"",""Air"",""Ship""],_dynRange]) unitsBelowHeight _airHeight;" \n "" \n "_enemies = [_detected, _side] Call WFBE_CO_FNC_GetAreaEnemiesCount;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class No_Contact { priority = 1.000000; to="Skip"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_enemies == 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Contact { priority = 0.000000; to="Activated"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_enemies > 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Game_Over { name = "Game_Over"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Parameter_Patrol { name = "Parameter_Patrol"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class On { priority = 0.000000; to="Check_or_set"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_patrol_enabled"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Off { priority = 0.000000; to="Skip_4"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_patrol_enabled"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Skip_4 { name = "Skip_4"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check_Side"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_or_set { name = "Check_or_set"; init = /*%FSM*/"if !(_town getVariable ""wfbe_patrol_active"") then {" \n " if (time - (_town getVariable ""wfbe_patrol_active_last"") > _patrol_delay && !(_town getVariable ""wfbe_active"")) then {" \n " _town setVariable [""wfbe_patrol_active"", true];" \n " [_town, _sideID] ExecFSM ""Server\FSM\server_patrols.fsm"";" \n " };" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check_Side"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_Side_Enabl { name = "Check_Side_Enabl"; init = /*%FSM*/"_side_enabled = false;" \n "" \n "if (_side == WFBE_DEFENDER) then {" \n " if (_town_defender_enabled) then {_side_enabled = true};" \n "} else {" \n " if (_town_occupation_enabled) then {_side_enabled = true};" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Enabled { priority = 0.000000; to="Check_Enemies"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_side_enabled"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Disabled { priority = 0.000000; to="Skip"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_side_enabled"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "Game_Over", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,4346,-75.000000,-600.000000,25.000000,-550.000000,0.000000,"Init"}; item1[] = {"End",1,250,-225.000000,-100.000000,-125.000000,-50.000000,0.000000,"End"}; item2[] = {"Gameover",4,218,-225.000000,-200.000000,-125.000000,-150.000000,0.000000,"Gameover"}; item3[] = {"Empty",4,218,75.000000,-200.000000,175.000000,-150.000000,0.000000,"Empty"}; item4[] = {"Camp_Core",2,250,-75.000000,-200.000000,25.000000,-150.000000,0.000000,"Camp Core"}; item5[] = {"Occupied",4,218,-75.000000,-100.000000,25.000000,-50.000000,0.000000,"Occupied"}; item6[] = {"Capture",4,218,-225.000000,0.000000,-125.000000,50.000000,1.000000,"Capture"}; item7[] = {"Skip",4,218,75.000000,0.000000,175.000000,50.000000,0.000000,"Skip"}; item8[] = {"Idle",2,250,175.000000,-500.000000,275.000000,-450.000000,0.000000,"Idle"}; item9[] = {"Check",2,250,-75.000000,0.000000,25.000000,50.000000,0.000000,"Check"}; item10[] = {"",7,210,221.000000,20.999996,229.000000,29.000002,0.000000,""}; item11[] = {"",7,210,221.000031,-179.000000,228.999985,-171.000000,0.000000,""}; item12[] = {"Captured",2,250,-375.000000,0.000000,-275.000000,50.000000,0.000000,"Captured"}; item13[] = {"",7,210,-329.000000,-479.000000,-321.000000,-471.000000,0.000000,""}; item14[] = {"Alive",2,250,-75.000000,-400.000000,25.000000,-350.000000,0.000000,"Alive"}; item15[] = {"No",4,218,75.000000,-400.000000,175.000000,-350.000000,0.000000,"No"}; item16[] = {"Yes",4,218,-75.000000,-300.000000,25.000000,-250.000000,0.000000,"Yes"}; item17[] = {"Loop",4,218,-75.000000,-500.000000,25.000000,-450.000000,0.000000,"Loop"}; link0[] = {0,17}; link1[] = {2,1}; link2[] = {3,11}; link3[] = {4,2}; link4[] = {4,3}; link5[] = {4,5}; link6[] = {5,9}; link7[] = {6,12}; link8[] = {7,10}; link9[] = {8,17}; link10[] = {9,6}; link11[] = {9,7}; link12[] = {10,11}; link13[] = {11,8}; link14[] = {12,13}; link15[] = {13,17}; link16[] = {14,15}; link17[] = {14,16}; link18[] = {15,8}; link19[] = {16,4}; link20[] = {17,14}; globals[] = {25.000000,1,0,0,0,640,480,1,79,6316128,1,-364.308594,319.991333,128.384277,-639.606445,556,649,1}; window[] = {0,-1,-1,-1,-1,944,175,1524,175,1,574}; *//*%FSM*/ class FSM { fsmName = "server_town_camp.fsm"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_camp = _this select 0;" \n "_town = _this select 1;" \n "_flag = _this select 2;" \n "" \n "_snap = 0;" \n "_newSID = -1;" \n "_force = 0;" \n "" \n "_camp_cap_rate = missionNamespace getVariable ""WFBE_C_CAMPS_CAPTURE_RATE"";" \n "_camp_range = missionNamespace getVariable ""WFBE_C_CAMPS_RANGE"";" \n "_camp_range_players = missionNamespace getVariable ""WFBE_C_CAMPS_RANGE_PLAYERS"";" \n "_town_starting_sv = _town getVariable ""startingSupplyValue"";" \n "_town_conquest_mode = missionNamespace getVariable 'WFBE_C_TOWNS_CONQUEST_MODE';"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Alive"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Camp_Core { name = "Camp_Core"; init = /*%FSM*/"//--- Filter players and ai." \n "_objects = _camp nearEntities[""Man"", _camp_range];" \n "_in_range = _objects;" \n "{" \n " if (isPlayer _x) then {if (_x distance _camp > _camp_range_players) then {_objects = _objects - [_x]}};" \n "} forEach _in_range;" \n "" \n "_west = west countSide _objects;" \n "_east = east countSide _objects;" \n "_resistance = resistance countSide _objects;" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Empty { priority = 0.000000; to="Idle"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_west == 0 && _east == 0 && _resistance == 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Occupied { priority = 0.000000; to="Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_west > 0 || _east > 0 || _resistance > 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Idle { name = "Idle"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Alive"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check { name = "Check"; init = /*%FSM*/"_skip = false;" \n "_protected = false;" \n "_captured = false;" \n "_sideID = _camp getVariable ""sideID"";" \n "_supplyValue = _camp getVariable ""supplyValue"";" \n "" \n "//--- Territorial conquest mode (If the side can't cap the town, then that side's force is set to 0)." \n "_town_sideID = _town getVariable ""sideID"";" \n "if (_town_conquest_mode == 1) then {" \n " {" \n " if (!(_town getVariable format [""wfbe_town_capturable_%1"", _x]) && ((_x Call WFBE_CO_FNC_GetSideID) != _town_sideID)) then {" \n " switch (_x) do { case west: {_west = 0}; case east: {_east = 0}; case resistance: {_resistance = 0}; };" \n " };" \n " } forEach WFBE_PRESENTSIDES;" \n "};" \n "" \n "_resistanceDominion = if (_resistance > _east && _resistance > _west) then {true} else {false};" \n "_westDominion = if (_west > _east && _west > _resistance) then {true} else {false};" \n "_eastDominion = if (_east > _west && _east > _resistance) then {true} else {false};" \n "" \n "if (_sideID == WFBE_C_GUER_ID && _resistanceDominion) then {_force = _resistance;_protected = true;_skip = true};" \n "if (_sideID == WFBE_C_EAST_ID && _eastDominion) then {_force = _east;_protected = true;_skip = true};" \n "if (_sideID == WFBE_C_WEST_ID && _westDominion) then {_force = _west;_protected = true;_skip = true};" \n "" \n "switch (true) do {" \n " case _resistanceDominion: {_resistance = if (_east > _west) then {_resistance - _east} else {_resistance - _west}; _force = _resistance; _east = 0; _west = 0};" \n " case _westDominion: {_west = if (_east > _resistance) then {_west - _east} else {_west - _resistance}; _force = _west; _east = 0; _resistance = 0};" \n " case _eastDominion: {_east = if (_west > _resistance) then {_east - _west} else {_east - _resistance}; _force = _east; _west = 0; _resistance = 0};" \n "};" \n "" \n "if (!_resistanceDominion && !_westDominion && !_eastDominion) then {_west = 0; _east = 0; _resistance = 0};" \n "" \n "if !(_skip) then {" \n " _newSID = switch (true) do {case (_west > 0): {WFBE_C_WEST_ID}; case (_east > 0): {WFBE_C_EAST_ID}; case (_resistance > 0): {WFBE_C_GUER_ID}};" \n " _supplyValue = round(_supplyValue - ((_resistance + _east + _west)*_camp_cap_rate));" \n " if (_supplyValue < 1) then {_supplyValue = _town_starting_sv; _captured = true};" \n " _camp setVariable [""supplyValue"",_supplyValue,true];" \n "};" \n "" \n "if (_protected) then {" \n " if (_supplyValue < _town_starting_sv) then {" \n " _supplyValue = _supplyValue + round(_force * _camp_cap_rate);" \n " if (_supplyValue > _town_starting_sv) then {_supplyValue = _town_starting_sv};" \n " _camp setVariable [""supplyValue"",_supplyValue,true];" \n " };" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Capture { priority = 1.000000; to="Captured"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_captured"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Skip { priority = 0.000000; to="Idle"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_captured"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Captured { name = "Captured"; init = /*%FSM*/"_newSide = (_newSID) Call WFBE_CO_FNC_GetSideFromID;" \n "_side = (_sideID) Call WFBE_CO_FNC_GetSideFromID;" \n "" \n "if (_sideID != WFBE_C_UNKNOWN_ID) then {" \n " if (missionNamespace getVariable Format [""WFBE_%1_PRESENT"",_side]) then {[_side,""LostAt"",[""Strongpoint"",_town]] Spawn SideMessage};" \n "};" \n "" \n "if (missionNamespace getVariable Format [""WFBE_%1_PRESENT"",_newSide]) then {[_newSide,""CapturedNear"",[""Strongpoint"",_town]] Spawn SideMessage};" \n "_camp setVariable [""sideID"",_newSID,true];" \n "_flag setFlagTexture (missionNamespace getVariable Format[""WFBE_%1FLAG"",str _side]);" \n "" \n "[nil, ""CampCaptured"", [_camp,_newSID,_sideID]] Call WFBE_CO_FNC_SendToClients;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Alive"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Alive { name = "Alive"; init = /*%FSM*/"_snap = time + 3 + random(0.2); " \n "" \n "_base = _camp getVariable ""wfbe_camp_bunker"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Yes { priority = 0.000000; to="Camp_Core"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"alive _base"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class No { priority = 0.000000; to="Idle"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!alive _base"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,-25.000000,-150.000000,75.000000,-100.000000,0.000000,"Init"}; item1[] = {"_",-1,250,-11.537962,23.713089,-8.193480,23.713089,0.000000,""}; item2[] = {"Check",2,250,275.000000,-150.000000,375.000000,-100.000000,0.000000,"Check"}; item3[] = {"Team_is_Dead",4,218,425.000000,-150.000000,525.000000,-100.000000,1.000000,"Team is Dead"}; item4[] = {"End",1,250,575.000000,-150.000000,675.000000,-100.000000,0.000000,"End"}; item5[] = {"Update",4,218,275.000000,-50.000000,375.000000,0.000000,0.500000,"Update"}; item6[] = {"Change",2,4346,125.000000,-50.000000,225.000000,0.000000,0.000000,"Change"}; item7[] = {"Idle",4,218,275.000000,-250.000000,375.000000,-200.000000,0.000000,"Idle"}; item8[] = {"Idle",2,250,125.000000,-250.000000,225.000000,-200.000000,0.000000,"Idle"}; item9[] = {"Loop",4,218,125.000000,-150.000000,225.000000,-100.000000,0.000000,"Loop"}; version=1; class LayoutItems { class Item1 { class ItemInfo { FontFace="Arial"; FontHeight=10; lStyle=1; }; }; }; link0[] = {0,9}; link1[] = {2,3}; link2[] = {2,5}; link3[] = {2,7}; link4[] = {3,4}; link5[] = {5,6}; link6[] = {6,9}; link7[] = {7,8}; link8[] = {8,9}; link9[] = {9,2}; globals[] = {25.000000,1,0,0,0,640,480,1,34,6316128,1,-77.773094,643.736328,332.842560,-331.508240,770,709,1}; window[] = {0,-1,-1,-1,-1,1079,225,1686,225,1,788}; *//*%FSM*/ class FSM { fsmName = "server_town_patrol.fsm"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_location = _this select 0;" \n "_team = _this select 1;" \n "_sideID = _this select 2;" \n "_focus = if (count _this > 3) then {_this select 3} else {objNull};" \n "" \n "_snap = 0;" \n "" \n "_lastSV = _location getVariable 'supplyValue';" \n "_startSV = _location getVariable 'startingSupplyValue';" \n "_mode = ""patrol"";" \n "_lastMode = ""nil"";" \n "" \n "_patrol_range = missionNamespace getVariable 'WFBE_C_TOWNS_PATROL_RANGE';" \n "_defense_range = missionNamespace getVariable 'WFBE_C_TOWNS_DEFENSE_RANGE';"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check { name = "Check"; init = /*%FSM*/"_snap = time+(30 + random 1);" \n "" \n "_aliveTeam = if (count ((units _team) Call WFBE_CO_FNC_GetLiveUnits) == 0 || isNull _team) then {false} else {true};" \n "" \n "_currentSV = _location getVariable 'supplyValue';" \n "if (_currentSV < _lastSV || _currentSV < _startSV || _sideID != (_location getVariable 'sideID')) then {" \n " _mode = ""defense"";" \n "} else {" \n " _mode = ""patrol"";" \n "};" \n "" \n "_lastSV = _currentSV;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Team_is_Dead { priority = 1.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"WFBE_GameOver || !_aliveTeam"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Update { priority = 0.500000; to="Change"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_aliveTeam && _mode != _lastMode && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Idle { priority = 0.000000; to="Idle"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_aliveTeam && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Change { name = "Change"; init = /*%FSM*/"_lastMode = _mode;" \n "" \n "if (_mode == ""patrol"") then {" \n " if (isNull _focus) then {" \n " [_team,_location,_patrol_range] Spawn WFBE_CO_FNC_WaypointPatrolTown;" \n " } else {" \n " [_team,_focus,_patrol_range/4,8] Spawn WFBE_CO_FNC_WaypointPatrol;" \n " };" \n "} else {" \n " [_team,getPos _location,'SAD',_defense_range] Spawn WFBE_CO_FNC_WaypointSimple;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Idle { name = "Idle"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,150.000000,-475.000000,250.000000,-425.000000,0.000000,"Init"}; item1[] = {"Loop",4,218,150.000000,-375.000000,250.000000,-325.000000,0.000000,"Loop"}; item2[] = {"End",1,250,150.000000,-75.000000,250.000000,-25.000000,0.000000,"End"}; item3[] = {"Status",2,250,150.000000,-275.000000,250.000000,-225.000000,0.000000,"Status"}; item4[] = {"Gameover",4,218,150.000000,-175.000000,250.000000,-125.000000,0.000000,"Gameover"}; item5[] = {"Lost",4,218,300.000000,-275.000000,400.000000,-225.000000,0.000000,"Lost"}; item6[] = {"Alive",4,218,0.000000,-275.000000,100.000000,-225.000000,0.000000,"Alive"}; item7[] = {"Wait",2,250,0.000000,-375.000000,100.000000,-325.000000,0.000000,"Wait"}; item8[] = {"Help",2,4346,300.000000,-375.000000,400.000000,-325.000000,0.000000,"Help"}; link0[] = {0,1}; link1[] = {1,3}; link2[] = {3,4}; link3[] = {3,5}; link4[] = {3,6}; link5[] = {4,2}; link6[] = {5,8}; link7[] = {6,7}; link8[] = {7,1}; link9[] = {8,1}; globals[] = {25.000000,1,0,0,0,640,480,1,42,6316128,1,-103.010742,576.733398,29.605272,-483.056641,655,489,1}; window[] = {0,-1,-1,-1,-1,759,125,1385,125,1,673}; *//*%FSM*/ class FSM { fsmName = "server_victory_defender_helper.fsm"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_side = _this;" \n "_logik = (_side) Call WFBE_CO_FNC_GetSideLogic;" \n "" \n "_startuppos_default = _logik getVariable ""wfbe_startpos"";" \n "_startuppos = WF_Logic getVariable ""wfbe_spawnpos"";" \n "_startuppos_count = count _startuppos;" \n "_startuppos_rotation = missionNamespace getVariable ""WFBE_C_VICTORY_THREEWAY_LOCATION_SWAP"";" \n "_startup_index = 0;" \n "" \n "_lastRotation = 0;" \n "_snap = 0;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Status"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Status { name = "Status"; init = /*%FSM*/"_hq = (_side) Call WFBE_CO_FNC_GetSideHQ;" \n "_structures = (_side) Call WFBE_CO_FNC_GetSideStructures;" \n "" \n "_factories = 0;" \n "{" \n " _factories = _factories + count([west,missionNamespace getVariable Format [""WFBE_%1%2TYPE"",_side,_x], _structures] Call GetFactories);" \n "} forEach [""BARRACKS"",""LIGHT"",""HEAVY"",""AIRCRAFT""];" \n "" \n "_side_lost = if (!(alive _hq) && _factories == 0) then {true} else {false};" \n "" \n "_snap = time + 75;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Lost { priority = 0.000000; to="Help"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_side_lost && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Alive { priority = 0.000000; to="Wait"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_side_lost && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Wait { name = "Wait"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Status"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Help { name = "Help"; init = /*%FSM*/"//swap spawn location (when nothing left)." \n "//create startup veh randomly." \n "" \n "if (time - _lastRotation > _startuppos_rotation) then {" \n " _lastRotation = time;" \n " " \n " _found = false;" \n " while {!_found} do {" \n " _pos = _startuppos select _startup_index;" \n " if (([(_pos nearEntities [[""Man"",""Car"",""Motorcycle"",""Tank"",""Ship""], 550]), _side] Call WFBE_CO_FNC_GetAreaEnemiesCount) == 0) then {" \n " _found = true;" \n " _logik setVariable [""wfbe_startpos"", _pos, true];" \n " };" \n " _startup_index = _startup_index + 1;" \n " if (_startup_index >= _startuppos_count) exitWith {_startup_index = 0};" \n " };" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Status"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _snap && !WFBE_GameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,0.000000,-175.000000,100.000000,-125.000000,0.000000,"Init"}; item1[] = {"_",-1,250,-11.537962,23.713089,-8.193480,23.713089,0.000000,""}; item2[] = {"_",8,218,0.000000,-75.000000,100.000000,-25.000000,0.000000,""}; item3[] = {"Root",2,250,150.000000,-75.000000,250.000000,-25.000000,0.000000,"Root"}; item4[] = {"End",1,250,150.000000,325.000000,250.000000,375.000000,0.000000,"End"}; item5[] = {"Loop_0",4,218,150.000000,25.000000,250.000000,75.000000,0.000000,"Loop 0"}; item6[] = {"A_vs_B_Defender",2,4346,150.000000,125.000000,250.000000,175.000000,0.000000,"A vs B" \n "Defender C" \n "ignored"}; item7[] = {"Gameover",4,218,150.000000,225.000000,250.000000,275.000000,0.000000,"Gameover"}; item8[] = {"__1",2,250,0.000000,225.000000,100.000000,275.000000,0.000000,""}; item9[] = {"Idle",4,218,0.000000,325.000000,100.000000,375.000000,0.000000,"Idle"}; version=1; class LayoutItems { class Item1 { class ItemInfo { FontFace="Arial"; FontHeight=10; lStyle=1; }; }; }; link0[] = {0,2}; link1[] = {2,3}; link2[] = {3,5}; link3[] = {5,6}; link4[] = {6,5}; link5[] = {6,7}; link6[] = {7,8}; link7[] = {8,9}; link8[] = {9,4}; globals[] = {25.000000,1,0,0,0,640,480,1,56,6316128,1,-212.385651,557.442688,512.809265,-214.553268,707,663,1}; window[] = {0,-1,-1,-1,-1,858,50,1390,50,1,725}; *//*%FSM*/ class FSM { fsmName = "server_victory_threeway.fsm"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_lastUpdate = time;" \n "_winTime = time;" \n "" \n "_victory = missionNamespace getVariable ""WFBE_C_VICTORY_THREEWAY"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Root"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Root { name = "Root"; init = /*%FSM*/"_total = totalTowns;" \n "" \n "if (_victory in [0]) then {" \n " (WFBE_DEFENDER) ExecFSM ""Server\FSM\server_victory_defender_helper.fsm"";" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop_0 { priority = 0.000000; to="A_vs_B_Defender"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 25 && !gameOver && _victory == 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/"diag_log Format[""[WFBE (OUTRO)][frameno:%1 | ticktime:%2] server_victory_threeway.fsm: Mission end - [Done]"",diag_frameno,diag_tickTime];" \n "failMission ""END1"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class A_vs_B_Defender { name = "A_vs_B_Defender"; init = /*%FSM*/"//--- Control the 2 invasion side." \n "//todo apply the WF3 building grabbin" \n "{" \n " _side = _x;" \n " _hq = (_x) Call WFBE_CO_FNC_GetSideHQ;" \n " _structures = (_x) Call WFBE_CO_FNC_GetSideStructures;" \n " _towns = (_x) Call GetTownsHeld;" \n " " \n " _factories = 0;" \n " {" \n " _factories = _factories + count([_side,missionNamespace getVariable Format [""WFBE_%1%2TYPE"",_side,_x], _structures] Call GetFactories);" \n " } forEach [""BARRACKS"",""LIGHT"",""HEAVY"",""AIRCRAFT""];" \n "" \n " if (!(alive _hq) && _factories == 0 || _towns == _total && !WFBE_GameOver) then {" \n " [nil, ""HandleSpecial"", [""endgame"", (_x) Call WFBE_CO_FNC_GetSideID]] Call WFBE_CO_FNC_SendToClients;" \n " WF_Logic setVariable [""WF_Winner"", _x];" \n " gameOver = true;" \n " WFBE_GameOver = true;" \n " _winTime = time;" \n " };" \n "} forEach WFBE_PRESENTSIDES - [WFBE_DEFENDER];" \n "" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="__1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop_0 { priority = 0.000000; to="A_vs_B_Defender"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 25 && !gameOver && _victory == 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class __1 { name = "__1"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Idle { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _winTime > 20"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Truck_Init",0,4346,-171.242203,-13.536451,-81.242249,36.463646,0.000000,"Truck Init"}; item1[] = {"Truck_End",1,250,-303.115265,388.653168,-213.115280,438.653076,0.000000,"Truck End"}; item2[] = {"Truck_is__dead_",4,218,-302.663574,272.303101,-212.663345,322.302917,1.000000,"Truck is " \n "dead?"}; item3[] = {"Global__Checks",3,250,-170.493988,177.490768,-80.494026,227.490891,0.000000,"Global" \n " Checks"}; item4[] = {"Loop",8,218,-171.007660,71.851631,-81.007713,121.851631,0.000000,"Loop"}; item5[] = {"Can__Move_",4,218,-300.051117,178.466248,-210.051086,228.466232,0.000000,"Can " \n "Move?"}; item6[] = {"Check__Locations",2,250,-299.279907,73.958237,-209.971802,123.266243,0.000000,"Check" \n " Locations"}; item7[] = {"Deliver_",4,218,-170.476105,272.373291,-80.476044,322.373322,0.000000,"Deliver?"}; item8[] = {"Delivery",2,250,-170.157013,387.966614,-80.156998,437.966614,0.000000,"Delivery"}; item9[] = {"",7,210,49.830540,409.317871,57.830544,417.317871,0.000000,""}; item10[] = {"",7,210,49.565125,92.576248,57.565128,100.576248,0.000000,""}; item11[] = {"Destination_",4,218,-53.444309,177.966080,36.555691,227.966080,0.000000,"Destination?"}; item12[] = {"Reload",2,250,-46.849068,102.598534,43.150940,152.598419,0.000000,"Reload"}; link0[] = {0,4}; link1[] = {2,1}; link2[] = {3,2}; link3[] = {3,5}; link4[] = {3,7}; link5[] = {3,11}; link6[] = {4,3}; link7[] = {5,6}; link8[] = {6,4}; link9[] = {7,8}; link10[] = {8,9}; link11[] = {9,10}; link12[] = {10,4}; link13[] = {11,12}; link14[] = {12,4}; globals[] = {0.000000,0,0,0,0,640,480,1,23,6316128,1,-459.421387,124.502724,623.334961,-109.385239,726,906,1}; window[] = {2,-1,-1,-1,-1,796,50,1010,50,3,744}; *//*%FSM*/ class FSM { fsmName = "supplytruck"; class States { /*%FSM*/ class Truck_Init { name = "Truck_Init"; init = /*%FSM*/"_side = _this select 0;" \n "_sideID = (_side) Call GetSideID;" \n "_sideText = str _side;" \n "_logik = (_side) Call WFBE_CO_FNC_GetSideLogic;" \n "" \n "_type = missionNamespace getVariable Format ['WFBE_%1SUPPLYTRUCK',_sideText];" \n "_crew = missionNamespace getVariable Format [""WFBE_%1SOLDIER"",_sideText];" \n "_hq = (_side) Call WFBE_CO_FNC_GetSideHQ;" \n "_vehicle = [_type, (GetPos _hq), _sideID, 0, true] Call WFBE_CO_FNC_CreateVehicle;" \n "_team = CreateGroup _side;" \n "_driver = [_crew,_team,(getpos _vehicle),_sideID] Call WFBE_CO_FNC_CreateUnit;" \n "[_driver] AllowGetIn true;" \n "_driver MoveInDriver _vehicle;" \n "" \n "_logik setVariable [""wfbe_ai_supplytrucks"",(_logik getVariable ""wfbe_ai_supplytrucks"") + [_vehicle]];" \n "[_vehicle,GetPos _hq,30,50,true,false,true] Call PlaceNear;" \n "" \n "[_sideText,'VehiclesCreated',1] Call UpdateStatistics;" \n "[_sideText,'UnitsCreated',1] Call UpdateStatistics;" \n "" \n "_spt = missionNamespace getVariable Format[""WFBE_%1SERVICEPOINTTYPE"",_sideText];" \n "" \n "_SV = 1000;" \n "_currentSV = 0;" \n "_maxSV = 0;" \n "_timer = 0;" \n "_closest = objNull;" \n "_sp = _hq;" \n "_lastDestination = _hq;" \n "_isDelivering = false;" \n "_lastCheck = time;" \n "_lastDelivery = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Global__Checks"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastCheck > 15"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Truck_End { name = "Truck_End"; init = /*%FSM*/"if (alive _driver) then {_driver setDamage 1};" \n "(_vehicle) spawn { sleep 120;if (alive _this) then {_this setDamage 1}};" \n "" \n "_logik setVariable [""wfbe_ai_supplytrucks"",(_logik getVariable ""wfbe_ai_supplytrucks"") - [_vehicle]];"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Global__Checks { name = "Global__Checks"; init = /*%FSM*/"if (fuel _vehicle < 0.4) then {_vehicle setFuel 1};" \n "_destinations = [];" \n "{" \n " _locationSide = (_x getVariable ""sideID"") Call GetSideFromID;" \n " if (_locationSide == _side) then {_destinations = _destinations + [_x]};" \n "} forEach towns;" \n "" \n "_hq = (_side) Call WFBE_CO_FNC_GetSideHQ;" \n "if (_vehicle Distance _hq < 70 || _vehicle Distance _sp < 70) then {_SV = 1000;_lastDelivery = time};" \n "" \n "_timer = _timer + 15;" \n "if (_timer > 30) then {_isDelivering = false;_timer = 0};" \n "if (time - _lastDelivery > 600) then {_vehicle setDammage 1};" \n "_lastCheck = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Truck_is__dead_ { priority = 1.000000; to="Truck_End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(alive _driver)||!(alive _vehicle)|| isNull _driver || isNull _vehicle || !canMove _vehicle"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Deliver_ { priority = 0.000000; to="Delivery"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_vehicle distance _closest < 60;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Destination_ { priority = 0.000000; to="Reload"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"count _destinations < 1"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Can__Move_ { priority = 0.000000; to="Check__Locations"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"count _destinations > 0 && !_isDelivering"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check__Locations { name = "Check__Locations"; init = /*%FSM*/"_loc = [leader _team,_destinations] Call SortByDistance;" \n "_closest = _loc select 0;" \n "_possibleLoc = objNull;" \n "_skip = false;" \n "_isDelivering = true;" \n "{" \n " _currentSV = _x getVariable ""supplyValue"";" \n " _maxSV = _x getVariable ""maxSupplyValue"";" \n " if (_currentSV < _maxSV && !_skip && _x !=_lastDestination) then {_closest = _x;_skip = true};" \n "} forEach _loc;" \n "" \n "_currentSV = _closest getVariable ""supplyValue"";" \n "if (_SV <= _currentSV) then {" \n " _skip = false;" \n " {" \n " _currentSV = _x getVariable ""supplyValue"";" \n " if (_currentSV > _SV && !_skip && _x distance _vehicle < _hq distance _vehicle && _lastDestination != _x) then {_possibleLoc = _x;_skip = true};" \n " } forEach _loc;" \n " if (isNull _possibleLoc) then {_possibleLoc = _hq};" \n "};" \n "" \n "if (!isNull _possibleLoc) then {" \n " _closest = _possibleLoc;" \n " if (_possibleLoc == _hq) then {" \n " _buildings = (_side) Call WFBE_CO_FNC_GetSideStructures;" \n " _checks = [_side,_spt,_buildings] Call GetFactories;" \n " if (count _checks > 0) then {" \n " _nearest = [_vehicle,_checks] Call WFBE_CO_FNC_GetClosestEntity;" \n " _deployed = (_side) Call WFBE_CO_FNC_GetSideHQDeployStatus;" \n " if (_nearest distance _vehicle < _vehicle distance _hq || !_deployed || getDammage _hq >= 1) then {_closest = _nearest;_sp = _nearest};" \n " };" \n " };" \n "};" \n "" \n "driver _vehicle doMove ([GetPos _closest,10,20] Call GetRandomPosition);"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Global__Checks"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastCheck > 15"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Delivery { name = "Delivery"; init = /*%FSM*/"_isDelivering = false;" \n "_lastDestination = _closest;" \n "if (_closest in towns) then {" \n " _currentSV = _closest getVariable ""supplyValue"";" \n " _maxSV = _closest getVariable ""maxSupplyValue"";" \n " _sideDeliver = (_closest getVariable ""sideID"") Call GetSideFromID;" \n " _upgrades = (_side) Call WFBE_CO_FNC_GetSideUpgrades;" \n " _increaseOf = (missionNamespace getVariable ""WFBE_C_TOWNS_SUPPLY_LEVELS_TRUCK"") select (_upgrades select WFBE_UP_SUPPLYRATE);" \n " _requireChange = false;" \n " if (_SV > _currentSV && _sideDeliver == _side) then {_currentSV = _currentSV + _increaseOf;_requireChange = true};" \n " if (_currentSV > _maxSV) then {_currentSV = _maxSV;_requireChange = true};" \n " if (_requireChange) then {_closest setVariable [""supplyValue"",_currentSV,true]};" \n " _SV = _currentSV;" \n "};" \n "" \n "_lastDelivery = time;" \n "_closest = objNull;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Global__Checks"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastCheck > 15"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Reload { name = "Reload"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Global__Checks"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastCheck > 15"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Truck_Init"; finalStates[] = { "Truck_End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,4346,66.287125,-127.850632,156.287064,-77.850792,0.000000,"Init"}; item1[] = {"Update_Resources",2,250,-66.836029,-56.267544,23.163887,-6.267582,0.000000,"Update" \n "Resources"}; item2[] = {"End",1,250,-218.006683,15.304325,-128.006653,65.304314,0.000000,"End"}; item3[] = {"Loop",4,218,65.605347,-56.267605,155.605377,-6.267574,0.000000,"Loop"}; item4[] = {"Gameover",4,218,-216.668854,-56.267559,-126.668869,-6.267574,0.000000,"Gameover"}; link0[] = {0,3}; link1[] = {1,3}; link2[] = {1,4}; link3[] = {3,1}; link4[] = {4,2}; globals[] = {0.000000,0,0,0,0,640,480,1,15,6316128,1,-288.082031,288.081207,332.960358,-262.037384,673,690,1}; window[] = {0,-1,-1,-1,-1,960,150,1633,150,1,691}; *//*%FSM*/ class FSM { fsmName = "updateresources"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_lastUpdate = time;" \n "_is = missionNamespace getVariable ""WFBE_C_ECONOMY_INCOME_SYSTEM"";" \n "_ii = missionNamespace getVariable ""WFBE_C_ECONOMY_INCOME_INTERVAL"";" \n "_allies = missionNamespace getVariable ""WFBE_C_BASE_ALLIES"";" \n "" \n "_awaits = _ii;" \n "_incomeCoef = 1;" \n "_divisor = 0;" \n "_commander_enabled = if ((missionNamespace getVariable ""WFBE_C_AI_COMMANDER_ENABLED"") > 0) then {true} else {false};" \n "_currency_system = missionNamespace getVariable ""WFBE_C_ECONOMY_CURRENCY_SYSTEM"";" \n "if (_is == 3) then {" \n " _incomeCoef = missionNamespace getVariable ""WFBE_C_ECONOMY_INCOME_COEF"";" \n " _divisor = missionNamespace getVariable ""WFBE_C_ECONOMY_INCOME_DIVIDED"";" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Update_Resources"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > _awaits && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_Resources { name = "Update_Resources"; init = /*%FSM*/"{" \n " _logik = (_x) Call WFBE_CO_FNC_GetSideLogic;" \n " " \n " _income = 0;" \n " _income_player = 0;" \n " _income_commander = 0;" \n " _supply = 0;" \n " " \n " _supply = (_x) Call WFBE_CO_FNC_GetTownsSupply;" \n " _income = if (_is != 3) then {_supply} else {round(_supply * _incomeCoef)};" \n "" \n " switch (_is) do {" \n " case 2: {_income = round(_income / 2)};" \n " case 3: {" \n " _income_player = round(_income * (((100 - (_logik getVariable ""wfbe_commander_percent""))/100)/(_logik getVariable ""wfbe_teams_count"")));" \n " _income_commander = round((_income * ((_logik getVariable ""wfbe_commander_percent"")/100)) / _divisor) + _income_player;" \n " };" \n " case 4: {" \n " _income_player = round(_income * (100 - (_logik getVariable ""wfbe_commander_percent""))/100);" \n " _income_commander = round((_income - _income_player)*(_logik getVariable ""wfbe_teams_count"")) + _income_player;" \n " };" \n " };" \n " " \n " if (_income > 0) then {" \n " if (_currency_system == 0) then {[_x, _supply] Call ChangeSideSupply};" \n " " \n " _comTeam = (_x) Call WFBE_CO_FNC_GetCommanderTeam;" \n " if (isNull _comTeam) then {_comTeam = grpNull};" \n " " \n " {" \n " if !(isNil '_x') then {" \n " _paycheck = 0;" \n " switch (_is) do {" \n " case 3: {_paycheck = if (_comTeam != _x) then {_income_player} else {_income_commander}};" \n " case 4: {_paycheck = if (_comTeam != _x) then {_income_player} else {_income_commander}};" \n " default {if !(isPlayer (leader _x)) then {_paycheck = _income}};" \n " };" \n " " \n " if (_paycheck != 0) then {[_x, _paycheck] Call WFBE_CO_FNC_ChangeTeamFunds};" \n " };" \n " } forEach (_logik getVariable ""wfbe_teams"");" \n " " \n " if (isNull(_x Call WFBE_CO_FNC_GetCommanderTeam) && _commander_enabled) then {[_x, _income] Call ChangeAICommanderFunds};" \n " };" \n " " \n " if (_allies > 0) then {" \n " if (_x in [west,east]) then {" \n " Call Compile ""%1AlliesFunds = %1AlliesFunds + _income"";" \n " };" \n " };" \n "} forEach WFBE_PRESENTSIDES;" \n "" \n "_awaits = (_ii) Call GetSleepFPS;" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Update_Resources"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > _awaits && !gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,4346,68.844200,-235.317032,158.844086,-185.317093,0.000000,"Init"}; item1[] = {"Loop",4,218,69.950378,-54.529591,159.950424,-4.529562,0.000000,"Loop"}; item2[] = {"End",1,250,71.371758,179.546143,161.371826,229.546112,0.000000,"End"}; item3[] = {"Loop",4,218,-30.854136,-55.398598,59.145935,-5.398569,0.000000,"Loop"}; item4[] = {"Gameover",4,218,71.840584,101.891243,161.840546,151.891220,0.000000,"Gameover"}; item5[] = {"_",8,218,96.687485,-169.297226,128.493500,-146.721985,0.000000,""}; item6[] = {"Wait",2,250,67.782181,-122.639091,157.782181,-72.639091,0.000000,"Wait"}; item7[] = {"Annihilation",2,250,-30.415300,33.022167,59.584702,83.022156,0.000000,"Annihilation"}; item8[] = {"Assassination",2,250,70.389214,33.891174,160.389175,83.891144,0.000000,"Assassination"}; item9[] = {"Loop",4,218,171.623901,-54.529591,261.623230,-4.529560,0.000000,"Loop"}; item10[] = {"Supremacy",2,250,172.062729,33.891171,262.062012,83.891174,0.000000,"Supremacy"}; item11[] = {"_",2,250,-61.980644,102.236549,28.019346,152.236542,0.000000,""}; item12[] = {"_",4,218,-61.980686,179.758133,28.019318,229.758133,0.000000,""}; item13[] = {"Town",2,250,275.342438,33.587734,365.342438,83.587723,0.000000,"Town"}; item14[] = {"Loop",4,218,275.618805,-53.185108,365.618805,-3.185127,0.000000,"Loop"}; link0[] = {0,5}; link1[] = {1,8}; link2[] = {3,7}; link3[] = {4,11}; link4[] = {5,6}; link5[] = {6,1}; link6[] = {6,3}; link7[] = {6,9}; link8[] = {6,14}; link9[] = {7,3}; link10[] = {7,4}; link11[] = {8,1}; link12[] = {8,4}; link13[] = {9,10}; link14[] = {10,4}; link15[] = {10,9}; link16[] = {11,12}; link17[] = {12,2}; link18[] = {13,4}; link19[] = {13,14}; link20[] = {14,13}; globals[] = {0.000000,0,0,0,0,640,480,1,24,6316128,1,-159.986588,427.082947,248.347397,-239.068298,595,489,1}; window[] = {0,-1,-1,-1,-1,834,200,1460,200,1,613}; *//*%FSM*/ class FSM { fsmName = "updateserver"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_lastUpdate = time;" \n "_winTime = time;" \n "" \n "_vc = missionNamespace getVariable ""WFBE_C_GAMEPLAY_VICTORY_CONDITION"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Wait"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/"diag_log Format[""[WFBE (OUTRO)][frameno:%1 | ticktime:%2] updateserver.fsm: Mission end - [Done]"",diag_frameno,diag_tickTime];" \n "failMission ""END1"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Wait { name = "Wait"; init = /*%FSM*/"_total = totalTowns;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Annihilation"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 20 && !gameOver && _vc == 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop_1 { priority = 0.000000; to="Supremacy"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 20 && !gameOver && _vc == 2"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop_2 { priority = 0.000000; to="Town"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 20 && !gameOver && _vc == 3"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop_3 { priority = 0.000000; to="Assassination"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 20 && !gameOver && _vc == 1"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Annihilation { name = "Annihilation"; init = /*%FSM*/"{" \n " _hq = (_x) Call WFBE_CO_FNC_GetSideHQ;" \n " _structures = (_x) Call WFBE_CO_FNC_GetSideStructures;" \n " " \n " if (count _structures == 0 && !(alive _hq) && !WFBE_GameOver) then {" \n " [nil, ""HandleSpecial"", [""endgame"", (_x) Call WFBE_CO_FNC_GetSideID]] Call WFBE_CO_FNC_SendToClients;" \n " WF_Logic setVariable [""WF_Winner"", _x];" \n " gameOver = true;" \n " WFBE_GameOver = true;" \n " _winTime = time;" \n " };" \n "} forEach WFBE_PRESENTSIDES;" \n "" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="_"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Annihilation"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 20 && !gameOver && _vc == 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Assassination { name = "Assassination"; init = /*%FSM*/"{" \n " _hq = (_x) Call WFBE_CO_FNC_GetSideHQ;" \n " _towns = (_x) Call GetTownsHeld;" \n " " \n " if (!(alive _hq) && !WFBE_GameOver || _towns == _total) then {" \n " [nil, ""HandleSpecial"", [""endgame"", (_x) Call WFBE_CO_FNC_GetSideID]] Call WFBE_CO_FNC_SendToClients;" \n " WF_Logic setVariable [""WF_Winner"", _x];" \n " gameOver = true;" \n " WFBE_GameOver = true;" \n " _winTime = time;" \n " };" \n "} forEach WFBE_PRESENTSIDES;" \n "" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Gameover { priority = 0.000000; to="_"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Loop { priority = 0.000000; to="Assassination"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 20 && !gameOver && _vc == 1"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Supremacy { name = "Supremacy"; init = /*%FSM*/"//todo apply the WF3 building grabbin" \n "{" \n " _side = _x;" \n " _hq = (_x) Call WFBE_CO_FNC_GetSideHQ;" \n " _structures = (_x) Call WFBE_CO_FNC_GetSideStructures;" \n " _towns = (_x) Call GetTownsHeld;" \n " " \n " _factories = 0;" \n " {" \n " _factories = _factories + count([west,missionNamespace getVariable Format [""WFBE_%1%2TYPE"",_side,_x], _structures] Call GetFactories);" \n " } forEach [""BARRACKS"",""LIGHT"",""HEAVY"",""AIRCRAFT""];" \n " " \n " if (!(alive _hq) && _factories == 0 || _towns == _total && !WFBE_GameOver) then {" \n " [nil, ""HandleSpecial"", [""endgame"", (_x) Call WFBE_CO_FNC_GetSideID]] Call WFBE_CO_FNC_SendToClients;" \n " WF_Logic setVariable [""WF_Winner"", _x];" \n " gameOver = true;" \n " WFBE_GameOver = true;" \n " _winTime = time;" \n " };" \n "} forEach WFBE_PRESENTSIDES;" \n "" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Supremacy"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 20 && !gameOver && _vc == 2"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Gameover { priority = 0.000000; to="_"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class _ { name = "_"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _winTime > 20"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Town { name = "Town"; init = /*%FSM*/"{" \n " _towns = (_x) Call GetTownsHeld;" \n " if (_towns == _total && !WFBE_GameOver) then {" \n " [nil, ""HandleSpecial"", [""endgame"", (_x) Call WFBE_CO_FNC_GetSideID]] Call WFBE_CO_FNC_SendToClients;" \n " WF_Logic setVariable [""WF_Winner"", _x];" \n " gameOver = true;" \n " WFBE_GameOver = true;" \n " _winTime = time;" \n " };" \n "} forEach WFBE_PRESENTSIDES;" \n "" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Town"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time - _lastUpdate > 20 && !gameOver && _vc == 3"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Gameover { priority = 0.000000; to="_"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,4346,-81.542984,-257.577942,8.457038,-207.578140,0.000000,"Init"}; item1[] = {"End",1,250,-341.327942,-139.587799,-251.327972,-89.587807,0.000000,"End"}; item2[] = {"Update_Worker",2,250,-82.090652,-139.314026,7.909359,-89.314034,0.000000,"Update Worker"}; item3[] = {"Loop",4,218,53.846153,-139.681244,143.846161,-89.681236,0.000000,"Loop"}; item4[] = {"Gameover",4,218,-216.387955,-139.464890,-126.387947,-89.464890,0.000000,"Gameover"}; item5[] = {"_",8,218,-51.736092,-184.192123,-21.083296,-163.272247,0.000000,""}; item6[] = {"No_Job",4,218,-18.119097,-70.317200,71.880913,-20.317196,0.000000,"No Job"}; item7[] = {"Job",4,218,-129.429321,-69.559975,-39.429314,-19.559986,0.000000,"Job"}; item8[] = {"Update_Job",2,250,-129.807770,17.519415,-39.807682,67.519424,0.000000,"Update Job"}; item9[] = {"Idle_or_Assign",2,250,-17.740370,16.005005,72.259621,66.005020,0.000000,"Idle or Assign"}; item10[] = {"",7,210,23.149067,111.413750,31.149073,119.413750,0.000000,""}; item11[] = {"",7,210,94.437599,110.454597,102.437599,118.454597,0.000000,""}; item12[] = {"Build",4,218,-259.291138,17.519421,-169.291153,67.519417,0.000000,"Build"}; item13[] = {"Maintenance",4,218,-259.231995,82.296516,-169.232025,132.296509,0.000000,"Maintenance"}; item14[] = {"Update_Build",2,250,-375.901794,18.161104,-285.901794,68.161102,0.000000,"Update Build"}; item15[] = {"Update_Maintenan",2,250,-375.085449,82.180977,-285.085449,132.181000,0.000000,"Update" \n "Maintenance"}; item16[] = {"",7,210,-405.433075,39.363052,-397.433075,47.363045,0.000000,""}; item17[] = {"",7,210,-404.876038,105.391983,-396.876038,113.391983,0.000000,""}; item18[] = {"",7,210,-406.079773,223.920914,-398.079773,231.920914,0.000000,""}; item19[] = {"",7,210,23.259628,223.163696,31.259632,231.163696,0.000000,""}; link0[] = {0,5}; link1[] = {2,4}; link2[] = {2,6}; link3[] = {2,7}; link4[] = {3,2}; link5[] = {4,1}; link6[] = {5,2}; link7[] = {6,9}; link8[] = {7,8}; link9[] = {8,12}; link10[] = {8,13}; link11[] = {9,10}; link12[] = {10,11}; link13[] = {11,3}; link14[] = {12,14}; link15[] = {13,15}; link16[] = {14,16}; link17[] = {15,17}; link18[] = {16,17}; link19[] = {17,18}; link20[] = {18,19}; link21[] = {19,10}; globals[] = {0.000000,0,0,0,0,640,480,1,28,6316128,1,-486.594543,265.272156,220.416641,-283.276123,784,592,1}; window[] = {0,-1,-1,-1,-1,937,200,1613,200,1,802}; *//*%FSM*/ class FSM { fsmName = "workers"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_worker = _this select 0;" \n "_side = _this select 1;" \n "_index = _this select 2;" \n "" \n "_logik = (_side) Call WFBE_CO_FNC_GetSideLogic;" \n "" \n "_assignedConstruction = objNull;" \n "_action = """";" \n "_pos = getPos _worker;" \n "_idleFor = 0;" \n "_lastMoveOrdered = -40;" \n "" \n "_speed = missionNamespace getVariable ""WFBE_C_STRUCTURES_WORKERS_RATIO"";" \n "_distance = missionNamespace getVariable ""WFBE_C_STRUCTURES_WORKERS_DISTANCE"";" \n "_maxDistance = missionNamespace getVariable ""WFBE_C_STRUCTURES_WORKERS_RADIUS"";" \n "_repairs = missionNamespace getVariable ""WFBE_C_STRUCTURES_WORKERS_REPAIR"";" \n "" \n "_animations = [""AinvPknlMstpSlayWrflDnon_AmovPknlMstpSnonWnonDnon"", ""AinvPknlMstpSlayWrflDnon_AmovPknlMstpSnonWnonDnon"", ""AinvPknlMstpSlayWrflDnon_AmovPercMstpSrasWrflDnon"", ""AinvPknlMstpSlayWrflDnon_medic""];" \n "" \n "_lastUpdate = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Update_Worker"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/"_workers = _logik getVariable ""wfbe_workers"";" \n "_workers set [_index, objNull];" \n "_logik setVariable [""wfbe_workers"", _workers, true];"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Update_Worker { name = "Update_Worker"; init = /*%FSM*/"_lastUpdate = time;" \n "" \n "_temp = _logik getVariable ""wfbe_structures_logic"";" \n "" \n "//--- Range calculation." \n "_buildList = [];" \n "{if (_x distance _worker < _maxDistance) then {_buildList = _buildList + [_x]}} forEach _temp;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class No_Job { priority = 0.000000; to="Idle_or_Assign"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"alive _worker && isNull _assignedConstruction|| count _buildList == 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Job { priority = 0.000000; to="Update_Job"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"alive _worker && !isNull _assignedConstruction && count _buildList > 0 || _action == ""Maintenance"""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Gameover { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"gameOver || !alive _worker"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_Job { name = "Update_Job"; init = /*%FSM*/"if (_pos distance (getPos _worker) < 5 && _worker distance _assignedConstruction > _distance) then {" \n " _idleFor = _idleFor + 5;" \n "} else {" \n " _idleFor = 0;" \n "};" \n "" \n "if (_idleFor > 30) then {" \n " _idleFor = 0;" \n " [_worker, getPos _worker, 40] Call PlaceSafe;" \n "};" \n "" \n "if (behaviour _worker != ""CARELESS"") then {_worker setBehaviour ""CARELESS""};" \n "" \n "_pos = getPos _worker;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Maintenance { priority = 0.000000; to="Update_Maintenan"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_action == ""Maintenance"""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Build { priority = 0.000000; to="Update_Build"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_action == ""Build"" || _action == ""Repair"""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Idle_or_Assign { name = "Idle_or_Assign"; init = /*%FSM*/"if (count _buildList > 0) then {" \n " _temp = [_worker, _buildList] Call SortByDistance;" \n " {" \n " if !(isNull _assignedConstruction) exitWith {}; " \n "" \n " _get = _x getVariable ""WFBE_B_Completion"";" \n " " \n " if !(isNil '_get') then {" \n " if (_get <= 100) then {" \n " _action = if (_x getVariable ""WFBE_B_Repair"") then {""Repair""} else {""Build""};" \n " _assignedConstruction = _x;" \n " };" \n " };" \n " } forEach _temp;" \n "};" \n "" \n "//--- Maintenance?" \n "if (count _buildList == 0) then {" \n " _structures = (_side) Call WFBE_CO_FNC_GetSideStructures;" \n "" \n " _structures = [_worker, _structures] Call SortByDistance;" \n "" \n " {" \n " if (getDammage _x > 0 && alive _x) exitWith {_assignedConstruction = _x;_action = ""Maintenance"";}" \n " } forEach _structures;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Update_Worker"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!gameOver && time - _lastUpdate > 4"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_Build { name = "Update_Build"; init = /*%FSM*/"if (_assignedConstruction in _buildList) then {" \n " _completion = _assignedConstruction getVariable ""WFBE_B_Completion"";" \n " _ratio = _assignedConstruction getVariable ""WFBE_B_CompletionRatio"";" \n "" \n " if (_completion < 100) then {" \n " if (_worker distance _assignedConstruction > _distance) then {" \n " if (time - _lastMoveOrdered > 40) then {_worker commandMove (getPos _assignedConstruction);_lastMoveOrdered = time};" \n " } else {" \n " _worker playMove (_animations select round(random((count _animations)-1)));" \n " _ratio = (_speed * _ratio) + _completion;" \n " if (_ratio > 100) then {_ratio = 100};" \n " _assignedConstruction setVariable [""WFBE_B_Completion"", _ratio];" \n " };" \n " } else {" \n " _action = """";" \n " _assignedConstruction = objNull;" \n " };" \n "} else {" \n " _action = """";" \n " _assignedConstruction = objNull;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Update_Worker"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!gameOver && time - _lastUpdate > 4"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Update_Maintenan { name = "Update_Maintenan"; init = /*%FSM*/"if (alive _assignedConstruction && getDammage _assignedConstruction > 0) then {" \n " if (_worker distance _assignedConstruction > _distance) then {" \n " if (time - _lastMoveOrdered > 30) then {_worker commandMove (getPos _assignedConstruction);_lastMoveOrdered = time};" \n " } else {" \n " _worker playMove (_animations select round(random((count _animations)-1)));" \n " _damages = (getDammage _assignedConstruction) - _repairs;" \n " if (_damages < 0) then {_damages = 0};" \n " _assignedConstruction setDammage _damages;" \n " };" \n "} else {" \n " _action = """";" \n " _assignedConstruction = objNull;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { priority = 0.000000; to="Update_Worker"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!gameOver && time - _lastUpdate > 4"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*//* AI Commander Upgrade script. Parameters: - Side. */ Private["_can_upgrade","_cost","_funds","_level","_logik","_path","_side","_to_upgrade","_upgrade","_upgrades"]; _side = _this; _logik = (_side) Call WFBE_CO_FNC_GetSideLogic; _path = missionNamespace getVariable Format ["WFBE_C_UPGRADES_%1_AI_ORDER", _side]; _upgrades = _logik getVariable "wfbe_upgrades"; //--- Get the existing content. _to_upgrade = []; { _upgrade = _x select 0; _level = _x select 1; if (_upgrades select _upgrade < _level) exitWith {_to_upgrade = _x}; } forEach _path; //--- Found something to upgrade! if (count _to_upgrade > 0) then { _upgrade = _to_upgrade select 0; _cost = ((missionNamespace getVariable Format["WFBE_C_UPGRADES_%1_COSTS", _side]) select _upgrade) select (_to_upgrade select 1); //--- Validation. _can_upgrade = false; _funds = _side Call GetAICommanderFunds; if ((missionNamespace getVariable "WFBE_C_ECONOMY_CURRENCY_SYSTEM") == 0) then { if ((_side Call WFBE_CO_FNC_GetSideSupply) >= (_cost select 0) && _funds >= (_cost select 1)) then {_can_upgrade = true}; } else { if (_funds >= (_cost select 1)) then {_can_upgrade = true}; }; //--- Roll on! if (_can_upgrade) then { [_side, _upgrade, _upgrades select _upgrade, false] Spawn WFBE_SE_FNC_ProcessUpgrade; _logik setVariable ["wfbe_upgrading", true, true]; //--- Deduct. [_side,-(_cost select 0)] Call ChangeAICommanderFunds; if ((missionNamespace getVariable "WFBE_C_ECONOMY_CURRENCY_SYSTEM") == 0) then { [_side,-(_cost select 1)] Call ChangeSideSupply; }; }; };/* Define how an AI leader shall attack a town, this whole process can be customized or replaced by other tactics if needed. AI will currently use an ARC system. Parameters: - Team. - Town Assigned. */ Private ["_distance_node","_select","_side","_team","_town_assigned","_wp_dest","_wp_origin","_wp_sel"]; _team = _this select 0; _town_assigned = _this select 1; _wp_origin = getPos (leader _team); _wp_dest = getPos _town_assigned; _select = _wp_origin; //--- Clear the AI waypoints (_team) Call WFBE_CO_FNC_WaypointsRemove; _distance_node = 700; _side = (_team getVariable "wfbe_side") Call WFBE_CO_FNC_GetSideID; //--- If the leader is further than 550m we use a proper attack system. if (_wp_origin distance _wp_dest > _distance_node) then { Private ["_a","_a_path_safe","_a_safe","_angle","_b_path_safe","_b_safe","_dir_to","_max_hops","_nodes","_nodes_a"]; _dir_to = [_town_assigned, _wp_origin] Call WFBE_CO_FNC_GetDirTo; _nodes_a = []; _nodes = 8; _angle = 360/_nodes; for '_i' from 0 to _nodes-1 do { _a = (_dir_to + (_angle*_i)) mod 360; _nodes_a = _nodes_a + [[(_wp_dest select 0) + _distance_node * sin(_a),(_wp_dest select 1) + _distance_node * cos(_a)]]; }; _nodes_a = [_wp_origin, _nodes_a] Call WFBE_CO_FNC_SortByDistance; _max_hops = (missionNamespace getVariable "WFBE_C_AI_TOWN_ATTACK_HOPS_WP")-2; //--- First WP _wp_sel = [[([_nodes_a select 0, 20, 100] Call WFBE_CO_FNC_GetRandomPosition), 'MOVE', 40, 20, [], [], ["AWARE","","COLUMN","NORMAL"]]]; if (random 100 < 30) exitWith {}; //--- Determine the path to follow. _a_safe = [_nodes_a select 1, _side, _town_assigned] Call WFBE_SE_FNC_AI_SetTownAttackPath_PosIsSafe; _b_safe = [_nodes_a select 2, _side, _town_assigned] Call WFBE_SE_FNC_AI_SetTownAttackPath_PosIsSafe; _a_path_safe = [_nodes_a select 0, _nodes_a select 1, 10] Call WFBE_SE_FNC_AI_SetTownAttackPath_PathIsSafe; _b_path_safe = [_nodes_a select 0, _nodes_a select 2, 10] Call WFBE_SE_FNC_AI_SetTownAttackPath_PathIsSafe; if ((!_a_safe && !_b_safe) || (!_a_path_safe && !_b_path_safe)) exitWith {}; if (_a_safe && _b_safe) then { if (random 1 > 0.5) then {_select = if (_a_path_safe) then {_nodes_a select 1} else {_nodes_a select 2}} else {_select = if (_b_path_safe) then {_nodes_a select 2} else {_nodes_a select 1}}; } else { if (_a_safe) then {_select = if (_a_path_safe) then {_nodes_a select 1} else {_nodes_a select 2}} else {_select = if (_b_path_safe) then {_nodes_a select 2} else {_nodes_a select 1}}; }; for '_i' from 0 to 1 do {_nodes_a set [_i, false]}; _nodes_a = _nodes_a - [false]; [_wp_sel, [([_select, 20, 100] Call WFBE_CO_FNC_GetRandomPosition), 'MOVE', 40, 20, [], [], ["AWARE","","WEDGE","NORMAL"]]] Call WFBE_CO_FNC_ArrayPush; //--- Random Path for '_i' from 0 to _nodes-1 do { if (_i >= _max_hops || random 100 < 50) exitWith {}; _nodes_a set [0, false];_nodes_a = _nodes_a - [false]; _nodes_a = [_select, _nodes_a] Call WFBE_CO_FNC_SortByDistance; if !([_select, _nodes_a select 0, 10] Call WFBE_SE_FNC_AI_SetTownAttackPath_PathIsSafe) exitWith {}; _select = _nodes_a select 0; _a_safe = [_select, _side, _town_assigned] Call WFBE_SE_FNC_AI_SetTownAttackPath_PosIsSafe; if !(_a_safe) exitWith {}; if (_a_safe) then {[_wp_sel, [([_select, 20, 100] Call WFBE_CO_FNC_GetRandomPosition), 'MOVE', 60, 30, [], [], []]] Call WFBE_CO_FNC_ArrayPush}; }; [_team, false, _wp_sel] Call WFBE_CO_FNC_WaypointsAdd; }; // TODO CHECK THE COMBAT MODE / SPEED. (LIMITED & COMBAT) // TODO ADD RADIO ON SOME WP COMPLETION - B 1-1 A - HQ, we're attacking %1[town] _wp_sel = []; //--- Todo: May secure the camp. if (random 100 > 50) then { Private ["_behaviour","_camps"]; if ((missionNamespace getVariable "WFBE_C_CAMPS_CREATE") == 1) then { _camps = _town_assigned getVariable "camps"; _camps = [_select, _camps] Call WFBE_CO_FNC_SortByDistance; _behaviour = ["AWARE","","VEE","NORMAL"]; { [_wp_sel, [([_x, 10, 35] Call WFBE_CO_FNC_GetRandomPosition), 'SAD', 40, 20, [], [], _behaviour]] Call WFBE_CO_FNC_ArrayPush; if (random 100 < 65) exitWith {}; _behaviour = []; } forEach _camps; }; }; //--- Depot SAD. [_wp_sel, [([_wp_dest, 10, 150] Call WFBE_CO_FNC_GetRandomPosition), 'SAD', 35, 25, [], [], ["AWARE","","FILE","NORMAL"]]] Call WFBE_CO_FNC_ArrayPush; [_wp_sel, [([_wp_dest, 5, 25] Call WFBE_CO_FNC_GetRandomPosition), 'MOVE', 35, 25, [], [], ["AWARE","","FILE","NORMAL"]]] Call WFBE_CO_FNC_ArrayPush; // [_wp_sel, [([_wp_dest, 10, 35] Call WFBE_CO_FNC_GetRandomPosition), 'SAD', 35, 25, [], [30,45,60], ["COMBAT","","FILE","LIMITED"]]] Call WFBE_CO_FNC_ArrayPush; [_team, false, _wp_sel] Call WFBE_CO_FNC_WaypointsAdd;/* Basic check between two points. Parameters: - Position 1 - Position 2 - Steps */ Private ["_current","_dir_to","_distance","_pos","_posa","_posb","_steps","_safe"]; _posa = _this select 0; _posb = _this select 1; _steps = _this select 2; _distance = (_posa distance _posb) - _steps; _dir_to = [_posa, _posb] Call WFBE_CO_FNC_GetDirTo; _safe = true; _current = _steps; while {_current < _distance} do { _pos = [(_posa select 0) + _current * sin(_dir_to),(_posa select 1) + _current * cos(_dir_to), 0]; if (surfaceIsWater(_pos)) exitWith {_safe = false}; _current = _current + _steps; }; _safe/* Define whether a location is safe or not for the ai to move on. Parameters: - Position. - Side ID. - Town. */ Private ["_hostile","_safe","_sid","_town","_towns","_wp_sel_pos"]; _wp_sel_pos = _this select 0; _sid = _this select 1; _town = _this select 2; _safe = false; if !(surfaceIsWater _wp_sel_pos) then { _towns = (_wp_sel_pos nearEntities [["LocationLogicCity"], 550]) - [_town]; if (count _towns == 0) then { _safe = true } else { _hostile = {(_x getVariable "sideID") != _sid} count _towns; if (_hostile == 0) then {_safe = true}; }; }; _safePrivate ["_building","_built","_config","_crew","_direction","_dir","_distance","_factoryPosition","_factoryType","_id","_index","_isVehicle","_longest","_position","_queu","_queu2","_ret","_side","_sideID","_sideText","_soldier","_team","_turrets","_type","_unitType","_vehicle","_waitTime"]; _id = _this select 0; _building = _this select 1; _unitType = _this select 2; _side = _this select 3; _sideID = (_side) Call GetSideID; _team = _this select 4; _isVehicle = _this select 5; _sideText = str _side; if !(alive _building) exitWith {["INFORMATION", Format ["Server_AlliesBuyUnit.sqf: Unit [%1] construction has been stopped due to factory destruction.", _unitType]] Call WFBE_CO_FNC_LogContent}; diag_log Format["[WFBE (INFORMATION)][frameno:%3 | ticktime:%4] Server_AlliesBuyUnit: AI Team %1 has purchased a '%2'",_team,_unitType,diag_frameno,diag_tickTime]; ["INFORMATION", Format ["Server_AlliesBuyUnit.sqf: [%1] Team has purchased a [%1] unit.",_team, _unitType]] Call WFBE_CO_FNC_LogContent; _queu = _building getVariable "queu"; if (isNil "_queu") then {_queu = []}; _queu = _queu + [_id select 0]; _building setVariable ["queu",_queu]; _type = typeOf _building; if (_type == "CDF_WarfareBBarracks" || _type == "Ins_WarfareBBarracks") then {_type = Call Compile Format ["%1BAR",str _side]}; if (_type == "CDF_WarfareBLightFactory" || _type == "Ins_WarfareBLightFactory") then {_type = Call Compile Format ["%1LVF",str _side]}; if (_type == "CDF_WarfareBHeavyFactory" || _type == "Ins_WarfareBHeavyFactory") then {_type = Call Compile Format ["%1HEAVY",str _side]}; if (_type == "CDF_WarfareBAircraftFactory" || _type == "Ins_WarfareBAircraftFactory") then {_type = Call Compile Format ["%1AIR",str _side]}; _index = (missionNamespace getVariable Format ["WFBE_%1STRUCTURENAMES",_sideText]) find _type; _distance = (missionNamespace getVariable Format ["WFBE_%1STRUCTUREDISTANCES",_sideText]) select _index; _direction = (missionNamespace getVariable Format ["WFBE_%1STRUCTUREDIRECTIONS",_sideText]) select _index; _factoryType = (missionNamespace getVariable Format ["WFBE_%1STRUCTURES",_sideText]) select _index; _waitTime = (missionNamespace getVariable _unitType) select QUERYUNITTIME; _position = [getPos _building,_distance,getDir _building + _direction] Call GetPositionFrom; _longest = missionNamespace getVariable Format ["WFBE_LONGEST%1BUILDTIME",_factoryType]; _ret = 0; _queu2 = [0]; if (count _queu > 0) then { _queu2 = _building getVariable "queu"; }; while {_id select 0 != _queu select 0} do { sleep 4; _ret = _ret + 4; _queu = _building getVariable "queu"; if (!(alive _building)||(isNull _building)) exitWith { _queu = _building getVariable "queu"; _queu = _queu - [_queu select 0]; _building setVariable ["queu",_queu]; ["INFORMATION", Format ["Server_AlliesBuyUnit.sqf: Unit [%1] construction has been stopped due to factory destruction.", _unitType]] Call WFBE_CO_FNC_LogContent; }; if (_queu select 0 == _queu2 select 0) then { if (_ret > _longest) then { if (count _queu > 0) then { _queu = _building getVariable "queu"; _queu = _queu - [_queu select 0]; _building setVariable ["queu",_queu]; }; }; }; if (count _queu != count _queu2) then { _ret = 0; _queu2 = _building getVariable "queu"; }; }; sleep _waitTime; _queu = _building getVariable "queu"; _queu = _queu - [_id select 0]; _building setVariable ["queu",_queu]; if !(alive _building) exitWith {["INFORMATION", Format ["Server_AlliesBuyUnit.sqf: Unit [%1] construction has been stopped due to factory destruction.", _unitType]] Call WFBE_CO_FNC_LogContent}; if (_unitType isKindOf "Man") then { _soldier = [_unitType,_team,_position,_sideID] Call WFBE_CO_FNC_CreateUnit; [_sideText,'UnitsCreated',1] Call UpdateStatistics; //--- Infantry can use the team vehicles as cargo. _vehicle = [_team,true] Call GetTeamVehicles; {_team addVehicle _x} forEach _vehicle; } else { _crew = missionNamespace getVariable Format["WFBE_%1ALLIESSOLDIER",_sideText]; _factoryPosition = getPos _building; _dir = -((((_position select 1) - (_factoryPosition select 1)) atan2 ((_position select 0) - (_factoryPosition select 0))) - 90); if (_unitType isKindOf "Tank") then {_crew = missionNamespace getVariable Format ["WFBE_%1ALLIESCREW",_sideText]}; if (_unitType isKindOf "Air") then {_crew = missionNamespace getVariable Format ["WFBE_%1ALLIESPILOT",_sideText]}; _special = if (_unitType isKindOf "Plane") then {"FLY"} else {"NONE"}; _vehicle = [_unitType, _position, _sideID, _dir, true, true, true, _special] Call WFBE_CO_FNC_CreateVehicle; /* Clear the vehicle */ (_vehicle) call WFBE_CO_FNC_ClearVehicleCargo; emptyQueu = emptyQueu + [_vehicle]; _vehicle Spawn HandleEmptyVehicle; _soldier = [_crew,_team,_position,_sideID] Call WFBE_CO_FNC_CreateUnit; [_soldier] allowGetIn true; [_soldier] orderGetIn true; _soldier assignAsDriver _vehicle; _soldier moveInDriver _vehicle; [_sideText,'VehiclesCreated',1] Call UpdateStatistics; _built = 1; if (_isVehicle select 1) then { _soldier = [_crew,_team,_position,_sideID] Call WFBE_CO_FNC_CreateUnit; [_soldier] allowGetIn true; [_soldier] orderGetIn true; _soldier assignAsGunner _vehicle; _soldier moveInGunner _vehicle; _built = _built + 1; }; if (_isVehicle select 2) then { _soldier = [_crew,_team,_position,_sideID] Call WFBE_CO_FNC_CreateUnit; [_soldier] allowGetIn true; [_soldier] orderGetIn true; _soldier assignAsCommander _vehicle; _soldier moveInCommander _vehicle; _built = _built + 1; }; if (_isVehicle select 3) then { Private ["_get","_turrets"]; _get = missionNamespace getVariable _unitType; _turrets = _get select QUERYUNITTURRETS; { if (isNull (_vehicle turretUnit _x)) then { _soldier = [_crew,_team,_position,_sideID] Call WFBE_CO_FNC_CreateUnit; [_soldier] allowGetIn true; _soldier moveInTurret [_vehicle, _x]; _built = _built + 1; }; } forEach _turrets; }; [_sideText,'UnitsCreated',_built] Call UpdateStatistics; };Private["_damage","_damagedBy","_logik","_side","_structure"]; _structure = _this select 0; _damagedBy = _this select 1; _damage = _this select 2; _side = _structure getVariable "wfbe_side"; _logik = (_side) Call WFBE_CO_FNC_GetSideLogic; if ((getDammage _structure) + (_damage / (missionNamespace getVariable "WFBE_C_STRUCTURES_DAMAGES_REDUCTION")) < 1) then { if (time - (_logik getVariable "wfbe_structure_lasthit") > 30 && _damage > 0.05) then { _logik setVariable ["wfbe_structure_lasthit", time]; [_side, "IsUnderAttack", ["Base", _structure]] Spawn SideMessage; }; };Private ['_building','_dammages','_origin','_side','_sideBuilding','_side']; _building = _this select 0; _dammages = _this select 1; _origin = _this select 2; _sideBuilding = _building getVariable "wfbe_side"; _side = side _origin; if (_side in [_sideBuilding, sideEnemy]) then { _dammages = false; } else { _dammages = [_building, _dammages] Call HandleBuildingDamage; }; _dammagesPrivate ['_current','_find','_killer','_logik','_structure','_structures','_side','_tked','_type','_uid']; _structure = _this select 0; _killer = _this select 1; _type = _this select 2; _side = _structure getVariable "wfbe_side"; _logik = (_side) Call WFBE_CO_FNC_GetSideLogic; ["INFORMATION", Format ["Server_BuildingKilled.sqf: [%1] Structure [%2] has been destroyed by [%3].",str _side, _type, _killer]] Call WFBE_CO_FNC_LogContent; //--- Building Teamkill. if ((side _killer == _side)&&(isPlayer(_killer))) then { _uid = getPlayerUID _killer; if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_UID_SHOW") == 0) then {_uid = "xxxxxxx"}; [_side, "LocalizeMessage", ['BuildingTeamkill',name _killer,_uid,_type]] Call WFBE_CO_FNC_SendToClients; ["INFORMATION", Format ["Server_BuildingKilled.sqf: [%1] [%2] has teamkilled a friendly structure.",name _killer,_uid]] Call WFBE_CO_FNC_LogContent; }; //--- Decrement building limit. _find = (missionNamespace getVariable Format ['WFBE_%1STRUCTURENAMES',_side]) find _type; if (_find != -1) then { _current = _logik getVariable "wfbe_structures_live"; _current set [_find - 1, (_current select (_find-1)) - 1]; _logik setVariable ["wfbe_structures_live", _current, true]; }; _logik setVariable ["wfbe_structures", (_logik getVariable "wfbe_structures") - [_structure, objNull], true]; [_side, "Destroyed", ["Base", _structure]] Spawn SideMessage; //--- Can be fixed with workers. if ((missionNamespace getVariable "WFBE_C_STRUCTURES_CONSTRUCTION_MODE") == 1) then { Private ["_nearLogic","_position","_sold"]; _sold = _structure getVariable "sold"; if (isNil '_sold') then { //--- Grab the logic. _position = getPos _structure; _nearLogic = _position nearEntities [["LocationLogicStart"],15]; _nearLogic = [_position, _nearLogic] Call WFBE_CO_FNC_GetClosestEntity; if (isNull _nearLogic) exitWith {}; //--- Completed at 25% on destruction, dropping until it reach 0 (delete). _nearLogic setVariable ["WFBE_B_Completion", 25]; //--- The ratio gets lower after each destruction. _nearLogic setVariable ["WFBE_B_CompletionRatio", (_nearLogic getVariable "WFBE_B_CompletionRatio")*0.8]; //--- Can be repaired. _nearLogic setVariable ["WFBE_B_Repair", true]; _logik setVariable ["wfbe_structures_logic", (_logik getVariable "wfbe_structures_logic") + [_nearLogic]]; [_nearLogic, typeOf _structure, _side, _find - 1] Spawn HandleBuildingRepair; }; }; sleep 10; deleteVehicle _structure; Private ["_building","_built","_config","_crew","_direction","_dir","_distance","_factoryType","_factoryPosition","_gbq","_id","_index","_isVehicle","_longest","_position","_queu","_queu2","_ret","_side","_sideID","_sideText","_soldier","_team","_turrets","_type","_unitType","_vehicle","_waitTime"]; _id = _this select 0; _building = _this select 1; _unitType = _this select 2; _side = _this select 3; _sideID = (_side) Call GetSideID; _team = _this select 4; _isVehicle = _this select 5; _sideText = str _side; if (!(alive _building)||(isPlayer (leader _team))) exitWith { _gbq = (_team getVariable "wfbe_queue") - _id; _team setVariable ["wfbe_queue",_gbq]; if !(alive _building) then {["INFORMATION", Format ["Server_BuyUnit.sqf: Unit [%1] construction has been stopped due to factory destruction.", _unitType]] Call WFBE_CO_FNC_LogContent}; if (isPlayer (leader _team)) then {["INFORMATION", Format ["Server_BuyUnit.sqf: Unit [%1] has been canceled, player [%2] has replace the ai.", _unitType, name (leader _team)]] Call WFBE_CO_FNC_LogContent}; }; ["INFORMATION", Format ["Server_BuyUnit.sqf: [%1] Team [%2] has purchased [%3].", _side,_team,_unitType]] Call WFBE_CO_FNC_LogContent; _queu = _building getVariable "queu"; if (isNil "_queu") then {_queu = []}; _queu = _queu + [_id select 0]; _building setVariable ["queu",_queu,true]; _type = typeOf _building; _index = (missionNamespace getVariable Format ["WFBE_%1STRUCTURENAMES",_sideText]) find _type; _distance = (missionNamespace getVariable Format ["WFBE_%1STRUCTUREDISTANCES",_sideText]) select _index; _direction = (missionNamespace getVariable Format ["WFBE_%1STRUCTUREDIRECTIONS",_sideText]) select _index; _factoryType = (missionNamespace getVariable Format ["WFBE_%1STRUCTURES",_sideText]) select _index; _waitTime = (missionNamespace getVariable _unitType) select QUERYUNITTIME; _position = [getPos _building,_distance,getDir _building + _direction] Call GetPositionFrom; _longest = missionNamespace getVariable Format ["WFBE_LONGEST%1BUILDTIME",_factoryType]; _ret = 0; _queu2 = [0]; if (count _queu > 0) then { _queu2 = _building getVariable "queu"; }; while {_id select 0 != _queu select 0} do { sleep 4; _ret = _ret + 4; _queu = _building getVariable "queu"; if (!(alive _building)||(isNull _building)||(isPlayer (leader _team))) exitWith { _gbq = (_team getVariable "wfbe_queue") - _id; _team setVariable ["wfbe_queue",_gbq]; _queu = _building getVariable "queu"; _queu = _queu - [_queu select 0]; _building setVariable ["queu",_queu,true]; if !(alive _building) then {["INFORMATION", Format ["Server_BuyUnit.sqf: Unit [%1] construction has been stopped due to factory destruction.", _unitType]] Call WFBE_CO_FNC_LogContent}; if (isPlayer (leader _team)) then {["INFORMATION", Format ["Server_BuyUnit.sqf: Unit [%1] has been canceled, player [%2] has replace the ai.", _unitType, name (leader _team)]] Call WFBE_CO_FNC_LogContent}; }; if (_queu select 0 == _queu2 select 0) then { if (_ret > _longest) then { if (count _queu > 0) then { _queu = _building getVariable "queu"; _queu = _queu - [_queu select 0]; _building setVariable ["queu",_queu,true]; }; }; }; if (count _queu != count _queu2) then { _ret = 0; _queu2 = _building getVariable "queu"; }; }; sleep _waitTime; _queu = _building getVariable "queu"; _queu = _queu - [_id select 0]; _building setVariable ["queu",_queu,true]; if (!(alive _building)||(isPlayer (leader _team))) exitWith { _gbq = (_team getVariable "wfbe_queue") - _id; _team setVariable ["wfbe_queue",_gbq]; if !(alive _building) then {["INFORMATION", Format ["Server_BuyUnit.sqf: Unit [%1] construction has been stopped due to factory destruction.", _unitType]] Call WFBE_CO_FNC_LogContent}; if (isPlayer (leader _team)) then {["INFORMATION", Format ["Server_BuyUnit.sqf: Unit [%1] has been canceled, player [%2] has replace the ai.", _unitType, name (leader _team)]] Call WFBE_CO_FNC_LogContent}; }; if (_unitType isKindOf "Man") then { _soldier = [_unitType,_team,_position,_sideID] Call WFBE_CO_FNC_CreateUnit; [_sideText,'UnitsCreated',1] Call UpdateStatistics; } else { _factoryPosition = getPos _building; _dir = -((((_position select 1) - (_factoryPosition select 1)) atan2 ((_position select 0) - (_factoryPosition select 0))) - 90); _crew = missionNamespace getVariable Format ["WFBE_%1SOLDIER",_sideText]; if (_unitType isKindOf "Tank") then {_crew = missionNamespace getVariable Format ["WFBE_%1CREW",_sideText]}; if (_unitType isKindOf "Air") then {_crew = missionNamespace getVariable Format ["WFBE_%1PILOT",_sideText]}; _special = if (_unitType isKindOf "Plane") then {"FLY"} else {"NONE"}; _vehicle = [_unitType, _position, _sideID, _dir, true, true, true, _special] Call WFBE_CO_FNC_CreateVehicle; emptyQueu = emptyQueu + [_vehicle]; _vehicle Spawn HandleEmptyVehicle; if (_vehicle distance (leader _team) < 200) then {(units _team) allowGetIn true;_team addVehicle _vehicle}; //--- Clear the vehicle. (_vehicle) call WFBE_CO_FNC_ClearVehicleCargo; _soldier = [_crew,_team,_position,_sideID] Call WFBE_CO_FNC_CreateUnit; [_soldier] allowGetIn true; [_soldier] orderGetIn true; if ((missionNamespace getVariable "WFBE_C_UNITS_BALANCING") > 0) then {(_vehicle) Spawn BalanceInit}; if (_unitType isKindOf "Air") then { if !(WF_A2_Vanilla) then { switch (missionNamespace getVariable "WFBE_C_MODULE_WFBE_FLARES") do { //--- Remove CM if needed. case 0: {(_vehicle) Call WFBE_CO_FNC_RemoveCountermeasures}; //--- Disabled. case 1: { //--- Enabled with upgrades. if (((_side Call WFBE_CO_FNC_GetSideUpgrades) select WFBE_UP_FLARESCM) == 0) then { (_vehicle) Call WFBE_CO_FNC_RemoveCountermeasures; }; }; }; }; }; _soldier assignAsDriver _vehicle; _soldier moveInDriver _vehicle; [_sideText,'VehiclesCreated',1] Call UpdateStatistics; _built = 1; if (_isVehicle select 1) then { _soldier = [_crew,_team,_position,_sideID] Call WFBE_CO_FNC_CreateUnit; [_soldier] allowGetIn true; [_soldier] orderGetIn true; _soldier assignAsGunner _vehicle; _soldier moveInGunner _vehicle; _built = _built + 1; }; if (_isVehicle select 2) then { if (vehicle leader _team == leader _team && leader _team distance _vehicle < 200 && alive leader _team) then { [leader _team] allowGetIn true; [leader _team] orderGetIn true; (leader _team) assignAsCommander _vehicle; (leader _team) moveInCommander _vehicle; } else { _soldier = [_crew,_team,_position,_sideID] Call WFBE_CO_FNC_CreateUnit; [_soldier] allowGetIn true; [_soldier] orderGetIn true; _soldier assignAsCommander _vehicle; _soldier moveInCommander _vehicle; }; _built = _built + 1; }; if (_isVehicle select 3) then { Private ["_get","_turrets"]; _get = missionNamespace getVariable _unitType; _turrets = _get select QUERYUNITTURRETS; { if (isNull (_vehicle turretUnit _x)) then { _soldier = [_crew,_team,_position,_sideID] Call WFBE_CO_FNC_CreateUnit; [_soldier] allowGetIn true; _soldier moveInTurret [_vehicle, _x]; _built = _built + 1; }; } forEach _turrets; }; [_sideText,'UnitsCreated',_built] Call UpdateStatistics; }; _gbq = (_team getVariable "wfbe_queue") - _id; _team setVariable ["wfbe_queue",_gbq];/* Author: Benny Name: Server_CanUpdateTeam.sqf Parameters: 0 - Group Description: This function detect whether a human commander is in command or not and if a team is in the 'main' teams. */ Private ['_canUpdate','_commander','_team']; _team = _this; _canUpdate = true; if !(isNil {_team getVariable "wfbe_persistent"}) then { _commander = (side _team) Call WFBE_CO_FNC_GetCommanderTeam; if !(isNull _commander) then {_canUpdate = false}; }; _canUpdatePrivate ["_amount","_logik","_side"]; _side = _this select 0; _amount = _this select 1; _logik = (_side) Call WFBE_CO_FNC_GetSideLogic; _logik setVariable ["wfbe_aicom_funds", (_side Call GetAICommanderFunds) + _amount];Private ["_created","_current","_dir","_i","_object","_origin","_relDir","_relPos","_skip","_template","_toplace","_toWorld"]; _origin = _this select 0; _template = _this select 1; _existingTemplate = if (count _this > 2) then {_this select 2} else {[]}; _dir = getDir _origin; _created = []; _toplace = objNull; for '_i' from 0 to count(_template)-1 do { _current = _template select _i; _object = _current select 0; _relPos = _current select 1; _relDir = _current select 2; _skip = false; if (_i < count(_existingTemplate)) then { if (alive(_existingTemplate select _i)) then {_skip = true}; }; if !(_skip) then { _toplace = createVehicle [_object, [0,0,0], [], 0, "NONE"]; _toplace setVariable ["wfbe_defense", true]; //--- This is one of our defenses. _toWorld = _origin modelToWorld _relPos; _toWorld set [2,0]; _toplace setDir (_dir - _relDir); _toplace setPos _toWorld; } else { _toplace = _existingTemplate select _i; }; _created = _created + [_toplace]; }; _created/* AI Delegation Specific Functions. Scope: Server. */ /* Delegate Town AI creation to client with failover. Parameters: - Town - Side - Groups - Spawn positions - Groups */ WFBE_SE_FNC_DelegateAITown = { Private ["_groups", "_positions", "_side", "_teams", "_town", "_town_teams", "_town_vehicles"]; _town = _this select 0; _side = _this select 1; _groups = +(_this select 2); _positions = +(_this select 3); _teams = +(_this select 4); _town_teams = []; _town_vehicles = []; _delegators = (count _groups) call WFBE_SE_FNC_GetDelegators; //--- Get the delegators. diag_log format["DEBUG DELEGATION:: DelegateAITown.sqf Delegators: %1", _delegators]; //--- Delegate units and create units on the server if we don't have enough delegators. for '_i' from 0 to count(_groups)-1 do { if (_i < count _delegators) then { Private ["_uid"]; _uid = getPlayerUID(_delegators select _i); if !(WF_A2_Vanilla) then { [_delegators select _i, "HandleSpecial", ['delegate-townai', _town, _side, [_groups select _i], [_positions select _i], [_teams select _i]]] Call WFBE_CO_FNC_SendToClient; } else { [_uid, "HandleSpecial", ['delegate-townai', _town, _side, [_groups select _i], [_positions select _i], [_teams select _i]]] Call WFBE_CO_FNC_SendToClients; }; [_uid, "increment"] Call WFBE_SE_FNC_DelegationOperate; //--- Increment the group count for that client. [_uid, _teams select _i] Spawn WFBE_SE_FNC_DelegationTracker; //--- Track a group until it's nullification. ["INFORMATION", Format["Server_DelegateAITown.sqf: [%1] Town [%2] Units [%3] in group [%4] were delegated to client [%5].", _side, _town, _groups select _i, _teams select _i, name (_delegators select _i)]] Call WFBE_CO_FNC_LogContent; _groups set [_i, "**NIL**"]; _positions set [_i, "**NIL**"]; _teams set [_i, "**NIL**"]; }; }; _groups = _groups - ["**NIL**"]; _positions = _positions - ["**NIL**"]; _teams = _teams - ["**NIL**"]; if (count _groups > 0) then { //--- Some units left for the server to create? _retVal = [_town, _side, _groups, _positions, _teams] call WFBE_CO_FNC_CreateTownUnits; _town_teams = _town_teams + (_retVal select 0); _town_vehicles = _town_vehicles + (_retVal select 1); }; [_town_teams, _town_vehicles] }; /* Operate a delegator groups count. Parameters: - Client UID. - Operate (increment/decrement). */ WFBE_SE_FNC_DelegationOperate = { Private ["_delegator", "_get", "_uid"]; _uid = _this select 0; _operation = _this select 1; _get = missionNamespace getVariable format["WFBE_AI_DELEGATION_%1", _uid]; if !(isNil '_get') then { switch (_operation) do { //--- Operate. case "increment": {_get set [1, (_get select 1) + 1]}; case "decrement": {_get set [1, if ((_get select 1) > 0) then {(_get select 1) - 1} else {0}]}; }; missionNamespace setVariable [format["WFBE_AI_DELEGATION_%1", _uid], _get]; }; }; /* Track the delegation of a group. Parameters: - Client UID. - Group. */ WFBE_SE_FNC_DelegationTracker = { Private ["_delegator", "_group", "_uid"]; _uid = _this select 0; _group = _this select 1; _id = (_uid) Call WFBE_SE_FNC_GetDelegatorID; while {!isNull _group} do {sleep 5}; if (_id == (_uid Call WFBE_SE_FNC_GetDelegatorID)) then { //--- Only decrement if the session ID is the same (make sure that the player didn't disconnect in the meanwhile). [_uid, "decrement"] Call WFBE_SE_FNC_DelegationOperate; //--- Increment the group count for that client. }; }; /* Return the session ID of a delegator. Parameters: - Client UID. */ WFBE_SE_FNC_GetDelegatorID = { Private ["_get", "_id", "_uid"]; _uid = _this; _get = missionNamespace getVariable format["WFBE_AI_DELEGATION_%1", _uid]; _id = if !(isNil '_get') then {_get select 2} else {-1}; _id }; /* Get the available delegators. Parameters: - Count. */ WFBE_SE_FNC_GetDelegators = { Private ["_amount", "_count", "_delegators", "_fps", "_get", "_limit", "_unit", "_units"]; _count = _this; _units = if (isMultiplayer) then {playableUnits} else {switchableUnits}; _limit = missionNamespace getVariable "WFBE_C_AI_DELEGATION_GROUPS_MAX"; _fps = missionNamespace getVariable "WFBE_C_AI_DELEGATION_FPS_MIN"; _delegators = []; _amount = 1; while {count _units != 0 && count _delegators < _count && _amount <= _limit} do { for '_i' from 0 to (count _units)-1 do { _unit = _units select _i; if (isPlayer _unit) then { //--- Only get players. _get = missionNamespace getVariable format["WFBE_AI_DELEGATION_%1", getPlayerUID _unit]; if !(isNil '_get') then { //--- Make sure the client already communicated with the server. if ((_get select 0) >= _fps && ((_get select 1) + ({_x == _unit} count _delegators)) <= _limit) then { //--- Check that the client FPS avg is above the FPS min and that it still has room for groups. if ((_get select 1) < _amount) then { //--- Progressive checks to prevent client overloading. _delegators = _delegators + [_unit]; }; } else { _units set [_i, "**NIL**"]; }; } else { _units set [_i, "**NIL**"]; }; } else { _units set [_i, "**NIL**"]; }; if (count _delegators >= _count) exitWith {}; }; _units = _units - ["**NIL**"]; _amount = _amount + 1; }; _delegators };/* Town defenses Specific Functions. Scope: Server. */ /* Manage or spawn mortars in a town if needed. Parameters: - Town. - Side. */ WFBE_SE_FNC_ManageTownMortars = { Private ["_side", "_sideID", "_town"]; _town = _this select 0; _side = _this select 1; _sideID = (_side) Call WFBE_CO_FNC_GetSideID; _spawned = _town getVariable "wfbe_mortars_spawned"; if !(isNil "_spawned") then { //--- If previous mortars set exists, remove them if needed. {deleteVehicle _x} forEach ((_spawned select 0) + (_spawned select 1)); }; [_town, _side] Call WFBE_SE_FNC_SpawnTownMortars; }; /* Acquire a shelling position for the mortars. Parameters: - Town - Side */ WFBE_SE_FNC_MortarGetShellPosition = { Private ["_defensive_group", "_friendly_id", "_mortars", "_objects", "_objects_tooclose", "_precognition", "_range_max", "_range_min", "_regroup_range", "_scan", "_side", "_target", "_targets", "_targets_force", "_targets_scanned", "_town", "_units", "_units_friendly", "_units_hostile", "_xtot", "_ytot"]; _town = _this select 0; _side = _this select 1; _scan = ["Man","Car","Motorcycle","Tank","Air","Ship","StaticWeapon"]; _mortars = (_town getVariable "wfbe_mortars_spawned") select 0; //--- Retrieve the mortars. _xtot = 0; _ytot = 0; {_pos = getPos _x; _xtot = _xtot + (_pos select 0); _ytot = _ytot + (_pos select 1);} forEach _mortars; _xtot = _xtot / (count _mortars); _ytot = _ytot / (count _mortars); _objects_tooclose = ([_xtot, _ytot, 0] nearEntities [_scan, missionNamespace getVariable "WFBE_C_TOWNS_MORTARS_RANGE_MIN"]) unitsBelowHeight 5; //--- Get the entities within the mortar min fire range. _objects = (_town nearEntities [_scan, missionNamespace getVariable "WFBE_C_TOWNS_MORTARS_RANGE_MAX"]) unitsBelowHeight 5; //--- Get the entities within the max fire range. _objects = _objects - _objects_tooclose; //--- Remove the units which are too close of the mortars centroid. _units = [_objects, [west, east, resistance]] Call WFBE_CO_FNC_GetUnitsPerSide; //--- Filter the units per side. _friendly_id = [west, east, resistance] find _side; _units_friendly = _units select _friendly_id; _units_hostile = []; for '_i' from 0 to 2 do {if (_i != _friendly_id) then {_units_hostile = _units_hostile + (_units select _i)}}; if (count _units_hostile == 0) exitWith {[]}; //--- Don't bother if there is no targets in range. _defensive_group = missionNamespace getVariable Format ["WFBE_%1_DefenseTeam", _side]; _precognition = missionNamespace getVariable "WFBE_C_TOWNS_MORTARS_PRECOGNITION"; _regroup_range = missionNamespace getVariable "WFBE_C_TOWNS_MORTARS_SCAN"; _targets = []; _targets_scanned = []; { if !(_x in _targets_scanned) then { _near = _x nearEntities [_scan, _regroup_range]; if ((_side countSide _near) == 0) then { if (random 100 <= _precognition || _defensive_group knowsAbout _x >= 1) then { [_targets, _near] Call WFBE_CO_FNC_ArrayPush; {if !(_x in _targets_scanned) then {[_targets_scanned, _x] Call WFBE_CO_FNC_ArrayPush}} forEach _near; }; }; }; } forEach _units_hostile; //--- Retrieve the potential targets. if (count _targets == 0) exitWith {[]}; //--- Don't bother if there is no targets to fire at. _targets_force = []; for '_i' from 0 to (count _targets)-1 do {{[_targets_force, _i] Call WFBE_CO_FNC_ArrayPush} forEach (_targets select _i)}; //--- The more the targets, the more the chance to target. _targets_force = (_targets_force) Call WFBE_CO_FNC_ArrayShuffle; //--- Shuffle the array. _target = _targets_force select floor(random count _targets_force); //--- Get a random index, this will be our target. _target = _targets select _target; //--- Retrieve a unit bunch from our targets. _target = _target select floor(random count _target); //--- Retrieve a single unit among the unit array. getPos _target }; /* Handle the mortar support. Parameters: - Town - Mortars */ WFBE_SE_FNC_MortarSupport = { Private ["_interval", "_mortar_lastfired", "_mortars", "_process", "_side", "_town"]; _town = _this select 0; _mortars = _this select 1; _side = (_town getVariable "sideID") Call WFBE_CO_FNC_GetSideFromID; _interval = missionNamespace getVariable "WFBE_C_TOWNS_MORTARS_INTERVAL"; _mortar_lastfired = time - (_interval - (_interval / 8)); _process = true; while {_process} do { sleep 20; _process = false; { if (alive _x) then {if (alive gunner _x) then {if (local gunner _x) then {_process = true}}}; if (_process) exitWith {}; } forEach _mortars; if (time - _mortar_lastfired > _interval && _process) then { //--- Ready to fire, acquire a new target. _target = [_town, _side] Call WFBE_SE_FNC_MortarGetShellPosition; //--- Attempt to acquire a target for the mortars. if (count _target > 0) then { _mortar_lastfired = time; {if (alive _x) then {if (alive gunner _x && !someAmmo _x) then {if (local gunner _x) then {[_x, _side] Call RearmVehicle}}}} forEach _mortars; //--- Rearm the mortars before firing if needed. [_mortars, _target, _side] Call WFBE_SE_FNC_MortarRequestFireMission; //--- Request a fire mission. ["INFORMATION", Format ["WFBE_SE_FNC_MortarSupport : [%1] [%2] Mortars are now firing on target [%3] [%4].", _town, _side, _target, typeOf _target]] Call WFBE_CO_FNC_LogContent; }; }; }; }; /* Request a fire mission from the mortars. Parameters: - Mortars - Position - Side */ WFBE_SE_FNC_MortarRequestFireMission = { Private ["_mortars", "_position", "_side", "_splash_range"]; _mortars = _this select 0; _position = _this select 1; _side = _this select 2; _splash_range = missionNamespace getVariable "WFBE_C_TOWNS_MORTARS_SPLASH_RANGE"; {if (alive _x) then {if (alive gunner _x) then {if (local gunner _x) then {[_x, _position, _side, _splash_range] Spawn WFBE_CO_FNC_FireArtillery}}}} forEach _mortars; }; /* Spawn mortars in a town. Parameters: - Town. - Side. */ WFBE_SE_FNC_SpawnTownMortars = { Private ["_index", "_mortar", "_position", "_set", "_side", "_town"]; _town = _this select 0; _side = _this select 1; _mortar = missionNamespace getVariable Format["WFBE_%1DEFENSES_MORTAR", _side]; if (isNil '_mortar') exitWith {}; if (count _mortar == 0) exitWith {}; //--- Get a spawn position. _position = _town getVariable "wfbe_town_mortars"; _position = _position select floor(random count _position); _mortar = _mortar select floor (random count _mortar); _direction = direction _position; //--- Generate a random setup depending on town SV, tbd: make better mortar base ! _set = []; if ((_town getVariable "maxSupplyValue") >= 80) then { _set = [[_mortar,[0,0,0]], [_mortar,[-5,-5,0]], [_mortar,[5,-5,0]]]; } else { _set = [[_mortar,[-3,0,0]], [_mortar,[3,0,0]]]; }; _mortars = [[],[]]; //--- First is mortar, second are statics (walls..). { _type = _x select 0; _worldposition = _x select 1; _created = createVehicle [_type, [0,0,0], [], 0, "NONE"]; _toWorld = _position modelToWorld _worldposition; _toWorld set [2,0]; _created setDir _direction; _created setPos _toWorld; _created lock true; _index = if (_type == _mortar) then {0} else {1}; [_mortars select _index, _created] Call WFBE_CO_FNC_ArrayPush; } forEach _set; _town setVariable ["wfbe_mortars_spawned", _mortars]; };(_this Call WFBE_CO_FNC_GetSideLogic) getVariable "wfbe_aicom_funds"/* Get the available delegators. Parameters: - Count */ Private ["_amount", "_count", "_delegators", "_fps", "_get", "_limit", "_unit", "_units"]; _count = _this; _units = if (isMultiplayer) then {playableUnits} else {switchableUnits}; _limit = missionNamespace getVariable "WFBE_C_AI_DELEGATION_GROUPS_MAX"; _fps = missionNamespace getVariable "WFBE_C_AI_DELEGATION_FPS_MIN"; _delegators = []; _amount = 1; while {count _units != 0 && count _delegators < _count && _amount <= _limit} do { for '_i' from 0 to count(_units)-1 do { _unit = _units select _i; if (isPlayer _unit) then { //--- Only get players. _get = missionNamespace getVariable format["WFBE_AI_DELEGATION_%1", getPlayerUID _unit]; if !(isNil '_get') then { //--- Make sure the client already communicated with the server. if ((_get select 0) >= _fps && (_get select 1) <= _limit) then { //--- Check that the client FPS avg is above the FPS min and that it still has room for groups. if ((_get select 1) < _amount) then { //--- Progressive checks to prevent client overloading. _delegators = _delegators + [_unit]; }; } else { _units = _units set [_i, "**NIL**"]; }; } else { _units = _units set [_i, "**NIL**"]; }; } else { _units = _units set [_i, "**NIL**"]; }; if (count _delegators >= _count) exitWith {}; }; _units = _units - ["**NIL**"]; _amount = _amount + 1; }; _delegators/* Return a list of groups to spawn in a town. Parameters: - Town Entity. - Side. */ // Private ["_aa_get","_get","_groups","_infantry","_infantry_aux","_infantry_primary","_kind","_maxgroups","_ratio_inf","_ratio_inf_aux","_ratio_veh","_ratio_veh_aux","_side","_remove","_sv","_town","_types","_vehicles","_vehicles_aux","_vehicles_primary"]; _town = _this select 0; _side = _this select 1; _aa_get = if (count _this > 2) then {_this select 2} else {false}; _sv = _town getVariable "supplyValue"; _town_airactive = _town getVariable "wfbe_active_air"; _units = []; _percentage_inf = 50; _groups_max = 0; _randomize = 0; // _units = [[group type, force (multiplier), raw kind (0 inf, 1 veh)]] switch (true) do { case (_sv < 10): { _units = [["Team", 1, 0]]; _percentage_inf = 100; _groups_max = 1; }; case (_sv >= 10 && _sv < 20): { _units = [["Team", 2, 0],["Team_MG", 1, 0],["Team_AT", 1, 0]]; _percentage_inf = 85; _groups_max = 2; }; case (_sv >= 20 && _sv < 40): { _units = [["Squad", 2, 0],["Team_MG", 1, 0],["Team", 2, 0],["Team_AT", 2, 0],["Team_AA", 1, 0],["Team_Sniper", 1, 0],["Motorized", 2, 1]]; _percentage_inf = 80; _groups_max = 3; _randomize = 2; }; case (_sv >= 40 && _sv < 60): { _units = [["Squad", 2, 0],["Team_MG", 1, 0],["Team", 2, 0],["Team_AT", 2, 0],["Team_AA", 1, 0],["Team_HAT", 1, 0],["Squad_Advanced", 1, 0],["Team_Sniper", 2, 0],["Motorized", 2, 1],["Mechanized", 2, 1],["AA_Light", 1, 1]]; _percentage_inf = 75; _groups_max = 4; _randomize = 2; }; case (_sv >= 60 && _sv < 80): { _units = [["Squad", 2, 0],["Team_MG", 1, 0],["Team", 2, 0],["Team_AT", 2, 0],["Team_AA", 2, 0],["Team_HAT", 2, 0],["Squad_Advanced", 1, 0],["Team_Sniper", 2, 0],["Motorized", 1, 1],["Mechanized", 2, 1],["Mechanized_Heavy", 1, 1],["AA_Light", 2, 1],["Armored_Light", 1, 1]]; _percentage_inf = 70; _groups_max = 5; _randomize = 1; }; case (_sv >= 80 && _sv < 100): { _units = [["Squad", 2, 0],["Team_MG", 1, 0],["Team", 1, 0],["Team_AT", 2, 0],["Team_AA", 2, 0],["Team_HAT", 2, 0],["Squad_Advanced", 2, 0],["Team_Sniper", 2, 0],["Motorized", 1, 1],["Mechanized", 1, 1],["Mechanized_Heavy", 2, 1],["AA_Light", 2, 1],["Armored_Light", 2, 1]]; _percentage_inf = 65; _groups_max = 6; _randomize = 1; }; case (_sv >= 100 && _sv < 120): { _units = [["Squad", 2, 0],["Team_MG", 1, 0],["Team", 1, 0],["Team_AT", 2, 0],["Team_AA", 2, 0],["Team_HAT", 2, 0],["Squad_Advanced", 2, 0],["Team_Sniper", 2, 0],["Motorized", 1, 1],["Mechanized", 1, 1],["Mechanized_Heavy", 2, 1],["AA_Light", 1, 1],["AA_Heavy", 2, 1],["Armored_Heavy", 2, 1],["Armored_Light", 2, 1]]; _percentage_inf = 60; _groups_max = 7; }; case (_sv >= 120): { _units = [["Squad", 2, 0],["Team_MG", 1, 0],["Team", 2, 0],["Team_AT", 2, 0],["Team_AA", 2, 0],["Team_HAT", 2, 0],["Squad_Advanced", 2, 0],["Team_Sniper", 2, 0],["Motorized", 1, 1],["Mechanized", 1, 1],["Mechanized_Heavy", 2, 1],["AA_Light", 1, 1],["AA_Heavy", 2, 1],["Armored_Heavy", 2, 1],["Armored_Light", 2, 1]]; _percentage_inf = 55; _groups_max = 8; }; }; if (_randomize != 0) then {_groups_max = _groups_max + round(random _randomize - random _randomize)}; _groups_max = round(_groups_max * (missionNamespace getVariable "WFBE_C_TOWNS_UNITS_COEF")); if (_aa_get) then {if (_groups_max > 3) then {_groups_max = 3}}; _unit_infantry = []; _unit_vehicles = []; { if (!isNil {missionNamespace getVariable Format ["WFBE_%1_GROUPS_%2",_side,_x select 0]}) then { _add = true; if (_aa_get) then { if !((_x select 0) in ["AA_Light","AA_Heavy","Team_AA"]) then {_add = false} } else { if (_town_airactive && (_x select 0) in ["AA_Light","AA_Heavy","Team_AA"]) then {_add = false}; }; if (_add) then { _array = if ((_x select 2) == 0) then {_unit_infantry} else {_unit_vehicles}; for '_j' from 1 to (_x select 1) do {[_array, _x select 0] Call WFBE_CO_FNC_ArrayPush}; }; }; } forEach _units; _total_infantry = count _unit_infantry; _total_vehicles = count _unit_vehicles; if ((_total_infantry + _total_vehicles) == 0) exitWith {[]}; if (_total_infantry == 0) then {_percentage_inf = 0}; if (_total_vehicles == 0) then {_percentage_inf = 100}; if (_total_infantry > 1) then {_unit_infantry = (_unit_infantry) Call WFBE_CO_FNC_ArrayShuffle}; if (_total_vehicles > 1) then {_unit_vehicles = (_unit_vehicles) Call WFBE_CO_FNC_ArrayShuffle}; _total_infantry_p = round(_groups_max * (_percentage_inf / 100)); _total_vehicles_p = round(_groups_max - _total_infantry_p); _final = []; _inf_iterator = 0; _veh_iterator = 0; while {_groups_max > 0} do { if (_total_infantry_p > 0) then { _total_infantry_p = _total_infantry_p - 1; if (_inf_iterator > _total_infantry-1) then {_inf_iterator = 0}; [_final, _unit_infantry select _inf_iterator] Call WFBE_CO_FNC_ArrayPush; _groups_max = _groups_max - 1; _inf_iterator = _inf_iterator + 1; }; if (_total_vehicles_p > 0) then { _total_vehicles_p = _total_vehicles_p - 1; if (_veh_iterator > _total_vehicles-1) then {_veh_iterator = 0}; [_final, _unit_vehicles select _veh_iterator] Call WFBE_CO_FNC_ArrayPush; _groups_max = _groups_max - 1; _veh_iterator = _veh_iterator + 1; }; }; _contents = []; { _get = missionNamespace getVariable Format ["WFBE_%1_GROUPS_%2", _side, _x]; if !(isNil '_get') then {[_contents, _get select floor(random count _get)] Call WFBE_CO_FNC_ArrayPush}; } forEach _final; _contents/* Return a list of groups to spawn in a town (defender / resistance). Parameters: - Town Entity. - Side. */ // Private ["_aa_get","_get","_groups","_infantry","_infantry_aux","_infantry_primary","_kind","_maxgroups","_ratio_inf","_ratio_inf_aux","_ratio_veh","_ratio_veh_aux","_side","_remove","_sv","_town","_types","_vehicles","_vehicles_aux","_vehicles_primary"]; _town = _this select 0; _side = _this select 1; _aa_get = if (count _this > 2) then {_this select 2} else {false}; _sv = _town getVariable "supplyValue"; _town_airactive = _town getVariable "wfbe_active_air"; _units = []; _percentage_inf = 50; _groups_max = 0; _randomize = 0; // _units = [[group type, force (multiplier), raw kind (0 inf, 1 veh)]] switch (true) do { case (_sv < 10): { _units = [["Team", 1, 0],["Team_AT", 1, 0]]; _percentage_inf = 100; _groups_max = 2; }; case (_sv >= 10 && _sv < 20): { _units = [["Team", 2, 0],["Team_MG", 1, 0],["Team_AT", 1, 0],["Motorized", 2, 1],["Mechanized", 2, 1]]; _percentage_inf = 85; _groups_max = 4; }; case (_sv >= 20 && _sv < 40): { _units = [["Squad", 2, 0],["Team_MG", 1, 0],["Team", 2, 0],["Team_AT", 2, 0],["Team_AA", 1, 0],["Team_Sniper", 1, 0],["Motorized", 2, 1],["Mechanized", 2, 1],["Mechanized_Heavy", 1, 1],["Armored_Light", 2, 1]]; _percentage_inf = 80; _groups_max = 4; _randomize = 1; }; case (_sv >= 40 && _sv < 60): { _units = [["Squad", 2, 0],["Team_MG", 1, 0],["Team", 2, 0],["Team_AT", 2, 0],["Team_AA", 1, 0],["Team_HAT", 1, 0],["Squad_Advanced", 1, 0],["Team_Sniper", 2, 0],["Motorized", 2, 1],["Mechanized", 2, 1],["AA_Light", 1, 1],["Mechanized_Heavy", 1, 1],["Armored_Light", 2, 1],["Armored_Light", 2, 1]]; _percentage_inf = 75; _groups_max = 5; _randomize = 2; }; case (_sv >= 60 && _sv < 80): { _units = [["Squad", 2, 0],["Team_MG", 1, 0],["Team", 2, 0],["Team_AT", 2, 0],["Team_AA", 2, 0],["Team_HAT", 2, 0],["Squad_Advanced", 1, 0],["Team_Sniper", 2, 0],["Motorized", 1, 1],["Mechanized", 2, 1],["Mechanized_Heavy", 1, 1],["AA_Light", 2, 1],["Armored_Light", 1, 1],["Armored_Light", 2, 1],["Armored_Heavy", 2, 1]]; _percentage_inf = 70; _groups_max = 6; _randomize = 1; }; case (_sv >= 80 && _sv < 100): { _units = [["Squad", 2, 0],["Team_MG", 1, 0],["Team", 1, 0],["Team_AT", 2, 0],["Team_AA", 2, 0],["Team_HAT", 2, 0],["Squad_Advanced", 2, 0],["Team_Sniper", 2, 0],["Motorized", 1, 1],["Mechanized", 1, 1],["Mechanized_Heavy", 2, 1],["AA_Light", 2, 1],["Armored_Light", 2, 1],["Armored_Light", 2, 1],["Armored_Heavy", 2, 1]]; _percentage_inf = 65; _groups_max = 7; _randomize = 1; }; case (_sv >= 100 && _sv < 120): { _units = [["Squad", 2, 0],["Team_MG", 1, 0],["Team", 1, 0],["Team_AT", 2, 0],["Team_AA", 2, 0],["Team_HAT", 2, 0],["Squad_Advanced", 2, 0],["Team_Sniper", 2, 0],["Motorized", 1, 1],["Mechanized", 1, 1],["Mechanized_Heavy", 2, 1],["AA_Light", 1, 1],["AA_Heavy", 2, 1],["Armored_Heavy", 2, 1],["Armored_Light", 2, 1]]; _percentage_inf = 60; _groups_max = 7; }; case (_sv >= 120): { _units = [["Squad", 2, 0],["Team_MG", 1, 0],["Team", 2, 0],["Team_AT", 2, 0],["Team_AA", 2, 0],["Team_HAT", 2, 0],["Squad_Advanced", 2, 0],["Team_Sniper", 2, 0],["Motorized", 1, 1],["Mechanized", 1, 1],["Mechanized_Heavy", 2, 1],["AA_Light", 1, 1],["AA_Heavy", 2, 1],["Armored_Heavy", 2, 1],["Armored_Light", 2, 1]]; _percentage_inf = 55; _groups_max = 8; }; }; if (_randomize != 0) then {_groups_max = _groups_max + round(random _randomize - random _randomize)}; _groups_max = round(_groups_max * (missionNamespace getVariable "WFBE_C_TOWNS_UNITS_DEFENDER_COEF")); if (_aa_get) then {if (_groups_max > 3) then {_groups_max = 3}}; _unit_infantry = []; _unit_vehicles = []; { if (!isNil {missionNamespace getVariable Format ["WFBE_%1_GROUPS_%2",_side,_x select 0]}) then { _add = true; if (_aa_get) then { if !((_x select 0) in ["AA_Light","AA_Heavy","Team_AA"]) then {_add = false} } else { if (_town_airactive && (_x select 0) in ["AA_Light","AA_Heavy","Team_AA"]) then {_add = false}; }; if (_add) then { _array = if ((_x select 2) == 0) then {_unit_infantry} else {_unit_vehicles}; for '_j' from 1 to (_x select 1) do {[_array, _x select 0] Call WFBE_CO_FNC_ArrayPush}; }; }; } forEach _units; _total_infantry = count _unit_infantry; _total_vehicles = count _unit_vehicles; if ((_total_infantry + _total_vehicles) == 0) exitWith {[]}; if (_total_infantry == 0) then {_percentage_inf = 0}; if (_total_vehicles == 0) then {_percentage_inf = 100}; if (_total_infantry > 1) then {_unit_infantry = (_unit_infantry) Call WFBE_CO_FNC_ArrayShuffle}; if (_total_vehicles > 1) then {_unit_vehicles = (_unit_vehicles) Call WFBE_CO_FNC_ArrayShuffle}; _total_infantry_p = round(_groups_max * (_percentage_inf / 100)); _total_vehicles_p = round(_groups_max - _total_infantry_p); _final = []; _inf_iterator = 0; _veh_iterator = 0; while {_groups_max > 0} do { if (_total_infantry_p > 0) then { _total_infantry_p = _total_infantry_p - 1; if (_inf_iterator > _total_infantry-1) then {_inf_iterator = 0}; [_final, _unit_infantry select _inf_iterator] Call WFBE_CO_FNC_ArrayPush; _groups_max = _groups_max - 1; _inf_iterator = _inf_iterator + 1; }; if (_total_vehicles_p > 0) then { _total_vehicles_p = _total_vehicles_p - 1; if (_veh_iterator > _total_vehicles-1) then {_veh_iterator = 0}; [_final, _unit_vehicles select _veh_iterator] Call WFBE_CO_FNC_ArrayPush; _groups_max = _groups_max - 1; _veh_iterator = _veh_iterator + 1; }; }; _contents = []; { _get = missionNamespace getVariable Format ["WFBE_%1_GROUPS_%2", _side, _x]; if !(isNil '_get') then {[_contents, _get select floor(random count _get)] Call WFBE_CO_FNC_ArrayPush}; } forEach _final; _contents/* Return a patrol team of a town. Parameters: - Town Entity. - Side. */ Private ["_group", "_side", "_sv", "_town", "_type"]; _town = _this select 0; _side = _this select 1; _group = []; _sv = _town getVariable "supplyValue"; _type = switch (true) do { case (_sv <= 30): {"LIGHT"}; case (_sv > 30 && _sv < 60): {"MEDIUM"}; case (_sv > 60): {"HEAVY"}; }; _available = missionNamespace getVariable Format["WFBE_%1_PATROL_%2", _side, _type]; if (count _available > 0) then {_group = _available select floor(random count _available)}; _groupPrivate ["_difference"]; _difference = ((_this select 1) - (getDammage (_this select 0)))/(missionNamespace getVariable "WFBE_C_STRUCTURES_DAMAGES_REDUCTION"); ((getDammage (_this select 0))+_difference)Private ["_bindex","_degradation","_direction","_etat","_group","_lastCompletionCheck","_logic","_logik","_position","_ruins","_ruinsType","_side","_sideID","_type"]; _logic = _this select 0; _type = _this select 1; _side = _this select 2; _bindex = _this select 3; _logik = (_side) Call WFBE_CO_FNC_GetSideLogic; _sideID = (_side) Call WFBE_CO_FNC_GetSideID; _lastCompletionCheck = 0; _degradation = missionNamespace getVariable "WFBE_C_STRUCTURES_BUILDING_DEGRADATION"; _ruinsType = missionNamespace getVariable "WFBE_C_STRUCTURES_RUINS"; _position = _logic getVariable "WFBE_B_Position"; _direction = _logic getVariable "WFBE_B_Direction"; //--- Create ruins wherever the building get destroyed. _ruins = _ruinsType createVehicle _position; _ruins setDir _direction; _ruins setPos _position; while {true} do { _etat = _logic getVariable 'WFBE_B_Completion'; //--- Completed. if (_etat >= 100) exitWith { Private ["_buildingsCosts","_buildingsNames","_buildingsType","_current","_index","_limit","_site"]; _buildingsType = missionNamespace getVariable Format["WFBE_%1STRUCTURES",str _side]; _buildingsType = _buildingsType - [_buildingsType select 0]; _buildingsNames = missionNamespace getVariable Format["WFBE_%1STRUCTURENAMES",str _side]; _buildingsNames = _buildingsNames - [_buildingsNames select 0]; _buildingsCosts = missionNamespace getVariable Format["WFBE_%1STRUCTURECOSTS",str _side]; //--- Place if limits allows us to do so. _index = _buildingsNames find _type; if (_index != -1) then { _current = _logik getVariable "wfbe_structures_live"; _limit = missionNamespace getVariable Format['WFBE_C_STRUCTURES_MAX_%1',(_buildingsType select _index)]; if (isNil '_limit') then {_limit = 4}; //--- Default. //--- We can build, the limit hasn't been reached yet. if ((_current select _index) < _limit) then { _site = _type createVehicle _position; _site setDir _direction; _site setPos _position; _site setVariable ["wfbe_side", _side]; _site setVariable ["wfbe_structure_type", _buildingsType select _index]; [_side, "Constructed", ["Base", _site]] Spawn SideMessage; //--- Site is created, we add the rest. if !(isNull _site) then { _current set [_bindex, (_current select _bindex) + 1]; _logik setVariable ["wfbe_structures_live", _current, true]; _logik setVariable ["wfbe_structures", (_logik getVariable "wfbe_structures") + [_site], true]; _site setVehicleInit Format["[this,false,%1] ExecVM 'Client\Init\Init_BaseStructure.sqf'",_sideID]; processInitCommands; _site addEventHandler ["hit",{_this Spawn BuildingDamaged}]; if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_HANDLE_FRIENDLYFIRE") > 0) then { _site addEventHandler ['handleDamage',{[_this select 0,_this select 2,_this select 3] Call BuildingHandleDamages}]; } else { _site addEventHandler ['handleDamage',{getDammage (_this select 0)+((_this select 2)/(missionNamespace getVariable "WFBE_C_STRUCTURES_DAMAGES_REDUCTION"))}]; }; Call Compile Format ["_site AddEventHandler ['killed',{[_this select 0,_this select 1,'%1'] Spawn BuildingKilled}];",_type]; if ((missionNamespace getVariable "WFBE_C_ECONOMY_CURRENCY_SYSTEM") == 0) then { [_side, -round((_buildingsCosts select _index)/2)] Call ChangeSideSupply; }; ["INFORMATION", Format ["Server_HandleBuildingRepair.sqf: [%1] Structure [%2] has been repaired.", str _side,_type]] Call WFBE_CO_FNC_LogContent; }; _logic setVariable ["WFBE_B_Repair",false]; }; }; _logik setVariable ["wfbe_structures_logic", (_logik getVariable "wfbe_structures_logic") - [_logic]]; }; sleep 5; //--- Has the etat changed? if ((_logic getVariable 'WFBE_B_Completion') == _etat) then {_lastCompletionCheck = _lastCompletionCheck + 5} else {_lastCompletionCheck = 0}; //--- Degradation if nothing happened. if (_lastCompletionCheck > 30) then { _etat = (_logic getVariable "WFBE_B_Completion") - _degradation; if (_etat < 0) then {_etat = 0}; _logic setVariable ["WFBE_B_Completion",_etat]; _lastCompletionCheck = 0; }; //--- If the etat reach 0, the building is lost. if (_etat <= 0) exitWith { _logik setVariable ["wfbe_structures_logic", (_logik getVariable "wfbe_structures_logic") - [_logic]]; _group = group _logic; deleteVehicle _logic; deleteGroup _group; }; }; deleteVehicle _ruins;Private ["_buildings","_closest","_defense","_direction","_distance","_index","_position","_side","_soldier","_team","_type","_unit"]; _defense = _this select 0; _side = _this select 1; _team = _this select 2; _closest = _this select 3; while {alive _defense} do { if (isNull(gunner _defense) || !alive gunner _defense) then { sleep 7; if (alive _closest && !(isNull _closest )) then { _type = typeOf _closest; _index = (missionNamespace getVariable Format["WFBE_%1STRUCTURENAMES",str _side]) find _type; _distance = (missionNamespace getVariable Format["WFBE_%1STRUCTUREDISTANCES",str _side]) select _index; _direction = (missionNamespace getVariable Format["WFBE_%1STRUCTUREDIRECTIONS",str _side]) select _index; _position = [getPos _closest,_distance,getDir (_closest) + _direction] Call GetPositionFrom; _type = missionNamespace getVariable Format ["WFBE_%1SOLDIER", _side]; _soldier = [_type,_team,_position,_side] Call WFBE_CO_FNC_CreateUnit; [_soldier] allowGetIn true; _soldier assignAsGunner _defense; [_soldier] orderGetIn true; [str _side,'UnitsCreated',1] Call UpdateStatistics; ["INFORMATION", Format ["Server_HandleDefense.sqf: [%1] Unit has been dispatched to a [%2] defense.", str _side,_type]] Call WFBE_CO_FNC_LogContent; //--- Calculate the average time in function of the distance and the speed. sleep ((((_soldier distance _defense)/(14*1000))*3600)+20); if ((vehicle _soldier != _defense)&& alive _soldier &&(!isNull _soldier)) then { if ((_defense emptyPositions "gunner" > 0) && alive _defense && (!isNull _defense)) then {_soldier moveInGunner _defense} else {deleteVehicle _soldier}; }; } else { ["INFORMATION", "Server_HandleDefense.sqf: Canceled auto manning, the barracks is destroyed."] Call WFBE_CO_FNC_LogContent; }; }; sleep 420; };Private ['_abtimer','_exit','_skip','_timer','_trash','_vehicle']; _vehicle = _this; _exit = false; _timer = 0; _abtimer = missionNamespace getVariable "WFBE_C_UNITS_EMPTY_TIMEOUT"; while {!_exit} do { sleep 20; _skip = false; if (!(alive _vehicle) && !(isNull _vehicle)) then { _skip = true; _exit = true; if (isNil {_vehicle getVariable "wfbe_trashed"}) then { _vehicle setVariable ["wfbe_trashed", true]; _vehicle spawn TrashObject; }; }; if (!(isNull _vehicle) && !_skip) then { if (({alive _x} count (crew _vehicle)) > 0) then {_timer = 0}; if (_timer > _abtimer) then { _exit = true; if (someAmmo _vehicle) then {_vehicle setVehicleAmmo 0}; _vehicle setDammage 1; sleep 2; if (isNil {_vehicle getVariable "wfbe_trashed"}) then { _vehicle setVariable ["wfbe_trashed", true]; (_vehicle) spawn TrashObject; }; }; _timer = _timer + 20; } else {_exit = true}; }; emptyQueu = emptyQueu - [_vehicle];/* Server receives PVF Here. Parameters: - Server PVF */ Private ["_parameters","_publicVar","_script"]; _publicVar = _this; _script = _publicVar select 0; _parameters = if (count _publicVar > 1) then {_publicVar select 1} else {[]}; _parameters Spawn (Call Compile _script);Private['_args']; _args = _this; switch (_args select 0) do { case "update-teamleader": { Private ["_leader","_team"]; _team = _args select 1; _leader = _args select 2; _team setVariable ["wfbe_teamleader", _leader]; }; case "group-query": { Private ["_group","_player","_side"]; _group = _args select 1; _player = _args select 2; _side = _args select 3; if (alive _player) then { if (alive leader _group) then { if (isPlayer leader _group) then { //--- Player, forward the request. if (WF_A2_Vanilla) then { [getPlayerUID (leader _group), "HandleSpecial", ["group-join-request", _player]] Call WFBE_CO_FNC_SendToClients; } else { [leader _group, "HandleSpecial", ["group-join-request", _player]] Call WFBE_CO_FNC_SendToClient; }; } else { if (isNil {_group getVariable "wfbe_uid"}) then { //--- Ensure that the group is ai-controlled. [_player, _group, _side] Call WFBE_CO_FNC_ChangeUnitGroup; //--- Tell the player that his request is granted. if (WF_A2_Vanilla) then { [getPlayerUID (_player), "HandleSpecial", ["group-join-accept", _group]] Call WFBE_CO_FNC_SendToClients; } else { [_player, "HandleSpecial", ["group-join-accept", _group]] Call WFBE_CO_FNC_SendToClient; }; }; }; }; }; }; case "Paratroops": { _args spawn KAT_Paratroopers; }; case "ParaVehi": { _args spawn KAT_ParaVehicles; }; case "ParaAmmo": { _args spawn KAT_ParaAmmo; }; case "RespawnST": { Private ["_side","_st"]; _side = _args select 1; _st = (_side call WFBE_CO_FNC_GetSideLogic) getVariable "wfbe_ai_supplytrucks"; {if (!isNull (driver _x)) then {driver _x setDammage 1};_x setDammage 1} forEach _st; ["INFORMATION", Format ["Server_HandleSpecial.sqf: [%1] Supply Trucks were forced respawn.", str _side]] Call WFBE_CO_FNC_LogContent; }; case "uav": { _args spawn KAT_UAV; }; case "upgrade-sync": { Private ["_side","_upgrade_id","_upgrade_level"]; _side = _args select 1; _upgrade_id = _this select 2; _upgrade_level = _this select 3; if !(isNil {missionNamespace getVariable Format["WFBE_upgrade_%1_%2_%3_sync", str _side, _upgrade_id, _upgrade_level]}) then {missionNamespace setVariable [Format["WFBE_upgrade_%1_%2_%3_sync", str _side, _upgrade_id, _upgrade_level], true]}; }; case "update-clientfps": { Private ["_fps","_uid"]; _uid = _args select 1; _fps = _args select 2; _get = missionNamespace getVariable format["WFBE_AI_DELEGATION_%1", _uid]; if !(isNil "_get") then { _get set [0, _fps]; missionNamespace setVariable [format["WFBE_AI_DELEGATION_%1", _uid], _get]; }; }; case "update-delegation": { Private ["_town","_vehicles"]; _town = _args select 1; _vehicles = _args select 2; _town setVariable ['wfbe_active_vehicles', (_town getVariable 'wfbe_active_vehicles') + _vehicles]; { _x spawn HandleEmptyVehicle; _x setVariable ["WFBE_Taxi_Prohib", true]; } forEach _vehicles; }; case "ICBM": { Private ["_base","_bomb","_droppos1","_droppos2","_dropPosX","_dropPosY","_dropPosZ","_playerTeam","_side","_target"]; _side = _args select 1; _base = _args select 2; _target = _args select 3; _playerTeam = _args select 4; ["INFORMATION", Format ["Server_HandleSpecial.sqf: [%1] Team [%2] [%3] called in an ICBM Nuke.", str _side, _playerTeam, name (leader _playerTeam)]] Call WFBE_CO_FNC_LogContent; if (isNull _target || !alive _target) exitWith {}; _dropPosX = getPos _base select 0; _dropPosY = getPos _base select 1; _dropPosZ = getPos _base select 2; _droppos1 = [_dropPosX + 4, _dropPosY + 4, _dropPosZ]; _droppos2 = [_dropPosX + 8, _dropPosY + 8, _dropPosZ]; waitUntil {!alive _target || isNull _target}; _bomb = "BO_GBU12_LGB" createVehicle [(getpos _target select 0),(getpos _target select 1), 0]; _bomb = createVehicle ["BO_GBU12_LGB",_droppos1,[], 0, "None"]; _bomb = createVehicle ["BO_GBU12_LGB",_droppos2,[], 0, "None"]; [_base] Spawn NukeDammage; }; };/* Manage or spawn defenses in a town if needed. Parameters: - Town. - Side. */ Private ["_defense","_side","_side_old","_sideID","_spawn","_town"]; _town = _this select 0; _side = _this select 1; _sideID_old = _this select 2; _sideID = (_side) Call WFBE_CO_FNC_GetSideID; //--- Browse all the defenses of the town. { _defense = _x getVariable "wfbe_defense"; _spawn = false; if (isNil '_defense') then { _spawn = true; } else { if (!alive _defense || _sideID_old != _sideID) then { //--- Remove if non-null. if !(isNull _defense) then {deleteVehicle _defense}; _spawn = true; }; }; if (_spawn) then { //--- Spawn a defense according to the types (if it exists). [_x, _side] Call WFBE_SE_FNC_SpawnTownDefense; }; } forEach (_town getVariable "wfbe_town_defenses"); if !(isNil {_town getVariable "wfbe_town_mortars"}) then {[_town, _side] Call WFBE_SE_FNC_ManageTownMortars}; //--- Mortars checkup.Private ["_commanderTeam","_direction","_hq","_HQName","_logik","_MHQ","_position","_side","_sideID","_sideText"]; _side = _this select 0; _sideText = str _side; _sideID = (_side) Call GetSideID; _hq = (_side) Call WFBE_CO_FNC_GetSideHQ; _position = getPos _hq; _direction = getDir _hq; _commanderTeam = (_side) Call WFBE_CO_FNC_GetCommanderTeam; if !(isNull _commanderTeam) then { if (isPlayer (leader _commanderTeam)) then { if (WF_A2_Vanilla) then { [getPlayerUID(leader _commanderTeam), "HandleSpecial", ["hq-setstatus", false]] Call WFBE_CO_FNC_SendToClients; } else { [leader _commanderTeam, "HandleSpecial", ["hq-setstatus", false]] Call WFBE_CO_FNC_SendToClient; }; }; }; sleep 15; _MHQ = [missionNamespace getVariable Format["WFBE_%1MHQNAME", _sideText], _position, _sideID, _direction, true, false] Call WFBE_CO_FNC_CreateVehicle; _MHQ setVariable ["WFBE_Taxi_Prohib", true]; _MHQ setVariable ["wfbe_trashed", false]; _MHQ setVariable ["wfbe_side", _side]; _MHQ setVariable ["wfbe_structure_type", "Headquarters"]; _MHQ addEventHandler ['killed', {_this Spawn WFBE_SE_FNC_OnHQKilled}]; //--- [>1.62] Set the HQ to be local to the commander. _commanderTeam = (_side) Call WFBE_CO_FNC_GetCommanderTeam; if !(isNull _commanderTeam) then { if (!WF_A2_Vanilla && isMultiplayer && isPlayer(leader _commanderTeam)) then { [_MHQ, leader _commanderTeam] Spawn {sleep 1.7; _this Spawn WFBE_SE_FNC_SetLocalityOwner}; }; }; _logik = (_side) Call WFBE_CO_FNC_GetSideLogic; deleteVehicle _hq; _logik setVariable ['wfbe_hq', _MHQ, true]; _logik setVariable ['wfbe_hq_deployed', false, true]; _logik setVariable ['wfbe_hq_repairing', false, true]; _logik setVariable ['wfbe_hq_repair_count', (_logik getVariable "wfbe_hq_repair_count") + 1, true]; ["INFORMATION", Format ["Server_MHQRepair.sqf: [%1] MHQ has been repaired.", _sideText]] Call WFBE_CO_FNC_LogContent;/* Triggered whenever the HQ is killed. Parameters: - HQ - Shooter */ Private ["_building","_dammages","_dammages_current","_get","_killer","_logik","_origin","_structure"]; _structure = _this select 0; _killer = _this select 1; _structure_kind = typeOf _structure; _side = _structure getVariable "wfbe_side"; _logik = (_side) Call WFBE_CO_FNC_GetSideLogic; //--- If HQ was mobibilized, spawn a dead hq. if ((_side) Call WFBE_CO_FNC_GetSideHQDeployStatus) then { Private ["_hq"]; _hq = [missionNamespace getVariable Format["WFBE_%1MHQNAME", _side], getPos _structure, (_side) Call WFBE_CO_FNC_GetSideID, getDir _structure, false, false, false] Call WFBE_CO_FNC_CreateVehicle; _hq setPos (getPos _structure); _hq setVariable ["wfbe_trashable", false]; _hq setVariable ["wfbe_side", _side]; _hq setDamage 1; //--- HQ is now considered mobilized. _logik setVariable ["wfbe_hq_deployed", false, true]; _logik setVariable ["wfbe_hq",_hq,true]; //--- Remove the structure after the burial. (_structure) Spawn {sleep 10; deleteVehicle _this}; }; //--- Spawn a radio message. [_side, "Destroyed", ["Base", _structure]] Spawn SideMessage; //--- Teamkill? [_side, "SendMessage", ["command", "tkill", [name _killer, _structure_kind]]] Call WFBE_CO_FNC_SendToClients _teamkill = if (side _killer == _side) then {true} else {false}; if (_teamkill && isPlayer _killer) then {[_side, "LocalizeMessage", ['BuildingTeamkill',name _killer,_uid, _structure_kind]] Call WFBE_CO_FNC_SendToClients}; ["INFORMATION", Format["Server_OnHQKilled.sqf : [%1] HQ [%2] has been destroyed by [%3], Teamkill? [%4], Side Teamkill? [%5]", _side, _structure_kind, _killer, _teamkill, side _killer]] Call WFBE_CO_FNC_LogContent;/* Event Handler triggered everytime a player connect to the server, this file handle the first connection along with the JIP connections of a player. Parameters: - User ID - User Name */ Private ['_funds','_get','_id','_max','_name','_sideJoined','_sideOrigin','_team','_uid','_units']; _uid = _this select 0; _name = _this select 1; _id = _this select 2; //--- Wait for a proper common & server initialization before going any further. waitUntil {commonInitComplete && serverInitFull}; ["INFORMATION", Format ["Server_PlayerConnected.sqf: Player [%1] [%2] has joined the game", _name, _uid]] Call WFBE_CO_FNC_LogContent; //--- Skip this script if the server is trying to run this. if (_name == '__SERVER__' || _uid == '' || local player) exitWith {}; //--- We try to get the player and it's group from the playableUnits. _max = 10; _team = grpNull; while {_max > 0 && isNull _team} do { { if ((getPlayerUID _x) == _uid) exitWith {_team = group _x}; } forEach playableUnits; if (isNull _team) then {sleep 0.5}; _max = _max - 1; }; //--- Make sure that we've found a team, otherwise we simply exit. if (isNull _team) exitWith {["WARNING", Format ["Server_PlayerConnected.sqf: Player [%1] [%2] is not defined within the warfare teams.", _name, _uid]] Call WFBE_CO_FNC_LogContent}; //--- Make sure that our client is a warfare client, the side variable is only defined for warfare slots, otherwise we simply exit. _sideJoined = _team getVariable "wfbe_side"; if (isNil '_sideJoined') exitWith {["WARNING", Format ["Server_PlayerConnected.sqf: Player [%1] [%2] side couldn't be determined from team [%3].", _name, _uid, _team]] Call WFBE_CO_FNC_LogContent}; //--- We attempt to get the player informations in case that he joined before. _get = missionNamespace getVariable format["WFBE_JIP_USER%1",_uid]; //--- We force the unit out of it's vehicle. if !(isNull(assignedVehicle (leader _team))) then { unassignVehicle (leader _team); [leader _team] orderGetIn false; [leader _team] allowGetIn false; }; //--- If we choose not to keep the current units during this session, then we simply remove them. if ((missionNamespace getVariable "WFBE_C_AI_TEAMS_JIP_PRESERVE") == 0) then { ["INFORMATION", Format ["Server_PlayerConnected.sqf: Team [%1] units are now being removed for player [%1] [%2].", _team, _name, _uid]] Call WFBE_CO_FNC_LogContent; _units = units _team; _units = _units + ([_team,false] Call GetTeamVehicles); {if (!isPlayer _x && !(_x in playableUnits)) then {deleteVehicle _x}} forEach _units; }; //--- We 'Sanitize' the player, we remove the waypoints and we heal him. _team Call WFBE_CO_FNC_WaypointsRemove; (leader _team) setDammage 0; //--- We store the player UID over the group, this allows us to easily fetch the disconnecting client original group. _team setVariable ["wfbe_uid", _uid]; _team setVariable ["wfbe_teamleader", leader _team]; //--- If AI delegation is enabled, we create a special variable for player based on his UID and ID. FPS | Groups handled | Session ID. if ((missionNamespace getVariable "WFBE_C_AI_DELEGATION") > 0) then { missionNamespace setVariable [format["WFBE_AI_DELEGATION_%1", _uid], [0,0,_id]]; }; //--- The player has joined for the first time. if (isNil '_get') exitWith { /* UID | Cash | Side | Current Side The JIP system store the main informations about a client, the UID is used to track the player all along the session. */ missionNamespace setVariable [format["WFBE_JIP_USER%1",_uid], [_uid, 0, _sideJoined, _sideJoined]]; _team setVariable ["wfbe_funds", missionNamespace getVariable format ["WFBE_C_ECONOMY_FUNDS_START_%1", _sideJoined], true]; ["INFORMATION", Format ["Server_PlayerConnected.sqf: Team [%1] Leader [%2] JIP Information have been stored for the first time.", _team, _uid]] Call WFBE_CO_FNC_LogContent; }; //--- The player has already joined the session previously, we just need to update the informations. _get set [3, _sideJoined]; //--- Get the previous informations. _funds = _get select 1; _sideOrigin = _get select 2; //--- Update the new informations. missionNamespace setVariable [format["WFBE_JIP_USER%1",_uid], _get]; //--- Make sure that the player didn't teamswap. if (_sideOrigin != _sideJoined) then { _funds = missionNamespace getVariable Format ["WFBE_C_ECONOMY_FUNDS_START_%1", _sideJoined]; }; //--- Set the current player funds. _team setVariable ["wfbe_funds", _funds, true];/* Event Handler triggered everytime a player disconnect from the server, this file handle all the players disconnection. Parameters: - User ID - User Name */ Private ['_buildings','_commander','_funds','_get','_hq','_id','_name','_old_unit','_old_unit_group','_respawnLoc','_side','_team','_units','_uid']; _uid = _this select 0; _name = _this select 1; _id = _this select 2; sleep 0.5; //--- Wait for a proper common & server initialization before going any further. waitUntil {commonInitComplete && serverInitFull}; if (_name == '__SERVER__' || _uid == '' || local player) exitWith {}; ["INFORMATION", Format ["Server_PlayerDisconnected.sqf: Player [%1] [%2] has left the game", _name, _uid]] Call WFBE_CO_FNC_LogContent; //--- We attempt to get the player information in case that he joined before. _get = missionNamespace getVariable format["WFBE_JIP_USER%1",_uid]; if (isNil '_get') exitWith {["INFORMATION", Format ["Server_PlayerDisconnected.sqf: Player [%1] [%2] don't have any information stored", _name, _uid]] Call WFBE_CO_FNC_LogContent}; //--- Determine the root team. _side = _get select 3; _team = grpNull; { { if !(isNil {_x getVariable "wfbe_uid"}) then {if ((_x getVariable "wfbe_uid") == _uid) then {_team = _x}}; if !(isNull _team) exitWith {}; } forEach ((_x Call WFBE_CO_FNC_GetSideLogic) getVariable "wfbe_teams"); if !(isNull _team) exitWith {}; } forEach WFBE_PRESENTSIDES; if (isNull _team) exitWith {["WARNING", Format ["Server_PlayerDisconnected.sqf: Player [%1] [%2] team is null", _name, _uid]] Call WFBE_CO_FNC_LogContent}; //--- We attempt to fetch the client old unit, we need to check if it's group is the right one (on the fly group swapping). _old_unit = _team getVariable "wfbe_teamleader"; if (isNil '_old_unit') then { _old_unit = objNull; } else { if !(alive _old_unit) then {_old_unit = objNull}; }; if (isNull _old_unit) then { _old_unit = leader _team; ["INFORMATION", Format ["Server_PlayerDisconnected.sqf: Player [%1] [%2] current team leader is dead or nil, using original team leader [%3].", _name, _uid, _team]] Call WFBE_CO_FNC_LogContent; }; _old_unit_group = group _old_unit; //--- Make sure that our disconnected player group was the same as the original, we simply set him back to his group otherwise). if (_old_unit_group != _team) then { //todo, check if we have at least 1 unit in the old squad. Private ["_entitie"]; _entitie = objNull; if ((count (units _old_unit_group)) < 2) then { _entitie = [missionNamespace getVariable Format ["WFBE_%1SOLDIER", _side], _old_unit_group, [0,0,0], _side] Call WFBE_CO_FNC_CreateUnit; }; [_old_unit] joinSilent _team; if !(isNull _entitie) then {deleteVehicle _entitie}; ["INFORMATION", Format ["Server_PlayerDisconnected.sqf: Player [%1] [%2] was in team [%3] and has been transfered to it's source team [%4].", _name, _uid, _old_unit_group, _team]] Call WFBE_CO_FNC_LogContent; //--- Make sure that the disconnected unit is the leader of it's group now. if (leader _team != _old_unit) then { _team selectLeader _old_unit; ["INFORMATION", Format ["Server_PlayerDisconnected.sqf: Player [%1] [%2] has been set as the leader of it's source team [%3].", _name, _uid, _team]] Call WFBE_CO_FNC_LogContent; }; }; //--- We force the unit out of it's vehicle. if !(isNull(assignedVehicle _old_unit)) then { unassignVehicle _old_unit; [_old_unit] orderGetIn false; [_old_unit] allowGetIn false; }; //--- Eject the unit if it's in the HQ. _hq = (_side) Call WFBE_CO_FNC_GetSideHQ; if (vehicle _old_unit == _hq) then {_old_unit action ["EJECT", _hq]}; //--- If we choose not to keep the current units during this session, then we simply remove them. if ((missionNamespace getVariable "WFBE_C_AI_TEAMS_JIP_PRESERVE") == 0) then { ["INFORMATION", Format ["Server_PlayerDisconnected.sqf: Player [%1] [%2] units are now being removed for AI Team [%3].", _name, _uid, _team]] Call WFBE_CO_FNC_LogContent; _units = units _team; _units = _units + ([_team,false] Call GetTeamVehicles) - [_hq]; {if (!isPlayer _x && !(_x in playableUnits)) then {deleteVehicle _x}} forEach _units; }; //--- We save the disconnect client funds. _funds = _team Call GetTeamFunds; _get set [1,_funds]; //--- We place the unit at the base now. _buildings = (_side) Call WFBE_CO_FNC_GetSideStructures; _respawnLoc = _hq; if (count _buildings > 0) then { _respawnLoc = [_old_unit,_buildings] Call WFBE_CO_FNC_GetClosestEntity; }; _old_unit setPos ([getPos _respawnLoc,20,30] Call GetRandomPosition); //--- Update the new informations. missionNamespace setVariable [format["WFBE_JIP_USER%1",_uid], _get]; //--- Release the UID. _team setVariable ["wfbe_uid", nil]; _team setVariable ["wfbe_teamleader", nil]; //--- If AI delegation is enabled, we remove the player's variable. if ((missionNamespace getVariable "WFBE_C_AI_DELEGATION") > 0) then { missionNamespace setVariable [format["WFBE_AI_DELEGATION_%1", _uid], nil]; }; //--- If the player was the commander, we warn the team and sanitize the commander informations. _commander = (_side) Call WFBE_CO_FNC_GetCommanderTeam; if !(isNull (_commander)) then { if (_team == _commander) then { Private ["_logik"]; _logik = (_side) Call WFBE_CO_FNC_GetSideLogic; _logik setVariable ["wfbe_commander", objNull, true]; [_side, "LocalizeMessage", ['CommanderDisconnected']] Call WFBE_CO_FNC_SendToClients; //--- High Command (Remove). if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_HC") > 0 && count (hcAllGroups _old_unit) > 0) then {HCRemoveAllGroups _old_unit}; //--- AI Can move freely now & respawn at the default location. {[_x,false] Call SetTeamAutonomous;[_x, ""] Call SetTeamRespawn} forEach (_logik getVariable "wfbe_teams"); }; };/* Oeprate the defenses in a town, spawn or despawn. Parameters: - Town. - Side. - Action ("spawn"/"remove"). */ Private ["_action","_defense","_mortars","_side","_spawn","_town","_units"]; _town = _this select 0; _side = _this select 1; _action = _this select 2; switch (_action) do { case "spawn": { _mortars = if !(isNil {_town getVariable "wfbe_mortars_spawned"}) then {(_town getVariable "wfbe_mortars_spawned") select 0} else {[]}; //--- Man the mortars. _units = []; { if !(alive gunner _x) then { if (locked _x) then {_x lock false}; _unit = [missionNamespace getVariable Format ["WFBE_%1SOLDIER", _side],missionNamespace getVariable Format ["WFBE_%1_DefenseTeam", _side], getPos _x, _side] Call WFBE_CO_FNC_CreateUnit; _unit assignAsGunner _x; [_unit] orderGetIn true; _unit moveInGunner _x; _x lock true; [_units, _unit] Call WFBE_CO_FNC_ArrayPush; }; } forEach _mortars; if (count _units > 0) then {_town setVariable ["wfbe_mortars_operators", _units]}; //--- Track the original mortar gunners. //--- Man the defenses. { _defense = _x getVariable "wfbe_defense"; if !(isNil '_defense') then { if !(alive gunner _defense) then { //--- Make sure that the defense gunner is null or dead. _unit = [missionNamespace getVariable Format ["WFBE_%1SOLDIER", _side],missionNamespace getVariable Format ["WFBE_%1_DefenseTeam", _side], getPos _x, _side] Call WFBE_CO_FNC_CreateUnit; _unit assignAsGunner _defense; [_unit] orderGetIn true; _unit moveInGunner _defense; [group _unit, 175, getPos _defense] spawn WFBE_CO_FNC_RevealArea; _x setVariable ["wfbe_defense_operator", _unit]; //--- Track the original gunner. }; }; } forEach (_town getVariable "wfbe_town_defenses"); //--- Reveal the town area to the statics. if (count (_town getVariable "wfbe_town_defenses") > 0) then { [missionNamespace getVariable Format ["WFBE_%1_DefenseTeam", _side], _town getVariable "range", _town] Call RevealArea; }; //--- If we have more mortars, we spawn a targeting thread. if (count _mortars > 0) then {[_town, _mortars] spawn WFBE_SE_FNC_MortarSupport}; ["INFORMATION", Format ["Server_OperateTownDefensesUnits.sqf : Town [%1] defenses were manned for [%2] defenses on [%3].", _town getVariable "name", count (_town getVariable "wfbe_town_defenses") + count _mortars,_side]] Call WFBE_CO_FNC_LogContent; }; case "remove": { _mortars = if !(isNil {_town getVariable "wfbe_mortars_spawned"}) then {(_town getVariable "wfbe_mortars_spawned") select 0} else {[]}; //--- De-man the mortars. { _unit = gunner _x; if !(isNull _unit) then { //--- Make sure that we do not remove a player's unit. if (alive _unit) then { if (isNil {(group _unit) getVariable "wfbe_funds"}) then {_unit setPos (getPos _x); deleteVehicle _unit}; } else { _unit setPos (getPos _x); deleteVehicle _unit; }; }; } forEach _mortars; if !(isNil {_town getVariable "wfbe_mortars_operators"}) then { //--- Delete the mortars crews if they are still around. {if (alive _x) then {deleteVehicle _x}} forEach (_town getVariable "wfbe_mortars_operators"); _town setVariable ["wfbe_mortars_operators", nil]; }; //--- De-man the defenses. { _defense = _x getVariable "wfbe_defense"; if !(isNil '_defense') then { _unit = gunner _defense; if !(isNull _unit) then { //--- Make sure that we do not remove a player's unit. if (alive _unit) then { if (isNil {(group _unit) getVariable "wfbe_funds"}) then {_unit setPos (getPos _x); deleteVehicle _unit}; } else { _unit setPos (getPos _x); deleteVehicle _unit; }; }; }; if !(isNil {_x getVariable "wfbe_defense_operator"}) then { //--- Delete the original gunner if he's still around. if (alive(_x getVariable "wfbe_defense_operator")) then {deleteVehicle (_x getVariable "wfbe_defense_operator")}; _x setVariable ["wfbe_defense_operator", nil]; }; } forEach (_town getVariable "wfbe_town_defenses"); ["INFORMATION", Format ["Server_OperateTownDefensesUnits.sqf : Town [%1] defenses units were removed for [%2] defenses.", _town getVariable "name", count (_town getVariable "wfbe_town_defenses") + count _mortars]] Call WFBE_CO_FNC_LogContent; }; };/* Start an upgrade. Parameters: - Side - Upgrade ID - Upgrade Level - Player's call */ Private ["_logic","_side","_stime","_upgrades","_upgrade_id","_upgrade_isplayer","_upgrade_level","_upgrade_time"]; _side = _this select 0; _upgrade_id = _this select 1; _upgrade_level = _this select 2; _upgrade_isplayer = _this select 3; _upgrade_time = ((missionNamespace getVariable Format["WFBE_C_UPGRADES_%1_TIMES",str _side]) select _upgrade_id) select _upgrade_level; if (_upgrade_isplayer) then { //--- Store the sync. missionNamespace setVariable [Format["WFBE_upgrade_%1_%2_%3_sync", str _side, _upgrade_id, _upgrade_level], false]; _stime = 0; while {!(missionNamespace getVariable Format["WFBE_upgrade_%1_%2_%3_sync", str _side, _upgrade_id, _upgrade_level]) && _stime < _upgrade_time} do { _stime = _stime + 1; sleep 1; }; //--- Release the Sync missionNamespace setVariable [Format["WFBE_upgrade_%1_%2_%3_sync", str _side, _upgrade_id, _upgrade_level], nil]; } else { sleep _upgrade_time; }; _upgrades = +(_side Call WFBE_CO_FNC_GetSideUpgrades); _upgrades set [_upgrade_id, (_upgrades select _upgrade_id) + 1]; _logic = (_side) Call WFBE_CO_FNC_GetSideLogic; _logic setVariable ["wfbe_upgrades", _upgrades, true]; _logic setVariable ["wfbe_upgrading", false, true]; [_side, "NewIntelAvailable"] Spawn SideMessage; // [_side, "LocalizeMessage", ['UpgradeComplete', _upgrade_id, _upgrade_level + 1]] Call WFBE_CO_FNC_SendToClients; [_side, "HandleSpecial", ['upgrade-complete', _upgrade_id, _upgrade_level + 1]] Call WFBE_CO_FNC_SendToClients; //todo log./* Handle players JIP for secondary missions (if enabled). Parameters: - Side (nil is everyone). - Information. */ Private ['_oldPlayerList','_parameters','_players','_runFor','_sides']; _sides = _this select 0; _parameters = _this select 1; while {true} do { _oldPlayerList = playableUnits; sleep 15; { _side = _x; _players = []; { if (!(_x in _oldPlayerList) && isPlayer _x && side _x == _side) then {[_players, _x] Call WFBE_CO_FNC_ArrayPush}; } forEach playableUnits; if (count _players > 0) then { if (WF_A2_Vanilla) then { [_side, "SECOPS_ReceiveMission", _parameters] Call WFBE_CO_FNC_SendToClients; } else { {[_x, "SECOPS_ReceiveMission", _parameters] Call WFBE_CO_FNC_SendToClient} forEach _players; }; }; } forEach _sides; };/* Set a town's camps to a side. Parameters: - Town. - Old Side. - New Side. */ Private ["_camps","_side_old","_side_new","_startingSV","_town"]; _town = _this select 0; _side_old = _this select 1; _side_new = _this select 2; _camps = _town getVariable "camps"; _startingSV = _town getVariable "startingSupplyValue"; { _x setVariable ["sideID", _side_new, true]; _x setVariable ["supplyValue", _startingSV, true]; (_x getVariable "wfbe_flag") setFlagTexture (missionNamespace getVariable Format["WFBE_%1FLAG", (_side_new) Call WFBE_CO_FNC_GetSideFromID]); } forEach _camps; ["INFORMATION",Format ["Server_SetCampsToSide.sqf : [%1] Camps [%2] were set to [%3], previously owned by [%4].", _town getVariable "name", count _camps, _side_new, _side_old]] Call WFBE_CO_FNC_LogContent; if (count _camps > 0) then {[nil, "AllCampsCaptured",[_town, _side_old, _side_new]] Call WFBE_CO_FNC_SendToClients};/* Make an object local to a client. Parameters: - Object - Locality target (client) */ Private ["_building","_dammages","_dammages_current","_get","_killer","_logik","_origin","_structure"]; _object = _this select 0; _local_to = _this select 1; _object setOwner (owner _local_to);Private ["_logik","_message","_parameters","_receiver","_side","_speaker","_topicside"]; _side = _this select 0; _message = _this select 1; _parameters = if (count _this > 2) then {_this select 2} else {[]}; _logik = (_side) Call WFBE_CO_FNC_GetSideLogic; _speaker = _logik getVariable "wfbe_radio_hq"; _receiver = _logik getVariable "wfbe_radio_hq_rec"; _topicSide = _logik getVariable "wfbe_radio_hq_id"; switch (true) do { case (_message in ["Lost","Captured","HostilesDetectedNear"]): { _locRaw = str _parameters; _rlName = _parameters getVariable "name"; _dub = _parameters getVariable "wfbe_town_dubbing"; if (_dub != "Town") then {if (count(getArray(configFile >> (missionNamespace getVariable Format ["WFBE_%1_RadioAnnouncers_Config", _side]) >> "Words" >> _dub)) == 0) then {_dub = "Town"}}; _speaker kbTell [_receiver, _topicSide, _message,["1","",_rlName,[_dub]],true]; }; case (_message in ["CapturedNear","LostAt"]): { _locRaw = str (_parameters select 1); _rlName = (_parameters select 1) getVariable "name"; _dub = (_parameters select 1) getVariable "wfbe_town_dubbing"; if (_dub != "Town") then {if (count(getArray(configFile >> (missionNamespace getVariable Format ["WFBE_%1_RadioAnnouncers_Config", _side]) >> "Words" >> _dub)) == 0) then {_dub = "Town"}}; _speaker kbTell [_receiver, _topicSide, _message,["1","",(_parameters select 0),[(_parameters select 0)]],["2","",_rlName,[_dub]],true]; }; case (_message in ["Constructed","Destroyed","Deployed","Mobilized","IsUnderAttack"]): { _localizedString = ""; _value = ""; if ((_parameters select 0 ) == "Base") then { switch ((_parameters select 1) getVariable "wfbe_structure_type") do { case "Headquarters": {_localizedString = localize "STRHeadquarters";_value = "Headquarters"}; case "Barracks": {_localizedString = localize "strwfbarracks";_value = "Barracks"}; case "Light": {_localizedString = localize "STRLightVehicleSupply";_value = "LightVehicleSupply"}; case "CommandCenter": { _localizedString = localize "STR_WF_CommandCenter"; _value = "UAVTerminal"; if (WF_A2_Arrowhead || (WF_A2_CombinedOps && _side == west)) then {_value = "CommandPost"}; }; case "Heavy": {_localizedString = localize "STRHeavyVehicleSupply";_value = "HeavyVehicleSupply"}; case "Aircraft": {_localizedString = localize "STRHelipad";_value = "Helipad"}; case "ServicePoint": {_localizedString = localize "STRServicePoint";_value = "ServicePoint"}; case "AARadar": {_localizedString = localize "STRAntiAirRadar";_value = "AntiAirRadar"}; }; } else { _localizedString = (_parameters select 1) getVariable "name"; _dub = (_parameters select 1) getVariable "wfbe_town_dubbing"; if (_dub != "Town") then {if (count(getArray(configFile >> (missionNamespace getVariable Format ["WFBE_%1_RadioAnnouncers_Config", _side]) >> "Words" >> _dub)) == 0) then {_dub = "Town"}}; _value = _dub; }; _speaker kbTell [_receiver, _topicSide, _message,["1","",_localizedString,[_value]],true]; }; case (_message in ["VotingForNewCommander","NewIntelAvailable","MMissionFailed","NewMissionAvailable"]): { _speaker kbTell [_receiver, _topicSide, _message, true] }; case (_message in ["MMissionComplete","ExtractionTeam","ExtractionTeamCancel"]): { _speaker kbTell [_receiver, _topicSide, _message,["1","",_parameters select 0,[_parameters select 1]],true]; }; };/* Spawn defenses in a town. Parameters: - Defense Logic. - Side. */ Private ["_defense","_defense_logic","_kind","_kinds","_nils","_random","_side","_sideID"]; _defense_logic = _this select 0; _side = _this select 1; _sideID = (_side) Call WFBE_CO_FNC_GetSideID; _defense = ""; //--- Retrieve the possible kinds. _kinds = _defense_logic getVariable "wfbe_defense_kind"; //--- At least one type is needed. if (count _kinds == 0) exitWith {}; _nils = []; if (count _kinds > 1) then { //--- Get a random one. while {true} do { _random = floor(random count _kinds); _kind = missionNamespace getVariable Format ["WFBE_%1_Defenses_%2", _side, _kinds select _random]; if !(isNil '_kind') then {_defense = _kind select floor(random count _kind)} else {[_nils, _kinds select _random] Call WFBE_CO_FNC_ArrayPush; _kinds = [_kinds, [_random]] Call WFBE_CO_FNC_ArrayShift}; if (count _kinds == 0 || _defense != "") exitWith {}; }; } else { //--- Use the default one. _kind = missionNamespace getVariable Format ["WFBE_%1_Defenses_%2", _side, _kinds select 0]; if !(isNil '_kind') then {_defense = _kind select floor(random count _kind)}; }; //--- Learn and adapt, remove if nil. if (count _nils > 0) then {_defense_logic setVariable ["wfbe_defense_kind",(_defense_logic getVariable "wfbe_defense_kind") - _nils]}; //--- If found, create a defense. if (_defense != "") then { Private["_entitie"]; _entitie = createVehicle [_defense, getPos _defense_logic, [], 0, "NONE"]; _entitie setDir (direction _defense_logic); _entitie setPos (getPos _defense_logic); _entitie addEventHandler ['killed', Format ["[_this select 0, _this select 1, %1] Spawn WFBE_CO_FNC_OnUnitKilled;", _sideID]]; _defense_logic setVariable ["wfbe_defense", _entitie]; };/* Spawn mortars in a town. Parameters: - Town. - Side. */ Private ["_mortar", "_position", "_side", "_town"]; _town = _this select 0; _side = _this select 1; _mortar = missionNamespace getVariable Format["WFBE_%1DEFENSES_MORTAR", _side]; if (isNil '_mortar') exitWith {}; if (count _mortar == 0) exitWith {}; //--- Get a spawn position. _position = _town getVariable "wfbe_town_mortars"; _position = _positions select floor(random count _positions); _mortar = _mortar select floor (random count _mortar); _direction = direction _position; //--- Generate a random setup depending on town SV. _set = []; if ((_town getVariable "maxSupplyValue") >= 80) then { _set = [[_mortar,[0,0,0]], [_mortar,[-5,-5,0]], [_mortar,[5,-5,0]]]; } else { _set = [[_mortar,[-3,0,0]], [_mortar,[3,0,0]]]; };/* Trash an entity. Parameters: - Object. */ Private ["_group","_isMan","_object"]; _object = _this; if !(isNull _object) then { _group = []; _isMan = if (_object isKindOf "Man") then {true} else {false}; if (_isMan) then {_group = group _object}; if !(_isMan) then {_object removeAllEventHandlers "hit"}; _object removeAllEventHandlers "killed"; sleep (missionNamespace getVariable "WFBE_C_UNITS_CLEAN_TIMEOUT"); if (_isMan) then {hideBody _object; sleep 6}; deleteVehicle _object; if (_isMan) then { if !(isNull _group) then { if (isNil {_group getVariable "wfbe_persistent"}) then {if (count (units _group) <= 0) then {deleteGroup _group}}; }; }; };Private ['_formations','_team']; _team = _this; _formations = ['FILE','DIAMOND','STAG COLUMN','WEDGE']; _team setFormation (_formations select round(random(count _formations -1))); _team setBehaviour "AWARE"; _team setSpeedMode "NORMAL"; _team setCombatMode "YELLOW";/* Trigger a commander's vote. Parameters: - Side. */ Private ["_logic", "_side", "_voteTime"]; _side = _this; _voteTime = (missionNamespace getVariable 'WFBE_C_GAMEPLAY_VOTE_TIME'); _logic = (_side) Call WFBE_CO_FNC_GetSideLogic; //--- Vote countdown. while {_voteTime > -1} do {_voteTime = _voteTime - 1;_logic setVariable ["wfbe_votetime", _voteTime, true];sleep 1}; //--- Get the most voted person. Private ["_aiVotes","_count","_highest","_highestTeam","_tie","_teams","_vote","_votes"]; _aiVotes = 0; _votes = []; _teams = _logic getVariable "wfbe_teams"; //--- Get the votes from everyone. for '_i' from 0 to (count _teams)-1 do {[_votes, 0] Call WFBE_CO_FNC_ArrayPush}; { if (isPlayer leader _x) then { _vote = _x getVariable "wfbe_vote"; if (_vote == -1) then {_aiVotes = _aiVotes + 1} else {_votes set [_vote, (_votes select _vote) + 1]}; }; } forEach _teams; //--- Who was the most voted for? _count = 0;_highest = 0;_highestTeam = -1; _tie = false; { if (_x == _highest && _x > 0) then {_tie = true}; if (_x > _highest) then {_highestTeam = _count;_highest = _x;_tie = false}; _count = _count + 1; } forEach _votes; _commander = objNull; //--- Attempt to get a playable team. if (!_tie && _highest > _aiVotes && _highestTeam != -1) then {_commander = _teams select _highestTeam}; //--- Player voted for an ai...? if !(isNull _commander) then {if !(isPlayer leader _commander) then {_commander = objNull}}; //--- Finally set the commander, null = ai, team = player. _logic setVariable ["wfbe_commander", _commander, true]; //--- Notify the clients. [_side, "HandleSpecial", ["commander-vote", _commander]] Call WFBE_CO_FNC_SendToClients; //--- Process the AI Commander FSM if it's not running. if (isNull _commander) then { if ((missionNamespace getVariable "WFBE_C_AI_COMMANDER_ENABLED") > 0) then { if !(_logic getVariable "wfbe_aicom_running") then { _logic setVariable ["wfbe_aicom_running", true]; [_side] ExecFSM "Server\FSM\aicommander.fsm"; }; }; } else { if (_logic getVariable "wfbe_aicom_running") then {_logic setVariable ["wfbe_aicom_running", false]}; //--- [>1.62] Set the HQ to be local to the commander. if (!WF_A2_Vanilla && isMultiplayer) then {[_side Call WFBE_CO_FNC_GetSideHQ, leader _commander] Spawn WFBE_SE_FNC_SetLocalityOwner}; };/* Structures */ missionNamespace setVariable ['WFBE_NEURODEF_BARRACKS_WALLS',[ ['Land_HBarrier_large',[8,0,0],90], ['Land_HBarrier_large',[8,10,0],90], ['Land_HBarrier_large',[8,-7.5,0],90], ['Land_HBarrier_large',[5,-11,0],180], ['Land_HBarrier_large',[0.5,-11,0],180], ['Land_HBarrier_large',[-6,-11,0],180], ['Land_HBarrier_large',[-9.5,-7.5,0],90], ['Land_HBarrier_large',[-9.5,2.5,0],90], ['Land_HBarrier_large',[5,13,0],180], ['Land_HBarrier_large',[0.5,13,0],180], ['Land_HBarrier_large',[-6,13,0],180], ['Land_HBarrier_large',[-9.5,9.5,0],90] ]]; missionNamespace setVariable ['WFBE_NEURODEF_LIGHT_WALLS',[ ['Land_HBarrier_large',[10,-1,0],90], ['Land_HBarrier_large',[10,9,0],-90], ['Land_HBarrier_large',[10,-8.5,0],90], ['Land_HBarrier_large',[7,-12,0],180], ['Land_HBarrier_large',[0,-12,0],180], ['Land_HBarrier_large',[-7,-12,0],180], ['Land_HBarrier_large',[7,12,0],180], ['Land_HBarrier_large',[0,12,0],180], ['Land_HBarrier_large',[-7,12,0],180], ['Land_HBarrier_large',[-11,-9,0],90], ['Land_HBarrier_large',[-11,-1.5,0],90], ['Land_HBarrier_large',[-11,6,0],90], ['Land_HBarrier_large',[-11,9,0],90] ]]; missionNamespace setVariable ['WFBE_NEURODEF_COMMANDCENTER_WALLS',[ ['Land_HBarrier_large',[4,-3.5,0],90], ['Land_HBarrier_large',[4,4,0],90], ['Land_HBarrier_large',[1,7.5,0],180], ['Land_HBarrier_large',[-2.5,7.5,0],180], ['Land_HBarrier_large',[-5.5,4,0],90], ['Land_HBarrier_large',[-5.5,-3.5,0],90], ['Land_HBarrier5',[4,-6.5,0],180] ]]; missionNamespace setVariable ['WFBE_NEURODEF_SERVICEPOINT_WALLS',[ ['Land_HBarrier_large',[4,-3.5,0],90], ['Land_HBarrier_large',[4,4,0],90], ['Land_HBarrier_large',[1,7.5,0],180], ['Land_HBarrier_large',[-2.5,7.5,0],180], ['Land_HBarrier_large',[-5.5,4,0],90], ['Land_HBarrier_large',[-5.5,-3.5,0],90], ['Land_HBarrier5',[4,-6.5,0],180] ]]; missionNamespace setVariable ['WFBE_NEURODEF_HEAVY_WALLS',[ ['Land_HBarrier_large',[14,-1,0],90], ['Land_HBarrier_large',[14,9,0],-90], ['Land_HBarrier_large',[14,-8.5,0],90], ['Land_HBarrier_large',[14,-11,0],90], ['Land_HBarrier_large',[11,-14.5,0],180], ['Land_HBarrier_large',[4.5,-14.5,0],180], ['Land_HBarrier_large',[-3,-14.5,0],180], ['Land_HBarrier_large',[-10.5,-14.5,0],180], ['Land_HBarrier_large',[-14,-11,0],90], ['Land_HBarrier_large',[-14,-3.5,0],90], ['Land_HBarrier_large',[-14,4,0],90], ['Land_HBarrier_large',[-14,9.5,0],90], ['Land_HBarrier_large',[11,13,0],180], ['Land_HBarrier_large',[3.5,13,0],180], ['Land_HBarrier_large',[-4,13,0],180], ['Land_HBarrier_large',[-11,13,0],-180] ]]; missionNamespace setVariable ['WFBE_NEURODEF_AIRCRAFT_WALLS',[ ['Land_HBarrier_large',[10,-1,0],90], ['Land_HBarrier_large',[10,9,0],-90], ['Land_HBarrier_large',[10,-8.5,0],90], ['Land_HBarrier_large',[7,-12,0],180], ['Land_HBarrier_large',[0,-12,0],180], ['Land_HBarrier_large',[-7,-12,0],180], ['Land_HBarrier_large',[7,12,0],180], ['Land_HBarrier_large',[0,12,0],180], ['Land_HBarrier_large',[-7,12,0],180], ['Land_HBarrier_large',[-11,-9,0],90], ['Land_HBarrier_large',[-11,-1.5,0],90], ['Land_HBarrier_large',[-11,6,0],90], ['Land_HBarrier_large',[-11,9,0],90] ]]; missionNamespace setVariable ['WFBE_NEURODEF_MG',[ [if (WF_A2_Vanilla) then {'Land_fortified_nest_small'} else {'Land_fortified_nest_small_EP1'},[0.25,0,0],180], ['Land_fort_bagfence_corner',[-1,-3,0],0] ]]; missionNamespace setVariable ['WFBE_NEURODEF_AAPOD',[ ['Land_fort_bagfence_round',[0,2,0],0], ['Land_fort_bagfence_long',[-2.8,-1.7,0],90], ['Land_fort_bagfence_long',[2.8,-1.7,0],90], ['Land_fort_bagfence_long',[1.4,-5.5,0],0], ['Land_fort_bagfence_corner',[-1.8,-5,0],0] ]]; missionNamespace setVariable ['WFBE_NEURODEF_MASH',[ ['Land_fort_bagfence_corner',[-3,3,0],270], ['Land_fort_bagfence_long',[-3.5,-0.2,0],90], ['Land_fort_bagfence_corner',[-2.5,-3.5,0],0], ['Land_fort_bagfence_long',[0.5,-4,0],0], ['Land_fort_bagfence_corner',[3.5,-3,0],90], ['Land_fort_bagfence_long',[4,-0.2,0],90], ['Land_fort_bagfence_corner',[3,3.5,0],180] ]];if (!isServer || time > 30) exitWith {diag_log Format["[WFBE (WARNING)][frameno:%1 | ticktime:%2] Init_Server: The server initialization cannot be called more than once.",diag_frameno,diag_tickTime]}; ["INITIALIZATION", Format ["Init_Server.sqf: Server initialization begins at [%1]", time]] Call WFBE_CO_FNC_LogContent; //--- Allow resistance group to be spawned without a placeholder. createCenter resistance; resistance setFriend [west,0]; resistance setFriend [east,0]; AIBuyUnit = Compile preprocessFile "Server\Functions\Server_BuyUnit.sqf"; if (WF_A2_Vanilla) then {AISquadRespawn = Compile preprocessFile "Server\AI\AI_SquadRespawn.sqf"}; if !(WF_A2_Vanilla) then {AIAdvancedRespawn = Compile preprocessFile "Server\AI\AI_AdvancedRespawn.sqf"}; AIMoveTo = Compile preprocessFile "Server\AI\Orders\AI_MoveTo.sqf"; AIPatrol = Compile preprocessFile "Server\AI\Orders\AI_Patrol.sqf"; AITownPatrol = Compile preprocessFile "Server\AI\Orders\AI_TownPatrol.sqf"; AITownResitance = Compile preprocessFile "Server\AI\AI_Resistance.sqf"; AIWPAdd = Compile preprocessFile "Server\AI\Orders\AI_WPAdd.sqf"; AIWPRemove = Compile preprocessFile "Server\AI\Orders\AI_WPRemove.sqf"; BuildingDamaged = Compile preprocessFile "Server\Functions\Server_BuildingDamaged.sqf"; BuildingHandleDamages = Compile preprocessFile "Server\Functions\Server_BuildingHandleDamages.sqf"; BuildingKilled = Compile preprocessFile "Server\Functions\Server_BuildingKilled.sqf"; CanUpdateTeam = Compile preprocessFile "Server\Functions\Server_CanUpdateTeam.sqf"; ChangeAICommanderFunds = Compile preprocessFile "Server\Functions\Server_ChangeAICommanderFunds.sqf"; ConstructDefense = Compile preprocessFile "Server\Construction\Construction_StationaryDefense.sqf"; CreateDefenseTemplate = Compile preprocessFile "Server\Functions\Server_CreateDefenseTemplate.sqf"; HandleBuildingRepair = Compile preprocessFile "Server\Functions\Server_HandleBuildingRepair.sqf"; GetAICommanderFunds = Compile preprocessFile "Server\Functions\Server_GetAICommanderFunds.sqf"; HandleBuildingDamage = Compile preprocessFile "Server\Functions\Server_HandleBuildingDamage.sqf"; HandleDefense = Compile preprocessFile "Server\Functions\Server_HandleDefense.sqf"; HandleEmptyVehicle = Compile preprocessFile "Server\Functions\Server_HandleEmptyVehicle.sqf"; HandleSpecial = Compile preprocessFile "Server\Functions\Server_HandleSpecial.sqf"; MHQRepair = Compile preprocessFile "Server\Functions\Server_MHQRepair.sqf"; SideMessage = Compile preprocessFile "Server\Functions\Server_SideMessage.sqf"; TrashObject = Compile preprocessFile "Server\Functions\Server_TrashObject.sqf"; UpdateTeam = Compile preprocessFile "Server\Functions\Server_UpdateTeam.sqf"; UpdateSupplyTruck = Compile preprocessFile "Server\AI\AI_UpdateSupplyTruck.sqf"; //--- Support Functions. KAT_ParaAmmo = Compile preprocessFile "Server\Support\Support_ParaAmmo.sqf"; KAT_Paratroopers = Compile preprocessFile "Server\Support\Support_Paratroopers.sqf"; KAT_ParaVehicles = Compile preprocessFile "Server\Support\Support_ParaVehicles.sqf"; KAT_UAV = Compile preprocessFile "Server\Support\Support_UAV.sqf"; //--- New Fnc. WFBE_SE_FNC_AI_SetTownAttackPath = Compile preprocessFileLineNumbers "Server\Functions\Server_AI_SetTownAttackPath.sqf"; WFBE_SE_FNC_AI_SetTownAttackPath_PathIsSafe = Compile preprocessFileLineNumbers "Server\Functions\Server_AI_SetTownAttackPath_PathIsSafe.sqf"; WFBE_SE_FNC_AI_SetTownAttackPath_PosIsSafe = Compile preprocessFileLineNumbers "Server\Functions\Server_AI_SetTownAttackPath_PosIsSafe.sqf"; WFBE_SE_FNC_AI_Com_Upgrade = Compile preprocessFileLineNumbers "Server\Functions\Server_AI_Com_Upgrade.sqf"; WFBE_SE_FNC_GetTownGroups = Compile preprocessFileLineNumbers "Server\Functions\Server_GetTownGroups.sqf"; WFBE_SE_FNC_GetTownGroupsDefender = Compile preprocessFileLineNumbers "Server\Functions\Server_GetTownGroupsDefender.sqf"; WFBE_SE_FNC_GetTownPatrol = Compile preprocessFileLineNumbers "Server\Functions\Server_GetTownPatrol.sqf"; WFBE_SE_FNC_HandlePVF = Compile preprocessFileLineNumbers "Server\Functions\Server_HandlePVF.sqf"; WFBE_SE_FNC_ManageTownDefenses = Compile preprocessFileLineNumbers "Server\Functions\Server_ManageTownDefenses.sqf"; WFBE_SE_FNC_OnHQKilled = Compile preprocessFileLineNumbers "Server\Functions\Server_OnHQKilled.sqf"; WFBE_SE_FNC_OperateTownDefensesUnits = Compile preprocessFileLineNumbers "Server\Functions\Server_OperateTownDefensesUnits.sqf"; WFBE_SE_FNC_ProcessUpgrade = Compile preprocessFileLineNumbers "Server\Functions\Server_ProcessUpgrade.sqf"; WFBE_SE_FNC_SetCampsToSide = Compile preprocessFileLineNumbers "Server\Functions\Server_SetCampsToSide.sqf"; WFBE_SE_FNC_SetLocalityOwner = if !(WF_A2_Vanilla) then {Compile preprocessFileLineNumbers "Server\Functions\Server_SetLocalityOwner.sqf"} else {{}}; WFBE_SE_FNC_SpawnTownDefense = Compile preprocessFileLineNumbers "Server\Functions\Server_SpawnTownDefense.sqf"; WFBE_SE_FNC_VoteForCommander = Compile preprocessFileLineNumbers "Server\Functions\Server_VoteForCommander.sqf"; WFBE_SE_FNC_SECOPS_HandleJIP = Compile preprocessFileLineNumbers "Server\Functions\Server_SECOPS_HandleJIP.sqf"; Call Compile preprocessFileLineNumbers 'Server\Functions\Server_FNC_Delegation.sqf'; //--- FUNCTIONS: Delegation. Call Compile preprocessFileLineNumbers 'Server\Functions\Server_FNC_TownDefenses.sqf'; //--- FUNCTIONS: Town Defenses. //--- Call in NEURO System (Taxi Advanced Script). [] Call Compile preprocessFile "Server\Module\NEURO\NEURO.sqf"; //--- NEURO: Special Condition. missionNamespace setVariable["NEURO_TAXI_CONDITION", "isNil {_x getVariable 'WFBE_Taxi_Prohib'} && local _x"]; //--- Server Init is now complete. serverInitComplete = true; ["INITIALIZATION", "Init_Server.sqf: Functions are loaded."] Call WFBE_CO_FNC_LogContent; //--- Getting all locations. startingLocations = [0,0,0] nearEntities ["LocationLogicStart", 100000]; ["INITIALIZATION", "Init_Server.sqf: Initializing starting locations."] Call WFBE_CO_FNC_LogContent; //--- Waiting for the common part to be executed. waitUntil {commonInitComplete && townInit}; //--- Side logics. _present_west = missionNamespace getVariable "WFBE_WEST_PRESENT"; _present_east = missionNamespace getVariable "WFBE_EAST_PRESENT"; _present_res = missionNamespace getVariable "WFBE_GUER_PRESENT"; //--- New Variables. if ((missionNamespace getVariable "WFBE_C_TOWNS_PATROLS") > 0) then { missionNamespace setVariable ["WFBE_C_PATROLS_DELAY_SPAWN", 10];//--- Patrols will be able to respawn after x seconds. missionNamespace setVariable ["WFBE_C_PATROLS_TOWNS_REUSABLITY", 0.25];//--- Patrols may patrol a town again after being in 25% of the other towns. missionNamespace setVariable ["WFBE_C_PATROLS_TOWNS_LOCK", floor(totalTowns * (missionNamespace getVariable "WFBE_C_PATROLS_TOWNS_REUSABLITY"))]; }; [] Call Compile preprocessFile 'Server\Init\Init_Defenses.sqf'; //--- Fast Time. if ((missionNamespace getVariable "WFBE_C_ENVIRONMENT_FAST_TIME") > 0) then { [] ExecFSM "Server\FSM\env_fast_time.fsm"; ["INITIALIZATION", "Init_Server.sqf: Fast time module is loaded."] Call WFBE_CO_FNC_LogContent; }; //--- Weather. _weat = missionNamespace getVariable "WFBE_C_ENVIRONMENT_WEATHER"; if (_weat == 3) then { [] ExecFSM "Server\FSM\env_weather.fsm"; } else { if (isDedicated) then { _oc = 0.05; switch (_weat) do { case 0: {_oc = 0}; case 1: {_oc = 0.5}; case 2: {_oc = 1}; }; 60 setOvercast _oc; }; }; ["INITIALIZATION", "Init_Server.sqf: Weather module is loaded."] Call WFBE_CO_FNC_LogContent; //--- Static defenses groups in main towns. { missionNamespace setVariable [Format ["WFBE_%1_DefenseTeam", _x], createGroup _x]; (missionNamespace getVariable Format ["WFBE_%1_DefenseTeam", _x]) setVariable ["wfbe_persistent", true]; } forEach [west,east,resistance]; //--- Select whether the spawn restriction is enabled or not. _locationLogics = []; if ((missionNamespace getVariable "WFBE_C_BASE_START_TOWN") > 0) then { { _nearLogics = _x nearEntities[["LocationLogicStart"],2000]; if (count _nearLogics > 0) then {{if !(_x in _locationLogics) then {_locationLogics = _locationLogics + [_x]}} forEach _nearLogics}; } forEach towns; if (count _locationLogics < 3) then {_locationLogics = startingLocations}, ["INITIALIZATION", Format ["Init_Server.sqf: Spawn locations were refined [%1].",count _locationLogics]] Call WFBE_CO_FNC_LogContent; } else { _locationLogics = startingLocations; }; WF_Logic setVariable ["wfbe_spawnpos", _locationLogics]; //--- Retrieve the starting locations. //--- Make sure that we have enough starting locations. // if (count _startingLocations < 3) exitWith {["ERROR", "Init_Server.sqf : There is not enough starting location to play."] Call WFBE_CO_FNC_LogContent;endMission "END1"}; Private ["_i", "_maxAttempts", "_minDist", "_rPosE", "_rPosG", "_rPosW", "_setEast", "_setGuer", "_setWest", "_startE", "_startG", "_startW"]; _i = 0; _maxAttempts = 2000; _minDist = missionNamespace getVariable 'WFBE_C_BASE_STARTING_DISTANCE'; _startW = [0,0,0]; _startE = [0,0,0]; _startG = [0,0,0]; _rPosW = [0,0,0]; _rPosE = [0,0,0]; _rPosG = [0,0,0]; _setWest = if (_present_west) then {true} else {false}; _setEast = if (_present_east) then {true} else {false}; _setGuer = if (_present_res) then {true} else {false}; _total = count _locationLogics; _use_random = false; _spawn_north = objNull; _spawn_south = objNull; _skip_w = false; _skip_e = false; { if (!isNil {_x getVariable "wfbe_spawn"}) then { switch (_x getVariable "wfbe_spawn") do { case "north": {_spawn_north = _x}; case "south": {_spawn_south = _x}; }; }; } forEach startingLocations; //todo, improve starting locations system. switch (missionNamespace getVariable "WFBE_C_BASE_STARTING_MODE") do { case 0: { //--- West north, east south. if (isNull _spawn_north || isNull _spawn_south) then { _use_random = true; } else { _startE = _spawn_south; _startW = _spawn_north; if (WFBE_ISTHREEWAY) then {_skip_w = true; _skip_e = true; _setWest = false; _setEast = false; _use_random = true}; }; }; case 1: { //--- West south, east north. if (isNull _spawn_north || isNull _spawn_south) then { _use_random = true; } else { _startE = _spawn_north; _startW = _spawn_south; if (WFBE_ISTHREEWAY) then {_skip_w = true; _skip_e = true; _setWest = false; _setEast = false; _use_random = true}; }; }; case 2: { _use_random = true; }; }; if (_use_random) then { while {true} do { if (!_setWest && !_setEast && !_setGuer) exitWith {["INITIALIZATION", "Init_Server.sqf : All sides were placed [Random]."] Call WFBE_CO_FNC_LogContent}; //--- Determine west starting location if necessary. if (_setWest) then { _rPosW = _locationLogics select floor(random _total); if (_rPosW distance _startE > _minDist && _rPosW distance _startG > _minDist) then {_startW = _rPosW; _setWest = false}; }; // --- Determine west starting location if necessary. if (_setEast) then { _rPosE = _locationLogics select floor(random _total); if (_rPosE distance _startW > _minDist && _rPosE distance _startG > _minDist) then {_startE = _rPosE; _setEast = false}; }; // --- Determine guer starting location if necessary. if (_setGuer) then { _rPosG = _locationLogics select floor(random _total); if (_rPosG distance _startW > _minDist && _rPosG distance _startE > _minDist) then {_startG = _rPosG; _setGuer = false}; }; _i = _i + 1; if (_i >= _maxAttempts) exitWith { //--- Get the default locations. Private ["_eastDefault", "_guerDefault", "_westDefault"]; _eastDefault = objNull; _westDefault = objNull; _guerDefault = objNull; { if (!isNil {_x getVariable "wfbe_default"}) then { switch (_x getVariable "wfbe_default") do { case west: {_westDefault = _x}; case east: {_eastDefault = _x}; case resistance: {_guerDefault = _x}; }; }; } forEach startingLocations; // --- Ensure that everything is set, otherwise we randomly set the spawn. if (isNull _guerDefault || isNull _eastDefault || isNull _westDefault) then { Private ["_tempWork"]; _tempWork = +(startingLocations) - [_westDefault, _eastDefault, _guerDefault]; if (isNull _guerDefault && _present_res) then {_guerDefault = _tempWork select floor(random _total); _tempWork = _tempWork - [_guerDefault]}; if (isNull _eastDefault && _present_east) then {_eastDefault = _tempWork select floor(random _total); _tempWork = _tempWork - [_eastDefault]}; if (isNull _westDefault && _present_west) then {_westDefault = _tempWork select floor(random _total); _tempWork = _tempWork - [_westDefault]}; }; if (_present_res) then {_startG = _guerDefault}; if (_present_east && !_skip_e) then {_startE = _eastDefault}; if (_present_west && !_skip_w) then {_startW = _westDefault}; ["INITIALIZATION", "Init_Server.sqf : All sides were placed by force after that the attempts limit was reached."] Call WFBE_CO_FNC_LogContent; }; }; }; ["INITIALIZATION", Format ["Init_Server.sqf: Starting location mode is on [%1].",missionNamespace getVariable "WFBE_C_BASE_STARTING_MODE"]] Call WFBE_CO_FNC_LogContent; emptyQueu = []; //--- Global sides initialization. { Private["_side"]; _side = _x select 1; //--- Only use those variable if the side logic is present in the editor. if (_x select 0) then { _pos = _x select 2; _logik = (_side) Call WFBE_CO_FNC_GetSideLogic; _sideID = (_side) Call WFBE_CO_FNC_GetSideID; //--- HQ init. _hq = [missionNamespace getVariable Format["WFBE_%1MHQNAME", _side], _pos, _sideID, getDir _pos, true, false, true] Call WFBE_CO_FNC_CreateVehicle; _hq setVariable ["WFBE_Taxi_Prohib", true]; _hq setVariable ["wfbe_side", _side]; _hq setVariable ["wfbe_trashable", false]; _hq setVariable ["wfbe_structure_type", "Headquarters"]; _hq addEventHandler ['killed', {_this Spawn WFBE_SE_FNC_OnHQKilled}]; //--- HQ Friendly Fire handler. if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_HANDLE_FRIENDLYFIRE") > 0) then {_hq addEventHandler ['handleDamage',{[_this select 0,_this select 2,_this select 3] Call BuildingHandleDamages}]}; //--- Get upgrade clearance for side. _clearance = missionNamespace getVariable "WFBE_C_GAMEPLAY_UPGRADES_CLEARANCE"; _upgrades = false; if (_clearance != 0) then { _upgrades = switch (true) do { case (_clearance in [1,4,5,7] && _side == west): {true}; case (_clearance in [2,4,6,7] && _side == east): {true}; case (_clearance in [3,5,6,7] && _side == resistance): {true}; default {false}; }; }; if !(_upgrades) then { _upgrades = []; for '_i' from 0 to count(missionNamespace getVariable Format["WFBE_C_UPGRADES_%1_LEVELS", _side])-1 do {[_upgrades, 0] Call WFBE_CO_FNC_ArrayPush}; } else { _upgrades = missionNamespace getVariable Format["WFBE_C_UPGRADES_%1_LEVELS", _side]; }; //--- Logic init. _logik setVariable ["wfbe_commander", objNull, true]; _logik setVariable ["wfbe_hq", _hq, true]; _logik setVariable ["wfbe_hq_deployed", false, true]; _logik setVariable ["wfbe_hq_repair_count", 1, true]; _logik setVariable ["wfbe_hq_repairing", false, true]; _logik setVariable ["wfbe_startpos", _pos, true]; _logik setVariable ["wfbe_structure_lasthit", 0]; _logik setVariable ["wfbe_structures", [], true]; _logik setVariable ["wfbe_aicom_running", false]; _logik setVariable ["wfbe_aicom_funds", round((missionNamespace getVariable Format ['WFBE_C_ECONOMY_FUNDS_START_%1', _side])*1.5)]; _logik setVariable ["wfbe_upgrades", _upgrades, true]; _logik setVariable ["wfbe_upgrading", false, true]; _logik setVariable ["wfbe_votetime", missionNamespace getVariable "WFBE_C_GAMEPLAY_VOTE_TIME", true]; _logik setVariable ["wfbe_hqinuse",false]; //todo improve. WF_Logic setVariable [Format["%1UnitsCreated",_side],0,true]; WF_Logic setVariable [Format["%1Casualties",_side],0,true]; WF_Logic setVariable [Format["%1VehiclesCreated",_side],0,true]; WF_Logic setVariable [Format["%1VehiclesLost",_side],0,true]; //--- Parameters specific. if ((missionNamespace getVariable "WFBE_C_BASE_AREA") > 0) then {_logik setVariable ["wfbe_basearea", [], true]}; if ((missionNamespace getVariable "WFBE_C_ECONOMY_SUPPLY_SYSTEM") == 0 && (missionNamespace getVariable "WFBE_C_AI_COMMANDER_ENABLED") > 0) then { _logik setVariable ["wfbe_ai_supplytrucks", []]; [_side] Spawn UpdateSupplyTruck; }; if ((missionNamespace getVariable "WFBE_C_RESPAWN_MASH") > 0) then {_logik setVariable ["wfbe_mash", objNull, true]}; if ((missionNamespace getVariable "WFBE_C_ECONOMY_CURRENCY_SYSTEM") == 0) then {_logik setVariable ["wfbe_supply", missionNamespace getVariable Format ["WFBE_C_ECONOMY_SUPPLY_START_%1", _side], true]}; if ((missionNamespace getVariable "WFBE_C_ECONOMY_INCOME_SYSTEM") in [3,4]) then { _logik setVariable ["wfbe_commander_percent", if ((missionNamespace getVariable "WFBE_C_ECONOMY_INCOME_PERCENT_MAX") < 70) then {missionNamespace getVariable "WFBE_C_ECONOMY_INCOME_PERCENT_MAX"} else {70}, true]; }; if ((missionNamespace getVariable "WFBE_C_STRUCTURES_CONSTRUCTION_MODE") == 1) then { _logik setVariable ["wfbe_workers", [], true]; _logik setVariable ["wfbe_structures_logic", []]; }; //--- Structures limit (live). _str = []; for '_i' from 0 to count(missionNamespace getVariable Format["WFBE_%1STRUCTURES",_side])-2 do {_str set [_i, 0]}; _logik setVariable ["wfbe_structures_live", _str, true]; //--- Radio: Initialize the announcers entities. _radio_hq1 = (createGroup sideLogic) createUnit ["Logic",[0,0,0],[],0,"NONE"]; _radio_hq2 = (createGroup sideLogic) createUnit ["Logic",[0,0,0],[],0,"NONE"]; [_radio_hq1] joinSilent (createGroup _side); [_radio_hq2] joinSilent (createGroup _side); _logik setVariable ["wfbe_radio_hq", _radio_hq1, true]; _logik setVariable ["wfbe_radio_hq_rec", _radio_hq2]; //--- Radio: Pick a random announcer. _announcers = missionNamespace getVariable Format ["WFBE_%1_RadioAnnouncers", _side]; _radio_hq_id = (_announcers) select floor(random (count _announcers)); //--- Radio: Apply an identity. _radio_hq1 setIdentity _radio_hq_id; _radio_hq1 setRank 'COLONEL'; _radio_hq1 setGroupId ["HQ"]; _radio_hq1 kbAddTopic [_radio_hq_id, "Client\kb\hq.bikb","Client\kb\hq.fsm", {call compile preprocessFileLineNumbers "Client\kb\hq.sqf"}]; _logik setVariable ["wfbe_radio_hq_id", _radio_hq_id, true]; //--- Starting vehicles. { _vehicle = [_x, getPos _hq, _sideID, 0, false] Call WFBE_CO_FNC_CreateVehicle; [_vehicle, getPos _hq, 45, 60, true, false, true] Call PlaceNear; _vehicle setVariable ["WFBE_Taxi_Prohib", true]; (_vehicle) call WFBE_CO_FNC_ClearVehicleCargo; emptyQueu = emptyQueu + [_vehicle]; _vehicle spawn HandleEmptyVehicle; } forEach (missionNamespace getVariable Format ['WFBE_%1STARTINGVEHICLES', _side]); //--- Groups init. _teams = []; { if !(isNil '_x') then { if (_x isKindOf "Man") then { Private ["_group"]; _group = group _x; [_teams, _group] Call WFBE_CO_FNC_ArrayPush; if (isNil {_group getVariable "wfbe_funds"}) then {_group setVariable ["wfbe_funds", missionNamespace getVariable Format ["WFBE_C_ECONOMY_FUNDS_START_%1", _side], true]}; _group setVariable ["wfbe_side", _side]; _group setVariable ["wfbe_persistent", true]; _group setVariable ["wfbe_queue", []]; _group setVariable ["wfbe_vote", -1, true]; [_group, false] Call SetTeamAutonomous; [_group, ""] Call SetTeamRespawn; [_group, -1] Call SetTeamType; [_group, "towns"] Call SetTeamMoveMode; [_group, [0,0,0]] Call SetTeamMovePos; if ((missionNamespace getVariable "WFBE_C_AI_TEAMS_ENABLED") > 0) then { if (!isPlayer _x && alive _x) then { _x setPos ([getPos _pos, 20, 30] Call GetRandomPosition); _loadout = missionNamespace getVariable Format["WFBE_%1_AI_Loadout_0", _side]; if !(isNil '_loadout') then { _loadout = _loadout select floor (random count _loadout); if (count _loadout <= 3) then { [_x, _loadout select 0, _loadout select 1, _loadout select 2] Call WFBE_CO_FNC_EquipUnit; } else { [_x, _loadout select 0, _loadout select 1, _loadout select 2, _loadout select 3, _loadout select 4] Call WFBE_CO_FNC_EquipUnit; }; }; }; if !(WF_A2_Vanilla) then {(_group) Call Compile preprocessFile 'Server\AI\AI_AddMultiplayerRespawnEH.sqf'}; [_group] ExecFSM "Server\FSM\aiteam.fsm"; }; ["INITIALIZATION", Format["Init_Server.sqf: [%1] Team [%2] was initialized.", _side, _group]] Call WFBE_CO_FNC_LogContent; }; }; } forEach (synchronizedObjects _logik); _logik setVariable ["wfbe_teams", _teams, true]; _logik setVariable ["wfbe_teams_count", count _teams]; }; } forEach [[_present_east, east, _startE],[_present_res, resistance, _startG],[_present_west, west, _startW]]; serverInitFull = true; //--- Town starting mode. if ((missionNamespace getVariable "WFBE_C_TOWNS_STARTING_MODE") != 0 || (missionNamespace getVariable "WFBE_C_TOWNS_PATROLS") > 0) then {[] Call Compile preprocessFile "Server\Init\Init_Towns.sqf"} else {townInitServer = true}; //--- Pre-initialization of the Garbage Collector & Empty vehicle collector. if (WF_A2_Vanilla) then {WF_Logic setVariable ["trash",[],true]}; WF_Logic setVariable ["emptyVehicles",[],true]; //--- Don't pause the server init script. [] Spawn { waitUntil {townInit}; if (WFBE_ISTHREEWAY) then { [] ExecFSM "Server\FSM\server_victory_threeway.fsm"; ["INITIALIZATION", "Init_Server.sqf: Victory Condition FSM is initialized [3-way]."] Call WFBE_CO_FNC_LogContent; } else { [] ExecFSM "Server\FSM\updateserver.fsm"; ["INITIALIZATION", "Init_Server.sqf: Victory Condition FSM is initialized."] Call WFBE_CO_FNC_LogContent; }; [] ExecFSM "Server\FSM\updateresources.fsm"; ["INITIALIZATION", "Init_Server.sqf: Resources FSM is initialized."] Call WFBE_CO_FNC_LogContent; if ((missionNamespace getVariable "WFBE_C_TOWNS_CONQUEST_MODE") > 0) then {[] ExecFSM "Server\FSM\conquest.fsm"}; }; if (WF_A2_Vanilla) then {[] ExecFSM "Server\FSM\server_collector_garbage_va.fsm"} else {[] ExecFSM "Server\FSM\server_collector_garbage.fsm"}; ["INITIALIZATION", "Init_Server.sqf: Garbage Collector is defined."] Call WFBE_CO_FNC_LogContent; [] ExecFSM "Server\FSM\emptyvehiclescollector.fsm"; ["INITIALIZATION", "Init_Server.sqf: Empty Vehicle Collector is defined."] Call WFBE_CO_FNC_LogContent; //--- Base Area (grouped base) if ((missionNamespace getVariable "WFBE_C_BASE_AREA") > 0) then {[] ExecFSM "Server\FSM\basearea.fsm"}; //--- Allies base. _allies = missionNamespace getVariable "WFBE_C_BASE_ALLIES"; if (_allies > 0 && (WF_A2_Vanilla || WF_A2_CombinedOps)) then { AlliesBuyUnit = Compile preprocessFile "Server\Functions\Server_AlliesBuyUnit.sqf"; [] Call Compile preprocessFile "Server\Config\Config_Allies.sqf"; if (_allies in [1,3]) then {[west] ExecFSM "Server\FSM\allies.fsm"}; if (_allies in [2,3]) then {[east] ExecFSM "Server\FSM\allies.fsm"}; ["INITIALIZATION", "Init_Server.sqf: allies are initialized."] Call WFBE_CO_FNC_LogContent; }; //--- Mission Module if ((missionNamespace getVariable "WFBE_C_MODULE_WFBE_MISSIONS") > 0) then { //--- Initialize the missions. Call Compile preprocessFileLineNumbers "Server\Module\Missions\Init_Missions.sqf"; ExecFSM 'Server\FSM\module_missions.fsm'; ["INITIALIZATION", "Init_Server.sqf: Secondary Missions module is running."] Call WFBE_CO_FNC_LogContent; }; ["INITIALIZATION", Format ["Init_Server.sqf: Server initialization ended at [%1]", time]] Call WFBE_CO_FNC_LogContent; //--- Waiting until that the game is launched. waitUntil {time > 0}; {_x Spawn WFBE_SE_FNC_VoteForCommander} forEach WFBE_PRESENTSIDES;Private ['_boundaries','_camps','_eStart','_half','_initied','_limit','_minus','_near','_nearTownsE','_nearTownsW','_require','_resTowns','_total','_town','_towns','_wStart','_z']; waitUntil {townInit}; //--- Special Towns mode. switch (missionNamespace getVariable "WFBE_C_TOWNS_STARTING_MODE") do { //--- 50-50. case 1: { _half = round(count towns)/2; _wStart = (west Call WFBE_CO_FNC_GetSideLogic) getVariable "wfbe_startpos"; _eStart = (east Call WFBE_CO_FNC_GetSideLogic) getVariable "wfbe_startpos"; _nearTownsW = []; _nearTownsE = []; _near = [_wStart,towns] Call SortByDistance; if (count _near > 0) then { for [{_z = 0},{_z < _half},{_z = _z + 1}] do {_nearTownsW = _nearTownsW + [_near select _z]}; }; _nearTownsE = (towns - _nearTownsW); { _x setVariable ['sideID',WESTID,true]; _camps = _x getVariable "camps"; {_x setVariable ['sideID',WESTID,true]} forEach _camps; } forEach _nearTownsW; { _x setVariable ['sideID',EASTID,true]; _camps = _x getVariable "camps"; {_x setVariable ['sideID',EASTID,true]} forEach _camps; } forEach _nearTownsE; }; //--- Nearby Towns. case 2: { _total = count towns; _wStart = (west Call WFBE_CO_FNC_GetSideLogic) getVariable "wfbe_startpos"; _eStart = (east Call WFBE_CO_FNC_GetSideLogic) getVariable "wfbe_startpos"; _limit = floor(_total / 6); _nearTownsW = []; _nearTownsE = []; _near = [_wStart,towns] Call SortByDistance; if (count _near > 0) then { for [{_z = 0},{_z < _limit},{_z = _z + 1}] do {_nearTownsW = _nearTownsW + [_near select _z]}; }; _near = [_eStart,(towns - _nearTownsW)] Call SortByDistance; if (count _near > 0) then { for [{_z = 0},{_z < _limit},{_z = _z + 1}] do {_nearTownsE = _nearTownsE + [_near select _z]}; }; { _x setVariable ['sideID',WESTID,true]; _camps = _x getVariable "camps"; {_x setVariable ['sideID',WESTID,true]} forEach _camps; } forEach _nearTownsW; { _x setVariable ['sideID',EASTID,true]; _camps = _x getVariable "camps"; {_x setVariable ['sideID',EASTID,true]} forEach _camps; } forEach _nearTownsE; }; //--- Random Towns (25% East, 25% West, 50% Res). case 3: { _total = count towns; _half = round(count towns)/4; _minus = round(count towns)/2; _boundaries = missionNamespace getVariable 'WFBE_BOUNDARIESXY'; _nearTownsW = []; _resTowns = []; _towns = +towns; //--- Use boundaries to determinate the center if possible. if !(isNil '_boundaries') then { Private ["_dis1","_dis2","_e","_posF1","_posF2","_posx","_posy","_searchArea","_size"]; //--- Attempt to set the center of the island resistance. _searchArea = [(_boundaries / 2)-0.1,(_boundaries / 2)+0.1,0]; _posx = _searchArea select 0; _posy = _searchArea select 0; _size = _boundaries/5; _e = sqrt((_size)^2 - (_size)^2); _posF1 = [_posx + (sin (90) * _e),_posy + (cos (90) * _e)]; _posF2 = [_posx - (sin (90) * _e),_posy - (cos (90) * _e)]; _total = 2 * _size; //--- Determinate resistance towns. { _position = getPos _x; _dis1 = _position distance _posF1; _dis2 = _position distance _posF2; if (_dis1+_dis2 < _total) then { _resTowns = _resTowns + [_x]; }; if (count _resTowns >= _minus) exitWith {}; } forEach towns; //--- Update Towns. _towns = _towns - _resTowns; _e = count _towns; //--- Check if we couldn't reach 50% Res. if (count _resTowns < _minus) then { for '_z' from 0 to _e-1 do { _town = _towns select round(random((count _towns)-1)); _towns = _towns - [_town]; _resTowns = _resTowns + [_town]; if (count _resTowns >= _minus) exitWith {}; }; }; //--- Update Towns Again. _towns = _towns - _resTowns; _e = count _towns; //--- Assign west or east towns. for '_z' from 0 to totalTowns-_minus-1 do { _town = _towns select round(random((count _towns)-1)); _towns = _towns - [_town]; if (count _nearTownsW < _half) then { _nearTownsW = _nearTownsW + [_town]; _town setVariable ['sideID',WESTID,true]; _camps = _town getVariable "camps"; {_x setVariable ['sideID',WESTID,true]} forEach _camps; } else { _town setVariable ['sideID',EASTID,true]; _camps = _town getVariable "camps"; {_x setVariable ['sideID',EASTID,true]} forEach _camps; }; }; } else { //--- No boundaries defined, we use a random system. for '_z' from 0 to _minus-1 do { _town = _towns select round(random((count _towns)-1)); _towns = _towns - [_town]; if (count _nearTownsW < _half) then { _nearTownsW = _nearTownsW + [_town]; _town setVariable ['sideID',WESTID,true]; _camps = _town getVariable "camps"; {_x setVariable ['sideID',WESTID,true]} forEach _camps; } else { _town setVariable ['sideID',EASTID,true]; _camps = _town getVariable "camps"; {_x setVariable ['sideID',EASTID,true]} forEach _camps; }; }; }; }; }; //--- Resistance Patrols. if ((missionNamespace getVariable "WFBE_C_TOWNS_STARTING_MODE") != 1 && ((missionNamespace getVariable "WFBE_C_TOWNS_PATROLS") > 0)) then { _require = if ((missionNamespace getVariable "WFBE_C_TOWNS_PATROLS") > count towns) then {count towns} else {missionNamespace getVariable "WFBE_C_TOWNS_PATROLS"}; _initied = 0; _towns = towns; //--- Don't bother with the randomizer if the amount set in RESPATROLMAX is >= count towns. while {_initied < _require} do { if (_require == count towns) then { // [_towns select _initied] ExecFSM "Server\FSM\respatrol.fsm"; (_towns select _initied) setVariable ["wfbe_patrol_enabled", true]; _initied = _initied + 1; } else { if (random 2 > 1) then { _town = _towns select floor (random count _towns); // _town = [_towns select (round(random((count _towns)-1)))] ExecFSM "Server\FSM\respatrol.fsm"; _town setVariable ["wfbe_patrol_enabled", true]; _towns = _towns - [_town]; _initied = _initied + 1; }; }; }; }; townInitServer = true; ["INITIALIZATION", "Init_Server.sqf: Town starting mode is done."] Call WFBE_CO_FNC_LogContent;/* Initialize WFBE secondary missions module. */ Private ['_tpath']; _tpath = "Server\Module\Missions\%1\m_init.sqf"; WFBE_SE_MOD_Missions_CanAssign = Compile preprocessFileLineNumbers "Server\Module\Missions\Missions_CanAssign.sqf"; WFBE_SE_MOD_Missions_CanRun = Compile preprocessFileLineNumbers "Server\Module\Missions\Missions_CanRun.sqf"; //--- Maximum amount of missions allowed per side at a time. missionNamespace setVariable ['WFBE_MISSIONSMAXIMUM_WEST', 1]; missionNamespace setVariable ['WFBE_MISSIONSMAXIMUM_EAST', 1]; missionNamespace setVariable ['WFBE_MISSIONSMAXIMUM_GUER', 1]; //--- Time randomizer (Affect the timeout). missionNamespace setVariable ['WFBE_MISSIONSRANDOMIZER', 160]; //--- Re-usability, after x missions, mission y is available again. missionNamespace setVariable ['WFBE_MISSIONSREUSABILITY', 10]; //--- Time to wait between each missions. missionNamespace setVariable ['WFBE_MISSIONSTIMEOUT', 2400]; /* The missions are initialized by m_init.sqf - Parameter 1: The island mask (worldName) * -> All islands (Exemple: ['*'], will run everywhere). ! -> All islands but those (Exemple: ['!','Chernarus','Takistan'], will run everywhere but on chernarus & takistan). -> Only the given islands (Exemple: ['Chernarus','Takistan'], will run only on chernarus & takistan). - Parameter 2: The path, this one define where the missions are stored server-side, you only have to change the mission name to match the folder name Server\Module\Missions\M_PLAYERS_Attack_Air -> Format [_tpath, 'M_PLAYERS_Attack_Air'] - Parameter 3: The unique mission identifier, this one shall match the folder's name. Server\Module\Missions\M_PLAYERS_Attack_Air -> 'M_PLAYERS_Attack_Air' - Parameter 4: The unique mission incremental ID, this one shall be initialized at 0. 0 - Parameter 5: The scope defines if the mission shall run on everyone or only on one at a time (Parameter 6 define the sides). "all", [west,east] -> This will run on both west AND east at the same time. "all", [west,east,resistance] -> This will run on both west AND east AND resistance at the same time. "one", [west,east] -> This will run on west OR east at a time. - Parameter 6: The sides defines who shall be able to run the mission (parameter 5 define the scope). [east,west] -> east and west may run the mission one at a time or both at the same time depending on the scope. - Parameter 7: The condition, this defines the condition on when to run the mission. "all", [west,east], {!WF_A2_Vanilla} -> Triggered on all, Only triggered if the gamemode is not Vanilla. "one", [west,east], {!WF_A2_Vanilla} -> Triggered on east or west, Only triggered if the gamemode is not Vanilla. "one", [west,east], [{(west Call WFBE_CO_FNC_GetSideStructures) > 0}, {(east Call WFBE_CO_FNC_GetSideStructures) > 0}] -> Triggered on east or west, the condition in array-style will match the side array order ["west,"east"], [{west condition}, {east condition}] Each mission receive 3 defaults parameters, the unique identifier, the starting index and the selected index. */ //--- Assign a content. missionNamespace setVariable ['WFBE_M_CONTENT',[ // [['*'], Format [_tpath, 'M_UAV_RetrieveModule'], 'M_UAV_RetrieveModule', 0, "all", [east, west], {true}], //--- UAV Retrieving Mission [['*'], Format [_tpath, 'M_PLAYERS_Attack_Air'], 'M_PLAYERS_Attack_Air', 0, "one", [east, west], {!WF_A2_Vanilla && (missionNamespace getVariable 'WFBE_C_MODULE_BIS_PMC') > 0}] //--- Resistance PMC attack players, requires PMC. ]]; //--- Ensure that the re-usability is not higher than the content. if ((missionNamespace getVariable 'WFBE_MISSIONSREUSABILITY') > count(missionNamespace getVariable 'WFBE_M_CONTENT')-1) then { missionNamespace setVariable ['WFBE_MISSIONSREUSABILITY', count(missionNamespace getVariable 'WFBE_M_CONTENT')]; };/* Check whether a mission can be assigned or not. Parameters: - Mission */ Private ["_canAssign"]; _canAssign = false; { if ((missionNamespace getVariable Format["_WFBE_M_RUNNINGMISSIONS_%1", _x]) < (missionNamespace getVariable Format["WFBE_MISSIONSMAXIMUM_%1", _x])) exitWith {_canAssign = true}; } forEach WFBE_PRESENTSIDES; _canAssign/* Check whether a mission can run or not. Parameters: - Mission */ Private ["_canrun","_mission", "_sides"]; _mission = _this; _canrun = true; //--- Side(s) to run. _sides = []; switch (_mission select 4) do { case "all": { if (call (_mission select 6)) then {_sides = _mission select 5} else {_canrun = false}; }; case "one": { Private ["_condition_perside", "_index", "_selected", "_sides_check"]; _condition_perside = if (typeName(_mission select 6) == "ARRAY") then {true} else {false}; _sides_check = +(_mission select 5); _selected = []; //--- Check randomly who can run the mission. while {count _sides_check > 0 && count _sides == 0} do { _selected = _sides_check select floor(random count _sides_check); if (_condition_perside) then { _index = (_mission select 5) find _selected; if (call ((_mission select 6) select _index) && (missionNamespace getVariable Format["_WFBE_M_RUNNINGMISSIONS_%1", _selected]) < (missionNamespace getVariable Format["WFBE_MISSIONSMAXIMUM_%1", _selected])) then {_sides = [_selected]}; } else { if (call (_mission select 6) && (missionNamespace getVariable Format["_WFBE_M_RUNNINGMISSIONS_%1", _selected]) < (missionNamespace getVariable Format["WFBE_MISSIONSMAXIMUM_%1", _selected])) then {_sides = [_selected]}; }; _sides_check = _sides_check - [_selected]; }; if (count _sides == 0) then {_canrun = false}; }; default {_canrun = false}; }; //--- Make sure that still have some mission room left for the present side(s). if (_canrun) then { Private ["_islandHeader"]; { if ((missionNamespace getVariable Format["_WFBE_M_RUNNINGMISSIONS_%1", _x]) >= (missionNamespace getVariable Format["WFBE_MISSIONSMAXIMUM_%1", _x])) exitWith {_canrun = false}; } forEach _sides; //--- Check the islands to run upon. if (_canrun) then { _islandHeader = (_mission select 0) select 0; if (_islandHeader != '*') then { if (_islandHeader == '!') then { //--- If island not in. _canrun = if !(worldName in (_mission select 0)) then {true} else {false}; } else { //--- If island in. _canrun = if (worldName in (_mission select 0)) then {true} else {false}; }; }; }; }; [_canrun, _sides]/* Helicopter hunters, a resistance helicopter is dispatched to attack different players This mission is only triggered for one side. */ Private ["_boundaries","_chopper","_group","_jipHandler","_list","_pilot","_players","_ran","_ranDir","_runFor","_ranPos","_target","_targets","_turrets","_uniqueIndex","_uniqueLabel","_vehicle"]; _uniqueLabel = _this select 0; _uniqueIndex = _this select 1; _runFor = (_this select 2) select 0;//--- This mission will only run for one side, sides are sent to this mission in array format like [west] or [east]. ["INITIALIZATION", "M_PLAYERS_Attack_Air.sqf: Started mission."] Call WFBE_CO_FNC_LogContent; //--- Retrieve the players on a side. _players = []; _list = missionNamespace getVariable Format ["WFBE_%1TEAMS",_runFor]; { if !(isNil '_x') then { if (side _x == _runFor) then { if (isPlayer(leader _x) && alive(leader _x)) then {_players = _players + [leader _x]}; }; }; } forEach _list; //--- Ensure that the team already has a town. if (count _players == 0) exitWith { missionNamespace setVariable [Format['_WFBE_M_RUNNINGMISSIONS_%1',_runFor],((missionNamespace getVariable Format['_WFBE_M_RUNNINGMISSIONS_%1',_runFor])) - 1]; }; //--- Radio the designated team that a new mission is available. [_runFor,"NewMissionAvailable"] Spawn SideMessage; //--- Define the chopper spawn position. _boundaries = missionNamespace getVariable "WFBE_BOUNDARIESXY"; _ranPos = []; _ranDir = []; _bd = missionNamespace getVariable 'WFBE_BOUNDARIESXY'; if !(isNil '_bd') then { _ranPos = [ [0+random(200),0+random(200),400+random(200)], [0+random(200),_bd-random(200),400+random(200)], [_bd-random(200),_bd-random(200),400+random(200)], [_bd-random(200),0+random(200),400+random(200)] ]; _ranDir = [45,145,225,315]; } else { _ranPos = [[0+random(200),0+random(200),400+random(200)],[10000+random(200),0+random(200),400+random(200)]]; _ranDir = [45,315]; }; _ran = round(random((count _ranPos)-1)); //--- This script use PMC units. _chopper = "Ka60_PMC"; _group = createGroup resistance; _vehicle = [_chopper, (_ranPos select _ran), WFBE_C_GUER_ID, (_ranDir select _ran), false, true, false, "FLY"] Call WFBE_CO_FNC_CreateVehicle; _vehicle addEventHandler ['Killed',{[_this select 0,_this select 1,WFBE_C_GUER_ID] Spawn WFBE_CO_FNC_OnUnitKilled}]; //--- Man the chopper. _pilot = ["Soldier_Pilot_PMC",_group,[0,0,0],WFBE_C_GUER_ID, false] Call WFBE_CO_FNC_CreateUnit; _pilot moveInDriver _vehicle; _pilot = ["Soldier_Pilot_PMC",_group,[0,0,0],WFBE_C_GUER_ID, false] Call WFBE_CO_FNC_CreateUnit; _pilot moveInGunner _vehicle; //--- Man the extra turrets. _config = configFile >> "CfgVehicles" >> _chopper >> "Turrets"; _turrets = [_config] call BIS_fnc_returnVehicleTurrets; if (count _turrets > 0) then {[_turrets, [], _vehicle, "Soldier_Pilot_PMC", _group] call SpawnTurrets}; //--- Warn the client. [_runFor, "SECOPS_ReceiveMission", ["M_PLAYERS_Attack_Air",_vehicle,_uniqueLabel,_uniqueIndex]] Call WFBE_CO_FNC_SendToClients; //--- Handle clients JIP for this mission. _jipHandler = [[_runFor], ["M_PLAYERS_Attack_Air",_vehicle,_uniqueLabel,_uniqueIndex]] Spawn WFBE_SE_FNC_SECOPS_HandleJIP; //--- Move the chopper toward the target. while {true} do { sleep 20; _players = []; { if !(isNil '_x') then { if (side _x == _runFor) then { if (isPlayer(leader _x) && alive(leader _x)) then {_players = _players + [leader _x]}; }; }; } forEach _list; if (count _players == 0 || !alive _vehicle || !alive(driver _vehicle) || !canMove _vehicle) exitWith {}; _target = [_vehicle, _players] Call WFBE_CO_FNC_GetClosestEntity; { if (vehicle _x == _x && !((vehicle _x) isKindOf "Air")) exitWith {_target = _x}; } forEach _targets; if !(someAmmo _vehicle) then {[_vehicle,resistance] Call RearmVehicle}; _vehicle doMove (getPos _target); {_group reveal _x} forEach (vehicle _target nearEntities 200); }; if (alive _vehicle || count _players == 0) then {_vehicle setDammage 1}; {if (alive _x || count _players == 0) then {_x setDammage 1}} forEach (units _group); //--- Kill the spawned thread if it still runs. if !(scriptDone _jipHandler) then {terminate _jipHandler}; //--- Wait for the client to end up his sync. sleep 35; missionNamespace setVariable [Format['_WFBE_M_RUNNINGMISSIONS_%1',_runFor],((missionNamespace getVariable Format['_WFBE_M_RUNNINGMISSIONS_%1',_runFor])) - 1];/* Crashed UAV, east and west need to take back the module. This mission is triggered for all defined side. */ Private ['_attempts','_boundariesxy','_completeList','_completeListTr','_crashed','_craters','_defensePos','_east','_eastUAV','_ecomplete','_end','_espos','_eteam','_eteamname','_eteamrunning','_jipHandler','_list','_markerSize','_near','_nearUav','_pos','_ran','_randomPos','_resistance','_returned','_safeRadius','_size','_spawnUnits','_team','_uav','_uavModel','_uniqueIndex','_uniqueLabel','_unit','_units','_vehicles','_waitFor','_wcomplete','_west','_westUAV','_winner','_wspos','_wteam','_wteamname','_wteamrunning']; _uniqueLabel = _this select 0; _uniqueIndex = _this select 1; _sides = _this select 2; {missionNamespace setVariable [Format['_WFBE_M_RUNNINGMISSIONS_%1', _x],(missionNamespace getVariable Format['_WFBE_M_RUNNINGMISSIONS_%1', _x]) + 1]} forEach _sides; ["INITIALIZATION", "M_UAV_RetrieveModule.sqf: Started mission."] Call WFBE_CO_FNC_LogContent; _randomPos = []; //--- Marker size. _markerSize = 750; //--- Is boundaries enabled? _boundariesxy = missionNamespace getVariable 'WFBE_BOUNDARIESXY'; if !(isNil '_boundariesxy') then { //--- Use the boundaries to get a position, limit it to a possible location (not outside of the map). _boundariesxy = _boundariesxy - (_markerSize*2); if (_boundariesxy <= 0) then {_boundariesxy = (missionNamespace getVariable 'WFBE_BOUNDARIESXY')}; _safeRadius = 750; _attempts = 0; //--- Get a safe 'clear' position for a crash site. while {_attempts != -1} do { sleep 0.005; _attempts = _attempts + 1; _randomPos = [_markerSize + (random _boundariesxy),_markerSize + (random _boundariesxy),0]; //--- Water-free & building free if (count (_randomPos isFlatEmpty [20/8,0,0.6,20,0,false,objNull]) > 0) then { //--- We don't want any 'living' units around. if (count(_randomPos nearEntities [['Man','Car','Motorcycle','Ship','Air','Tank','StaticWeapon'],_safeRadius/2]) == 0) exitWith {_attempts = -1}; //--- Result may vary. if (_attempts > 250 && _safeRadius > 10) then { _attempts = 0; _safeRadius = _safeRadius - 100; if (_safeRadius < 10) then {_safeRadius = 10}; }; }; }; } else { //--- Get a random location around a town. _pos = getPos (towns select round(random((count towns) -1))); _safeRadius = 500; _attempts = 0; //--- Get a safe 'clear' position for a crash site. while {_attempts != -1} do { sleep 0.01; _attempts = _attempts + 1; _randomPos = [(_pos select 0) + random(_safeRadius)-random(_safeRadius),(_pos select 1) + random(_safeRadius)-random(_safeRadius),0]; //--- Water-free & building free if (count (_randomPos isFlatEmpty [20/8,0,0.6,20,0,false,objNull]) > 0) then { //--- We don't want any 'living' units around. if (count(_randomPos nearEntities [['Man','Car','Motorcycle','Ship','Air','Tank','StaticWeapon'],_safeRadius/2]) == 0) exitWith {_attempts = -1}; //--- Result may vary. if (_attempts > 50) then { _attempts = 0; _safeRadius = _safeRadius + 200; if (_safeRadius > 1500) then {attempts = -1;_randomPos = []}; }; }; }; }; //--- No suitable position found? exit. if (count _randomPos == 0) exitWith { ["INITIALIZATION", "M_UAV_RetrieveModule.sqf: Unable to determine a spawn location."] Call WFBE_CO_FNC_LogContent; {missionNamespace setVariable [Format['_WFBE_M_RUNNINGMISSIONS_%1', _x],(missionNamespace getVariable Format['_WFBE_M_RUNNINGMISSIONS_%1', _x]) - 1]} forEach _sides; }; //--- Define the context. _eastUAV = missionNamespace getVariable 'WFBE_EASTUAV'; _westUAV = missionNamespace getVariable 'WFBE_WESTUAV'; //--- No suitable UAV models? exit. if (isNil '_eastUAV' && isNil '_westUAV') exitWith { ["INITIALIZATION", "M_UAV_RetrieveModule.sqf: Unable to get a suitable UAV Model."] Call WFBE_CO_FNC_LogContent; {missionNamespace setVariable [Format['_WFBE_M_RUNNINGMISSIONS_%1', _x],(missionNamespace getVariable Format['_WFBE_M_RUNNINGMISSIONS_%1', _x]) - 1]} forEach _sides; }; //--- Radio both side for a new mission available {[_x,"NewMissionAvailable"] Spawn SideMessage} forEach [west,east]; //--- Determine which one to use. _crashed = civilian; if (isNil '_eastUAV' || isNil '_westUAV') then { _crashed = if (isNil '_eastUAV') then {west} else {east}; } else { _crashed = if (random 100 > 25) then {west} else {east}; }; //--- Place and destroy the uav. _uavModel = if (_crashed == west) then {_westUAV} else {_eastUAV}; _uav = _uavModel createVehicle (_randomPos); _uav setDammage 1; //--- Garbage protection. if !(WF_A2_Vanilla) then {_uav setVariable ["wfbe_trashable", false]}; _uav setVariable ['keepAlive',true,true]; //--- Salvager protection. //--- Determine if the uav is held by resistance forces or not. _spawnUnits = 0 Spawn {}; _team = objNull; _units = []; _vehicles = []; if (random 100 > 35) then { //--- Pick a resistance patrol template (Only the light & medium one). _teamType = missionNamespace getVariable Format ["WFBE_GUER_PATROL_%1",["LIGHT","MEDIUM"] select floor (random 2)]; _teamType = _teamType select floor(random count _teamType); //--- Get the team spawn position. _defensePos = [[(_randomPos select 0)+random(150)-random(150),(_randomPos select 1)+random(150)-random(150)], 250] Call GetSafePlace; //--- Create the team. _returned = [_list, _defensePos, resistance, if ((missionNamespace getVariable "WFBE_C_TOWNS_VEHICLES_LOCK_DEFENDER") > 0) then {true} else {false}, objNull, false] Call WFBE_CO_FNC_CreateTeam; _units = _returned select 0; _vehicles = _returned select 1; _team = _returned select 2; //--- Start the hunt/guard script. _spawnUnits = [_units,_vehicles,_randomPos,_markerSize] Spawn { Private ['_area','_guard','_objects','_target','_targets','_units','_vehicles']; _units = _this select 0; _vehicles = _this select 1; _guard = _this select 2; _area = _this select 3; while {({alive _x} count _units) > 0} do { sleep 20; _targets = _guard nearEntities [['Man','Car','Motorcycle','Ship','Air','Tank','StaticWeapon'],_area]; _objects = _targets; { if !(_x isKindOf 'Man') then {if (count (crew _x) == 0) then {_objects = _objects - [_x]}}; if (side _x == resistance || side _x == civilian) then {_objects = _objects - [_x]}; } forEach _targets; _target = [_guard,_objects] Call WFBE_CO_FNC_GetClosestEntity; if (!isNull _target) then { (_units) commandMove [(getPos _target select 0)-random(60)+random(60), (getPos _target select 1)-random(60)+random(60), 0]; }; }; }; }; //--- Send to client, task, size, etc. {[_x, "SECOPS_ReceiveMission", ["M_UAV_RetrieveModule",_markerSize,_uniqueLabel,_uniqueIndex,_uav]] Call WFBE_CO_FNC_SendToClients} forEach _sides; //--- Handle clients JIP for this mission. _jipHandler = [_sides, ["M_UAV_RetrieveModule",_markerSize,_uniqueLabel,_uniqueIndex,_uav]] Spawn WFBE_SE_FNC_SECOPS_HandleJIP; //--- Choose the module extraction team. _wteam = []; _eteam = []; //--- Vanilla. if (WF_A2_Vanilla) then { _wteam = ['FR_Miles','FR_OHara','FR_Rodriguez','FR_Sykes']; _eteam = ['RUS_Soldier_TL','RUS_Soldier_GL','RUS_Soldier2','RUS_Soldier2']; } else { //--- Combined Ops. if (WF_A2_CombinedOps) then { if (WF_Camo) then { if (random 100 > 50) then { _wteam = ['FR_Miles','FR_OHara','FR_Rodriguez','FR_Sykes']; } else { if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_BAF") > 0) then { _wteam = ['BAF_Soldier_SL_W','BAF_Soldier_W','BAF_Soldier_W','BAF_Soldier_Medic_W']; } else { _wteam = ['CZ_Special_Forces_TL_DES_EP1','CZ_Special_Forces_DES_EP1','CZ_Special_Forces_DES_EP1','CZ_Special_Forces_GL_DES_EP1']; }; }; _eteam = ['RUS_Soldier_TL','RUS_Soldier_GL','RUS_Soldier2','RUS_Soldier2']; } else { if (random 100 > 50) then { if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_BAF") > 0 && random 100 > 50) then { _wteam = ['BAF_Soldier_SL_DDPM','BAF_Soldier_DDPM','BAF_Soldier_DDPM','BAF_Soldier_Medic_DDPM']; } else { _wteam = ['CZ_Special_Forces_TL_DES_EP1','CZ_Special_Forces_DES_EP1','CZ_Special_Forces_DES_EP1','CZ_Special_Forces_GL_DES_EP1']; }; _eteam = ['RUS_Soldier_TL','RUS_Soldier_GL','RUS_Soldier2','RUS_Soldier2']; } else { if (random 100 > 50) then { _wteam = ['GER_Soldier_TL_EP1','GER_Soldier_EP1','GER_Soldier_EP1','GER_Soldier_Medic_EP1']; } else { _wteam = ['US_Delta_Force_TL_EP1','US_Delta_Force_EP1','US_Delta_Force_EP1','US_Delta_Force_Medic_EP1']; }; _eteam = ['TK_Special_Forces_TL_EP1','TK_Special_Forces_EP1','TK_Special_Forces_EP1','TK_Special_Forces_MG_EP1']; }; }; } else { //--- Arowwhead. if (random 100 > 50) then { if ((missionNamespace getVariable "WFBE_C_MODULE_BIS_BAF") > 0 && random 100 > 50) then { _wteam = ['BAF_Soldier_SL_DDPM','BAF_Soldier_DDPM','BAF_Soldier_DDPM','BAF_Soldier_Medic_DDPM']; } else { _wteam = ['GER_Soldier_TL_EP1','GER_Soldier_EP1','GER_Soldier_EP1','GER_Soldier_Medic_EP1']; }; _eteam = ['RUS_Soldier_TL','RUS_Soldier_GL','RUS_Soldier2','RUS_Soldier2']; } else { if (random 100 > 50) then { _wteam = ['CZ_Special_Forces_TL_DES_EP1','CZ_Special_Forces_DES_EP1','CZ_Special_Forces_DES_EP1','CZ_Special_Forces_GL_DES_EP1']; } else { _wteam = ['US_Delta_Force_TL_EP1','US_Delta_Force_EP1','US_Delta_Force_EP1','US_Delta_Force_Medic_EP1']; }; _eteam = ['TK_Special_Forces_TL_EP1','TK_Special_Forces_EP1','TK_Special_Forces_EP1','TK_Special_Forces_MG_EP1']; }; }; }; //--- Handle the 'Middle part'. _end = false; _wteamrunning = objNull; _eteamrunning = objNull; _wteamname = ""; _eteamname = ""; _waitFor = 0; _wspos = []; _espos = []; _wcomplete = false; _ecomplete = false; _completeList = ['WellDoneOut','GoodJobOut']; _completeListTr = ['Well done, out.','Good job, out.']; while {!_end} do { sleep 5; if (isNull _uav) exitWith {}; //--- Todo, player radio HQ for extraction team. _nearUav = _uav nearEntities 50; _west = west countSide _nearUav; _east = east countSide _nearUav; _resistance = resistance countSide _nearUav; //--- Team checkups (west). if !(isNull _wteamrunning) then { if (count ((units _wteamrunning) Call GetLiveUnits) == 0) then { if (_waitFor <= 0) then { [West,"ExtractionTeamCancel",[_wteamname,_wteamname]] Spawn SideMessage; _wteamrunning = objNull; _waitFor = 60; }; } else { if (_waitFor < -200) then { _waitFor = -1; (units _wteamrunning) commandMove (getPos _uav); }; if (((leader _wteamrunning) distance _uav) < 50 && !_ecomplete && !_wcomplete) then { _waitFor = 70; _wcomplete = true; _uav setVariable ['side', West, true]; _wteamrunning setCombatMode "RED"; _wteamrunning setBehaviour "COMBAT"; }; }; }; //--- Team checkups (east). if !(isNull _eteamrunning) then { if (count ((units _eteamrunning) Call GetLiveUnits) == 0) then { if (_waitFor <= 0) then { [East,"ExtractionTeamCancel",[_eteamname,_eteamname]] Spawn SideMessage; _eteamrunning = objNull; _waitFor = 60; }; } else { if (_waitFor < -200) then { _waitFor = -1; (units _eteamrunning) commandMove (getPos _uav); }; if (((leader _eteamrunning) distance _uav) < 50 && !_wcomplete && !_ecomplete) then { _waitFor = 70; _ecomplete = true; _uav setVariable ['side', East, true]; _eteamrunning setCombatMode "RED"; _eteamrunning setBehaviour "COMBAT"; }; }; }; if (_resistance == 0 && _waitFor <= 0) then { if (_west > 0 && isNull(_wteamrunning)) then { //--- Warn the side that the extraction team is coming. _wteamname = ['Reaper','Fatman','Anvil'] select (round(random 2)); [West,"ExtractionTeam",[_wteamname,_wteamname]] Spawn SideMessage; //--- Get a spawn position for the team. _pos = []; _attempts = 0; _size = _markerSize; while {true} do { sleep 0.05; _pos = [_randomPos, _size] Call GetSafePlace; _near = _pos nearEntities [['Man','Car','Motorcycle','Ship','Air','Tank','StaticWeapon'],_markerSize/5]; if (east countSide _near == 0 && resistance countSide _near == 0) exitWith {}; _attempts = _attempts + 1; if (_attempts > 20) then { _attempts = 0; _size = _size + (_markerSize/5); }; }; _wspos = _pos; _wteamrunning = createGroup west; { _unit = [_x,_wteamrunning,_pos,WFBE_C_WEST_ID] Call WFBE_CO_FNC_CreateUnit; } forEach _wteam; (units _wteamrunning) commandMove (getPos _uav); }; if (_east > 0 && isNull(_eteamrunning)) then { //--- Warn the side that the extraction team is coming. _eteamname = ['Frostbite','Sabre','Hammer'] select (round(random 2)); [East,"ExtractionTeam",[_eteamname,_eteamname]] Spawn SideMessage; //--- Get a spawn position for the team. _pos = []; _size = _markerSize; while {true} do { sleep 0.05; _pos = [_randomPos, _size] Call GetSafePlace; _near = _pos nearEntities [['Man','Car','Motorcycle','Ship','Air','Tank','StaticWeapon'],_markerSize/5]; if (west countSide _near == 0 && resistance countSide _near == 0) exitWith {}; _attempts = _attempts + 1; if (_attempts > 20) then { _attempts = 0; _size = _size + (_markerSize/5); }; }; _espos = _pos; _eteamrunning = createGroup east; { _unit = [_x,_eteamrunning,_pos,WFBE_C_EAST_ID] Call WFBE_CO_FNC_CreateUnit; } forEach _eteam; (units _eteamrunning) commandMove (getPos _uav); }; }; //--- Mission ends (west). if (_wcomplete && _waitFor <= 0) then { //--- if the team is dead, then we're not done yet. if (count ((units _wteamrunning) Call GetLiveUnits) > 0) then { _end = true; _ran = round(random (count(_completeList)-1)); [West,"MMissionComplete", [_completeListTr select _ran, _completeList select _ran]] Spawn SideMessage; [East,"MMissionFailed"] Spawn SideMessage; _wteamrunning setCombatMode "YELLOW"; _wteamrunning setBehaviour "AWARE"; (units _wteamrunning) commandMove _wspos; } else { _wcomplete = false; }; }; //--- Missions ends (east) if (_ecomplete && _waitFor <= 0) then { //--- if the team is dead, then we're not done yet. if (count ((units _eteamrunning) Call GetLiveUnits) > 0) then { _end = true; _ran = round(random (count(_completeList)-1)); [East,"MMissionComplete", [_completeListTr select _ran, _completeList select _ran]] Spawn SideMessage; [West,"MMissionFailed"] Spawn SideMessage; _eteamrunning setCombatMode "YELLOW"; _eteamrunning setBehaviour "AWARE"; (units _eteamrunning) commandMove _espos; } else { _ecomplete = false; }; }; _waitFor = _waitFor - 5; }; //--- Extraction teams removal (West). if ({alive _x} count (units _wteamrunning) > 0) then { //--- West. [_wteamrunning,_wspos] Spawn { Private ['_startPos','_team']; _team = _this select 0; _startPos = _this select 1; //--- Relative Infantry wait time. sleep (((((leader _team) distance _startPos)/(14*1000))*3600)); //--- Remove vehicles. {if (isNil {_x getVariable "wfbe_trashed"}) then {deleteVehicle _x}} forEach (units _team); //--- Group hasn't been removed yet. if !(isNull _team) then {deleteGroup _team}; }; }; //--- Extraction teams removal (East). if ({alive _x} count (units _eteamrunning) > 0) then { //--- East. [_eteamrunning,_espos] Spawn { Private ['_startPos','_team']; _team = _this select 0; _startPos = _this select 1; //--- Relative Infantry wait time. sleep (((((leader _team) distance _startPos)/(14*1000))*3600)); //--- Remove vehicles. {if (isNil {_x getVariable "wfbe_trashed"}) then {deleteVehicle _x}} forEach (units _team); //--- Group hasn't been removed yet. if !(isNull _team) then {deleteGroup _team}; }; }; //--- Kill the spawned thread if it still runs. if !(scriptDone _jipHandler) then {terminate _jipHandler}; if !(scriptDone _spawnUnits) then {terminate _spawnUnits}; //--- Tell the patrolling units (if there's any, to go away and dissapear). if (({alive _x} count _units) > 0) then { //--- Clean up. [_units, _vehicles, _team, [[(_randomPos select 0)+random(_markerSize)-random(_markerSize),(_randomPos select 1)+random(_markerSize)-random(_markerSize)], 250] Call GetSafePlace] Spawn { Private ['_pos','_team','_units','_vehicles']; _units = _this select 0; _vehicles = _this select 1; _team = _this select 2; _pos = _this select 3; //--- Move. (_units) commandMove _pos; //--- Relative Infantry wait time. sleep (((((leader _team) distance _pos)/(14*1000))*3600)); //--- Remove vehicles. {if (isNil {_x getVariable "wfbe_trashed"}) then {if (isPlayer (driver _x)) then {emptyQueu = emptyQueu + [_x]} else {deleteVehicle _x}}} forEach _vehicles; {if (isNil {_x getVariable "wfbe_trashed"}) then {deleteVehicle _x}} forEach _units; //--- Group hasn't been removed yet. if !(isNull _grp) then {deleteGroup _grp}; }; }; //--- Lift the ignore rule on the uav (garbage protection). if !(WF_A2_Vanilla) then {_uav setVariable ["wfbe_trashable", nil]}; //--- Remove crates if we've generated any. _craters = nearestObjects [_randomPos, ['CraterLong'], 250]; {deleteVehicle _x} forEach _craters; if !(isNull _uav) then {deleteVehicle _uav}; //--- Give the 'winning' side an award. _winner = if (_ecomplete) then {east} else {west}; [_winner, "LocalizeMessage", ['SecondaryAward','$',1000]] Call WFBE_CO_FNC_SendToClients; //--- Wait for the client to end up his sync. sleep 35; //--- Free the mission. {missionNamespace setVariable [Format['_WFBE_M_RUNNINGMISSIONS_%1', _x],(missionNamespace getVariable Format['_WFBE_M_RUNNINGMISSIONS_%1', _x]) - 1]} forEach _sides;/* * Neuro Taxi System by Benny. * Use the missionNamspace to set a condition for boarding the vehicle (NEURO_TAXI_CONDITION), _x define the vehicle. * i.e: missionNamespace setVariable["NEURO_TAXI_CONDITION", "isNil {_x getVariable 'WFBE_Taxi_Prohib'}"]; */ NEURO_BE_ClearVehiclePositions = { { if (!alive _x || _x distance _this > 900) then {unassignVehicle _x}; } forEach (assignedCargo _this); { if !(isNull _x) then {if (!alive _x || _x distance _this > 900) then {unassignVehicle _x}}; } forEach [assignedDriver _this, assignedGunner _this, assignedCommander _this]; }; NEURO_BE_GetVehicleEmptiness = { Private ["_cargo","_commander","_driver","_gunner","_hasCommander","_hasDriver","_hasGunner","_isFull","_isEmpty","_vehicleCargo"]; //--- Update the ETAT. (_this) Call NEURO_BE_ClearVehiclePositions; _driver = _this emptyPositions "driver"; _gunner = _this emptyPositions "gunner"; _commander = _this emptyPositions "commander"; _cargo = _this emptyPositions "cargo"; _hasDriver = false; _hasGunner = false; _hasCommander = false; _vehicleCargo = count (assignedCargo _this); if !(isNull(assignedDriver _this)) then {_driver = 0;_hasDriver = true;}; if !(isNull(assignedGunner _this)) then {_gunner = 0;_hasGunner = true;}; if !(isNull(assignedCommander _this)) then {_commander = 0;_hasCommander = true;}; _cargo = abs (_cargo - _vehicleCargo); _isFull = if (_driver == 0 && _gunner == 0 && _commander == 0 && _cargo == 0) then {true} else {false}; _isEmpty = if (!_hasDriver && !_hasGunner && !_hasCommander) then {true} else {false}; [_driver,_gunner,_commander,_cargo,_isFull,_isEmpty] }; NEURO_BE_GetNonAssignedUnits = { Private ["_list"]; _list = []; { if (isNull(assignedVehicle _x)) then {_list = _list + [_x]}; } forEach _this; _list }; NEURO_BE_GetSuitableVehicles = { Private ["_list","_nearest","_process","_side"]; _nearest = _this select 0; _side = _this select 1; _list = []; { if (canMove _x && fuel _x > 0.2 && (side _x) in [civilian, _side]) then { _process = true; if !(isNull(driver _x)) then {if (!local(driver _x) || (side driver _x) != _side) then {_process = false}}; if (!(isNull(assignedDriver _x)) && _process) then {if (!local(assignedDriver _x) || (side assignedDriver _x) != _side) then {_process = false}}; if (_process) then { if (Call Compile (missionNamespace getVariable 'NEURO_TAXI_CONDITION')) then { _list = _list + [_x]; }; }; }; } forEach _nearest; _list }; NEURO_BE_GetGroupWPDestination = { Private ["_destination"]; _destination = [0,0,0]; if (isNull _this) exitWith {_destination}; if (count waypoints _this > 0) then { _destination = waypointPosition [_this, currentWaypoint _this]; }; _destination }; NEURO_BE_GetVehicleZOffset = { (getPos _this) select 2 }; NEURO_BE_HandleArrivalCargo = { Private ["_vehicle"]; _vehicle = vehicle _this; //--- Paradrop or unload. if ((_vehicle) Call NEURO_BE_GetVehicleZOffset > 25) then { { if !(surfaceIsWater(getPos _vehicle)) then { if (alive _x && _vehicle == vehicle _x && local _x) then { unassignVehicle _x; [_x] orderGetIn false; _x action ["EJECT", _vehicle]; sleep 1.2; }; } else { unassignVehicle _x; [_x] orderGetIn false; }; } forEach (assignedCargo _vehicle); } else { { if (alive _x && _vehicle == vehicle _x && local _x) then { unassignVehicle _x; [_x] orderGetIn false; sleep 0.4; }; } forEach (assignedCargo _vehicle); }; }; NEURO_BE_UpdateTeamDestination = { Private ["_assignedVehicle","_destinationDriver","_forceOut","_group","_groupDestination"]; _group = _this; _forceOut = []; _groupDestination = (_group) Call NEURO_BE_GetGroupWPDestination; { _assignedVehicle = assignedVehicle _x; if !(isNull _assignedVehicle) then { if (isNull(driver _assignedVehicle) && isNull(assignedDriver _assignedVehicle) || isPlayer(_assignedVehicle)) then { _forceOut = _forceOut + [_x]; } else { _destinationDriver = (group (driver _assignedVehicle)) Call NEURO_BE_GetGroupWPDestination; if (_groupDestination distance _destinationDriver > 600) then { if (_x in (assignedCargo _assignedVehicle)) then {_forceOut = _forceOut + [_x]}; }; }; }; } forEach (units _group); if (count _forceOut > 0) then { {unassignVehicle _x} forEach _forceOut; _forceOut orderGetIn false; }; }; NEURO_BE_AssignToVehicle = { Private ["_assignedUnits","_cargoEmptiness","_emptiness","_group","_isEmpty","_isFull","_isPlayerVehicle","_near","_position","_process","_range","_unit","_units","_vehicle"]; _group = _this select 0; _position = _this select 1; _range = 500; _groupUnits = units _group; _units = (_groupUnits) Call NEURO_BE_GetNonAssignedUnits; if (count _units == 0) exitWith {}; _near = _position nearEntities [["Motorcycle","Car","Tank","Helicopter"], _range]; _near = [_near, side _group] Call NEURO_BE_GetSuitableVehicles; if (count _near == 0) exitWith {}; _assignedUnits = []; { _vehicle = _x; _emptiness = (_vehicle) Call NEURO_BE_GetVehicleEmptiness; _cargoEmptiness = _emptiness select 3; _isFull = if (_emptiness select 4) then {true} else {false}; _isEmpty = if (_emptiness select 5) then {true} else {false}; _isPlayerVehicle = if (isPlayer(_vehicle)) then {true} else {false}; //--- Vehicle is not full. if (!_isFull && !_isPlayerVehicle) then { //--- Driver, Gunner, Commander. if (_isEmpty || (effectiveCommander _vehicle) in _groupUnits) then { //--- Driver if ((_emptiness select 0) > 0) then { (_units select 0) assignAsDriver _vehicle; _assignedUnits = _assignedUnits + [_units select 0]; _units = _units - [_units select 0]; }; //--- Gunner. if ((_emptiness select 1) > 0 && count _units > 0) then { (_units select 0) assignAsGunner _vehicle; _assignedUnits = _assignedUnits + [_units select 0]; _units = _units - [_units select 0]; }; //--- Commander. if ((_emptiness select 2) > 0 && count _units > 0) then { (_units select 0) assignAsCommander _vehicle; _assignedUnits = _assignedUnits + [_units select 0]; _units = _units - [_units select 0]; }; }; //--- Cargo. if (_cargoEmptiness > 0 && count _units > 0) then { _count = count _units; //--- Make sure that the vehicle is going around the squad's destination. _process = true; if !(isNull(driver _vehicle)) then { _driverMoveTo = (group driver _vehicle) Call NEURO_BE_GetGroupWPDestination; _distance = _driverMoveTo distance ((_group) Call NEURO_BE_GetGroupWPDestination); if (_distance > 600 || (_driverMoveTo select 0 == 0 && _driverMoveTo select 1 == 0)) then {_process = false}; }; //--- All condition are met, the ai may be able to board the vehicle. if (_process) then { for '_i' from 0 to _count-1 do { _unit = _units select _i; if (_unit distance _vehicle < 500) then { _unit assignAsCargo _vehicle; _assignedUnits = _assignedUnits + [_unit]; _cargoEmptiness = _cargoEmptiness - 1; }; if (_cargoEmptiness <= 0) exitWith {}; }; }; }; _units = _units - _assignedUnits; }; if (count _units == 0) exitWith {}; } forEach _near; if (count _assignedUnits > 0) then {_assignedUnits orderGetIn true}; };// ========================================================================================================= // UPSMON - Urban Patrol Script Mon // Version: 5.0.8 R2 // Author: Monsada (chs.monsada@gmail.com) // // Wiki: http://dev-heaven.net/projects/upsmon/wiki // Forum: http://forums.bistudio.com/showthread.php?t=91696 // Share your missions with upsmon: http://dev-heaven.net/projects/upsmon/boards/86 // --------------------------------------------------------------------------------------------------------- // Based on Urban Patrol Script // Version: 2.0.3 // Author: Kronzky (www.kronzky.info / kronzky@gmail.com) // --------------------------------------------------------------------------------------------------------- // Some little fixes: !Rafalsky (v5.0.8 - 5.0.9) // --------------------------------------------------------------------------------------------------------- //Adding eventhandlers "KRON_UPS_EAST_SURRENDED" addPublicVariableEventHandler { if (_this select 1) then { nul=[east] execvm "Server\Module\UPSMON\UPSMON\MON_surrended.sqf";};}; "KRON_UPS_WEST_SURRENDED" addPublicVariableEventHandler { if (_this select 1) then { nul=[west] execvm "Server\Module\UPSMON\UPSMON\MON_surrended.sqf";};}; "KRON_UPS_GUER_SURRENDED" addPublicVariableEventHandler { if (_this select 1) then { nul=[resistance] execvm "Server\Module\UPSMON\UPSMON\MON_surrended.sqf";};}; "MON_LOCAL_EXEC" addPublicVariableEventHandler { if (local ((_this select 1)select 0)) then { call ( compile format[(_this select 1)select 1,(_this select 1)select 0] ); }; }; if (!isServer) exitWith {}; //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // These Variables should be checked and set as required, to make the mission runs properly. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // ACE Wounds System for AI (set TRUE to On, set FALSE to Off) ! ace_sys_wounds_noai = false; // set it as required //1=Enable or 0=disable debug. In debug could see a mark positioning de leader and another mark of the destination of movement, very useful for editing mission KRON_UPS_Debug = 0; //1=Enable or 0=disable. In game display global chat info about who just killed a civilian. //numbers of Civilians killed by players could be read from array 'KILLED_CIV_COUNTER' -> [Total,by West,by East,by Res] R_WHO_IS_CIV_KILLER_INFO = 1; // if you are spotted by AI group, how close the other AI group have to be to You , to be informed about your present position. over this, will lose target KRON_UPS_sharedist = 600; // If enabled IA communication between them with radio defined sharedist distance, 0/2 // (must be set to 2 in order to use reinforcement !R) KRON_UPS_comradio = 2; //Sides that are enemies of resistance KRON_UPS_Res_enemy = [east]; // Distance from destination for searching vehicles. // If your destination point is further than KRON_UPS_searchVehicledist, AI will try to find and use vehicle. KRON_UPS_searchVehicledist = 600; // 700, 900 //Enables or disables AI to use static weapons KRON_UPS_useStatics = true; //Enables or disables AI to put mines if armoured enemies near KRON_UPS_useMines = true; //------------------------------------------------------------------------------------------------------------------------------ // These Variables can be changed if needed but it is not necessary. //------------------------------------------------------------------------------------------------------------------------------ //% of chanse to use smoke by team members when someone wounded or killed in the group in %(default 13 & 35). // set both to 0 -> to switch off this function R_USE_SMOKE_wounded = 13; R_USE_SMOKE_killed = 35; //Height that heli will fly this input will be randomised in a 10% KRON_UPS_flyInHeight = 80; //Percentage of units to surrender. KRON_UPS_EAST_SURRENDER = 0; KRON_UPS_WEST_SURRENDER = 0; KRON_UPS_GUER_SURRENDER = 0; // knowsAbout 1.03 , 1.49 to add this enemy to "target list" (1-4) the higher number the less detect ability (original in 5.0.7 was 0.5) // it does not mean the AI will not shoot at you. This mean what must be knowsAbout you to AI start asking by radio for help other groups in KRON_UPS_sharedist from you R_knowsAboutEnemy = 1.49; // --------------------------------------------------------------------------------------------------------------------- // Better do not change these variables if you aren't sure !R // --------------------------------------------------------------------------------------------------------------------- //Efective distance for doing perfect ambush (max distance is this x2) KRON_UPS_ambushdist = 50; //Max distance to target for doing para-drop, will be randomised between 0 and 100% of this value. KRON_UPS_paradropdist = 250; //Frequency for doin calculations for each squad. KRON_UPS_Cycle = 10; //org 20 //Time that lider wait until doing another movement, this time reduced dynamically under fire, and on new targets KRON_UPS_react = 60; //Min time to wait for doing another reaction KRON_UPS_minreact = 20; // org 30 //Max waiting is the maximum time patrol groups will wait when arrived to target for doing another target. KRON_UPS_maxwaiting = 30; // how long AI units should be in alert mode after initially spotting an enemy KRON_UPS_alerttime = 90; // how far opfors should move away if they're under attack KRON_UPS_safedist = 250; //org 300 // how close unit has to be to target to generate a new one target or to enter stealth mode KRON_UPS_closeenough = 300; //Enable it to send reinforcements, better done it in a trigger inside your mission. KRON_UPS_reinforcement = false; //Artillery support, better control if set in trigger KRON_UPS_ARTILLERY_EAST_FIRE = false; //set to true for doing east to fire KRON_UPS_ARTILLERY_WEST_FIRE = false; //set to true for doing west to fire KRON_UPS_ARTILLERY_GUER_FIRE = false; //set to true for doing resistance to fire //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Do not touch these variables !!!! !R //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- R_GOTHIT_ARRAY =[0]; AcePresent = isClass(configFile/"CfgPatches"/"ace_main"); UPSMON_Version = "UPSMON 5.0.8-R3"; KILLED_CIV_COUNTER = [0,0,0,0]; KRON_UPS_flankAngle = 45; //Angulo de flanqueo KRON_UPS_INIT = 0; //Variable que indica que ha sido inicializado KRON_UPS_EAST_SURRENDED = false; KRON_UPS_WEST_SURRENDED = false; KRON_UPS_GUER_SURRENDED = false; KRON_AllWest=[]; //All west AI KRON_AllEast=[]; //All east AI KRON_AllRes=[]; //All resistance AI KRON_UPS_East_enemies = []; KRON_UPS_West_enemies = []; KRON_UPS_Guer_enemies = []; KRON_UPS_East_friends = []; KRON_UPS_West_friends = []; KRON_UPS_Guer_friends = []; KRON_targets0 =[];//objetivos west KRON_targets1 =[];//objetivos east KRON_targets2 =[];//resistence KRON_targetsPos =[];//Posiciones de destino actuales. KRON_NPCs = []; //Lideres de los grupos actuales KRON_UPS_Instances=0; KRON_UPS_Total=0; KRON_UPS_Exited=0; KRON_UPS_East_Total = 0; KRON_UPS_West_Total = 0; KRON_UPS_Guer_Total = 0; KRON_UPS_ARTILLERY_UNITS = []; KRON_UPS_ARTILLERY_WEST_TARGET = objnull; KRON_UPS_ARTILLERY_EAST_TARGET = objnull; KRON_UPS_ARTILLERY_GUER_TARGET = objnull; KRON_UPS_TEMPLATES = []; KRON_UPS_MG_WEAPONS = ["MG36","M249","M240","MK_48","PK","PKm","Pecheneg","M249 Para","M249 Para M145","M240G M145","M60"]; //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // ***************************************** SERVER INITIALIZATION ***************************************** if (isNil("KRON_UPS_INIT") || KRON_UPS_INIT == 0) then { //Init library function, Required Version: 5.0 of mon_functions call compile preprocessFileLineNumbers "Server\Module\UPSMON\UPSMON\common\MON_functions.sqf"; //init !R functions call compile preprocessFileLineNumbers "Server\Module\UPSMON\UPSMON\!R\R_functions.sqf"; if (isNil "RE") then {[] execVM "\ca\Modules\MP\data\scripts\MPframework.sqf"}; //scripts initialization UPSMON = compile preprocessFile "Server\Module\UPSMON\UPSMON.sqf"; UPSMON_surrended = compile preprocessFile "Server\Module\UPSMON\UPSMON\MON_surrended.sqf"; // declaracin de variables privadas private["_obj","_trg","_l","_pos"]; // global functions KRON_randomPos = {private["_cx","_cy","_rx","_ry","_cd","_sd","_ad","_tx","_ty","_xout","_yout"];_cx=_this select 0; _cy=_this select 1; _rx=_this select 2; _ry=_this select 3; _cd=_this select 4; _sd=_this select 5; _ad=_this select 6; _tx=random (_rx*2)-_rx; _ty=random (_ry*2)-_ry; _xout=if (_ad!=0) then {_cx+ (_cd*_tx - _sd*_ty)} else {_cx+_tx}; _yout=if (_ad!=0) then {_cy+ (_sd*_tx + _cd*_ty)} else {_cy+_ty}; [_xout,_yout]}; KRON_PosInfo = {private["_pos","_lst","_bld","_bldpos"];_pos=_this select 0; _lst=_pos nearObjects ["House",12]; if (count _lst==0) then {_bld=0;_bldpos=0} else {_bld=_lst select 0; _bldpos=[_bld] call KRON_BldPos}; [_bld,_bldpos]}; KRON_PosInfo3 = {private["_pos","_lst","_bld","_bldpos"];_pos=_this select 0; _lst= nearestObjects [_pos, [], 3]; if (count _lst==0) then {_bld=objnull;_bldpos=0} else {_bld = nearestbuilding (_lst select 0); _bldpos=[_bld] call KRON_BldPos2}; [_bld,_bldpos]}; KRON_BldPos = {private ["_bld","_bldpos","_posZ","_maxZ"];_bld=_this select 0;_maxZ=0;_bi=0;_bldpos=0;while {_bi>=0} do {if (((_bld BuildingPos _bi) select 0)==0) then {_bi=-99} else {_bz=((_bld BuildingPos _bi) select 2); if (((_bz)>4) && ((_bz>_maxZ) || ((_bz==_maxZ) && (random 1>.8)))) then {_maxZ=_bz; _bldpos=_bi}};_bi=_bi+1};_bldpos}; KRON_BldPos2 = {private ["_bld","_bldpos"]; _bld=_this select 0; _bldpos = 1; while {format ["%1", _bld buildingPos _bldpos] != "[0,0,0]"} do {_bldpos = _bldpos + 1;}; _bldpos = _bldpos - 1; _bldpos;}; KRON_getDirPos = {private["_a","_b","_from","_to","_return"]; _from = _this select 0; _to = _this select 1; _return = 0; _a = ((_to select 0) - (_from select 0)); _b = ((_to select 1) - (_from select 1)); if (_a != 0 || _b != 0) then {_return = _a atan2 _b}; if ( _return < 0 ) then { _return = _return + 360 }; _return}; KRON_distancePosSqr = {round(((((_this select 0) select 0)-((_this select 1) select 0))^2 + (((_this select 0) select 1)-((_this select 1) select 1))^2)^0.5)}; KRON_relPos = {private["_p","_d","_a","_x","_y","_xout","_yout"];_p=_this select 0; _x=_p select 0; _y=_p select 1; _d=_this select 1; _a=_this select 2; _xout=_x + sin(_a)*_d; _yout=_y + cos(_a)*_d;[_xout,_yout,0]}; KRON_rotpoint = {private["_cp","_a","_tx","_ty","_cd","_sd","_cx","_cy","_xout","_yout"];_cp=_this select 0; _cx=_cp select 0; _cy=_cp select 1; _a=_this select 1; _cd=cos(_a*-1); _sd=sin(_a*-1); _tx=_this select 2; _ty=_this select 3; _xout=if (_a!=0) then {_cx+ (_cd*_tx - _sd*_ty)} else {_cx+_tx}; _yout=if (_a!=0) then {_cy+ (_sd*_tx + _cd*_ty)} else {_cy+_ty}; [_xout,_yout,0]}; KRON_stayInside = { private["_np","_nx","_ny","_cp","_cx","_cy","_rx","_ry","_d","_tp","_tx","_ty","_fx","_fy"]; _np=_this select 0; _nx=_np select 0; _ny=_np select 1; _cp=_this select 1; _cx=_cp select 0; _cy=_cp select 1; _rx=_this select 2; _ry=_this select 3; _d=_this select 4; _tp = [_cp,_d,(_nx-_cx),(_ny-_cy)] call KRON_rotpoint; _tx = _tp select 0; _fx=_tx; _ty = _tp select 1; _fy=_ty; if (_tx<(_cx-_rx)) then {_fx=_cx-_rx}; if (_tx>(_cx+_rx)) then {_fx=_cx+_rx}; if (_ty<(_cy-_ry)) then {_fy=_cy-_ry}; if (_ty>(_cy+_ry)) then {_fy=_cy+_ry}; if ((_fx!=_tx) || (_fy!=_ty)) then {_np = [_cp,_d*-1,(_fx-_cx),(_fy-_cy)] call KRON_rotpoint}; _np; }; // Misc KRON_UPSgetArg = {private["_cmd","_arg","_list","_a","_v"]; _cmd=_this select 0; _arg=_this select 1; _list=_this select 2; _a=-1; {_a=_a+1; _v=format["%1",_list select _a]; if (_v==_cmd) then {_arg=(_list select _a+1)}} foreach _list; _arg}; KRON_UPSsetArg = {private["_cmd","_arg","_list","_a","_v"]; _cmd=_this select 0; _arg=_this select 1; _list=_this select 2; _a=-1; { _a=_a+1; _v= format ["%1", _list select _a]; if (_v==_cmd) then { _a=_a+1; _list set [_a,_arg]; }; } foreach _list; _list}; KRON_deleteDead = {private["_u","_s"];_u=_this select 0; _s= _this select 1; _u removeAllEventHandlers "killed"; sleep _s; deletevehicle _u}; // *********************************************************************************************************** // MAIN UPSMON SERVER FUNCTION // *********************************************************************************************************** MON_MAIN_server = { private["_obj","_trg","_l","_pos","_countWestSur","_countEastSur","_countResSur","_WestSur","_EastSur","_ResSur","_target","_targets","_targets0","_targets1","_targets2","_npc","_cycle" ,"_arti","_side","_range","_rounds","_area","_maxcadence","_mincadence","_bullet","_fire","_knownpos","_sharedenemy","_enemyside"]; _cycle = 10; //Time to do a call to commander _arti = objnull; _side = ""; _range = 0; _rounds = 0; _area = 0; _maxcadence = 0; _mincadence = 0; _bullet = ""; _fire = false; _target = objnull; _knownpos =[0,0,0]; _enemyside = []; _WestSur = KRON_UPS_WEST_SURRENDED; _EastSur = KRON_UPS_EAST_SURRENDED; _ResSur = KRON_UPS_GUER_SURRENDED; //Main loop while {true} do { _countWestSur = round ( KRON_UPS_West_Total * KRON_UPS_WEST_SURRENDER / 100); _countEastSur = round ( KRON_UPS_East_Total * KRON_UPS_EAST_SURRENDER / 100); _countResSur = round ( KRON_UPS_Guer_Total * KRON_UPS_GUER_SURRENDER / 100); //Checks for WEST surrender if (KRON_UPS_WEST_SURRENDER > 0 && !KRON_UPS_WEST_SURRENDED ) then { { if (!alive _x || !canmove _x) then {KRON_AllWest = KRON_AllWest-[_x]}; }foreach KRON_AllWest; if ( count KRON_AllWest <= _countWestSur ) then { KRON_UPS_WEST_SURRENDED = true; publicvariable "KRON_AllWest"; publicvariable "KRON_UPS_WEST_SURRENDED"; }; }; //Checks for EAST surrender if (KRON_UPS_EAST_SURRENDER > 0 && !KRON_UPS_EAST_SURRENDED ) then { { if (!alive _x || !canmove _x) then {KRON_AllEast = KRON_AllEast-[_x]}; }foreach KRON_AllEast; if ( count KRON_AllEast <= _countEastSur ) then { KRON_UPS_EAST_SURRENDED = true; publicvariable "KRON_AllEast"; publicvariable "KRON_UPS_EAST_SURRENDED"; }; }; //Checks for RESISTANCE surrender if (KRON_UPS_GUER_SURRENDER > 0 && !KRON_UPS_GUER_SURRENDED ) then { { if (!alive _x || !canmove _x) then {KRON_AllRes = KRON_AllRes-[_x]}; }foreach KRON_AllRes; if ( count KRON_AllRes <= _countResSur ) then { KRON_UPS_GUER_SURRENDED = true; publicvariable "KRON_AllRes"; publicvariable "KRON_UPS_GUER_SURRENDED"; }; }; //Exec surrended script if (KRON_UPS_WEST_SURRENDED && !_WestSur ) then { _WestSur = true; [west] spawn UPSMON_surrended; }; if (KRON_UPS_EAST_SURRENDED && !_EastSur ) then { _EastSur = true; [east] spawn UPSMON_surrended; }; if (KRON_UPS_GUER_SURRENDED && !_ResSur ) then { _ResSur = true; [Resistance] spawn UPSMON_surrended; }; sleep 0.5; _sharedenemy = 0; _targets0 = []; _targets1 = []; _targets2 = []; { if (!isnull _x && alive _x && !captive _x ) then { _npc = _x; _targets = []; switch (side _npc) do { //West targets case west: { _sharedenemy = 0; _enemyside = [east]; }; //East targets case east: { _sharedenemy = 1; _enemyside = [west]; }; //Resistance targets case resistance: { _sharedenemy = 2; _enemyside = KRON_UPS_Res_enemy; }; }; if (side _npc in KRON_UPS_Res_enemy) then { _enemyside = _enemyside + [resistance]; }; //Gets known targets on each leader for comunicating enemy position //Has better performance with targetsquery //_targets = _npc nearTargets KRON_UPS_sharedist; _targets = _npc targetsQuery ["","","","",""]; { //_target = _x select 4; //Neartargets _target = _x select 1; //Targetsquery if ( side _target in _enemyside ) then { // if (KRON_UPS_Debug>0) then {player globalchat format["%1: knows about %2, enemies=%3",_npc getVariable ("UPSMON_grpid"),_npc knowsabout _target, _npc countEnemy _targets ]}; if (!isnull _target && alive _target && canmove _target && !captive _target && _npc knowsabout _target > R_knowsAboutEnemy && ( _target iskindof "Land" || _target iskindof "Air" || _target iskindof "Ship" ) && !( _target iskindof "Animal") && ( _target emptyPositions "Gunner" == 0 && _target emptyPositions "Driver" == 0 || (!isnull (gunner _target) && canmove (gunner _target)) || (!isnull (driver _target) && canmove (driver _target))) ) then { //Saves last known position //_knownpos = _x select 0; //Neartargets _knownpos = _x select 4;//Targetsquery _target setvariable ["UPSMON_lastknownpos", _knownpos, false]; // _npc setVariable ["R_knowsAboutTarget", true, false]; // !R call (compile format ["_targets%1 = _targets%1 - [_target]",_sharedenemy]); call (compile format ["_targets%1 = _targets%1 + [_target]",_sharedenemy]); }; }; sleep 0.01; }foreach _targets; }; sleep 0.01; }foreach KRON_NPCs; //Share targets KRON_targets0 = _targets0; KRON_targets1 = _targets1; KRON_targets2 = _targets2; //Target debug console if (KRON_UPS_Debug>0) then {hintsilent parseText format["%1
--------------------------
West(A=%2 C=%3 T=%4)
East(A=%5 C=%6 T=%7)
Res(A=%8 C=%9 T=%10)
" ,UPSMON_Version ,KRON_UPS_West_Total, count KRON_AllWest, count KRON_targets0 ,KRON_UPS_East_Total, count KRON_AllEast, count KRON_targets1 ,KRON_UPS_Guer_Total, count KRON_AllRes, count KRON_targets2 ]}; sleep 0.5; //Artillery module control { _arti = _x select 0; _rounds = _x select 1; _range = _x select 2; _area = _x select 3; _maxcadence = _x select 4; _mincadence = _x select 5; _bullet = _x select 6; if (!isnull (gunner _arti) && canmove (gunner _arti)) then { _side = side gunner _arti; _fire = call (compile format ["KRON_UPS_ARTILLERY_%1_FIRE",_side]); //If fire enabled gets a known target pos for doing fire if no friendly squads near. if (_fire) then { _target = call (compile format ["KRON_UPS_ARTILLERY_%1_TARGET",_side]); if (isnil "_target" ) then {_target = objnull;}; switch (_side) do { //West targets case west: { _targets = KRON_targets0; }; //East targets case east: { _targets = KRON_targets1; }; //Resistance targets case resistance: { _targets = KRON_targets2; }; }; //Check if has a target if (!(_target in _targets ) || isnull _target || !alive _target) then { _target = objnull; { _auxtarget = _x; _targetPos = _auxtarget getvariable ("UPSMON_lastknownpos"); if (!isnil "_targetPos") then { //If target in range check no friendly squad near if (alive _auxtarget && !(_auxtarget iskindof "Air") && (round([position _arti,_targetPos] call KRON_distancePosSqr)) <= _range) then { _target = _auxtarget; //Must check if no friendly squad near fire position { if (!isnull _x && _side == side _x) then { if ((round([position _x,_targetPos] call KRON_distancePosSqr)) < KRON_UPS_safedist) exitwith {_target = objnull;}; }; }foreach KRON_NPCs; }; }; //If target found exit if (!isnull _target) exitwith {}; }foreach _targets; }; //If target fires artillery if (!isnull _target) then { //Fix current target call (compile format ["KRON_UPS_ARTILLERY_%1_TARGET = _target",_side]); _targetPos = _target getvariable ("UPSMON_lastknownpos"); if (!isnil "_targetPos") then { [_targetPos,_rounds,_area,_maxcadence,_mincadence,_bullet] spawn MON_artillery_dofire; }; }; }; }; sleep 0.5; }foreach KRON_UPS_ARTILLERY_UNITS; //if (KRON_UPS_Debug>0) then {player globalchat format["Init_upsmon artillery=%1 %2",count KRON_UPS_ARTILLERY_UNITS]}; sleep _cycle; }; }; }; // *********************************************************************************************************** // INITIALIZATION OF UPSMON // *********************************************************************************************************** _l = allunits + vehicles; { if ((_x iskindof "AllVehicles") && (side _x != civilian)) then { _s = side _x; switch (_s) do { case west: { KRON_AllWest=KRON_AllWest+[_x]; }; case east: { KRON_AllEast=KRON_AllEast+[_x]; }; case resistance: { KRON_AllRes=KRON_AllRes+[_x]; }; }; }; } forEach _l; _l = nil; if (isNil("KRON_UPS_Debug")) then {KRON_UPS_Debug=0}; KRON_UPS_East_enemies = KRON_AllWest; KRON_UPS_West_enemies = KRON_AllEast; if (east in KRON_UPS_Res_enemy ) then { KRON_UPS_East_enemies = KRON_UPS_East_enemies+KRON_AllRes; KRON_UPS_Guer_enemies = KRON_AllEast; } else { KRON_UPS_East_friends = KRON_UPS_East_friends+KRON_AllRes; KRON_UPS_Guer_friends = KRON_AllEast; }; if (west in KRON_UPS_Res_enemy ) then { KRON_UPS_West_enemies = KRON_UPS_West_enemies+KRON_AllRes; KRON_UPS_Guer_enemies = KRON_UPS_Guer_enemies+KRON_AllWest; } else { KRON_UPS_West_friends = KRON_UPS_West_friends+KRON_AllRes; KRON_UPS_Guer_friends = KRON_UPS_Guer_friends+KRON_AllWest; }; KRON_UPS_West_Total = count KRON_AllWest; KRON_UPS_East_Total = count KRON_AllEast; KRON_UPS_Guer_Total = count KRON_AllRes; //Initialization done KRON_UPS_INIT=1; //killciv EH _l = allunits; { if (side _x == civilian) then { _x AddEventHandler ["firedNear", {nul = _this spawn R_SN_EHFIREDNEAR}]; sleep 0.01; _x AddEventHandler ["killed", {nul = _this spawn R_SN_EHKILLEDCIV}]; sleep 0.01; }; } forEach _l; _l = nil; // --------------------------------------------------------------------------------------------------------- processInitCommands; //Executes de main process of server [] SPAWN MON_MAIN_server; diag_log "--------------------------------"; diag_log (format["UPSMON started"]); if(true) exitWith {}; /* ============================================= !R Hide area markers. create Game Logic Object put in initialization field: nul = call compile preprocessFile "scripts\UPSMON\!R\markerAlpha.sqf"; all markers area must be named area0, area1...area13 ================================================= */ { _x setmarkeralpha 0; } foreach ["area0", "area1", "area2","area3","area4","area5","area6","area7","area8","area9","area10","area11","area12","area13"]; /* autor: !R 5.0.8 R3 */ // get new position [x,y,x] from pos in distance and angle. // [_pos, _distance, _angle] call R_relPos3D; // [newX,newY,Z] R_relPos3D = { private["_p","_d","_a","_x","_y","_z","_xout","_yout"]; _p=_this select 0; _x=_p select 0; _y=_p select 1; _z=_p select 2; _d=_this select 1; _a=_this select 2; _xout=_x + sin(_a)*_d; _yout=_y + cos(_a)*_d; [_xout,_yout,_z] }; // [_unit] spawn R_ThrowSmoke; R_ThrowSmoke = { private ["_unit","_shell", "_moves","_unitPos","_pos","_flare","_direction"]; /* _stanThrow = ["AwopPercMstpSgthWrflDnon_Start1", "AwopPercMstpSgthWrflDnon_Throw1","AwopPercMstpSgthWrflDnon_End1"]; _kneeThrow = ["AwopPknlMstpSgthWrflDnon_Start", "AwopPknlMstpSgthWrflDnon_Throw" ,"AwopPknlMstpSgthWrflDnon_End"]; _proneThrow= ["AwopPpneMstpSgthWrflDnon_Start", "AwopPpneMstpSgthWrflDnon_Throw" ,"AwopPpneMstpSgthWrflDnon_End"]; */ _moves = ["AwopPercMstpSgthWrflDnon_Start1","AwopPknlMstpSgthWrflDnon_Start","AwopPpneMstpSgthWrflDnon_Start"]; _unit = _this select 0; _shell = "SmokeShell"; _unitPos = unitPos _unit; //Animation switch (_unitPos) do { case "Auto": { _unit playMove (_moves select 1); }; case "Up": { _unit playMove (_moves select 0); }; case "Middle": { _unit playMove (_moves select 1); }; case "Down": { _unit playMove (_moves select 2); }; }; sleep 4; _direction = direction _unit; // use such bypass as setvelocity does not work in MP _pos = position _unit; _pos = [(_pos select 0),(_pos select 1),(_pos select 2)+1.5]; _pos = [_pos, 18, _direction] call R_relPos3D; if (alive _unit && canmove _unit) then { _flare = _shell createVehicle _pos; }; // setvelocity does not work in MP http://dev-heaven.net/issues/17949 /* _vector = [18,direction _unit,0] call C B A_fnc_polar2vect; _pos=position _unit; _pos=[(_pos select 0),(_pos select 1),(_pos select 2)+2]; _flare = _shell createVehicle _pos; _flare setPos _pos; _flare setvelocity _vector; */ }; // [_unit] call R_FN_deleteObsoleteWaypoints; // leave only the last way point R_FN_deleteObsoleteWaypoints = { private ["_unit","_grp"]; _unit = _this select 0; _grp = group _unit; while {(count (waypoints _grp)) > 1} do { deleteWaypoint ((waypoints _grp) select 0); }; }; // array = [_npc] call R_FN_vehiclesUsedByGroup; // return array of vehicles used by group R_FN_vehiclesUsedByGroup = { private ["_npc","_vehicles"]; _npc = _this select 0; _vehicles = []; if (!alive _npc) exitwith {}; { if (( vehicle _x != _x || !(_x iskindof "Man")) && !((vehicle _x) in _vehicles)) then { _vehicles = _vehicles + [vehicle _x]; }; } foreach units _npc; _vehicles }; // array = [_vehicle] call R_FN_unitsInCargo; // array of units in cargo of the vehicle (in vehicle and assigned as cargo) R_FN_unitsInCargo = { private ["_vehicle","_x","_unitsInCargo"]; _vehicle = _this select 0; _unitsInCargo = []; { if( (assignedVehicleRole _x) select 0 == "Cargo") then { _unitsInCargo = _unitsInCargo + [_x]; }; } forEach crew _vehicle; _unitsInCargo }; // array = [_npc] call R_FN_allUnitsInCargo; // array of all units in cargo of the group (not driver, commander or gunner) R_FN_allUnitsInCargo = { private ["_npc","_vehicles","_unitsInCargo","_allUnitsInCargo"]; _npc = _this select 0; if (!alive _npc) exitwith {}; _allUnitsInCargo =[]; _vehicles = [_npc] call R_FN_vehiclesUsedByGroup; { _unitsInCargo = [_x] call R_FN_unitsInCargo; _allUnitsInCargo = _allUnitsInCargo + _unitsInCargo; } foreach _vehicles; _allUnitsInCargo }; // old MON_GetOutDist // <- _npc // <- _targetPos: position for exiting(if no waypoint used) // <- _atdist: minimal dist to the _targetpos do getout // -> nothing // nul = [_npc,_targetpos,_atdist] spawn R_SN_GetOutDist; R_SN_GetOutDist = { private["_vehicle","_npc","_target","_atdist","_getout","_dogetout","_driver","_commander","_targetpos","_dist","_vehpos","_vehicles"]; _npc = _this select 0; _targetpos = _this select 1; _atdist = _this select 2; // minimal dist to the target to do getOut _dogetout = []; // units to do getout _vehicles = []; // vehs used by the group if (!alive _npc) exitwith{}; _vehicle = vehicle _npc; _vehpos = getpos _vehicle; _dist = round([_vehpos,_targetpos] call KRON_distancePosSqr); // dist to the target // if (KRON_UPS_Debug>0) then {player sidechat format["%1: Getoutdist dist=%2 atdist=%3 ",typeof _vehicle,_dist, _atdist]}; // if _npc is in vehicle if ( _vehicle != _npc || !(_npc iskindof "Man")) then { if ( (_dist) <= _atdist ) then { _vehicles = [_npc] call R_FN_vehiclesUsedByGroup; // vehicles use by the group { _dogetout = [_x] call R_FN_unitsInCargo; // units cargo in the vehicle _driver = driver _x; if ( count _dogetout > 0 ) then { //Stop the veh for 5.5 sek nul = [_vehicle,5] spawn MON_doStop; sleep 0.8; // give time to actualy stop { _x spawn MON_GetOut; sleep 0.3; } foreach _dogetout; //We removed the id to the vehicle so it can be reused _x setVariable ["UPSMON_grpid", 0, false]; _x setVariable ["UPSMON_cargo", [], false]; [_npc,_x, _driver] spawn MON_checkleaveVehicle; // if every one outside, make sure driver can walk sleep 0.01; }; } foreach _vehicles; }; }; }; // #define GOTHIT(X) ([X] call R_FN_GOTHIT) // nul = [_grpId] call R_FN_GOTHIT; R_FN_GOTHIT = { _grpId = _this select 0; if ((R_GOTHIT_ARRAY select _grpId) != 0) then { true } else { false } }; // use in gothit proces // nul = [_unit, _shooter] spawn R_SN_EHHIT; R_SN_EHHIT = { private ["_unit","_shooter","_grpId"]; _unit = _this select 0; _shooter = _this select 1; _grpId = _unit getVariable ("UPSMON_grpid"); if ((side _unit != side _shooter) && (R_GOTHIT_ARRAY select _grpId) == 0) then { R_GOTHIT_ARRAY set [_grpId, 1]; // if (KRON_UPS_Debug > 0) then {player globalchat format["UNIT: %1, SHOOTER :%2 %3",_unit,_shooter,side _shooter]}; }; }; // use in gothit proces // nul = [_unit, _shooter] spawn R_SN_EHKILLED; R_SN_EHKILLED = { private ["_unit","_shooter","_grpId"]; _unit = _this select 0; _shooter = _this select 1; _grpId = _unit getVariable ("UPSMON_grpid"); R_GOTHIT_ARRAY set [_grpId, 2]; }; // use in gothit proces // nul = [_unit, _shooter] spawn R_SN_EHKILLEDCIV; private ["_center","_group"]; _center = createCenter sideLogic; _group = createGroup _center; R_Logic_civkill = _group createUnit ["LOGIC", [1,1,1], [], 0, "NONE"]; _group = nil; _center = nil; R_SN_EHKILLEDCIV = { private ["_killer","_side"]; _killer = _this select 1; //only if player killed a civilian if (isPlayer _killer) then { KILLED_CIV_COUNTER set [0,(KILLED_CIV_COUNTER select 0) + 1]; // if (KRON_UPS_Debug > 0) then {player globalchat format["KILLER: %1, %2", side _killer,KILLED_CIV_COUNTER ]}; switch (side _killer) do { case west: { KILLED_CIV_COUNTER set [1,(KILLED_CIV_COUNTER select 1) + 1]; }; case east: { KILLED_CIV_COUNTER set [2,(KILLED_CIV_COUNTER select 2) + 1]; }; case resistance: { KILLED_CIV_COUNTER set [3,(KILLED_CIV_COUNTER select 3) + 1]; }; }; //if (KRON_UPS_Debug > 0) then {player globalchat format["KILLER: %1", side _killer ]}; if (KRON_UPS_Debug > 0) then {player globalchat format["KILLED_CIV_COUNTER: %1",KILLED_CIV_COUNTER]}; if (R_WHO_IS_CIV_KILLER_INFO > 0) then { [R_Logic_civkill, nil , rglobalChat, format [" A CIVILIAN WAS KILLED BY %1",_killer]] call RE; }; }; }; //firedNear R_SN_EHFIREDNEAR = { private ["_civ"]; _civ = leader (_this select 0); _civ setspeedmode "FULL"; }; /* ========================================================================================================================== R_SN_npcStuckControl = { private ["_npc","_timeout"]; _npc = _this select 0; _timeout = 60 + time; waituntil {!canmove _npc || !alive _npc || movetofailed _npc || time > _timeout }; }; */// ========================================================================================================= // Script for action follow me when surrended, adds the soldier to player squad in a random choice. // Version: 1.0 // Author: Monsada (smirall@hotmail.com) // --------------------------------------------------------------------------------------------------------- private ["_obj","_caller","_id","_objtype","_rnd","_join","_direction"]; _npc = _this select 0; _caller = _this select 1; _id = _this select 2; _rnd = 0; _join=true; _npc switchmove ""; _direction = ((getpos _caller select 0) - (getpos _npc select 0)) atan2 ((getpos _caller select 1) - (getpos _npc select 1)); //If positive values are needed then use: if(_direction < 0) then {_direction = _direction + 360}; _npc setdir _direction; _npc dowatch _caller; _npc setSpeedMode "LIMITED"; _npc domove position _caller; sleep 0.5; _rnd = random 100; _npc setmimic "Sad"; if (_rnd <= 30 ) then { _npc globalchat "Ok"; }; if (_rnd > 30 && _rnd <= 50) then { _npc globalchat "Yes"; }; if (_rnd > 50 && _rnd <= 100) then { _join=false; _rnd = random 100; if (_rnd < 20) then { _npc setmimic "angry"; _npc switchmove "CtsPercMstpSnonWnonDnon_idle31rejpaniVnose"; _npc globalchat "Kiss my ass"; }; if (_rnd > 20 && _rnd <= 40) then { _npc setmimic "Agresive"; _npc switchmove "CtsPercMstpSnonWnonDnon_idle33rejpaniVzadku"; sleep 3; _npc globalchat "Que te den"; }; if (_rnd > 40 && _rnd <= 60) then { _npc setmimic "Agresive"; _npc switchmove "CtsPercMstpSnonWnonDnon_idle33rejpaniVzadku"; sleep 1; _npc globalchat "Fuck you"; }; if (_rnd > 60 && _rnd <= 80) then { _npc setmimic "Agresive"; _npc switchmove "CtsPercMstpSnonWnonDnon_idle32podrbaniNanose"; sleep 0.5; _npc globalchat "Follow your mother"; }; if (_rnd > 80 && _rnd <= 100) then { _npc setmimic "angry"; sleep 0.1; _npc switchmove "CtsPercMstpSnonWnonDnon_idle32podrbaniNanose"; _npc globalchat "Fuck you"; }; }; if (_join) then { // remove the action once it is activated _npc stop false; if (_npc == leader _npc) then { _npc globalchat "All follow that man"; { _x switchmove ""; [_x] joinSilent _caller; }foreach units _npc; } else { _npc removeAction _id; [_npc] joinSilent _caller; }; }; if (true) exitWith {}; // ========================================================================================================= // Biblioteca de funciones comunes // Version: 5.0.7 // Author: Monsada (smirall@hotmail.com) // http://www.simulacion-esp.com/ // Comunidad Hispana de Simulacin // ========================================================================================================= MON_bugged_vehicles = ["BIS_alice_emptydoor","ACE_Grenade_Geometry"]; // in Vanilia extra bugged vehicle if !(AcePresent) then { MON_bugged_vehicles = MON_bugged_vehicles + ["HMMWV_M998A2_SOV_DES_EP1"]; }; // --------------------------------------------------------------------------------------------------------- //Funcin que permite posicionar objetos a la altura definida //param1: objeto //param2: altura MON_subir = { if (!isserver) exitwith{}; private ["_object","_altura","_pos","_x","_y","_z","_bld","_bldpos"]; _object = _this select 0; _altura = _this select 1; _x = 0; _y = 0; _z = 0; _pos =0; _bld = objnull; _bldpos =0; _pos = getposasl _object; _x = _pos select 0; _y = ( _pos select 1 ); _z = ( _pos select 2 ) + _altura; _object setposasl [_x,_y ,_z]; }; //Retorna la direccin entre dos posiciones MON_getDirPos = {private["_a","_b","_from","_to","_return"]; _from = _this select 0; _to = _this select 1; _return = 0; _a = ((_to select 0) - (_from select 0)); _b = ((_to select 1) - (_from select 1)); if (_a != 0 || _b != 0) then {_return = _a atan2 _b}; if ( _return < 0 ) then { _return = _return + 360 }; _return}; // --------------------------------------------------------------------------------------------------------- //Funcin de borra unidades que han sido matadas //param1: objeto a borrar cuando muera //param2: tiempo a esperar antes de borrar el objeto MON_deleteDead = {private["_u","_s"];_u=_this select 0; _s= _this select 1; _u removeAllEventHandlers "killed"; sleep _s; deletevehicle _u}; MON_deleteDeadDist = {private["_u","_s","_dist","_OCercanos","_cicle","_deleted","_isplayer"]; _i = 0; _cicle = 10; _deleted = false; _isplayer = false; _u = _this select 0; _s = _this select 1; _dist = _this select 2; _u removeAllEventHandlers "killed"; sleep _s; while {!_deleted} do { _isplayer = false; //Buscamos objetos cercanos _OCercanos = nearestObjects [_u, ["Man"] , _dist]; //Validamos si alguno de los soldados cerca es un jugador y est vivo {if (isplayer _x && alive _x) exitwith {_isplayer = true;}}foreach _OCercanos; if (!_isplayer) then { deletevehicle _u; _deleted = true; }; sleep _cicle; }; }; // --------------------------------------------------------------------------------------------------------- //Funcin tomada de UPS, busca el comando en la lista y devuelve el siguiente elemento //param1: comando a buscar //param2: valor por defecto del comando //param3: array con los comandos //Retorna valor del comando encontrado o valor por defecto MON_getArg = {private["_cmd","_arg","_list","_a","_v"]; _cmd=_this select 0; _arg=_this select 1; _list=_this select 2; _a=-1; {_a=_a+1; _v=format["%1",_list select _a]; if (_v==_cmd) then {_arg=(_list select _a+1)}} foreach _list; _arg}; // --------------------------------------------------------------------------------------------------------- //Funcin que devuelve una posicin en 3D a partir de otra, una direccin y una distancia //param1: posicin //param2: direccin //param3: distancia //Retorna vector de posicion en 3D [0,0,0] MON_GetPos = { private ["_pos","_dir","_dist","_cosU","_cosT","_relTX","_sinU","_sinT","_relTY","_newPos","_newPosX","_newPosY", "_targetZ" ]; _pos = _this select 0; _dir = _this select 1; _dist = _this select 2; _targetX = _pos select 0; _targetY = _pos select 1; _targetZ = _pos select 2; //Calculamos posicin _cosU = [_dir] call MON_GetCOS; _sinU = [_dir] call MON_GetSIN; _cosT = abs cos(_dir); _sinT = abs sin(_dir); _relTX = _sinT * _dist * _cosU; _relTY = _cosT * _dist * _sinU; _newPosX = _targetX + _relTX; _newPosY = _targetY + _relTY; _newPos = [_newPosX,_newPosY,_targetZ]; _newPos; }; // --------------------------------------------------------------------------------------------------------- //Funcin que devuelve una posicin en 2D a partir de otra, una direccin y una distancia //param1: posicin //param2: direccin //param3: distancia //Retorna vector de posicion en 2D [0,0] MON_GetPos2D = { private ["_pos","_dir","_dist","_cosU","_cosT","_relTX","_sinU","_sinT","_relTY","_newPos","_newPosX","_newPosY" ]; _pos = _this select 0; _dir = _this select 1; _dist = _this select 2; _targetX = _pos select 0; _targetY = _pos select 1; //Calculamos posicin _cosU = [_dir] call MON_GetCOS; _sinU = [_dir] call MON_GetSIN; _cosT = abs cos(_dir); _sinT = abs sin(_dir); _relTX = _sinT * _dist * _cosU; _relTY = _cosT * _dist * _sinU; _newPosX = _targetX + _relTX; _newPosY = _targetY + _relTY; _newPos = [_newPosX,_newPosY]; _newPos; }; // --------------------------------------------------------------------------------------------------------- //Funcin que devuelve las posiciones que se pueden ocupar dentro de un edificio //param1: objeto location //Retorna numero de posiciones que tiene el edificio MON_BldPos = {private ["_bld","_bldpos"]; _bld=_this; _bldpos = 1; while {format ["%1", _bld buildingPos _bldpos] != "[0,0,0]"} do {_bldpos = _bldpos + 1;}; _bldpos = _bldpos - 1; _bldpos;}; // --------------------------------------------------------------------------------------------------------- //Funcin que devuelve la casa que hay ms cerca del objeto param1 y las posiciones que se pueden ocupar dentro de ella. //param1: objeto //Retorna vector con [objeto location, posiciones que tiene] MON_PosInfo = { private["_obj","_bld","_bldpos"]; _obj=_this; _bld = nearestbuilding _obj; _bldpos= _bld call MON_BldPos; [_bld,_bldpos]; }; // --------------------------------------------------------------------------------------------------------- //Funcin que devuelve el valor negativo o positivo del seno en base a un angulo MON_GetSIN = { private["_dir","_sin","_cos"]; _dir=_this select 0; if (_dir<90) then { _sin=1; } else { if (_dir<180) then { _sin=-1; } else { if (_dir<270) then { _sin=-1; } else { _sin=1; }; }; }; _sin }; // --------------------------------------------------------------------------------------------------------- //Funcin que devuelve el valor negativo o positivo del coseno en base a un angulo MON_GetCOS = { private["_dir","_cos"]; _dir=_this select 0; if (_dir<90) then { _cos=1; } else { if (_dir<180) then { _cos=1; } else { if (_dir<270) then { _cos=-1; } else { _cos=-1; }; }; }; _cos }; //Funcin que busca vehiculos cercanos y hace entrar a las unidades del lider //Parmeters: [_grpid,_npc] // <- _grpid: id of group to assign to vehicle // <- _npc: lider // -> _getin: true if any getin MON_GetIn_NearestVehicles = { private["_vehicles","_npc","_units","_unitsIn","_grpid","_getin"]; _grpid = _this select 0; _npc = _this select 1; _vehicles=[[]]; _air=[[]]; _units = []; _unitsIn = []; _getin=false; if (leader _npc == _npc) then { _units = units _npc; } else { _units = _units + [_npc]; }; { if ( (_x!= vehicle _x && !((vehicle _x) iskindof "StaticWeapon" )) || !(_x iskindof "Man") || !alive _x || !canmove _x || !canstand _x) then {_units = _units-[_x];}; }foreach _units; _unitsIn = _units; //First catch combat vehicles if ( (count _units) > 0) then { _air = [_npc,200] call MON_NearestsAirTransports; {if (_npc knowsabout (_x select 0) <= 0.5) then{ _air = _air - [_x]};}foreach _air; _units = [_grpid, _units, _air, false] call MON_selectvehicles; }; sleep 0.05; if ( (count _units) > 1) then { _vehicles = [_npc,200,true] call MON_NearestsLandCombat; {if (_npc knowsabout(_x select 0) <= 0.5) then{ _vehicles = _vehicles - [_x]};}foreach _vehicles; _units = [_grpid, _units, _vehicles, false] call MON_selectvehicles; }; sleep 0.05; if ( (count _units) > 0) then { _vehicles = [_npc,200] call MON_NearestsLandTransports; {if (_npc knowsabout (_x select 0) <= 0.5) then{ _vehicles = _vehicles - [_x]};}foreach _vehicles; _units = [_grpid, _units, _vehicles, false] call MON_selectvehicles; }; sleep 0.05; if ( (count _units) > 0 && (count _vehicles) > 0) then { sleep 1; _vehicles = _vehicles + _air; _units = [_grpid, _units, _vehicles, true] call MON_selectvehicles; }; sleep 0.05; _unitsIn = _unitsIn - _units; _unitsIn; //sleep 0.05; }; //Funcin que busca vehiculos cercanos y hace entrar a las unidades del lider //Parmeters: [_grpid,_npc] // <- _grpid: id of group to assign to vehicle // <- _npc: lider // -> _getin: true if any getin MON_GetIn_NearestCombat = { private["_vehicles","_npc","_units","_unitsIn","_grpid","_getin","_dist","_all"]; _grpid = _this select 0; _npc = _this select 1; _dist = _this select 2; _all = _this select 3; _vehicles=[[]]; _units = []; _unitsIn = []; _getin=false; if (leader _npc == _npc) then { _units = units _npc; } else { _units = _units + [_npc]; }; { if ( (_x!= vehicle _x && !((vehicle _x) iskindof "StaticWeapon" )) || !(_x iskindof "Man") || !alive _x || !canmove _x || !canstand _x) then {_units = _units-[_x];}; }foreach _units; //If suficient units leader will not get in if (!all) then { if (count _units > 2 ) then {_units = _units - [leader _npc]}; }; _unitsIn = _units; //We need 2 units available if not any leave vehicle to another squad if ( (count _units) > 1) then { _vehicles = [_npc,_dist,_all] call MON_NearestsAirCombat; {if (_npc knowsabout (_x select 0) <= 0.5) then{ _vehicles = _vehicles - [_x]};}foreach _vehicles; _units = [_grpid, _units, _vehicles, false] call MON_selectvehicles; }; sleep 0.05; if ( (count _units) > 1) then { _vehicles = [_npc,_dist,_all] call MON_NearestsLandCombat; {if (_npc knowsabout(_x select 0) <= 0.5) then{ _vehicles = _vehicles - [_x]};}foreach _vehicles; _units = [_grpid, _units, _vehicles, false] call MON_selectvehicles; }; _unitsIn = _unitsIn - _units; _unitsIn; }; //Funcin que busca vehiculos cercanos y hace entrar a las unidades del lider //Parmeters: [_grpid,_npc] // <- _grpid: id of group to assign to vehicle // <- _npc: lider // -> _getin: true if any getin MON_GetIn_NearestBoat = { private["_vehicles","_npc","_units","_unitsIn","_grpid","_getin","_dist"]; _grpid = _this select 0; _npc = _this select 1; _dist = _this select 2; _vehicles=[[]]; _units = []; _unitsIn = []; _getin=false; if (leader _npc == _npc) then { _units = units _npc; } else { _units = _units + [_npc]; }; { if ( (_x!= vehicle _x && !((vehicle _x) iskindof "StaticWeapon" )) || !(_x iskindof "Man") || !alive _x || !canmove _x || !canstand _x) then {_units = _units-[_x];}; }foreach _units; _unitsIn = _units; //We need 2 units available if not any leave vehicle to another squad if ( (count _units) > 0) then { _vehicles = [_npc,_dist] call MON_Nearestsboats; {if (_npc knowsabout (_x select 0) <= 0.5) then{ _vehicles = _vehicles - [_x]};}foreach _vehicles; _units = [_grpid, _units, _vehicles, false] call MON_selectvehicles; }; if ( (count _units) > 1 && (count _vehicles) > 0) then { sleep 1; _units = [_grpid, _units, _vehicles, true] call MON_selectvehicles; }; _unitsIn = _unitsIn - _units; _unitsIn; }; //Funcin que busca staticos cercanos y hace entrar a las unidades del lider //Parmeters: [_grpid,_npc] // <- _grpid: id of group to assign to vehicle // <- _npc: lider // -> _getin: true if any getin MON_GetIn_NearestStatic = { private["_vehicles","_npc","_units","_unitsIn","_grpid","_getin","_count"]; _grpid = _this select 0; _npc = _this select 1; _count = 0; _distance = 100; if ((count _this) > 2) then {_distance = _this select 2;}; _vehicles=[]; _units = []; _unitsIn = []; _getin=false; //Buscamos staticos cerca _vehicles = [_npc,_distance] call MON_NearestsStaticWeapons; if ( count _vehicles == 0) exitwith {_unitsIn;}; if (leader _npc == _npc) then { _units = (units _npc) - [_npc]; } else { _units = _units + [_npc]; }; //Solo tomamos las unidades vivas y que no estn en vehiculo { if ( (_x iskindof "Man") && _x == vehicle _x && alive _x && canmove _x && canstand _x) then { _unitsIn = _unitsIn + [_x]; }; }foreach _units; //Intentamos tomar solo las que estn disponibles _units = []; { if (unitready _x) then { _units = _units + [_x]; }; }foreach _unitsin; //Si hay unidades disponibles las usamos if (count _units > 0) then { _unitsIn = _units; }; //if (KRON_UPS_Debug>0 ) then {player sidechat format["%1: Found %2 estatic weapons %3 men available",_grpid,count _vehicles, count _unitsIn]}; _units = _unitsIn; if ( count _unitsIn > 0) then { _units = [_grpid, _units, _vehicles, true] call MON_selectvehicles; }; _unitsIn = _unitsIn - _units; _unitsIn; }; //Function to assign units to vehicles //Parmeters: [_grpid,_unitsin,_vehicle] // <- _grpid: id of group to assign to vehicle // <- _units: array of units to getin // <- _vehicles: array of vehicles to use // -> _untis: array of units getin MON_selectvehicles = { private["_vehicles","_emptypositions","_units","_unitsIn","_i","_grpid","_vehgrpid","_unit","_wp","_any","_index","_cargo"]; _grpid = _this select 0; _units = _this select 1; _vehicles = _this select 2; _any = _this select 3; //meter en cualquier vehiculo _wp = []; _vehicle = []; _unitsIn = []; _emptypositions = 0; _i = 0; _vehgrpid = 0; _unit = objnull; _index = 0; _cargo = []; { if ((count _units) == 0 ) exitwith {}; _vehicle = _x select 0 ; _emptypositions = _x select 1; _unitsIn = []; _i = 0; _vehgrpid = _vehicle getvariable ("UPSMON_grpid"); _cargo = _vehicle getvariable ("UPSMON_cargo"); if ( isNil("_vehgrpid") ) then {_vehgrpid = 0;}; if ( isNil("_cargo") ) then {_cargo = [];}; //Asignamos el vehiculo a a la escuadra si contiene las posiciones justas if (_vehgrpid == 0) then { _vehicle setVariable ["UPSMON_grpid", _grpid, false]; _vehicle setVariable ["UPSMON_cargo", _unitsIn, false]; _vehgrpid = _grpid; }; { if (!alive _x || !canmove _x) then {_cargo = _cargo - [_x]; }; }foreach _cargo; _emptypositions = _emptypositions - (count _cargo - count ( crew _vehicle) ); //if (KRON_UPS_Debug>0) then {player sidechat format["%1 %2 positions=%3 cargo=%4 crew=%5",_grpid, typeof _vehicle, _emptypositions, count _cargo,count (crew _vehicle)]}; //ahora buscamos en cualquier vehiculo if ( _vehgrpid == _grpid || (_emptypositions > 0 && _any)) then { while {_i < _emptypositions && _i < count _units} do { _unit = _units select _i; _unitsIn = _unitsIn + [_unit]; _i = _i + 1; }; _units = _units - _unitsIn; if ( (count _unitsIn) > 0) then { //Metemos las unidades en el vehiculo [_grpid,_unitsIn,_vehicle] spawn MON_UnitsGetIn; if (KRON_UPS_Debug>0 ) then {player sidechat format["%1: Get in %2 %3 units of %4 available",_grpid,typeof _vehicle,count _unitsIn,_emptypositions]}; //if (KRON_UPS_Debug>0 ) then {diag_log format["%1: Moving %3 units into %2 with %4 positions",_grpid,typeof _vehicle,count _unitsIn,_emptypositions]}; }; }; _index = _index + 1; sleep 0.05; } foreach _vehicles; _units; }; //Funcion que mete la tropa en el vehiculo //Parmeters: [_grpid,_unitsin,_vehicle] // <- _grpid: id of group to assign to vehicle // <- _unitsin: array of units to getin // <- _vehicle MON_UnitsGetIn = { private["_grpid","_vehicle","_npc","_driver","_gunner", "_unitsin", "_units" , "_Commandercount","_Drivercount","_Gunnercount","_cargo", "_Cargocount","_emptypositions","_commander","_vehgrpid","_cargo"]; _grpid = _this select 0; _unitsin = _this select 1; _vehicle = _this select 2; _units = _unitsin; _driver = objnull; _gunner = objnull; _commander = objnull; _Cargocount = 0; _Gunnercount = 0; _Commandercount = 0; _Drivercount = 0; _cargo = []; _Cargocount = (_vehicle) emptyPositions "Cargo"; _Gunnercount = (_vehicle) emptyPositions "Gunner"; _Commandercount = (_vehicle) emptyPositions "Commander"; _Drivercount = (_vehicle) emptyPositions "Driver"; //Obtenemos el identificador del vehiculo _vehgrpid = _vehicle getvariable ("UPSMON_grpid"); _cargo = _vehicle getvariable ("UPSMON_cargo"); if ( isNil("_vehgrpid") ) then {_vehgrpid = 0;}; if ( isNil("_cargo") ) then {_cargo = [];}; _cargo = _cargo - _unitsin; //Para evitar duplicados _cargo = _cargo + _unitsin; //Aadimos a la carga _vehicle setVariable ["UPSMON_cargo", _cargo, false]; //Hablitamos a la IA para entrar en el vehiculo { [_x,0] call MON_dostop; if ("StaticWeapon" countType [vehicle (_x)]>0) then { _x spawn MON_doGetOut; }; unassignVehicle _x; _x spawn MON_Allowgetin; }foreach _units; //Assigned to the leader as commander or cargo { if ( _vehgrpid == _grpid && _x == leader _x && _Commandercount > 0 ) exitwith { _Commandercount = 0; _commander = _x; _commander assignAsCommander _vehicle; _units = _units - [_x]; [_x] orderGetIn true; }; if ( _x == leader _x && _Cargocount > 0 ) exitwith { _x assignAsCargo _vehicle; _units = _units - [_x]; _Cargocount = _Cargocount - 1; [_x] orderGetIn true; }; }foreach _units; //if (KRON_UPS_Debug>0 ) then {player sidechat format["%1: _vehgrpid %2 ,_Gunnercount %3, %4",_grpid,_vehgrpid,_Gunnercount,count _units]}; //Si el vehiculo pertenece al grupo asignamos posiciones de piloto, sin solo de carga if ( _vehgrpid == _grpid ) then { //Asignamos el conductor if ( _Drivercount > 0 && count (_units) > 0 ) then { _driver = _units select (count _units - 1); [_driver,_vehicle,0] spawn MON_assignasdriver; _units = _units - [_driver]; }; //Asignamos el artillero if ( _Gunnercount > 0 && count (_units) > 0 ) then { _gunner = [_vehicle,_units] call MON_getNearestSoldier; [_gunner,_vehicle] spawn MON_assignasgunner; _units = _units - [_gunner]; }; }; //if (KRON_UPS_Debug>0 ) then {player sidechat format["%1: _vehgrpid=%2 units=%4",_grpid,_vehgrpid,_cargocount,count _units]}; //Movemos el resto como carga if ( _Cargocount > 0 && count (_units) > 0 ) then { { _x assignAsCargo _vehicle; [_x] orderGetIn true; sleep 0.05; } forEach _units; }; { [_x] spawn MON_avoidDissembark; } forEach _unitsin - [_driver] - [_gunner] -[_commander]; }; MON_getNearestSoldier = { private["_units","_obj","_near"]; _obj = _this select 0; _units = _this select 1; _near = objnull; { if (isnull _near) then { _near = _x; } else { if ( _x distance _obj < _near distance _obj ) then {_near = _x;}; }; }foreach _units; _near; }; MON_avoidDissembark = { private["_npc","_vehicle","_timeout"]; _npc = _this select 0; _vehicle = vehicle _npc ; _timeout = 120; _timeout = time + _timeout; while {_npc == vehicle _npc && alive _npc && canmove _npc && time < _timeout} do { sleep 1; }; if (!alive _npc || !canmove _npc || time >= _timeout || driver vehicle _npc == _npc) exitwith{}; _npc stop true; while {_npc != vehicle _npc && alive _npc && canmove _npc} do {sleep 1;}; _npc stop false; sleep 0.5; if (!alive _npc || !canmove _npc) exitwith{}; }; //Funcin que devuelve un vehiculo de transporte cercano //Parmeters: [_npc] // <- _npc: object for position search // -> _vehicle: vehicle MON_NearestLandTransport = { private["_vehicle","_npc","_transportSoldier","_OCercanos","_driver", "_Commandercount","_Drivercount","_Gunnercount","_Cargocount"]; _npc = _this; _OCercanos = []; _transportSoldier = 0; _vehicle = objnull; _Cargocount = 0; _Gunnercount = 0; _Commandercount = 0; _Drivercount = 0; //Buscamos objetos cercanos _OCercanos = nearestObjects [_npc, ["Car","TANK","Truck","Motorcycle"] , 150]; { _Cargocount = (_x) emptyPositions "Cargo"; _Gunnercount = (_x) emptyPositions "Gunner"; _Commandercount = (_x) emptyPositions "Commander"; _Drivercount = (_x) emptyPositions "Driver"; _transportSoldier = _Cargocount + _Gunnercount + _Commandercount + _Drivercount; if (!locked _x && canMove _x && _transportSoldier >= count (units _npc) && !(typeof _x in MON_bugged_vehicles) && (_drivercount > 0 || side _npc == side _x )) exitwith {_vehicle = _x;}; }foreach _OCercanos; _vehicle; }; //Funcin que devuelve un array con los vehiculos terrestres ms cercanos //Parmeters: [_npc,_distance] // <- _npc: object for position search // <- _distance: max distance from npc // -> _vehicles: array of vehicles MON_NearestsLandTransports = { private["_vehicles","_npc","_emptypositions","_OCercanos","_driver", "_Commandercount","_Drivercount","_Gunnercount","_Cargocount","_distance"]; _npc = _this select 0; _distance = _this select 1; _OCercanos = []; _emptypositions = 0; _vehicles = []; _Cargocount = 0; _Gunnercount = 0; _Commandercount = 0; _Drivercount = 0; //Buscamos objetos cercanos _OCercanos = nearestObjects [_npc, ["Car","TANK","Truck","Motorcycle"] , _distance]; { _Cargocount = (_x) emptyPositions "Cargo"; _Gunnercount = (_x) emptyPositions "Gunner"; _Commandercount = (_x) emptyPositions "Commander"; _Drivercount = (_x) emptyPositions "Driver"; _emptypositions = _Cargocount + _Gunnercount + _Commandercount + _Drivercount; if (!locked _x && _emptypositions > 0 && canMove _x && !(typeof _x in MON_bugged_vehicles) && (_drivercount > 0 || side _npc == side _x )) then { _vehicles = _vehicles + [[_x,_emptypositions]];}; }foreach _OCercanos; _vehicles; }; //Funcin que devuelve un array con los vehiculos terrestres ms cercanos //Parmeters: [_npc,_distance] // <- _npc: object for position search // <- _distance: max distance from npc // -> _vehicles: array of vehicles MON_NearestsLandCombat = { private["_vehicles","_npc","_emptypositions","_OCercanos","_driver", "_Commandercount","_Drivercount","_Gunnercount","_Cargocount","_distance","_all"]; _npc = _this select 0; _distance = _this select 1; _all = _this select 2; _OCercanos = []; _emptypositions = 0; _vehicles = []; _Cargocount = 0; _Gunnercount = 0; _Commandercount = 0; _Drivercount = 0; //Buscamos objetos cercanos _OCercanos = nearestObjects [_npc, ["Car","TANK","Truck","Motorcycle"] , _distance]; { if (_all) then { _Cargocount = (_x) emptyPositions "Cargo"; }; _Gunnercount = (_x) emptyPositions "Gunner"; _Drivercount = (_x) emptyPositions "Driver"; _Commandercount = (_x) emptyPositions "Commander"; _emptypositions = _Cargocount + _Gunnercount + _Commandercount + _Drivercount; if (!locked _x && _Gunnercount > 0 && canMove _x && !(typeof _x in MON_bugged_vehicles) && (_drivercount > 0 || side _npc == side _x )) then { _vehicles = _vehicles + [[_x,_emptypositions]];}; }foreach _OCercanos; _vehicles; }; //Funcin que devuelve un array con los vehiculos aereos ms cercanos //Parmeters: [_npc,_distance] // <- _npc: object for position search // <- _distance: max distance from npc // -> _vehicles: array of vehicles MON_NearestsAirTransports = { private["_vehicles","_npc","_emptypositions","_OCercanos","_driver", "_Commandercount","_Drivercount","_Gunnercount","_Cargocount","_distance"]; _npc = _this select 0; _distance = _this select 1; _OCercanos = []; _emptypositions = 0; _vehicles = []; _Cargocount = 0; _Gunnercount = 0; _Commandercount = 0; _Drivercount = 0; //Buscamos objetos cercanos _OCercanos = nearestObjects [_npc, ["Helicopter"] , _distance]; { _Cargocount = (_x) emptyPositions "Cargo"; _Gunnercount = (_x) emptyPositions "Gunner"; _Commandercount = (_x) emptyPositions "Commander"; _Drivercount = (_x) emptyPositions "Driver"; _emptypositions = _Cargocount + _Gunnercount + _Commandercount + _Drivercount; if (!locked _x && _emptypositions > 0 && canMove _x && !(typeof _x in MON_bugged_vehicles) && (_drivercount > 0 || side _npc == side _x )) then { _vehicles = _vehicles + [[_x,_emptypositions]];}; }foreach _OCercanos; _vehicles; }; //Function that returns an array with the closest air vehicles //Parmeters: [_npc,_distance] // <- _npc: object for position search // <- _distance: max distance from npc // -> _vehicles: array of vehicles MON_NearestsAirCombat = { private["_vehicles","_npc","_emptypositions","_OCercanos","_driver", "_Commandercount","_Drivercount","_Gunnercount","_Cargocount","_distance","_all"]; _npc = _this select 0; _distance = _this select 1; _all = _this select 2; _OCercanos = []; _emptypositions = 0; _vehicles = []; _Cargocount = 0; _Gunnercount = 0; _Commandercount = 0; _Drivercount = 0; //Buscamos objetos cercanos _OCercanos = nearestObjects [_npc, ["Helicopter"] , _distance]; { if (_all) then { _Cargocount = (_x) emptyPositions "Cargo"; }; // _Gunnercount = [_x] call RAF_numberOfTurrets; _Gunnercount = (_x) emptyPositions "Gunner"; _Drivercount = (_x) emptyPositions "Driver"; _Commandercount = (_x) emptyPositions "Commander"; _emptypositions = _Cargocount + _Gunnercount + _Commandercount + _Drivercount; if (!locked _x && _Gunnercount > 0 && canMove _x && !(typeof _x in MON_bugged_vehicles) && (_drivercount > 0 || side _npc == side _x )) then { _vehicles = _vehicles + [[_x,_emptypositions]];}; }foreach _OCercanos; _vehicles //return }; //Funcin que devuelve un array con los vehiculos staticos ms cercanos //Parmeters: [_npc,_distance] // <- _npc: object for position search // <- _distance: max distance from npc // -> _vehicles: array of vehicles MON_NearestsStaticWeapons = { private["_vehicles","_npc","_emptypositions","_OCercanos","_driver", "_Commandercount","_Drivercount","_Gunnercount","_Cargocount","_distance"]; _npc = _this select 0; _distance = _this select 1; _OCercanos = []; _emptypositions = 0; _vehicles = []; _Cargocount = 0; _Gunnercount = 0; _Commandercount = 0; _Drivercount = 0; //Buscamos objetos cercanos _OCercanos = nearestObjects [_npc, ["StaticWeapon"] , _distance]; { _Gunnercount = (_x) emptyPositions "Gunner"; _emptypositions = _Gunnercount; if (!locked _x && alive _x && _emptypositions > 0 && !(typeof _x in MON_bugged_vehicles) ) then { _vehicles = _vehicles + [[_x,_emptypositions]];}; }foreach _OCercanos; _vehicles //return }; //Funcin que devuelve un array con los vehiculos marinos ms cercanos //Parmeters: [_npc,_distance] // <- _npc: object for position search // <- _distance: max distance from npc // -> _vehicles: array of vehicles MON_Nearestsboats = { private["_vehicles","_npc","_emptypositions","_OCercanos","_driver", "_Commandercount","_Drivercount","_Gunnercount","_Cargocount","_distance"]; _npc = _this select 0; _distance = _this select 1; _OCercanos = []; _emptypositions = 0; _vehicles = []; _Cargocount = 0; _Gunnercount = 0; _Commandercount = 0; _Drivercount = 0; //Buscamos objetos cercanos _OCercanos = nearestObjects [_npc, ["Ship"] , _distance]; { _Cargocount = (_x) emptyPositions "Cargo"; _Gunnercount = (_x) emptyPositions "Gunner"; _Commandercount = (_x) emptyPositions "Commander"; _Drivercount = (_x) emptyPositions "Driver"; _emptypositions = _Cargocount + _Gunnercount + _Commandercount + _Drivercount; if (!locked _x && _emptypositions > 0 && canMove _x && (_drivercount > 0 || side _npc == side _x )) then { _vehicles = _vehicles + [[_x,_emptypositions]];}; }foreach _OCercanos; _vehicles //return }; //Function to delay the taking of the steering wheel and the vehicle will not have time to rise and MON_assignasdriver = { private["_vehicle","_driver","_wait"]; _driver = _this select 0; _vehicle = _this select 1; _wait = _this select 2; [_driver,_wait] spawn MON_dostop; sleep _wait; unassignVehicle _driver; _driver assignasdriver _vehicle; [_driver] orderGetIn true; //if (KRON_UPS_Debug>0) then {player sidechat format["%1: assigning to driver of %2 ",_driver, typeof _vehicle]}; }; MON_assignasgunner = { private["_vehicle","_gunner","_dist"]; _gunner = _this select 0; _vehicle = _this select 1; _dist=0; _gunner assignasgunner _vehicle; [_gunner] orderGetIn true; waituntil { _gunner != vehicle _gunner || !alive _gunner || !canmove _gunner ||!alive _vehicle || !canfire _vehicle}; if ( alive _gunner && alive _vehicle && canmove _gunner && canfire _vehicle) then { _dist = _gunner distance _vehicle; if (_dist < 3) then { _gunner moveInTurret [_vehicle, [0]] ; }; }; }; //Allow getin MON_Allowgetin = { //Hablitamos a la IA para entrar en el vehiculo [_this] allowGetIn true; }; //If every on is outside, make sure driver can move MON_checkleaveVehicle={ _npc = _this select 0; _vehicle = _this select 1; _driver = _this select 2; _in = false; //Take time to go all units sleep 5; { if (_x != vehicle _x) then {_in = true}; }foreach units _npc; // if no one is inside if (!_in) then { _driver enableAI "MOVE"; sleep 1; _driver stop false; sleep 1; _driver leaveVehicle _vehicle; sleep 1; }; }; //Function for order a unit to exit if no gunner //Parmeters: [_npc] // <- _npc: MON_GetOut = { private["_vehicle","_npc","_getout" ,"_gunner"]; _npc = _this; _vehicle = vehicle (_npc); _gunner = objnull; _gunner = gunner _vehicle; sleep 0.05; if (!alive _npc) exitwith{}; //If no leave the vehicle gunner if ( isnull _gunner || !alive _gunner || !canmove _gunner || (_gunner != _npc && driver _vehicle != _npc && commander _vehicle != _npc) ) then { [_npc] allowGetIn false; _npc spawn MON_doGetOut; unassignVehicle _npc; //sleep 0.2; }; }; //Function for order a unit to exit //Parmeters: [_npc] // <- _npc: MON_doGetOut = { private["_vehicle","_npc","_getout" ,"_gunner","_groupOne","_timeout","_dir"]; _npc = _this; _vehicle = vehicle (_npc); sleep 0.05; if (_vehicle == _npc) exitwith{}; //Wait until vehicle is stopped waituntil {!alive _npc || !canmove _npc || !alive _vehicle || ( (abs(velocity _vehicle select 0)) <= 0.1 && (abs(velocity _vehicle select 1)) <= 0.1 ) || ( _vehicle iskindof "Air" && ((position _vehicle) select 2) <= 1)}; if (!alive _npc || !canmove _npc) exitwith{}; unassignVehicle _npc; _npc action ["getOut", _vehicle]; doGetOut _npc; [_npc] allowGetIn false; nul = [_npc] spawn MON_cancelstop; waituntil {!alive _npc || !canmove _npc || vehicle _npc == _npc}; if (!alive _npc || !canmove _npc) exitwith{}; if (leader _npc != _npc) then { //Moves out with dispersion of 45 _dir = getDir _npc; _dir = _dir + 45 - (random 90); nul = [_npc,25,_dir] spawn MON_domove; //if (KRON_UPS_Debug>0 ) then { player globalchat format["%1 Moving away from %2 %2",_npc, typeof _vehicle,_dir];}; }; }; //Function for exiting of heli //Parmeters: [_heli,_targetPos,_atdist] // <- _heli: // <- _targetPos: position for exiting(if no waypoint used) // <- _atdist: distance for doing paradrop or landing MON_doParadrop = { if (KRON_UPS_Debug>0 ) then { player globalchat format["Mon_doParadrop started"];}; private["_heli","_npc","_getout" ,"_gunner","_targetpos","_helipos","_dist","_index","_grp","_wp","_targetPosWp","_targetP","_units","_crew","_timeout","_jumpers"]; _heli = _this select 0; _targetPos = [0,0]; _atdist = 250; _flyingheigh = KRON_UPS_flyInHeight; _landonBeh = ["CARELESS","SAFE"]; _timeout=0; //Gets optional parameters if ((count _this) > 1) then {_targetPos = _this select 1;}; if ((count _this) > 2) then {_atdist = _this select 2;}; if ((count _this) > 3) then {_flyingheigh = _this select 3;}; _helipos = [0,0]; _targetposWp = [0,0]; _gunner = objnull; _gunner = gunner _heli; _dist = 1000000; _index = 0; _grp = GRPNULL; _wp = []; _units =[]; _crew =[]; waituntil {count crew _heli > 0 || !alive _heli || !canmove _heli}; _grp = group ((crew _heli) select 0); _npc = leader ((crew _heli) select 0); _units = units _npc; while { (_dist >= _atdist || _dist < 10) && alive _heli && canmove _heli && count crew _heli > 0} do { _heli flyInHeight _flyingheigh; /* //Take last waypoint _index = (count waypoints _grp) - 1; _wp = [_grp,_index]; _targetPosWp = waypointPosition _wp; if (format ["%1", _targetPosWp] == "[0,0,0]") then {_targetPosWp = _targetPos}; */ _targetPosWp = _targetPos; _helipos = position _heli; _dist = round([_helipos,_targetPosWp] call KRON_distancePosSqr); //if (KRON_UPS_Debug>0 ) then {player globalchat format["Goiing to drop zone _dist=%1, _atdist=%2", _dist, _atdist ];}; sleep 1; }; if (!alive _heli || count crew _heli == 0) exitwith{}; _crew = crew _heli; //Jump if (((position _heli) select 2) >= 90 && !surfaceIsWater position _heli && (!(toupper (behaviour _npc) IN _landonBeh) || (random 100) < 20)) then { //moving hely for avoiding stuck if (KRON_UPS_Debug>0 ) then {_heli globalchat format["doing paradrop high %1 dist=%2",(position _heli) select 2,_dist,_atdist];}; _jumpers = [_heli] call R_FN_unitsInCargo; //Do paradrop { if( (assignedVehicleRole _x) select 0 == "Cargo")then { unassignVehicle _x; _x action ["EJECT", _heli] ; _x stop false; [_x] allowGetIn false; [_x] spawn MON_ACE_Watersurvival; }; sleep 0.5; } forEach crew _heli; [_heli,700] spawn MON_domove; //Clear Hely vars _heli setVariable ["UPSMON_grpid", 0, false]; _heli setVariable ["UPSMON_cargo", [], false]; // set orginal fly hight // _flyingheigh = KRON_UPS_flyInHeight; // _heli flyInHeight _flyingheigh; //Waits until all units are down _timeout = time + 60; { waituntil {(_x == vehicle _x ) || !alive _x || !canmove _x || isnull _x || time > _timeout}; //Fix bug of ACE that sometimes AI gets in stand animation //_x switchMove "AmovPercMsprSlowWrflDf_AmovPpneMstpSrasWrflDnon_2"; } foreach _jumpers; if ( _npc == vehicle _npc) then { { if (alive _x && canmove _x) then { [_x] dofollow _npc; }; } foreach units _npc; }; //if (KRON_UPS_Debug>0) then {player globalchat format["%1 after paradrop",_npc]}; if (alive _npc && canmove _npc) then { _npc move _targetPosWp; }else{ {if (alive _x && canmove _x) exitwith { _x move _targetPosWp;}}foreach _crew; }; //If only pilot land heli if (count crew _heli <=1) then { [_heli] spawn MON_landHely; }; } else { //land if ( ((position _heli) select 2) >= 60 && !surfaceIsWater _helipos && ((random 100)<20 || !canmove _heli || (toupper (behaviour _npc) IN _landonBeh))) then { [_heli] spawn MON_landHely; } else { If (alive _heli && canmove _heli && count crew _heli > 0) then { if (KRON_UPS_Debug>0 ) then {_heli globalchat format["%1 failed paradrop, trying another time",typeof _heli];}; //Try another time _heli flyInHeight _flyingheigh; sleep 3; [_heli, _targetPos, _atdist*1.5,_flyingheigh] spawn MON_doParadrop; }; }; }; }; //Lands hely MON_landHely = { private["_heli","_npc","_crew","_NearestEnemy","_timeout","_landing","_targetpos","_jumpers"]; _heli = _this select 0; _crew =[]; _targetpos=[0,0]; _timeout = 0; _landing = false; sleep 0.05; if (!alive _heli || !canmove _heli ) exitwith{}; _crew = crew _heli; _npc = leader (_crew select 0); //Checks hely is already landing _landing = _heli getVariable "UPSMON_landing"; if (isnil ("_landing")) then {_landing=false; _heli setVariable ["UPSMON_landing", false, false];}; if (_landing) exitwith {}; //Orders to land heli _heli land "LAND"; if (KRON_UPS_Debug>0 ) then {player globalchat format["%1 is landing",typeof _heli];}; //Puts a mark for knowing hely is landing _heli setVariable ["UPSMON_landing", true, false]; //Waits for land position waituntil {!alive _heli || toUpper(landResult _heli) != "NOTREADY" }; if (alive _heli && (toUpper(landResult _heli) == "NOTFOUND")) exitwith { if (KRON_UPS_Debug>0 ) then { player globalchat format["%1 no landing zone, doing paradrop",typeof _heli];}; _heli setVariable ["UPSMON_landing", false, false]; [_heli] spawn MON_doparadrop; }; //1rt try-Waits until velocity and heigh are good for getting out _timeout = 60 + time; waituntil {!alive _heli || time > _timeout || ((abs(velocity _heli select 2)) <= 1 && ((position _heli) select 2) <= 0.7)}; //2nd try-Waits until velocity and heigh are good for getting out if (((position _heli) select 2) > 2 && ((position _heli) select 2) < 30 && !surfaceiswater position _heli) then { _heli land "LAND"; _timeout = 30 + time; waituntil {!alive _heli || time > _timeout || ((position _heli) select 2) > 30 || ( (abs(velocity _heli select 2)) <= 1 && ((position _heli) select 2) <= 0.7)}; //Failed landing doing paradrop if ( ((position _heli) select 2) > 30) exitwith { if (KRON_UPS_Debug>0 ) then { player globalchat format["%1 landing timeout, doing paradrop",typeof _heli];}; _heli setVariable ["UPSMON_landing", false, false]; sleep 5; [_heli] spawn MON_doparadrop; }; }; //Chechs if alive before continuing if (!alive _heli) exitwith{}; //If there is pilot and gunner, get out only cargo if ((!isnull gunner _heli) && (!isnull driver _heli)) then { _jumpers = [_heli] call R_FN_unitsInCargo; } else { _jumpers = crew _heli; }; //dogetout each of _jumpers { _x spawn MON_doGetOut; sleep 0.5; } forEach _jumpers; _timeout = 20 + time; //Waits until all getout of heli { waituntil {vehicle _x == _x || !canmove _x || !alive _x || movetofailed _x || time > _timeout }; } forEach _jumpers; sleep 1; _heli land "NONE"; sleep 1; [_heli,700] spawn MON_domove; // If leader alive sets combat mode if (alive _npc && canmove _npc) then { //Gets nearest known enemy for putting in combat mode _NearestEnemy = _npc findNearestEnemy _npc; if (!isnull _NearestEnemy ) then { _npc setBehaviour "AWARE"; _groupOne = group _npc; _groupOne setFormation "DIAMOND"; }; //Moves to current target Position _grpid = _npc getvariable "UPSMON_grpid"; if !(isnil "_grpid") then { _targetpos =(KRON_targetsPos select _grpid); _npc move _targetpos; if (KRON_UPS_Debug>0 ) then { player globalchat format["%1 landed, moving to %2 %3",_grpid,_targetpos,count KRON_targetsPos];}; }; }; //Quitamos el id al vehiculo para que pueda ser reutilizado _heli setVariable ["UPSMON_grpid", 0, false]; _heli setVariable ["UPSMON_cargo", [], false]; _heli setVariable ["UPSMON_landing", false, false]; }; //Controls that heli not stoped flying MON_HeliStuckcontrol = { private["_heli","_landing","_stuckcontrol","_dir1","_targetPos","_lastpos"]; _heli = _this select 0; _landing = false; _stuckcontrol = false; _targetPos=[0,0,0]; _dir1 = 0; sleep 0.05; if ( !alive _heli || !canmove _heli ) exitwith{}; //Checks stuckcontrol not active _stuckcontrol = _heli getVariable "UPSMON_stuckcontrol"; if (isnil ("_stuckcontrol")) then {_stuckcontrol=false}; if (_stuckcontrol) exitwith {}; _heli setVariable ["UPSMON_stuckcontrol", true, false]; //if (KRON_UPS_Debug>0 ) then {player globalchat format["%1 stuck control begins",typeof _heli];}; //Stuck loop control while {(alive _heli) && (count crew _heli) > 0 } do { sleep 5; if ((abs(velocity _heli select 0)) <= 5 && (abs(velocity _heli select 1)) <= 5 && (abs(velocity _heli select 2)) <= 5 && ((position _heli) select 2) >= 30) then { _landing = _heli getVariable "UPSMON_landing"; if (isnil ("_landing")) then {_landing=false;}; if (!_landing) then { //moving hely for avoiding stuck [_heli,800] spawn MON_domove; if (KRON_UPS_Debug>0 ) then {player GLOBALCHAT format["%1 stucked at %2m height, moving",typeof _heli,(position _heli) select 2];}; sleep 25; }; }; }; //if (KRON_UPS_Debug>0 ) then {player globalchat format["%1 exits from stuck control",typeof _heli];}; _heli setVariable ["UPSMON_stuckcontrol", false, false]; }; //Function that checks is gunner is alive, if not moves a cargo MON_Gunnercontrol = { private["_vehicle","_gunnercontrol","_hasgunner","_crew","_crew2"]; _vehicle = _this select 0; _targetPos=[0,0,0]; _dir1 = 0; _gunnercontrol = false; _hasgunner = (_vehicle) emptyPositions "Gunner" > 0 || !isnull gunner _vehicle; _crew = []; _crew2 = []; //Without driver and gunner sleep 0.05; if ( !alive _vehicle || !canmove _vehicle ) exitwith{}; //Checks stuckcontrol not active _gunnercontrol = _vehicle getVariable "UPSMON_gunnercontrol"; if (isnil ("_gunnercontrol")) then {_gunnercontrol=false}; if (_gunnercontrol) exitwith {}; _vehicle setVariable ["UPSMON_gunnercontrol", true, false]; _crew = crew _vehicle; //gunner and driver loop control while { alive _vehicle && canmove _vehicle && count _crew > 0} do { _crew = crew _vehicle; { if (!canmove _x || !alive _x) then {_crew = _crew -[_x];}; }foreach _crew; //Driver control if ((isnull (driver _vehicle) || !alive (driver _vehicle) || !canmove (driver _vehicle)) && count _crew > 0) then { _crew2 = _crew - [gunner _vehicle]; if (count _crew2 > 0) then { (_crew2 select (count _crew2 - 1)) spawn MON_movetodriver; }; }; //Gunner control if ( _hasgunner && (isnull (gunner _vehicle) || !alive (gunner _vehicle) || !canmove (gunner _vehicle)) && count _crew > 1) then { _crew2 = _crew - [driver _vehicle]; if (count _crew2 > 0) then { (_crew2 select (count _crew2 - 1)) spawn MON_movetogunner; }else{ (_crew select 0) spawn MON_movetogunner; }; }; sleep 20; //if (KRON_UPS_Debug>0 ) then {player globalchat format["%1 crew=%2",typeof _vehicle, count _crew];}; }; //if (KRON_UPS_Debug>0 ) then {player globalchat format["%1 exits from gunner control",typeof _vehicle];}; _vehicle setVariable ["UPSMON_gunnercontrol", false, false]; }; //Mueve a todo el grupo adelante MON_move = { private["_npc","_dir1","_targetPos","_dist"]; _npc = _this select 0; _dist = _this select 1; sleep 0.05; if (!alive _npc || !canmove _npc ) exitwith{}; _dir1 = getDir _npc; _targetPos = [position _npc,_dir1, _dist] call MON_GetPos2D; _npc move _targetPos; }; //Mueve al soldado adelante MON_domove = { private["_npc","_dir1","_targetPos","_dist"]; _npc = _this select 0; _dist = _this select 1; if ((count _this) > 2) then {_dir1 = _this select 2;} else{_dir1 = getDir _npc;}; sleep 0.05; if (!alive _npc || !canmove _npc ) exitwith{}; _targetPos = [position _npc,_dir1, _dist] call MON_GetPos2D; //If position water and not boat not go if (surfaceIsWater _targetPos && !(_npc iskindof "boat" || _npc iskindof "air") ) exitwith {}; _npc domove _targetPos; }; //Funcin que detiene al soldado y lo hace esperar x segundos MON_doStop = { private["_sleep","_npc"]; _npc = _this select 0; _sleep = _this select 1; sleep 0.05; if (!alive _npc || !canmove _npc ) exitwith{}; if ( _sleep == 0 ) then {_sleep = 0.1}; //Restauramos valores por defecto de movimiento //_npc disableAI "MOVE"; dostop _npc ; sleep _sleep; [_npc] spawn MON_cancelstop; }; //Funcin que detiene al soldado y lo hace esperar x segundos MON_cancelstop = { private["_npc"]; _npc = _this select 0; _npc stop false; }; //Make grenade dodge animation MON_evadeGrenade = { if (!alive _this || (vehicle _this) != _this || !canmove _this) exitwith{}; _this playmovenow "AmovPercMstpSlowWrflDnon_ActsPpneMstpSlowWrflDr_GrenadeEscape"; sleep 8; if (!alive _this || (vehicle _this) != _this || !canmove _this) exitwith{}; _this switchmove "AmovPpneMstpSrasWrflDnon_AmovPpneMevaSlowWrflDr"; //croqueta _this playmovenow "AmovPpneMstpSrasWrflDnon"; //prone }; //Realiza la animacin de la croqueta MON_animCroqueta = { if (!alive _this || (vehicle _this) != _this || !canmove _this || !(_this iskindof "Man")) exitwith{}; if ((random 1)<=.50) then { _this switchmove "AmovPpneMstpSrasWrflDnon_AmovPpneMevaSlowWrflDl"; //croqueta } else { _this switchmove "AmovPpneMstpSrasWrflDnon_AmovPpneMevaSlowWrflDr"; //croqueta }; }; //Throw a grenade MON_throw_grenade = { private["_target","_npc"]; _npc = _this select 0; _target = _this select 1; sleep random 1.5; if (!alive _npc || (vehicle _npc) != _npc || !canmove _npc) exitwith{}; [_npc,_target] spawn MON_dowatch; sleep 0.1; // R_Functions [_npc] spawn R_ThrowSmoke; /* _npc addMagazine "SmokeShell"; _npc selectWeapon "throw"; sleep .1; _npc fire ["SmokeShellMuzzle","SmokeShellMuzzle","SmokeShell"]; */ }; //Establece el tipo de posicin MON_setUnitPos = { private["_pos","_npc"]; _npc = _this select 0; _pos = _this select 1; sleep 0.5; if (!alive _npc || !canmove _npc || _npc != vehicle _npc || !(_npc iskindof "Man")) exitwith{}; _npc setUnitPos _pos; sleep 1; }; //Establece el tipo de posicin MON_setUnitPosTime = { private["_pos","_npc"]; _npc = _this select 0; _pos = _this select 1; _time = _this select 2; if (!alive _npc || !canmove _npc) exitwith{}; _npc setUnitPos _pos; sleep _time; _npc setUnitPos "AUTO"; sleep 1; }; // Funcin para mirar en una direccin MON_dowatch = { private["_target","_npc"]; _npc = _this select 0; _target = _this select 1; if (!alive _npc) exitwith{}; _npc dowatch _target; sleep 1; }; //Funcin que mueve al soldado a la posicin de conductor //Parmeters: [_npc,_vehicle] // <- _npc: unit to move to driver pos // <- _vehicle MON_movetoDriver = { private["_vehicle","_npc"]; _npc = _this ; _vehicle = vehicle _npc; //Si est muerto if (vehicle _npc == _npc || !alive _npc || !canmove _npc || !(_npc iskindof "Man")) exitwith{}; if (isnull(driver _vehicle) || !alive(driver _vehicle) || !canmove(driver _vehicle)) then { //if (KRON_UPS_Debug>0) then {player sidechat format["%1: Moving to driver of %2 ",_npc,typeof _vehicle]}; _npc action ["getOut", _vehicle]; doGetOut _npc; WaitUntil {vehicle _npc==_npc || !alive _npc || !canmove _npc}; //Si est muerto if (!alive _npc || !canmove _npc) exitwith{}; unassignVehicle _npc; _npc assignasdriver _vehicle; _npc moveindriver _vehicle; }; }; //Funcin que mueve al soldado a la posicin de conductor //Parmeters: [_npc,_vehicle] // <- _npc: unit to move to driver pos // <- _vehicle MON_movetogunner = { private["_vehicle","_npc"]; _npc = _this ; _vehicle = vehicle _npc; sleep 0.05; //Si est muerto if (vehicle _npc == _npc || !alive _npc || !canmove _npc || !(_npc iskindof "Man")) exitwith{}; if (isnull(gunner _vehicle) || !alive(gunner _vehicle) || !canmove(gunner _vehicle)) then { if (KRON_UPS_Debug>0) then {player sidechat format["%1: Moving to gunner of %2 ",_npc,typeof _vehicle]}; _npc action ["getOut", _vehicle]; doGetOut _npc; WaitUntil {vehicle _npc==_npc || !alive _npc || !canmove _npc}; //Si est muerto if (!alive _npc || !canmove _npc) exitwith{}; unassignVehicle _npc; _npc assignasgunner _vehicle; _npc moveingunner _vehicle; }; }; //Funcin que retorna array de arrays con edificios y sus plantas //Parmeters: [_object,(_distance,_minfloors)] // <- _object: soldier to get near buildings // <- _distance: distance to search buildings (optional, 25 by default) // <- _minfloors: min floors of building (optional) if not especified min floors is 2 // -> [_bld,_bldpos] MON_GetNearestBuildings = { private ["_object","_altura","_pos","_bld","_bldpos","_posinfo","_minfloors","_OCercanos","_distance","_blds"]; _distance = 25; _minfloors = 2; _altura = 0; _blds = []; _object = _this select 0; if ((count _this) > 1) then {_distance = _this select 1;}; if ((count _this) > 2) then {_minfloors = _this select 2;}; _pos =0; _bld = objnull; _bldpos =0; _posinfo=[]; //La altura mnima es 2 porque hay muchos edificios q devuelven 2 de altura pero no se puede entrar en ellos. if ( minfloors == 0 ) then { minfloors = 2; }; // _posinfo: [0,0]=no house near, [obj,0]=house near, but no roof positions, [obj,pos]=house near, with roof pos //_posinfo= _object call MON_PosInfo; _OCercanos = nearestObjects [_object, ["house","building"] , _distance]; { _bldpos = _x call MON_BldPos; if ( _bldpos >= _minfloors && damage _x <= 0 ) then { _blds = _blds + [[_x,_bldpos]];}; //player sidechat format["%1 cerca de edificio con %2 plantas %5",typeof _object,_bldpos]; }foreach _OCercanos; _blds; }; //Function to move al units of squad to near buildings //Parmeters: [_npc,(_patrol,_minfloors)] // <- _npc: lider // <- _distance: distance to search buildings (optional, 25 by default) // <- _patrol: wheter must patrol or not MON_moveNearestBuildings = { private ["_npc","_altura","_pos","_bld","_bldpos","_posinfo","_blds","_distance","_cntobjs1","_bldunitin","_blddist","_patrol","_wait","_all"]; _distance = 30; _altura = 0; _patrol = false; _wait=60; _all = false; _npc = _this select 0; if ((count _this) > 1) then {_distance = _this select 1;}; if ((count _this) > 2) then {_patrol = _this select 2;}; if ((count _this) > 3) then {_wait = _this select 3;}; if ((count _this) > 4) then {_all = _this select 4;}; _pos =0; _bld = objnull; _bldpos =0; _cntobjs1=0; _bldunitsin=[]; _units=[]; _blds=[]; //If all soldiers move leader too if (_all) then { _units = (units _npc); }else{ _units = (units _npc) - [_npc]; }; sleep 0.05; { if (_x iskindof "Man" && unitReady _x && _x == vehicle _x && canmove _x && alive _x && canstand _x) then {_bldunitsin = _bldunitsin + [_x]} }foreach _units; if (count _bldunitsin == 0) exitwith {}; //Obtenemos los edificios cercanos al lider _blds = [_npc,_distance] call MON_GetNearestBuildings; if (count _blds==0) exitwith {}; //Movemos a la unidades a los edificios cercanos. [_bldunitsin, _blds, _patrol,_wait,_all] spawn MON_moveBuildings; }; //Function to move al units of squad to near buildings //Parmeters: [_npc,(_patrol,_minfloors)] // <- _units: array of units // <- _blds: array of buildingsinfo [_bld,pos] // <- _patrol: wheter must patrol or not // -> _bldunitsin: array of units moved to builidings MON_moveBuildings = { private ["_npc","_altura","_pos","_bld","_bldpos","_posinfo","_blds","_cntobjs1","_bldunitin","_blddist","_i","_patrol","_wait","_all","_minpos","_blds2"]; _patrol = false; _wait = 60; _minpos = 2; _all = false; _units = _this select 0; _blds = _this select 1; if ((count _this) > 2) then {_patrol = _this select 2;}; if ((count _this) > 3) then {_wait = _this select 3;}; if ((count _this) > 4) then {_all = _this select 4;}; if ((count _this) > 5) then {_minpos = _this select 5;}; _altura = 0; _pos =0; _bld = objnull; _bldpos =0; _cntobjs1=0; _bldunitsin=[]; _movein=[]; _blds2 =[]; //if (KRON_UPS_Debug>0) then {player globalchat format["MON_moveBuildings _units=%1 _blds=%2",count _units, count _blds]; }; //if (KRON_UPS_Debug>0) then {diag_log format["MON_moveBuildings _units=%1 _blds=%2",count _units, count _blds];}; { _bld = _x select 0; _bldpos = _x select 1; if ( _bldpos >= _minpos ) then { _cntobjs1 = 1; _movein = []; _i = 0; if (_patrol) then { if (_bldpos >= 8) then { _cntobjs1 = 2 }; } else { if (_bldpos >= 8) then { _cntobjs1 = round(random 3) + 1;}; }; //Buscamos una unidad cercana para recorrerlo { if (_x iskindof "Man" && unitReady _x && canmove _x && alive _x && vehicle _x == _x && _i < _cntobjs1) then{ _movein = _movein + [_x]; _i = _i + 1; }; } foreach _units; //if (KRON_UPS_Debug>0) then {player globalchat format["_units=%3 _bldunitsin %4 _movein=%1",_movein, typeof _bld, count _units, count _bldunitsin];} //if (KRON_UPS_Debug>0) then {diag_log format["_units=%3 _bldunitsin %4 _movein=%1 %2 %5",_movein, typeof _bld, count _units, count _bldunitsin,_x];}; if (count _movein > 0) then { _bldunitsin = _bldunitsin + _movein; _units = _units - _bldunitsin; if (_patrol) then { { [_x,_bld,_bldpos] spawn MON_patrolBuilding; }foreach _movein; } else { { _altura = floor(random(_bldpos)); if (_altura<2) then {_altura = _minpos}; [_x,_bld,_altura,_wait] spawn MON_movetoBuilding; }foreach _movein; }; }; }; if (count _units == 0) exitwith {}; }foreach _blds; //If need to enter all units in building and rest try with a superior lvl if ( _all && count _units > 0 ) then { _blds2 = []; _minpos = _minpos + 3; { if ( (_x select 1) >= _minpos) then { _blds2 = _blds2 + [_x]; }; }foreach _blds; //if (KRON_UPS_Debug>0) then {player globalchat format["MON_moveBuildings exit _units=%1 _blds=%2",count _units, count _blds2]; }; //if (KRON_UPS_Debug>0) then {diag_log format["MON_moveBuildings exit _units=%1 _blds=%2",count _units, count _blds2];}; if (count _blds2 > 0 ) then { [_units, _blds2, _patrol,_wait,_all,_minpos] call MON_moveBuildings; }; _bldunitsin = _bldunitsin + _units; }; _bldunitsin; }; //Function to move a unit to a position in a building //Parmeters: [_npc,(_patrol,_minfloors)] // <- _npc: soldier // <- _bld: building // <- _altura: building // <- _wait: time to wait in position MON_movetoBuilding = { private ["_npc","_altura","_bld","_wait","_dist","_retry","_soldiers"]; _wait = 60; _timeout = 120; _dist = 0; _retry = false; _npc = _this select 0; _bld = _this select 1; _altura = _this select 2; if ((count _this) > 3) then {_wait = _this select 3;}; //Si est en un vehiculo ignoramos la orden if (vehicle _npc != _npc || !alive _npc || !canmove _npc) exitwith{}; //Si ya est en un edificio ignoramos la orden _inbuilding = _npc getvariable ("UPSMON_inbuilding"); if ( isNil("_inbuilding") ) then {_inbuilding = false;}; if (_inbuilding) exitwith{}; _npc domove (_bld buildingPos _altura); _npc setVariable ["UPSMON_inbuilding", _inbuilding, false]; _npc setvariable ["UPSMON_buildingpos", nil, false]; _timeout = time + _timeout; //if (KRON_UPS_Debug>0) then {player globalchat format["%4|_bld=%1 | %2 | %3",typeof _bld, _npc, typeof _npc ,_altura];}; //if (KRON_UPS_Debug>0) then {diag_log format["%4|_bld=%1 | %2 | %3",typeof _bld, _npc, typeof _npc ,_altura];}; waitUntil {moveToCompleted _npc || moveToFailed _npc || !alive _npc || !canmove _npc || _timeout < time}; if (moveToCompleted _npc && alive _npc && canmove _npc) then { _dist = [position _npc,_bld buildingPos _altura] call KRON_distancePosSqr; _soldiers = [_npc,1] call MON_nearestSoldiers; //If more soldiers in same floor see to keep or goout. if (count _soldiers > 0) then { { if (!isnil{_x getvariable ("UPSMON_buildingpos")}) exitwith {_retry = true}; }foreach _soldiers; }; if (!_retry && _dist <= 2) then { _npc setvariable ["UPSMON_buildingpos", _altura, false]; sleep 0.1; [_npc,_wait] spawn MON_dostop; }; }; if (!alive _npc || !canmove _npc) exitwith{}; _npc setVariable ["UPSMON_inbuilding", false, false]; //Down one position. if (_retry ) then { _altura = _altura + 1; _bldpos = _bld call MON_BldPos; if (_altura <= _bldpos) then { [_npc,_bld,_altura] spawn MON_movetoBuilding; }; }; }; //Funcin para mover a una unidad al edificio ms cercano //Parmeters: [_npc,_bld,(_BldPos)] // <- _npc: soldier to move // <- _bld:building to patrol // <- _BldPos: positions of builiding (optional) MON_patrolBuilding = { private ["_npc","_bld","_bldpos","_posinfo","_minfloors","_OCercanos","_distance","_timeout","_pos","_inbuilding","_rnd","_NearestEnemy","_patrolto","_time"]; _bldpos = 0; _pos = 0; _timeout = 0; _i = 1; _inbuilding = false; _rnd = 0; _patrolto = 0; _NearestEnemy = objnull; _time = 0; _npc = _this select 0; _bld = _this select 1; if ((count _this) > 2) then {_bldpos = _this select 2;} else {_bldpos = _x call MON_BldPos;}; if (_i > _bldpos) then {_i = _bldpos}; _patrolto = round ( 10 + random (_bldpos) ); if (_patrolto > _bldpos) then {_patrolto = _bldpos}; //Si ya est muerto o no se puede mover se ignora if (!(_npc iskindof "Man") || !alive _npc || !canmove _npc) exitwith{}; //Si ya est en un edificio ignoramos la orden _inbuilding = _npc getvariable ("UPSMON_inbuilding"); if ( isNil("_inbuilding") ) then {_inbuilding = false;}; //Asignamos el vehiculo a a la escuadra si contiene las posiciones justas if (!_inbuilding) then { _inbuilding = true; _npc setVariable ["UPSMON_inbuilding", _inbuilding, false]; [_npc,"Middle"] spawn MON_setUnitPos; _timeout = time + 60; //player sidechat format["%1 patrol building %2 from %3 to %4",typeof _npc, typeof _bld,_i, _patrolto]; while { _i <= _patrolto && alive _npc && canmove _npc} do{ _npc domove (_bld buildingPos _i); _time = time + 30; waitUntil {moveToCompleted _npc or moveToFailed _npc or !alive _npc or _time < time}; if (moveToCompleted _npc) then { _timeout = time + 60; _i = _i + 1; } else { if (moveToFailed _npc || !canmove _npc || !alive _npc || _timeout < time) then { //player sidechat format["%1 Cancelando patrulla en %2",_npc, typeof _bld]; _i = _patrolto + 1; }; }; sleep 0.05; }; //Si est en un vehiculo ignoramos la orden if (!alive _npc || !canmove _npc) exitwith{}; //Volvemos con el lider _npc domove (position leader _npc); //Marcamos que ya hemos finalizado sleep 60; //Damos tiempo para salir del edificio _npc setVariable ["UPSMON_inbuilding", false, false]; }; }; //Function to put a mine //Parmeters: [_npc,(_position)] // <- _npc: leader // <- _position:location for mine (optional) MON_CreateMine = { private ["_npc","_rnd","_soldier","_mine","_dir","_position"]; _soldier = _this select 0; if ((count _this) > 1) then {_position = _this select 1;} else {_position = [0,0];}; _mine = objnull; _rnd = 0; _dir = 0; _npc = leader _soldier; if (_soldier == _npc ) then { _rnd = round (random ( count ((units _npc)))); _soldier = (units _npc) select _rnd; }; //leader only control not work //Si est en un vehiculo ignoramos la orden if (!(_soldier iskindof "Man" ) || _soldier == _npc || _soldier!=vehicle _soldier || !alive _soldier || !canmove _soldier) exitwith {false}; //Animacin para montar el arma if ((count _this) > 1) then { [_soldier,_position] spawn MON_doCreateMine; }else{ [_soldier] spawn MON_doCreateMine; }; true; }; MON_doCreateMine = { private ["_npc","_rnd","_soldier","_mine","_dir","_position"]; _position = [0,0]; _soldier = _this select 0; if ((count _this) > 1) then {_position = _this select 1;}; //If not is Man or dead exit if (!(_x iskindof "Man" ) || _soldier!=vehicle _soldier || !alive _soldier || !canmove _soldier) exitwith {false}; _soldier stop false; [_soldier,"AUTO"] spawn MON_setUnitPos; if ((count _this) > 1) then { _soldier domove _position; waituntil {unitReady _soldier || moveToCompleted _soldier || moveToFailed _soldier || !alive _soldier || !canmove _soldier}; }; if (moveToFailed _soldier || !alive _soldier || _soldier != vehicle _soldier || !canmove _soldier) exitwith {false}; //Crouche _soldier playMovenow "ainvpknlmstpslaywrfldnon_1"; sleep 1; if (!alive _soldier || !canmove _soldier) exitwith{}; _dir = getdir _soldier; _position = [position _soldier,_dir, 0.5] call MON_GetPos2D; _mine = createMine ["MineMine", _position , [], 0]; //Prepare mine _soldier playMoveNow "AinvPknlMstpSlayWrflDnon_medic"; sleep 5; //Return to formation _soldier domove position ( leader _soldier ); }; //Function to surrender AI soldier //Parmeters: [_npc] // <- _npc: soldier to surrender MON_surrender = { private ["_npc","_vehicle"]; _npc = _this select 0; if (!alive _npc || !canmove _npc) exitwith {}; _npc addrating -1000; _npc setcaptive true; sleep 0.5; _vehicle = vehicle _npc; if ( _npc != _vehicle || !(_npc iskindof "Man" )) then { _vehicle setcaptive true; if ( "Air" countType [_vehicle]>0) then { //Si acaba de entrar en el heli se define punto de aterrizaje if (_npc == driver _vehicle ) then { [_vehicle] call MON_landHely; }; } else { _npc spawn MON_doGetOut; }; //Esperamos a que est parado waituntil {_npc == vehicle _npc || !alive _npc}; }; if (!alive _npc || !canmove _npc) exitwith {}; _npc setcaptive true; _npc stop true; [_npc,"UP"] call MON_setUnitPos; removeAllWeapons _npc; sleep 1; _npc playMoveNow "AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon"; }; //Returns leader if was dead MON_getleader = { private ["_npc","_members"]; _npc = _this select 0; _members = _this select 1; sleep 0.05; if (!alive _npc ) then { //takes commder a soldier not in vehicle { if (alive _x && canmove _x && _x == vehicle _x && !isplayer _x) exitwith { _npc = _x; }; } foreach _members; //if no soldier out of vehicle takes any if (!alive _npc ) then { { if (alive _x && canmove _x) exitwith {_npc = _x;}; } foreach _members; }; //If not alive or already leader or is player exits if (isPlayer _npc || !alive _npc || !canmove _npc ) then { { if (alive _x && !isPlayer _x) exitwith {_npc = [_npc, _members] call MON_getleader;}; }foreach _members; }; if (leader _npc == _npc) exitwith {_npc}; //Set new _npc as leader group _npc selectLeader _npc; }; _npc // return }; MON_ACE_Watersurvival = { private ["_lb","_pos","_ejector","_in","_grpid","_rnd"]; _in =[]; _rnd = 0; _ejector = _this select 0; //if (KRON_UPS_Debug>0) then {player globalchat format["MON_ACE_Watersurvival %1",typeof _ejector]}; waitUntil { !canmove _ejector || !alive _ejector || isnull (_ejector) || ((getPos vehicle _ejector) select 2 < 1) }; if ( !surfaceIsWater (getpos _ejector) || !canmove _ejector || !alive _ejector || isnull (_ejector) ) exitWith {}; //Miramos de entrar en un barco cercano _grpid = _ejector getvariable "UPSMON_grpid"; if (isnil "_grpid") then {_grpid = 0}; _in = [_grpid,_ejector,30] call MON_GetIn_NearestBoat; //If no boat near creates a zodiac if (count _in <= 0) then { if (!(isNil "ace_main")) then { _lb = "ACE_Lifeboat_US" createVehicle getposASL _ejector; }else{ _lb = "Zodiac" createVehicle getposASL _ejector; }; _pos = getposASL _ejector; _pos set [0, ((_pos select 0) + 2)]; _pos set [1, ((_pos select 1) + 2)]; //_pos set [2, 0]; _lb setPos _pos; //Moves in boat if !(isPlayer _ejector) then { [_ejector,_lb,0] call MON_assignasdriver; }; }; //Wait until reached eart waitUntil { !canmove _ejector || !alive _ejector || isnull (_ejector) || !surfaceIsWater (position _ejector) }; if (KRON_UPS_Debug>0) then {player globalchat format["Exit from boat%1",typeof _lb]}; _ejector spawn MON_dogetout; }; //Function to do artillery //Parmeters: [_position,(_rounds,_area,_cadence,_mincadence)] // <- _position: center of fire create artillery // <- _rounds: rounds of fire // <- _area: Dispersion area // <- _maxcadence: Cadence of fire, is random between min // <- _mincadence: Minimum cadence // <- _bullet: class of bullet to fire, default ARTY_Sh_81_HE MON_artillery_dofire = { if (!isserver) exitWith {}; private ["_smoke1","_i","_area","_position","_maxcadence","_mincadence","_sleep","_rounds"]; _area = 150; _maxcadence = 10; _mincadence = 5; _sleep = 0; _rounds = 5; _bullet = "ARTY_Sh_81_HE"; _position =[]; //_bullet = "ARTY_Sh_105_HE"; //_bullet = "ARTY_Sh_122_HE"; _position = _this select 0; if ((count _this) > 1) then {_rounds = _this select 1;}; if ((count _this) > 2) then {_area = _this select 2;}; if ((count _this) > 3) then {_maxcadence = _this select 3;}; if ((count _this) > 4) then {_mincadence = _this select 4;}; if ((count _this) > 5) then {_bullet = _this select 5;}; _area2 = _area * 2; if (KRON_UPS_Debug>0) then {player globalchat format["artillery doing fire on %1",_position]}; for [{_i=0}, {_i<_rounds}, {_i=_i+1}] do { _sleep = random _maxcadence; if (_sleep < _mincadence) then {_sleep = _mincadence}; sleep _sleep; _smoke1 = _bullet createVehicle [(_position select 0)+ random _area2 - _area, (_position select 1)+ random _area2 - _area, (_position select 2)+ 20]; }; }; //Funcin que devuelve un array con los vehiculos terrestres ms cercanos //Parmeters: [_npc,_distance] // <- _npc: object for position search // <- _distance: max distance from npc // -> _vehicles: array of vehicles MON_deadbodies = { private["_vehicles","_npc","_bodies","_OCercanos","_distance","_side"]; _npc = _this select 0; _distance = _this select 1; //_side = _this select 2; _OCercanos = []; _bodies = []; //Buscamos objetos cercanos _OCercanos = nearestObjects [_npc, ["Man"] , _distance]; { if (_npc knowsabout _x >0.5 && (!canmove _x || !alive _x)) then { _bodies = _bodies + [_x];}; }foreach _OCercanos; _bodies; }; //Funcin que devuelve un array con los vehiculos terrestres ms cercanos //Parmeters: [_npc,_distance] // <- _npc: object for position search // <- _distance: max distance from npc // -> _vehicles: array of vehicles MON_nearestSoldiers = { private["_vehicles","_npc","_soldiers","_OCercanos","_distance","_side"]; _npc = _this select 0; _distance = _this select 1; if (isnull _npc) exitwith {}; _OCercanos = []; _soldiers = []; //Buscamos objetos cercanos _OCercanos = nearestObjects [_npc, ["Man"] , _distance]; _OCercanos = _OCercanos - [_npc]; { if ( alive _x && canmove _x ) then { _soldiers = _soldiers + [_x];}; }foreach _OCercanos; _soldiers; }; /* ===================================================================================================== MON_spawn.sqf Author: Monsada (chs.monsada@gmail.com) Comunidad Hispana de Simulacin: http://www.simulacion-esp.com ===================================================================================================== Parmeters: [_artillery,(_range,_rounds,_area,_cadence,_mincadence)] execvm "scripts\UPSMON\MON_artillery_add.sqf"; <- _artillery object to attach artillery script, must be an object with gunner. <- ( _rounds ) rounds to fire each time, default 1 <- ( _range ) range of artillery, default 800 <- ( _area ) Dispersion area, 150m by default <- ( _maxcadence ) Cadence of fire, is random between min, default 10s <- ( _mincadence ) Minimum cadence, default 5s <- ( _bullet ) Class of bullet to fire, default ARTY_Sh_81_HE ===================================================================================================== 1. Place a static weapon on map. 2. Exec module in int of static weapon nul=[this] execVM "scripts\UPSMON\MON_artillery_add.sqf"; 1. Be sure static weapon has a gunner or place a "fortify" squad near, this will make squad to take static weapon. 2. Create a trigger in your mission for setting when to fire. Set side artillery variable to true: KRON_UPS_ARTILLERY_EAST_FIRE = true; This sample will do east artilleries to fire on known enemies position, when you want to stop fire set to false. For more info: http://dev-heaven.net/projects/upsmon/wiki/Artillery_module =====================================================================================================*/ if (!isserver) exitWith {}; //Waits until UPSMON is init waitUntil {!isNil("KRON_UPS_INIT")}; waitUntil {KRON_UPS_INIT==1}; private ["_artillery","_smoke1","_i","_area","_position","_maxcadence","_mincadence","_sleep","_rounds"]; _range = 800; _area = 150; _maxcadence = 10; _mincadence = 5; _sleep = 0; _rounds = 1; _bullet = "ARTY_Sh_81_HE"; _vector =[]; _artillery = _this select 0; //if (KRON_UPS_Debug>0) then {player globalchat format["MON_artillery_add before %1 %2 %3",isnull _artillery,alive _artillery]}; if (isnull _artillery || !alive _artillery) exitwith{}; if ((count _this) > 1) then {_rounds = _this select 1;}; if ((count _this) > 2) then {_range = _this select 2;}; if ((count _this) > 3) then {_area = _this select 3;}; if ((count _this) > 4) then {_maxcadence = _this select 4;}; if ((count _this) > 5) then {_mincadence = _this select 5;}; if ((count _this) > 6) then {_bullet = _this select 6;}; //Add artillery to array of artilleries _vector = [_artillery,_rounds,_range,_area,_maxcadence,_mincadence,_bullet]; if (isnil "KRON_UPS_ARTILLERY_UNITS" ) then {KRON_UPS_ARTILLERY_UNITS = []}; KRON_UPS_ARTILLERY_UNITS = KRON_UPS_ARTILLERY_UNITS + [_vector]; if (true) exitwith{}; /* ===================================================================================================== MON_spawn.sqf Author: Monsada (chs.monsada@gmail.com) Comunidad Hispana de Simulacin: http://www.simulacion-esp.com ===================================================================================================== Parmeters: [Param1,Param2,Param3,[Param4]] EXECVM "SCRIPTS\UPSMON\MON_SPAWN.SQF"; <- Param1 Id of the template to copy. <- Param2 Position to create new squad. <- Param3 N of squads to create <- Param4 Array of parameters of UPSMON, first must be name of marc to patrol ===================================================================================================== Function that allows to spawn UPSMON squads. 1- create a squad in editor. Exec UPSMON and set TEMPLATE id, this will save members of squad, not equipement. nul = [this,"town","TEMPLATE:",1] execVM "scripts\upsmon.sqf"; 2- Exec MON_spawn on trigger or where you want telling the copy of the template to create and the position. nul = [1,[0,0,0],3,[mark, upsmon optional params]] EXECVM "SCRIPTS\UPSMON\MON_SPAWN.SQF"; =====================================================================================================*/ if (!isserver) exitWith {}; //Waits until UPSMON is init waitUntil {!isNil("KRON_UPS_INIT")}; waitUntil {KRON_UPS_INIT==1}; private ["_template","_position","_params","_copies","_membertypes","_unittype","_side","_UCthis","_initstr","_grp","_lead","_newunit","_i","_newpos","_vehicle","_initlstr"]; //Parameter reading _template = _this select 0; _position = _this select 1; _copies = _this select 2; _params = _this select 3; //Initialization _membertypes = []; _side = ""; _UCthis = []; _initstr = ""; _initlstr = ""; _grp = grpnull; _lead = objnull; _newunit = objnull; _newpos=[]; _vehicle=[]; //Gets parameters of UPSMON for [{_i=0},{_i0) then {player globalchat format["Spawning %3 copies of template %1",_template,_position,_copies,count KRON_UPS_TEMPLATES]}; //if (KRON_UPS_Debug>0) then {diag_log format["Spawning %3 copies of template %1 on %2 templates %4",_template,_position,_copies,count KRON_UPS_TEMPLATES]}; //Search if any template { if ((_x select 0) == _template) then { _side = _x select 1; _membertypes = _x select 2; _vehicletypes = _x select 3; //Gets leader type _unittype= _membertypes select 0; //if (KRON_UPS_Debug>0) then {player globalchat format["template %1:%2 ",_template,_membertypes]}; for [{_i=1},{_i<=_copies},{_i=_i+1}] do { // make the clones civilians // use random Civilian models for single unit groups if ((_unittype=="Civilian") && (count _members==1)) then {_rnd=1+round(random 20); if (_rnd>1) then {_unittype=format["Civilian%1",_rnd]}}; _grp=createGroup _side; _lead = _grp createUnit [_unittype, _position, [], 0, "form"]; _lead setVehicleInit _initlstr; [_lead] join _grp; _grp selectLeader _lead; sleep 1; // copy team members (skip the leader) _c=0; { _c=_c+1; if (_c>1) then { _newpos = _position findEmptyPosition [10, 200]; sleep .4; if (count _newpos <= 0) then {_newpos = _position}; _newunit = _grp createUnit [_x, _newpos, [],0,"form"]; _newunit setVehicleInit _initstr; [_newunit] join _grp; }; } foreach _membertypes; { _newpos = _position findEmptyPosition [10, 200]; sleep .4; if (count _newpos <= 0) then {_newpos = _position}; _newunit = _x createvehicle (_newpos); } foreach _vehicletypes; //Set new parameters _params = [_lead] + _UCthis; //Exec UPSMON script _params SPAWN UPSMON; processInitCommands; }; }; }foreach KRON_UPS_TEMPLATES; if (true) exitwith{}; // ========================================================================================================= // Script for adding the action of follow player. // Version: 1.0 // Author: Monsada (smirall@hotmail.com) // --------------------------------------------------------------------------------------------------------- private ["_side","_soldiers"]; _side = _this select 0; _soldiers = switch (_side) do { case west: {KRON_AllWest}; case east: {KRON_AllEast}; case resistance: {KRON_AllRes}; }; { if ( leader _x == _x ) then { _x addaction ["Order your men to follow me", "scripts\UPSMON\actions\followme.sqf", [], 1, false]; } else { _x addaction ["Follow me", "scripts\UPSMON\actions\followme.sqf", [], 1, false]; }; }foreach _soldiers; if (true) exitWith {}; // ========================================================================================================= // UPSMON - Urban Patrol Script // version 5.0.8 R2 // // Author: Monsada (chs.monsada@gmail.com) // Comunidad Hispana de Simulacin: // // Wiki: http://dev-heaven.net/projects/upsmon/wiki // Forum: http://forums.bistudio.com/showthread.php?t=91696 // Share your missions with upsmon: http://dev-heaven.net/projects/upsmon/boards/86 // --------------------------------------------------------------------------------------------------------- // Based on Urban Patrol Script v2.0.3 // Author: Kronzky (www.kronzky.info / kronzky@gmail.com) // --------------------------------------------------------------------------------------------------------- // Some little fixes: !Rafalsky (v5.0.8 - 5.0.9) // --------------------------------------------------------------------------------------------------------- // Required parameters: // unit = Unit to patrol area (1st argument) // markername = Name of marker that covers the active area. (2nd argument) // // Patrol squad samples: (put in the leader's init field) // nul=[this,"area0"] execVM "scripts\upsmon.sqf"; // // Defensive squad samples: // nul=[this,"area0","nomove"] execVM "scripts\upsmon.sqf"; // // Reinforcement // nul=[this,"area0","reinforcement:",1] execVM "scripts\UPSMON.sqf"; // (in trigger call: KRON_UPS_reinforcement1 = true; // (call pos marker mkr1): KRON_UPS_reinforcement1_pos = getMarkerPos "mkr1"; // // // Optional parameters: _ // random = Place unit at random start position. // randomdn = Only use random positions on ground level. // randomup = Only use random positions at top building positions. // min:n/max:n = Create a random number (between min and max) of 'clones'. // init:string = Custom init string for created clones. // nomove = Unit will stay or hide in the near buildings until enemy is spotted. // nofollow = Unit will only follow an enemy within the marker area.(When fight sometimes can go outside) // onroad = Unit will get target destination only on the roads !R // nosmoke = Units will not use smoke when s/o wounded or die. !R // delete:n = Delete dead units after 'n' seconds. // nowait = Do not wait at patrol end points. // noslow = Keep default behaviour of unit (don't change to "safe" and "limited"). // noai = Don't use enhanced AI for evasive and flanking maneuvers. // showmarker = Display the area marker. // trigger = Display a message when no more units are left in sector. // empty:n = Consider area empty, even if 'n' units are left. // track = Display a position and destination marker for each unit. // reinforcement = Makes squad as reinforcement, when alarm KRON_UPS_reinforcement==true this squad will go where enemy were. // reinforcement:x = Makes squad as reinforcement id, when alarm KRON_UPS_reinforcementx==true this squad will go where enemy were. // fortify = makes leader order to take positions on nearly buildings at distance 200 meters, squad fortified moves less than "nomove" // aware,combat,stealth,careless defines default behaviour of squad // nowp = No waypoints will be created for this squad UNTIL ENEMY DETECTED, this squad will comunicate enemies but will not be moved by UPSMON until enemy detected, after that upsmon takes control of squad // nowp2 = No waypoints will be created for this squad UNTIL ENEMY DETECTED and damaged, this squad will comunicate enemies but will not be moved by UPSMON until enemy detected and damaged, after that upsmon takes control of squad // nowp3 = No waypoints will be created for this squad in any way, this squad will comunicate enemies but will not be moved by UPSMON. // ambush = Ambush squad will not move until in combat, will lay mines if enabled and wait for incoming enemies stealth and ambush when near or discovered. // ambush2 = Ambush squad will not move until in combat, will NOT LAY MINES and wait for incoming enemies stealth and ambush when near or discovered. // ambush:n = Creates an anbush and wait maximun the especified time n in seconds. you can put 0 seconds for putting mines and go away if combined with "move" for example // ambush2:n = Same as ambush:n but without laying mines. // respawn = allow squad to respawn when all members are dead and no targets near // respawn:x = allows to define the number of times squad may respawn. // spawned = use only with squads created in runtime, this feature will add squad to UPSMON correctly. // aware,combat,stealth,careless defines default behaviour of squad // numbers of Civilians killed by players could be read from array 'KILLED_CIV_COUNTER' -> [Total,by West,by East,by Res] // ----------------------------------------------------------------------------- // !R-x changes by !R (Rafalsky) // --------------------------------------------------------------------------------------------------------- if (!isServer) exitWith {}; // ----------------------------------------------------------------------------- if (isNil("KRON_UPS_INIT")) then { KRON_UPS_INIT=0; }; waitUntil {KRON_UPS_INIT==1}; // convert argument list to uppercase _UCthis = []; for [{_i=0},{_i0) then {player sidechat format["%1: New instance %2 %3 %4",_grpidx,_npc getVariable ("UPSMON_grpid")]}; // == get the name of area marker ============================================== _areamarker = _this select 1; if (isNil ("_areamarker")) exitWith { hint "UPS: Area marker not defined.\n(Typo, or name not enclosed in quotation marks?)"; }; // remember center position of area marker _centerpos = getMarkerPos _areamarker; _centerX = abs(_centerpos select 0); _centerY = abs(_centerpos select 1); _centerpos = [_centerX,_centerY]; // show/hide area marker _showmarker = if ("SHOWMARKER" in _UCthis) then {"SHOWMARKER"} else {"HIDEMARKER"}; if (_showmarker=="HIDEMARKER") then { //_areamarker setMarkerCondition "false"; // VBS2 _areamarker setMarkerPos [-abs(_centerX),-abs(_centerY)]; }; // is anybody alive in the group? _exit = true; if (typename _npc=="OBJECT") then { if (!isnull group _npc) then { _npc = [_npc,units (group _npc)] call MON_getleader; }else{ _vehicles = [_npc,2] call MON_nearestSoldiers; if (count _vehicles>0) then { _npc = [_vehicles select 0,units (_vehicles select 0)] call MON_getleader; }; }; } else { if (count _obj>0) then { _npc = [_obj,count _obj] call MON_getleader; }; }; // set the leader in the vehilce if (!(_npc iskindof "Man")) then { if (!isnull(commander _npc) ) then { _npc = commander _npc; }else{ if (!isnull(driver _npc) ) then { _npc = driver _npc; }else{ _npc = gunner _npc; }; }; group _npc selectLeader _npc; }; // =============================================== if (alive _npc) then {_exit = false;}; if (KRON_UPS_Debug>0 && _exit) then {player sidechat format["%1 There is no alive members %1 %2 %3",_grpidx,typename _npc,typeof _npc, count units _npc]}; // exit if something went wrong during initialization (or if unit is on roof) if (_exit) exitWith { if (KRON_UPS_DEBUG>0) then {hint "Initialization aborted"}; }; // remember the original group members, so we can later find a new leader, in case he dies _members = units _npc; KRON_UPS_Total = KRON_UPS_Total + (count _members); //Fills member soldier types _vehicles = []; { if (vehicle _x != _x ) then { _vehicles = _vehicles - [vehicle _x]; _vehicles = _vehicles + [vehicle _x]; }; _membertypes = _membertypes + [typeof _x]; } foreach _members; //Fills member vehicle types { _vehicletypes = _vehicletypes + [typeof _x]; } foreach _vehicles; // what type of "vehicle" is _npc ? _isman = "Man" countType [ vehicle _npc]>0; _iscar = "LandVehicle" countType [vehicle _npc]>0; _isboat = "Ship" countType [vehicle _npc]>0; _isplane = "Air" countType [vehicle _npc]>0; // we just have to brute-force it for now, and declare *everyone* an enemy who isn't a civilian _isSoldier = _side != civilian; _friends=[]; _enemies=[]; _sharedenemy=0; if (_isSoldier) then { switch (_side) do { case west: { _sharedenemy=0; _friendside = [west]; _enemyside = [east]; }; case east: { _sharedenemy=1; _friendside = [east]; _enemyside = [west]; }; case resistance: { _sharedenemy=2; _enemyside = KRON_UPS_Res_enemy; if (!(east in _enemyside)) then { _friendside = [east]; }; if (!(west in _enemyside)) then { _friendside = [west]; }; }; }; }; if (_side in KRON_UPS_Res_enemy) then { _enemyside = _enemyside + [resistance]; }else { _friendside = _friendside + [resistance]; }; sleep .05; //Sets min units alive for surrender _surrender = call (compile format ["KRON_UPS_%1_SURRENDER",_side]); // Tanks friendlys are contabiliced { if ( side _x in _friendside && ( _x iskindof "Tank" || _x iskindof "Wheeled_APC" )) then { _friendlytanks = _friendlytanks + [_x]; }; }foreach vehicles; // global unit variable to externally influence script //call compile format ["KRON_UPS_%1=1",_npcname]; // X/Y range of target area _areasize = getMarkerSize _areamarker; _rangeX = _areasize select 0; _rangeY = _areasize select 1; _area = abs((_rangeX * _rangeY) ^ 0.5); // marker orientation (needed as negative value!) _areadir = (markerDir _areamarker) * -1; // store some trig calculations _cosdir=cos(_areadir); _sindir=sin(_areadir); // minimum distance of new target position _mindist=(_rangeX^2+_rangeY^2)/3; if (_rangeX==0) exitWith { hint format["UPS: Cannot patrol Sector: %1\nArea Marker doesn't exist",_areamarker]; }; // remember the original mode & speed _orgMode = behaviour _npc; _orgSpeed = speedmode _npc; // set first target to current position (so we'll generate a new one right away) _currPos = getpos _npc; _orgPos = _currPos; _orgDir = getDir _npc; _orgWatch=[_currPos,50,_orgDir] call KRON_relPos; _lastpos = _currPos; _avoidPos = [0,0]; _flankPos = [0,0]; _attackPos = [0,0]; _newattackPos = [0,0]; _fixedtargetpos = [0,0]; _frontPos = [0,0]; _dirf1 = 0;_dirf2=0;_flankPos2=[0,0]; _dist = 10000; _lastdist = 0; _lastmove1 = 0; _lastmove2 = 0; _maxmove=0; _moved=0; _damm=0; _dammchg=0; _lastdamm = 0; _timeontarget = 0; _fightmode = "walk"; _fm=0; _gothit = false; _pursue = false; _hitPos=[0,0,0]; _react = 0; _lastknown = 0; _opfknowval = 0; _sin0=1; _sin90=1; _cos90=0; _sin270=-1; _cos270=0; _targetX =0; _targetY=0; _relTX=0;_relTY=0; _relUX=0;_relUY=0; _supressed = false; _flankdist=0; _nBuilding=nil; _nBuildingt =nil; _speedmode="Limited"; _distnbuid = 0; _distnbuidt = 0; _objsflankPos1 = []; _cntobjs1 = 0; _objsflankPos2 = []; _cntobjs2 = 0; _targettext =""; _dir1 =0;_dir2=0;_dir3=0;_dd=0; _timeontarget=0; _reinforcement =""; _reinforcementsent = false; _target = objnull; _newtarget=objnull; _flankdir=0; //1 tendencia a flankpos1, 2 tendencia a flankpos2 _prov=0; _targets=[]; _planta=0; //Indice de plantas en edificios _newflankAngle = 0; _closeenough = KRON_UPS_closeenough; _gunner = objnull; _driver = objnull; _fortify = false; _buildingdist= 60;//Distance to search buildings near _Behaviour = "SAFE"; _grp = grpnull; _grp = group _npc; _template = 0; _nowpType = 1; _ambushtype = 1; _rstuckControl = 0; // set target tolerance high for choppers & planes if (_isplane) then {_closeenough = KRON_UPS_closeenough * 2}; // ***************************************** optional arguments ***************************************** // wait at patrol end points _pause = if ("NOWAIT" in _UCthis) then {"NOWAIT"} else {"WAIT"}; // don't move until an enemy is spotted _nomove = if ("NOMOVE" in _UCthis) then {"NOMOVE"} else {"MOVE"}; //fortify group in near places _fortify= if ("FORTIFY" in _UCthis) then {true} else {false}; _fortifyorig = _fortify; if (_fortify) then { _nomove="NOMOVE"; _minreact = KRON_UPS_minreact * 3; _buildingdist = _buildingdist * 2; _makenewtarget = true; _wait = 3000; }; // create _targerpoint on the roads only (by this group) _onroad = if ("ONROAD" in _UCthis) then {true} else {false}; // do not use smoke (by this group) _nosmoke = if ("NOSMOKE" in _UCthis) then {true} else {false}; // don't make waypoints _nowp = if ("NOWP" in _UCthis) then {true} else {false}; _nowp = if ("NOWP2" in _UCthis) then {true} else {_nowp}; _nowp = if ("NOWP3" in _UCthis) then {true} else {_nowp}; _nowpType = if ("NOWP2" in _UCthis) then {2} else {_nowpType}; _nowpType = if ("NOWP3" in _UCthis) then {3} else {_nowpType}; //Ambush squad will no move until in combat or so close enemy _ambush= if ("AMBUSH" in _UCthis) then {true} else {false}; _ambush= if ("AMBUSH:" in _UCthis) then {true} else {_ambush}; _ambush= if ("AMBUSH2" in _UCthis) then {true} else {_ambush}; _ambushwait = ["AMBUSH:",_ambushwait,_UCthis] call KRON_UPSgetArg; _ambushwait = ["AMBUSH2:",_ambushwait,_UCthis] call KRON_UPSgetArg; _ambushType = if ("AMBUSH2" in _UCthis) then {2} else {_ambushType}; _ambushType = if ("AMBUSH2:" in _UCthis) then {2} else {_ambushType}; // respawn _respawn = if ("RESPAWN" in _UCthis) then {true} else {false}; _respawn = if ("RESPAWN:" in _UCthis) then {true} else {_respawn}; _respawnmax = ["RESPAWN:",_respawnmax,_UCthis] call KRON_UPSgetArg; if (!_respawn) then {_respawnmax = 0}; // any init strings? _initstr = ["INIT:","",_UCthis] call KRON_UPSgetArg; // don't follow outside of marker area _nofollow = if ("NOFOLLOW" in _UCthis) then {"NOFOLLOW"} else {"FOLLOW"}; // share enemy info _shareinfo = if ("NOSHARE" in _UCthis) then {"NOSHARE"} else {"SHARE"}; // "area cleared" trigger activator _areatrigger = if ("TRIGGER" in _UCthis) then {"TRIGGER"} else {if ("NOTRIGGER" in _UCthis) then {"NOTRIGGER"} else {"SILENTTRIGGER"}}; // suppress fight behaviour if ("NOAI" in _UCthis) then {_isSoldier=false}; // adjust cycle delay _cycle = ["CYCLE:",KRON_UPS_Cycle,_UCthis] call KRON_UPSgetArg; _currcycle=_cycle; //spawned for squads created in runtime _spawned= if ("SPAWNED" in _UCthis) then {true} else {false}; if (_spawned) then { if (KRON_UPS_Debug>0) then {player sidechat format["%1: squad has been spawned, respawns %2",_grpidx,_respawnmax]}; switch (side _npc) do { case west: { KRON_AllWest=KRON_AllWest + units _npc; }; case east: { KRON_AllEast=KRON_AllEast + units _npc; }; case resistance: { KRON_AllRes=KRON_AllRes + units _npc; if (east in KRON_UPS_Res_enemy ) then { KRON_UPS_East_enemies = KRON_UPS_East_enemies+units _npc; } else { KRON_UPS_East_friends = KRON_UPS_East_friends+units _npc; }; if (west in KRON_UPS_Res_enemy ) then { KRON_UPS_West_enemies = KRON_UPS_West_enemies+units _npc; } else { KRON_UPS_West_friends = KRON_UPS_West_friends+units _npc; }; }; }; call (compile format ["KRON_UPS_%1_Total = KRON_UPS_%1_Total + count (units _npc)",side _npc]); _vehicletypes = ["VEHTYPE:",_vehicletypes,_UCthis] call KRON_UPSgetArg; //!R }; // set drop units at random positions _initpos = "ORIGINAL"; if ("RANDOM" in _UCthis) then {_initpos = "RANDOM"}; if ("RANDOMUP" in _UCthis) then {_initpos = "RANDOMUP"}; if ("RANDOMDN" in _UCthis) then {_initpos = "RANDOMDN"}; // don't position groups or vehicles on rooftops if ((_initpos!="ORIGINAL") && ((!_isman) || (count _members)>1)) then {_initpos="RANDOMDN"}; // set behaviour modes (or not) _orgMode = "SAFE"; if ("CARELESS" in _UCthis) then {_orgMode = "CARELESS"}; if ("AWARE" in _UCthis) then {_orgMode = "AWARE"}; if ("COMBAT" in _UCthis) then {_orgMode = "COMBAT"}; if ("STEALTH" in _UCthis) then {_orgMode = "STEALTH"}; // set original beahviour if (!_isSoldier) then { _Behaviour = "CARELESS"; } else { _Behaviour = _orgMode; }; _npc setbehaviour _Behaviour; // set initial speed _noslow = if ("NOSLOW" in _UCthis) then {"NOSLOW"} else {"SLOW"}; if (_noslow!="NOSLOW") then { _orgSpeed = "limited"; } else { _orgSpeed = "FULL"; }; _speedmode = _orgSpeed; _npc setspeedmode _speedmode; // set If enemy detected reinforcements will be sent REIN1 _reinforcement= if ("REINFORCEMENT" in _UCthis) then {"REINFORCEMENT"} else {"NOREINFORCEMENT"}; //rein_yes _rfid = ["REINFORCEMENT:",0,_UCthis] call KRON_UPSgetArg; // rein_# if (_rfid>0) then { _reinforcement="REINFORCEMENT"; //if (KRON_UPS_Debug>0) then {hintsilent format["%1: reinforcement group %2",_grpidx,_rfid,_rfidcalled,_reinforcement]}; }; //set Is a template for spawn module? _template = ["TEMPLATE:",_template,_UCthis] call KRON_UPSgetArg; //Fills template array for spawn if (_template > 0 && !_spawned) then { KRON_UPS_TEMPLATES = KRON_UPS_TEMPLATES + ( [[_template]+[_side]+[_membertypes]+[_vehicletypes]] ); //if (KRON_UPS_Debug>0) then {diag_log format["%1 Adding TEMPLATE %2 _spawned %3",_grpidx,_template,_spawned]}; //if (KRON_UPS_Debug>0) then {player globalchat format["KRON_UPS_TEMPLATES %1",count KRON_UPS_TEMPLATES]}; }; // make start position random if (_initpos!="ORIGINAL") then { // find a random position (try a max of 20 positions) _try=0; _bld=0; _bldpos=0; while {_try<20} do { _currPos=[_centerX,_centerY,_rangeX,_rangeY,_cosdir,_sindir,_areadir] call KRON_randomPos; _posinfo=[_currPos] call KRON_PosInfo3; // _posinfo: [0,0]=no house near, [obj,-1]=house near, but no roof positions, [obj,pos]=house near, with roof pos _bld=_posinfo select 0; _bldpos=_posinfo select 1; if (_isplane || _isboat || !(surfaceiswater _currPos)) then { if (((_initpos=="RANDOM") || (_initpos=="RANDOMUP")) && (_bldpos>0)) then {_try=99}; if (((_initpos=="RANDOM") || (_initpos=="RANDOMDN")) && (_bldpos==0)) then {_try=99}; }; _try=_try+1; sleep .01; }; if (_bldpos==0) then { if (_isman) then { {_x setpos _currPos} foreach units _npc; } else { _npc setpos _currPos; }; } else { // put the unit on top of a building _npc setPos (_bld buildingPos _bldpos); _currPos = getPos _npc; _nowp=true; // don't move if on roof }; }; // track unit ====================================================================================== _track = if (("TRACK" in _UCthis) || (KRON_UPS_Debug>0)) then {"TRACK"} else {"NOTRACK"}; _trackername = ""; _destname = ""; if (_track=="TRACK") then { _track = "TRACK"; _trackername=format["trk_%1",_grpidx]; _markerobj = createMarker[_trackername,[0,0]]; _markerobj setMarkerShape "ICON"; _markertype = if (isClass(configFile >> "cfgMarkers" >> "WTF_Dot")) then {"WTF_DOT"} else {"DOT"}; _trackername setMarkerType _markertype; _markercolor = switch (side _npc) do { case west: {"ColorGreen"}; case east: {"ColorRed"}; case resistance: {"ColorBlue"}; default {"ColorBlack"}; }; _trackername setMarkerColor _markercolor; _trackername setMarkerText format["%1",_grpidx]; _trackername setmarkerpos _currPos; _destname=format["dest_%1",_grpidx]; _markerobj = createMarker[_destname,[0,0]]; _markerobj setMarkerShape "ICON"; _markertype = if (isClass(configFile >> "cfgMarkers" >> "WTF_Flag")) then {"WTF_FLAG"} else {"FLAG"}; _destname setMarkerType _markertype; _destname setMarkerColor _markercolor; _destname setMarkerText format["%1",_grpidx]; _destname setMarkerSize [.5,.5]; }; // delete dead units ============================================================================== _deletedead = ["DELETE:",0,_UCthis] call KRON_UPSgetArg; if (_deletedead>0) then { { _x addEventHandler['killed',format["[_this select 0,%1] spawn KRON_deleteDead",_deletedead]]; sleep 0.01; }forEach _members; }; // how many group clones? ========================================================================= // TBD: add to global side arrays? _mincopies = ["MIN:",0,_UCthis] call KRON_UPSgetArg; _maxcopies = ["MAX:",0,_UCthis] call KRON_UPSgetArg; if (_mincopies>_maxcopies) then {_maxcopies=_mincopies}; if (_maxcopies>140) exitWith {hint "Cannot create more than 140 groups!"}; if (_maxcopies>0) then { _copies=_mincopies+random (_maxcopies-_mincopies); // create the clones for "_grpcnt" from 1 to _copies do { // copy groups if (isNil ("KRON_grpindex")) then {KRON_grpindex = 0}; KRON_grpindex = KRON_grpindex+1; // copy group leader _unittype = typeof _npc; // make the clones civilians // use random Civilian models for single unit groups if ((_unittype=="Civilian") && (count _members==1)) then {_rnd=1+round(random 20); if (_rnd>1) then {_unittype=format["Civilian%1",_rnd]}}; _grp=createGroup side _npc; _lead = _grp createUnit [_unittype, getpos _npc, [], 0, "form"]; _lead setVehicleVarName format["l%1",KRON_grpindex]; call compile format["l%1=_lead",KRON_grpindex]; _lead setBehaviour _orgMode; _lead setSpeedmode _orgSpeed; _lead setSkill skill _npc; _lead setVehicleInit _initstr; [_lead] join _grp; _grp selectLeader _lead; // copy team members (skip the leader) _i=0; { _i=_i+1; if (_i>1) then { _newunit = _grp createUnit [typeof _x, getpos _x, [],0,"form"]; _newunit setBehaviour _orgMode; _newunit setSpeedMode _orgSpeed; _newunit setSkill skill _x; _newunit setVehicleInit _initstr; [_newunit] join _grp; }; } foreach _members; _nul=[_lead,_areamarker,_pause,_noslow,_nomove,_nofollow,_initpos,_track,_showmarker,_shareinfo,"DELETE:",_dead] execVM "Server\Module\UPSMON\upsmon.sqf"; //sleep .05; }; processInitCommands; sleep .05; }; // units that can be left for area to be "cleared" ============================================================================================= _zoneempty = ["EMPTY:",0,_UCthis] call KRON_UPSgetArg; // create area trigger ========================================================================================================================= if (_areatrigger!="NOTRIGGER") then { _trgside = switch (side _npc) do { case west: {"WEST"}; case east: {"EAST"}; case resistance: {"GUER"}; case civilian: {"CIV"};}; //_trgside = switch (side _npc) do { case west: {"EAST"}; case east: {"WEST"}; case resistance: {"ANY"}; case civilian: {"ANY"};}; _trgname="KRON_Trig_"+_trgside+"_"+_areamarker; _flgname="KRON_Cleared_"+_areamarker; // has the trigger been created already? KRON_TRGFlag=-1; call compile format["%1=false",_flgname]; call compile format["KRON_TRGFlag=%1",_trgname]; if (isNil ("KRON_TRGFlag")) then { // trigger doesn't exist yet, so create one (make it a bit bigger than the marker, to catch path finding 'excursions' and flanking moves) call compile format["%1=createTrigger['EmptyDetector',_centerpos]",_trgname]; call compile format["%1 setTriggerArea[_rangeX*1.5,_rangeY*1.5,markerDir _areamarker,true]",_trgname]; call compile format["%1 setTriggerActivation[_trgside,'PRESENT',true]",_trgname]; call compile format["%1 setEffectCondition 'true'",_trgname]; call compile format["%1 setTriggerTimeout [5,7,10,true]",_trgname]; if (_areatrigger!="SILENTTRIGGER") then { call compile format["%1 setTriggerStatements['count thislist<=%6', 'titletext [''SECTOR <%2> LIMPIO'',''PLAIN''];''%2'' setmarkerpos [-%4,-%5];%3=true;', 'titletext [''SECTOR <%2> HA SIDO REOCUPADO'',''PLAIN''];''%2'' setmarkerpos [%4,%5];%3=false;']", _trgname,_areamarker,_flgname,_centerX,_centerY,_zoneempty]; } else { call compile format["%1 setTriggerStatements['count thislist<=%3', '%2=true;', '%2=false;']", _trgname,_flgname,_zoneempty]; }; }; sleep .05; }; //If a soldier has a useful building takes about ====================================================================================================================== if ( _nomove=="NOMOVE" ) then { sleep 10; _unitsIn = [_grpid,_npc,150] call MON_GetIn_NearestStatic; if ( count _unitsIn > 0 ) then { sleep 10}; [_npc, _buildingdist,false,_wait,true] spawn MON_moveNearestBuildings; }; // init done _makenewtarget=true; _newpos=false; _targetPos = [0,0,0];//_currPos; _targettext ="_currPos"; _swimming = false; _waiting = if (_nomove=="NOMOVE") then {9999} else {0}; _sharedist = if (_nomove=="NOMOVE") then {KRON_UPS_sharedist} else {KRON_UPS_sharedist*1.5}; //Gets position of waypoint if no targetpos if (format ["%1", _targetPos] == "[0,0,0]") then { _index = (count waypoints _grp) - 1; _wp = [_grp,_index]; _targetPos = waypointPosition _wp; if (([_currpos,_targetPos] call KRON_distancePosSqr)<= 20) then {_targetPos = [0,0,0];}; }; // *********************************************************************************************************** // ************************************************ MAIN LOOP ************************************************ // *********************************************************************************************************** _loop=true; scopeName "main"; while {_loop} do { //if (KRON_UPS_Debug>0) then {player sidechat format["%1: _cycle=%2 _currcycle=%3 _react=%4 _waiting=%5",_grpidx,_cycle,_currcycle,_react,_waiting]}; _timeontarget=_timeontarget+_currcycle; _react=_react+_currcycle; _waiting = _waiting - _currcycle; _lastreact = _lastreact+_currcycle; _newpos = false; _sokilled = false; _sowounded = false; // CHECK IF did anybody in the group got hit or die? if ((R_GOTHIT_ARRAY select _grpId) != 0) then { _gothit = true; if ((R_GOTHIT_ARRAY select _grpId) == 1) then { _sowounded = true; } else { _sokilled = true; }; sleep 0.01; R_GOTHIT_ARRAY set [_grpId, 0]; }; // nobody left alive, exit routine if (count _members==0) then { _exit=true; } else { // did the leader die? _npc = [_npc,_members] call MON_getleader; if (!alive _npc || !canmove _npc || isplayer _npc ) exitwith {_exit=true;}; }; //exits from loop if (_exit) exitwith {}; //Checks if surrender is enabled if ( _surrender > 0 ) then { _surrended = call (compile format ["KRON_UPS_%1_SURRENDED",_side]); }; //If surrended exits from script if (_surrended) exitwith { { [_x] spawn MON_surrender; }foreach _members; if (KRON_UPS_Debug>0) then {_npc globalchat format["%1: %2 SURRENDED",_grpidx,_side]}; }; //Assign the current leader of the group in the array of group leaders KRON_NPCs set [_grpid,_npc]; // current position _currPos = getpos _npc; _currX = _currPos select 0; _currY = _currPos select 1; if (_track=="TRACK" || KRON_UPS_Debug>0) then { _trackername setmarkerpos _currPos; }; // if the AI is a civilian we don't have to bother checking for enemy encounters if ( _isSoldier && !_exit) then { _pursue=false; //_Behaviour = Behaviour _npc; //Variables to see if the leader is in a vehicle _incar = "LandVehicle" countType [vehicle (_npc)]>0; _inheli = "Air" countType [vehicle (_npc)]>0; _inboat = "Ship" countType [vehicle (_npc)]>0; //If the group is strengthened and the enemies have been detected are sent to target if (_rfid > 0 ) then { _rfidcalled = call (compile format ["KRON_UPS_reinforcement%1",_rfid]); // will be TRUE when variable in triger will be true. if (isnil "_rfidcalled") then {_rfidcalled=false}; _fixedtargetPos = call (compile format ["KRON_UPS_reinforcement%1_pos",_rfid]); // will be position os setfix target of sending reinforcement if (isnil "_fixedtargetPos") then { _fixedtargetPos=[0,0]; }else{ _fixedtargetPos = [abs(_fixedtargetPos select 0),abs(_fixedtargetPos select 1)]; _target = objnull; }; }; sleep .01; //Reinforcement control if (_reinforcement=="REINFORCEMENT") then { // (global call OR id call) AND !send yet if ( (KRON_UPS_reinforcement || _rfidcalled) && (!_reinforcementsent)) then { _reinforcementsent=true; _fortify = false; _minreact = KRON_UPS_minreact; _buildingdist = 60; _react = _react + 100; _waiting = -1; if (KRON_UPS_Debug>0) then {player sidechat format["%1 called for reinforcement %2",_grpidx,_fixedtargetPos]}; }else{ // !(global or id call) AND send if ( !(KRON_UPS_reinforcement || _rfidcalled) && (_reinforcementsent)) then { _fixedtargetPos = [0,0]; _attackPos = [0,0]; _fortify = _fortifyorig; _reinforcementsent=false; if (_rfid > 0 ) then { call (compile format ["KRON_UPS_reinforcement%1_pos = [0,0]",_rfid]); call (compile format ["KRON_UPS_reinforcement%1 = false",_rfid]); }; if (KRON_UPS_Debug>0) then {player sidechat format["%1 reinforcement canceled",_grpidx]}; }; }; }; //Gets targets from radio _targets = call (compile format ["KRON_targets%1",_sharedenemy]); // if (KRON_UPS_Debug>0) then {player globalchat format["targets from global upsmon: %1",_targets]}; //!R //Reveal targets found by members to leader { //_NearestEnemy = assignedTarget _x; //if (KRON_UPS_Debug>0) then {player globalchat format["Nearest Enemy %1, know about %2",_NearestEnemy,_x knowsabout _NearestEnemy]}; //!R _NearestEnemy = _x findnearestenemy _x; if (_x knowsabout _NearestEnemy > R_knowsAboutEnemy && (_npc knowsabout _NearestEnemy <= R_knowsAboutEnemy || count _targets <= 0 )) then { if (_npc knowsabout _NearestEnemy <= R_knowsAboutEnemy ) then { _npc reveal _NearestEnemy; if (KRON_UPS_Debug>0) then {player globalchat format["%1: %2 reveals target %3 to leader",_grpidx,typeof _x, typeof _NearestEnemy]}; }; //If no targets adds this if (count _targets <= 0) then { //_target = _NearestEnemy; _targets = _targets + [_NearestEnemy]; _NearestEnemy setvariable ["UPSMON_lastknownpos", position _NearestEnemy, false]; //if (KRON_UPS_Debug>0) then {player globalchat format["%1: %3 added to targets",_grpidx,typeof _x, typeof _target]}; }; }; } foreach units _npc; //if no target but _npc knows enemy then this is _target if (isNull (_target)) then { { if ((_npc knowsabout _x > R_knowsAboutEnemy) && (alive _x) && (canmove _x)) then { _target =_x; if (!isNull (_target)) exitWith{}; }; } foreach _targets; }; //Resets distance to target _dist = 10000; //Gets current known position of target and distance if ( !isNull (_target) && alive _target ) then { _newattackPos = _target getvariable ("UPSMON_lastknownpos"); if ( !isnil "_newattackPos" ) then { _attackPos=_newattackPos; //Gets distance to target known pos _dist = ([_currpos,_attackPos] call KRON_distancePosSqr); }; }; //Initialization for geting new targets //If the current target is dead or no prior knowledge is cleaned if (isNull (_target) || !alive _target || !canmove _target ) then { _lastknown = 0; _opfknowval = 0; _target = objnull; }; _newtarget = _target; if ((_shareinfo=="SHARE")) then { //Requests for radio the enemy's position, if it is within the range of acts if ((KRON_UPS_comradio == 2)) then { _targetsnear = false; //I we have a close target alive do not search another if (!alive _target || !canmove _target || _dist > _closeenough) then { { if ( !isnull _x && canmove _x && alive _x ) then { _newattackPos = _x getvariable ("UPSMON_lastknownpos"); if ( !isnil "_newattackPos" ) then { _dist3 = ([_currpos,_newattackPos] call KRON_distancePosSqr); //Sets if near targets to begin warning IF ( _dist3 <= (_closeenough + KRON_UPS_safedist)) then { _targetsnear = true }; //Sets new target if ( ( isnull (_newtarget) || captive _newtarget|| !alive _newtarget|| !canmove _newtarget || _dist3 < _dist ) && ( _dist3 <= _sharedist || _reinforcementsent ) && ( !(_x iskindof "Air") || (_x iskindof "Air" && _isplane )) && ( !(_x iskindof "Ship") || (_x iskindof "Ship" && _isboat )) && ( _x emptyPositions "Gunner" == 0 && _x emptyPositions "Driver" == 0 || (!isnull (gunner _x) && canmove (gunner _x)) || (!isnull (driver _x) && canmove (driver _x))) ) then { _newtarget = _x; _opfknowval = _npc knowsabout _x; _dist = _dist3; if (_dist < _closeenough) exitWith {}; }; }; }; } foreach _targets; sleep 0.5; }; }; //If you change the target changed direction flanking initialize if ( !isNull (_newtarget) && alive _newtarget && canmove _newtarget && (_newtarget != _target || isNull (_target)) ) then { _timeontarget = 0; _targetdead = false; _flankdir= if (random 100 <= 10) then {0} else {_flankdir}; _target = _newtarget; }; }; // use smoke when hit or s/o killed if !_nosmoke then { { //when hit if (_sowounded && random 100 < R_USE_SMOKE_wounded) then { nul = [_x,_target] spawn MON_throw_grenade; // if (KRON_UPS_Debug>0) then {player sidechat format["%1: We got wounded smoking!",_grpidx]}; }; //when die if (_sokilled && random 100 < R_USE_SMOKE_killed) then { nul = [_x,_target] spawn MON_throw_grenade; // if (KRON_UPS_Debug>0) then {player sidechat format["%1: We got killed one, smoking!",_grpidx]}; }; sleep 0.1; } foreach _members; }; //Gets current known position of target and distance if ( !isNull (_target) && alive _target ) then { //Enemy detected if (_fightmode != "fight" ) then { _fightmode = "fight"; _npc setCombatMode "YELLOW"; // !R _react = KRON_UPS_react; if (KRON_UPS_Debug>0) then {player sidechat format["%1: Enemy detected %2",_grpidx, typeof _target]}; if (_nowpType == 1) then { nul = [_npc] call R_FN_deleteObsoleteWaypoints; _nowp = false; }; }; _newattackPos = _target getvariable ("UPSMON_lastknownpos"); if ( !isnil "_newattackPos" ) then { _attackPos=_newattackPos; //Gets distance to target known pos _dist = ([_currpos,_attackPos] call KRON_distancePosSqr); //Looks at target known pos _members lookat _attackPos; }; }; //If the enemy has moved away from the radio coverage is not a reinforcement sent we will have lost track if ( _fightmode != "walk" && !isnull(_target) && _dist < 15 && _npc knowsabout _target < R_knowsAboutEnemy ) then { //If squad is near last position and no target clear position of target if (KRON_UPS_Debug>0) then {player sidechat format["%1: Target lost",_grpidx]}; _fightmode="walk"; _speedmode = _orgSpeed; _target = objnull; _Behaviour = _orgMode; _waiting = -1; _unitpos = "AUTO"; _pursue=false; _targetdead = true; _makenewtarget = true; //Go back to the original position }; //If knowledge of the target increases accelerate the reaction if (_opfknowval>_lastknown ) then { _react = _react + 20; }; // if spotted an enemy or got shot, so start pursuit, if in combat and exceed time to react or movecompleted if (_fightmode != "walk" && ((_react >= KRON_UPS_react && _lastreact >=_minreact) || moveToCompleted _npc )) then { _pursue=true; }; //Ambush ========================================================================================================== if (_ambush && !_ambushed) then { _ambushed = true; _nowp = true; _currcycle = 2; _grp setFormation "LINE"; _npc setBehaviour "STEALTH"; _npc setSpeedMode "FULL"; sleep 10; { [_x,"DOWN"] spawn MON_setUnitPos; _x stop true; }foreach units _npc; //Puts a mine if near road if ( KRON_UPS_useMines && _ambushType == 1 ) then { if (KRON_UPS_Debug>0) then {player sidechat format["%1: Puting mine for ambush",_grpidx]}; _npc setBehaviour "careless"; _dir1 = getDir _npc; _mineposition = [position _npc,_dir1, 25] call MON_GetPos2D; _roads = _mineposition nearroads KRON_UPS_ambushdist; if (count _roads > 0) then { _mineposition = position (_roads select 0); if (_Mines > 0 && [_npc,_mineposition] call MON_CreateMine) then {_Mines = _Mines -1;}; if (count _roads > 3) then { _mineposition = position (_roads select 3); if (_Mines > 0 && [_npc,_mineposition] call MON_CreateMine) then {_Mines = _Mines -1;}; }; } else { _mineposition = [position _npc,(_dir1-30)mod 360, KRON_UPS_ambushdist + random 15] call MON_GetPos2D; if (_Mines > 0 && [_npc,_mineposition] call MON_CreateMine) then {_Mines = _Mines -1;}; _mineposition = [position _npc,(_dir1+30)mod 360, KRON_UPS_ambushdist + random 15] call MON_GetPos2D; if (_Mines > 0 && [_npc,_mineposition] call MON_CreateMine) then {_Mines = _Mines -1;}; }; _mineposition = [position _npc,_dir1, KRON_UPS_ambushdist + random 20] call MON_GetPos2D; if ([_npc,_mineposition] call MON_CreateMine) then {_Mines = _Mines -1;}; _mineposition = [position _npc,_dir1-15, KRON_UPS_ambushdist + random 10] call MON_GetPos2D; if ([_npc,_mineposition] call MON_CreateMine) then {_Mines = _Mines -1;}; _npc setBehaviour "carelesscareless"; sleep 30; { if (!stopped _x) then { _x domove position _npc; waituntil {moveToCompleted _x || moveToFailed _x || !alive _x || !canmove _x || _x distance _npc <= 5}; }; }foreach units _npc; }; // did the leader die? _npc = [_npc,_members] call MON_getleader; if (!alive _npc || !canmove _npc || isplayer _npc ) exitwith {_exit=true;}; _npc setBehaviour "STEALTH"; _grp setFormation "LINE"; sleep 10; { [_x,"DOWN"] spawn MON_setUnitPos; _x stop true; _x setUnitPos "DOWN"; }foreach units _npc; }; // end of ambush mine //Ambus enemy is nearly aproach //_ambushdist = 50; if (_ambush) then { _prov = ((_ambushdist*2 - (_npc distance _target))*3) - 40; //if (KRON_UPS_Debug>0) then {player sidechat format["%1:%6 _ambushdist=%5 last=%2 dist=%3 prov=%4",_grpidx,_lastdist,_npc distance _target,_prov,_ambushdist,typeof _target]}; if (_gothit || _reinforcementsent || time > _ambushwait || ( "Air" countType [_target]<=0 && ( _npc distance _target <= _ambushdist + random 10 || (!isNull (_target) && (( random 100 <= _prov && _npc distance _target > _lastdist) || _npc distance _target > _ambushdist*3 && _lastdist < _ambushdist*3 && _lastdist > 0)) )) ) then { if (KRON_UPS_Debug>0) then {player sidechat format["%1: FIREEEEEEEEE!!!",_grpidx]}; _nowp = false; _ambush = false; _ambushed = false; _currcycle = _cycle; { _x stop false; _x setUnitPos "Middle"; } foreach _members; //No engage yet _pursue = false; }; //Sets distance to target _lastdist = _npc distance _target; }; // end of ambush //if (KRON_UPS_Debug>0) then {player sidechat format["%1: _nowp=%2 in vehicle=%3 _inheli=%4 _npc=%5",_grpidx,_nowp,vehicle (_npc) ,_inheli,typeof _npc ]}; //If in vehicle take driver if not controlled by user if (alive _npc && !_nowp) then { if (!_isman || (vehicle (_npc) != _npc && !_inboat && !(vehicle (_npc) iskindof "StaticWeapon"))) then { //If new target is close enough getout vehicle (not heli) _unitsin = []; if (!_inheli) then { if (_fightmode == "walk") then { _GetOutDist = _area / 20; }else{ _GetOutDist = _closeenough * ((random .4) + 0.6); }; //If near target or stuck getout of vehicle and lock or gothit exits inmediately if (_gothit || _dist <= _closeenough * 1.5 || (_lastcurrpos select 0 == _currpos select 0 && _lastcurrpos select 1 == _currpos select 1 && moveToFailed (vehicle (_npc))) || moveTocompleted (vehicle (_npc))) then { _GetOutDist = 10000; }; //if (KRON_UPS_Debug>0) then {player sidechat format["%1: vehicle=%2 _npc=%3",_grpidx,vehicle (_npc) ,typeof _npc ]}; _unitsin = [_npc] call R_FN_allUnitsInCargo; // return units in cargo in all vehs used by the group private ["_handle1"]; _handle1 = [_npc,_targetpos,_GetOutDist] spawn R_SN_GetOutDist; // getout if as close as _GetOutDist to the target _timeout = time + 10; waitUntil {scriptDone _handle1 || time > _timeout}; } else { _GetOutDist = 0; }; // if there was getout of the cargo if (count _unitsin > 0) then { //if (KRON_UPS_Debug>0) then {player sidechat format["%1: Geting out of vehicle, dist=%2 atdist=%3 _area=%4",_grpidx,([_currpos,_targetpos] call KRON_distancePosSqr),_GetOutDist,_area]}; _timeout = time + 7; { waituntil {vehicle _x == _x || !canmove _x || !alive _x || time > _timeout || movetofailed _x }; } foreach _unitsin; // did the leader die? _npc = [_npc,_members] call MON_getleader; if (!alive _npc || !canmove _npc || isplayer _npc ) exitwith {_exit=true;}; if (_fightmode == "fight" || _gothit) then { _npc setBehaviour "COMBAT"; // AWARE _groupOne = group _npc; _groupOne setFormation "DIAMOND"; nul = [_npc,30] spawn MON_move; }; sleep 0.2; // select leader outside of vehicle { if (alive _x && canmove _x) exitwith {group _x selectLeader _x; _npc = _x}; } foreach _unitsin; if (_fightmode == "fight") then { _pursue = true; }else { _pursue = false; _makenewtarget=true; }; }; }; }; //If under attack or increasing knowledge speeds up the response and regain control of the AI if (_gothit ) then { _react = if (!_supressed) then {_react + 30}; if (_fightmode != "walk") then { if (_nowpType != 3) then { nul = [_npc] call R_FN_deleteObsoleteWaypoints; _nowp = false; }; }; }; //If there is no objective order is canceled persecution if ((isNull (_target) || !alive _target )) then { _pursue=false; if (_gothit && !_fortify && !_nowp) then { if ((_fightmode == "walk")) then { //It could be a sniper, better be alert and move in case _Behaviour = "COMBAT"; _speedmode = "FULL"; _unitpos = "AUTO"; _gothit = false; _makenewtarget = true; _waiting = -1; if (random 100 < 20) then { nul= [_npc,_target] spawn MON_throw_grenade; }; if (KRON_UPS_Debug>0) then {player sidechat format["%1: Have been damaged moving",_grpidx,_makenewtarget]}; } else { if ((_react >= KRON_UPS_react && _lastreact >=_minreact && count _targets <= 0) || _sowounded) then { //We shoot and we have no target, we move from position if (KRON_UPS_Debug>0) then {player sidechat format["%1: Under fire by unkown target, moving to newpos",_grpidx]}; //Covers the group with a smoke grenade if (!_supressed && random 100 < 80) then { nul= [_npc,_target] spawn MON_throw_grenade; }; _gothit = false; _makenewtarget = true; _waiting = -1; _pause="NOWAIT"; _speedmode = "FULL"; _unitpos = "middle"; _Behaviour = "AWARE"; } else { if (_lastreact >=_minreact && !_targetdead) then { _targetdead = true; _pursue = true; //We have run out of targets continue to search if (KRON_UPS_Debug>0) then {player sidechat format["%1: Target defeated, searching",_grpidx]}; }; }; }; }; }; //If no fixed target check if current target is available if (format ["%1",_fixedtargetPos] != "[0,0]") then { //If fixed target check if close enough or near enemy and gothit if (([_currpos,_fixedtargetpos] call KRON_distancePosSqr) <= _closeenough || (_dist <= _closeenough && _gothit)) then { _fixedtargetPos = [0,0]; } else { _pursue = false; _attackPos=_fixedtargetPos; if (_react >= KRON_UPS_react && _lastreact >=_minreact) then { _makenewtarget = true; _unitpos = "AUTO"; _speed = "FULL"; }; }; }; //If captive or surrended do not pursue if ( isnil "_attackPos") then {_pursue = false;}; if ( captive _target || format ["%1", _attackPos] == "[0,0]") then {_pursue = false;}; //If no waypoint do not move if (_nowp) then { _makenewtarget = false; _pursue = false; }; if (_inheli) then { _landing = _heli getVariable "UPSMON_landing"; if (isnil ("_landing")) then {_landing=false;}; if (_landing) then { _pursue = false; }; }; sleep 0.5; // ********************************************************************************************************************** // PURSUE: CHASE BEGINS THE LENS // ********************************************************************************************************************** if (_pursue) then { // if (KRON_UPS_Debug>0) then {player sidechat format["%1: is in pursure",_grpidx]}; _pursue = false; _newpos = true; _react = 0; _lastreact = 0; _timeontarget = 0; _makenewtarget = false; _fm = 1; //Cancel supress effect when reaction time _supressed = false; // did the leader die? _npc = [_npc,_members] call MON_getleader; if (!alive _npc || !canmove _npc || isplayer _npc ) exitwith {_exit=true;}; // get position of spotted unit in player group, and watch that spot _targetPos = _attackPos; _targetX = _targetPos select 0; _targetY = _targetPos select 1; _currPos = getpos _npc; // also go into "combat mode" _pause="NOWAIT"; _waiting=0; // angle from unit to target _dir1 = [_currPos,_targetPos] call KRON_getDirPos; // angle from target to unit (reverse direction) _dir2 = (_dir1+180) mod 360; //Establecemos una distancia de flanqueo _flankdist = ((random 0.5)+0.7)*KRON_UPS_safedist; //La distancia de flanqueo no puede ser superior a la distancia del objetivo o nos pordra pillar por la espalda _flankdist = if ((_flankdist*1.40) >= _dist) then {_dist*.65} else {_flankdist}; if (_inheli) then {_flankdist = _flankdist / 2;}; // avoidance position (right or left of unit) _avoidPos = [_currPos,_dir2, KRON_UPS_safedist] call MON_GetPos2D; //Calculamos posicin de avance frontal _frontPos = [_targetPos,_dir2, _flankdist] call MON_GetPos2D; //Adaptamos el ngulo de flanqueo a la distancia _newflankAngle = ((random(KRON_UPS_flankAngle)+1) * 2 * (_flankdist / KRON_UPS_safedist )) + (KRON_UPS_flankAngle/1.4) ; if (_newflankAngle > KRON_UPS_flankAngle) then {_newflankAngle = KRON_UPS_flankAngle}; //Calculamos posicin de flanqueo 1 45 _dirf1 = (_dir2+_newflankAngle) mod 360; _flankPos = [_targetPos,_dirf1, _flankdist] call MON_GetPos2D; //Calculamos posicin de flanqueo 2 -45 _dirf2 = (_dir2-_newflankAngle+360) mod 360; _flankPos2 = [_targetPos,_dirf2, _flankdist] call MON_GetPos2D; if (KRON_UPS_Debug>0) then { "flank1" setmarkerpos _flankPos; "flank2" setmarkerpos _flankPos2; "target" setmarkerpos _attackPos; }; //Decidir por el mejor punto de flanqueo //Contamos las posiciones de destino de otros grupos ms alejadas _fldest = 0; _fldest2 = 0; _fldestfront = 0; _i = 0; { if (_i != _grpid && format ["%1", _x] != "[0,0]") then { _dist1 = [_x,_flankPos] call KRON_distancePosSqr; _dist2 = [_x,_flankPos2] call KRON_distancePosSqr; _dist3 = [_x,_frontPos] call KRON_distancePosSqr; if (_dist1 <= _flankdist/1.5 || _dist2 <= _flankdist/1.5 || _dist3 <= _flankdist/1.5) then { if (_dist1 < _dist2 && _dist1 < _dist3) then {_fldest = _fldest + 1;}; if (_dist2 < _dist1 && _dist2 < _dist3) then {_fldest2 = _fldest2 + 1;}; if (_dist3 < _dist1 && _dist3 < _dist2) then {_fldestfront = _fldestfront + 1;}; }; }; _i = _i + 1; sleep 0.01; } foreach KRON_targetsPos; //We have the positions of other groups more distant _i = 0; { if (_i != _grpid && !isnull(_x)) then { _dist1 = [getpos(_x),_flankPos] call KRON_distancePosSqr; _dist2 = [getpos(_x),_flankPos2] call KRON_distancePosSqr; _dist3 = [getpos(_x),_frontPos] call KRON_distancePosSqr; if (_dist1 <= _flankdist/1.5 || _dist2 <= _flankdist/1.5 || _dist3 <= _flankdist/1.5) then { if (_dist1 < _dist2 && _dist1 < _dist3) then {_fldest = _fldest + 1;}; if (_dist2 < _dist1 && _dist2 < _dist3) then {_fldest2 = _fldest2 + 1;}; if (_dist3 < _dist1 && _dist3 < _dist2) then {_fldestfront = _fldestfront + 1;}; }; }; _i = _i + 1; sleep 0.01; } foreach KRON_NPCs; //La preferencia es la eleccin inicial de direccin switch (_flankdir) do { case 1: {_prov = 125}; case 2: {_prov = -25}; default {_prov = 50}; }; //Si es positivo significa que hay ms destinos existentes lejanos a la posicion de flanqueo1, tomamos primariamente este if (_fldest<_fldest2) then {_prov = _prov + 50;}; if (_fldest2<_fldest) then {_prov = _prov - 50;}; //Si la provablilidad es negativa indica que tomar el flank2 por lo tanto la provabilidad de coger 1 es 0 if (_prov<0) then {_prov = 0;}; //Evaluamos la direccin en base a la provablilidad calculada if ((random 100) <= _prov) then { _flankdir =1; _flankPos = _flankPos; _targettext = "_flankPos"; } else { _flankdir =2; _flankPos = _flankPos2; _targettext = "_flankPos2"; }; //Posicin de ataque por defecto el flanco _targetPos = _flankPos; _targettext = "_flankPos"; if ((surfaceIsWater _flankPos && !(_isplane || _isboat)) ) then { _targetPos = _attackPos;_targettext ="_attackPos"; _flankdir =0; } else { if (_fldestfront < _fldest && _fldestfront < _fldest2) then { _targetPos = _frontPos;_targettext ="_frontPos"; }; }; //Establish the type of waypoint //DESTROY has worse behavior with and sometimes do not move _wptype = "MOVE"; //Set speed and combat mode _rnd = random 100; if ( _dist <= _closeenough ) then { //If we are so close we prioritize discretion fire if ( _dist <= _closeenough/2 ) then { //Close combat modeo _speedmode = "LIMITED"; _wpformation = "LINE"; _unitpos = "Middle"; _react = _react + KRON_UPS_react / 2; _minreact = KRON_UPS_minreact / 2; if ((_nomove == "NOMOVE" && _rnd < 25) && !_reinforcementsent) then { //Defensive combat _Behaviour = "STEALTH"; _wptype = "HOLD"; } else { if (_rnd < 75) then { _Behaviour = "COMBAT"; } else { _Behaviour = "STEALTH"; }; _wptype = "MOVE"; } } else { //If the troop has the role of not moving tend to keep the position _speedmode = "NORMAL"; _wpformation = "VEE"; //or WEDGE _unitpos = "Middle"; _minreact = KRON_UPS_minreact / 1.5; if ((_nomove == "NOMOVE" && _rnd < 50) && !_reinforcementsent) then { //Combate defensivo _Behaviour = "COMBAT"; _wptype = "HOLD"; } else { if (_rnd < 75) then { _Behaviour = "AWARE"; } else { _Behaviour = "COMBAT"; }; _wptype = "MOVE"; }; }; } else { if (( _dist <= (_closeenough + KRON_UPS_safedist))) then { _speedmode = "FULL"; _wpformation = "WEDGE"; _unitpos = if (_rnd < 90) then {"Middle"}else{"AUTO"}; _minreact = KRON_UPS_minreact; if ((_nomove=="NOMOVE" && _rnd < 75) && !_reinforcementsent) then { //Combate defensivo _Behaviour = "COMBAT"; //AWARE _wptype = "HOLD"; } else { //Movimiento con precaucin (ms rpido) _Behaviour = "AWARE"; _wptype = "MOVE"; }; } else { //In May distance of radio patrol act.. if (( _dist < KRON_UPS_sharedist )) then { //Platoon from the target must move fast and to the point _Behaviour = "AWARE"; _speedmode = "FULL"; _unitpos = if (_rnd < 60) then {"Middle"}else{"AUTO"}; _minreact = KRON_UPS_minreact * 2; if ((_nomove=="NOMOVE" && _rnd < 95) && !_reinforcementsent) then { _wptype = "HOLD"; _wpformation = "WEDGE"; }else{ _wptype = "MOVE"; _wpformation = "WEDGE"; }; } else { //Platoon very far from the goal if not move nomove role _Behaviour = "SAFE"; _speedmode = "FULL"; _unitpos = "AUTO"; _minreact = KRON_UPS_minreact * 3; if (((_nomove=="NOMOVE") || (_nomove=="MOVE" && _rnd < 70)) && !_reinforcementsent) then { _wptype = "HOLD"; _wpformation = "WEDGE"; }else{ _wptype = "MOVE"; _wpformation = "FILE"; //COLUMN }; }; }; }; //Always keep the brackets fortified position if ( _fortify && (random 100)<99) then {_wptype = "HOLD"}; // did the leader die? _npc = [_npc,_members] call MON_getleader; if (!alive _npc || !canmove _npc || isplayer _npc ) exitwith {_exit=true;}; //If leader is in vehicle will move in anyway if (vehicle (_npc) != _npc || !_isman) then { _wptype = "MOVE"; _Behaviour = "AWARE"; if ( _inheli ) then { _speedmode = "FULL"; _unitpos = "AUTO"; if ( (random 100) < 0 ) then { _targetPos = _AttackPos; }; }; }; //Establecemos el target KRON_targetsPos set [_grpid,_targetPos]; sleep 0.01; //If use statics are enabled leader searches for static weapons near. // Tanks enemies are contabiliced if ( KRON_UPS_useMines && _Mines > 0 ) then { _enemytanksnear = false; { if ( ("Tank" countType [_x] > 0 || "Wheeled_APC" countType [_x] >0 || "Tank" countType [vehicle _x] > 0 || "Wheeled_APC" countType [vehicle _x] >0 ) && alive _x && canMove _x && _npc distance _x <= _closeenough + KRON_UPS_safedist ) exitwith { _enemytanksnear = true; _enemytanknear = _x;}; } foreach _targets; //If use mines are enabled and enemy armors near and no friendly armor put mine. if ( _enemytanksnear && !isnull _enemytanknear && alive _enemytanknear ) then { _friendlytanksnear = false; { if (!( alive _x && canMove _x)) then {_friendlytanks = _friendlytanks - [_x]}; if (alive _x && canMove _x && _npc distance _x <= _closeenough + KRON_UPS_safedist ) exitwith { _friendlytanksnear = true;}; }foreach _friendlytanks; if (!_friendlytanksnear && random(100)<30 ) then { _dir1 = [_currPos,position _enemytanknear] call KRON_getDirPos; _mineposition = [position _npc,_dir1, 25] call MON_GetPos2D; _roads = _mineposition nearroads 50; if (count _roads > 0) then {_mineposition = position (_roads select 0);}; if ([_npc,_mineposition] call MON_CreateMine) then { _Mines = _Mines -1; if (KRON_UPS_Debug>0) then {player sidechat format["%1: %3 puting mine for %2",_grpidx,typeof _enemytanknear, side _npc]}; }; }; }; }; //Si es unidad de refuerzo siempre acosar al enemigo if (_reinforcementsent) then { _wptype="MOVE"; _newpos=true; _makenewtarget = false; }; if (_nofollow=="NOFOLLOW" && _wptype != "HOLD") then { _targetPos = [_targetPos,_centerpos,_rangeX,_rangeY,_areadir] call KRON_stayInside; _targetdist = [_currPos,_targetPos] call KRON_distancePosSqr; if ( _targetdist <= 1 ) then { _wptype="HOLD"; }; }; if (_wptype == "HOLD") then { _targetPos = _currPos; _targettext ="_currPos"; }; //Is updated with the latest value, changing the target _lastknown = _opfknowval; //If for whatever reason cancels the new position should make clear the parameters that go into pursuit if (!_newpos) then { //If the unit has decided to maintain position but is being attacked is being suppressed, should have the opportunity to react _newpos = _gothit; if (!_newpos) then { _targetPos=_lastpos; if (KRON_UPS_Debug>0) then {player sidechat format["%1 Mantaining orders %2",_grpidx,_nomove]}; }; }; if (KRON_UPS_Debug>=1) then { "avoid" setmarkerpos _avoidPos; "flank" setmarkerpos _flankPos; _destname setMarkerPos _targetPos; }; }; //END PURSUE sleep 0.1; }; //((_isSoldier) && ((count _enemies)>0) // ********************************************************************************************************************** // NO NEWS // ********************************************************************************************************************** if !(_newpos) then { // did the leader die? _npc = [_npc,_members] call MON_getleader; if (!alive _npc || !canmove _npc || isplayer _npc ) exitwith {_exit=true;}; // calculate new distance // if we're waiting at a waypoint, no calculating necessary _currpos = getpos _npc; //Sets behaviour of squad if nearly changes of target if (_targetsnear) then{ if (( toUpper(_Behaviour) IN _safemode) && _isSoldier) then { _Behaviour = "AWARE"; _npc setBehaviour _Behaviour; }; }; //If in safe mode if find dead bodies change behaviour if( toUpper(_Behaviour) IN _safemode) then { _unitsin = [_npc,_buildingdist] call MON_deadbodies; if (count _unitsin > 0) then { if !_isSoldier then { _npc setSpeedMode "FULL"; } else { if ((random 100) < 75) then { _Behaviour = "AWARE"; } else { _Behaviour = "COMBAT"; }; _react = _react + 30; _npc setBehaviour _Behaviour; if (KRON_UPS_Debug>0) then {player sidechat format["%1 dead bodies found! set %2",_grpidx,_Behaviour, count _targets]}; }; }; }; //Stuck control if (!_nowp && alive _npc && canmove _npc && _wptype == "MOVE" && _timeontarget >= 60 && _lastcurrpos select 0 == _currpos select 0 && _lastcurrpos select 1 == _currpos select 1) then { [_npc] call MON_cancelstop; _makenewtarget = true; if (KRON_UPS_Debug>0) then {player sidechat format["%1 stucked, moving",_grpidx]}; }; _lastpos = _targetPos; _lastcurrpos = _currpos; //sets last currpos for avoiding stuk if (_waiting<0) then { //Gets distance to targetpos _targetdist = [_currPos,_targetPos] call KRON_distancePosSqr; //It assesses whether it has exceeded the maximum waiting time and the objective is already shot to return to the starting position. if (_fightmode!="walk") then { if (_timeontarget > KRON_UPS_alerttime && count _targets <= 0 && ( isNull (_target) || !alive (_target) || captive _target)) then { _pursue = false; _gothit = false; _targetdead = true; _fightmode = "walk"; _speedmode = _orgSpeed; _targetPos = _currPos; _reinforcementsent = false; _target = objnull; _fixedtargetPos = [0,0]; _Behaviour = _orgMode; _waiting = -1; _unitpos = "AUTO"; _wpformation = "WEDGE"; KRON_UPS_reinforcement = false; //there is no threat if (_rfid > 0 ) then { call (compile format ["KRON_UPS_reinforcement%1 = false;",_rfid]); }; {[_x,"AUTO"] spawn MON_setUnitPos;} foreach units _npc; _npc setBehaviour _orgMode; if (KRON_UPS_Debug>0) then {player sidechat format["%1 Without objectives, leaving combat mode",_grpidx]}; }; }; //if (KRON_UPS_Debug>0) then {player globalchat format["%1 _targetdist %2 atdist=%3 dist=%4",_grpidx, _targetdist, _area/8,_dist]}; // if not in combat and we're either close enough, seem to be stuck, or are getting damaged, so find a new target if (!_nowp && (!_gothit) && (!_swimming) && (_fightmode == "walk") && (( _targetdist <= (_area/4) || moveToFailed _npc) && (_timeontarget > KRON_UPS_maxwaiting))) then { _makenewtarget=true; _unitpos = "AUTO"; _Behaviour = _orgMode; }; // make new target if (_makenewtarget) then { _gothit = false; _react = 0; _lastreact = 0; _makenewtarget = false; _timeontarget = 0; _wptype = "MOVE"; if (format ["%1",_fixedtargetPos] !="[0,0]") then { _targetPos = _fixedtargetPos; _targettext ="Reinforcement"; } else { if ((_nomove=="NOMOVE") && (_timeontarget>KRON_UPS_alerttime)) then { if (KRON_UPS_Debug>0) then {player sidechat format["nomove: %1",_nomove]}; //!R if (([_currPos,_orgPos] call KRON_distancePosSqr)<_closeenough) then { _newpos = false; _wptype = "HOLD"; _waiting = 9999; if (_fortify) then { _minreact = KRON_UPS_minreact * 3; _buildingdist = _buildingdist * 2; _wait = 3000; }; } else { _targetPos=_orgPos; _targettext ="_orgPos"; }; } else { //rStuckControl !R _rcurrPos = getpos _npc; if (_rlastPos select 0 == _rcurrPos select 0 && _rlastPos select 1 == _rcurrPos select 1) then { if (KRON_UPS_Debug>0) then {player sidechat format["%1 !RstuckControl try to move",_grpidx]}; if (vehicle _npc != _npc) then { _rstuckControl = _rstuckControl + 1; if (_rstuckControl > 1) then { _jumpers = crew (vehicle _npc); { _x spawn MON_doGetOut; sleep 0.5; } forEach _jumpers; } else { nul = [vehicle _npc] spawn MON_domove; } } else { nul = [_npc,25] spawn MON_domove; }; } else { _rstuckControl = 0; }; _rlastPos = _rcurrPos; // re-read marker position/size _centerpos = getMarkerPos _areamarker; _centerX = abs(_centerpos select 0); _centerY = abs(_centerpos select 1); _centerpos = [_centerX,_centerY]; _areasize = getMarkerSize _areamarker; _rangeX = _areasize select 0; _rangeY = _areasize select 1; _areadir = (markerDir _areamarker) * -1; // find a new target that's not too close to the current position _targetPos=_currPos; _targettext ="newTarget"; _tries=0; while {((([_currPos,_targetPos] call KRON_distancePosSqr) < _mindist)) && (_tries<50)} do { _tries=_tries+1; // generate new target position _targetPos = [_centerX,_centerY,_rangeX,_rangeY,_cosdir,_sindir,_areadir] call KRON_randomPos; _loop2=FALSE; // boat or plane // if (KRON_UPS_Debug>0) then {player sidechat format["%1, type: %2",_npc, typeOf _npc]}; sleep 4; // if (KRON_UPS_Debug>0) then {player sidechat format["%1 isplane",_isplane]}; sleep 4; if (_isplane || _isboat) then { // boat if (_isboat) then { _tries2=0; while {(!_loop2) && (_tries2 <50)} do { _tries2=_tries2+1; _targetPosTemp = [_centerX,_centerY,_rangeX,_rangeY,_cosdir,_sindir,_areadir] call KRON_randomPos; if (surfaceIsWater _targetPosTemp) then { _targetPos = _targetPosTemp; _loop2 = TRUE; // if (KRON_UPS_Debug>0) then {player sidechat format["%1 Boat just got new targetPos",_grpidx]}; }; sleep 0.05; }; // plane } else { _targetPos = [_centerX,_centerY,_rangeX,_rangeY,_cosdir,_sindir,_areadir] call KRON_randomPos; // if (KRON_UPS_Debug>0) then {player sidechat format["%1 Plane just got new targetPos",_grpidx]}; }; // man or car } else { // "_onroad" if _onroad then { _tries2=0; while {(!_loop2) && (_tries2 <100)} do { _tries2=_tries2+1; _targetPosTemp = [_centerX,_centerY,_rangeX,_rangeY,_cosdir,_sindir,_areadir] call KRON_randomPos; _roads = (_targetPosTemp nearRoads 50); if ((count _roads) > 0) then { _targetPosTemp = getpos (_roads select 0); _targetPos = _targetPosTemp; _loop2 = TRUE; // if (KRON_UPS_Debug>0) then {player sidechat format["%1 Onroad just got new targetPos",_grpidx]}; }; sleep 0.05; }; // any place on ground } else { _tries2=0; while {(!_loop2) && (_tries2 <100)} do { _tries2=_tries2+1; _targetPosTemp = [_centerX,_centerY,_rangeX,_rangeY,_cosdir,_sindir,_areadir] call KRON_randomPos; if (!surfaceIsWater _targetPosTemp) then { _targetPos = _targetPosTemp; _loop2 = TRUE; //if (KRON_UPS_Debug>0) then {player sidechat format["%1 Man just got new TP %2, %3",_grpidx,_targetPos,_tries2]}; }; sleep 0.05; }; }; }; }; }; }; sleep 0.05; // distance to target position _avoidPos = [0,0]; _flankPos = [0,0]; _attackPos = [0,0]; _frontPos = [0,0]; _fm=0; _newpos=true; }; }; }; // if in water, get right back out of it again if (surfaceIsWater _currPos) then { if (_isman && !_swimming) then { _drydist=999; // look around, to find a dry spot for [{_a=0}, {_a<=270}, {_a=_a+90}] do { _dp=[_currPos,30,_a] call KRON_relPos; if !(surfaceIsWater _dp) then {_targetPos=_dp}; }; _newpos=true; _swimming=true; }; } else { _swimming=false; }; sleep 0.5; // ********************************************************************************************************************** // NEWPOS: SE EJECUTA LA ORDEN DE MOVIMIENTO // ********************************************************************************************************************** // if (KRON_UPS_Debug>0) then {player sidechat format["%1 rea=%2 wai=%3 tim=%4 tg=%5 %6",_grpidx,_react,_waiting,_timeontarget,typeof _target,alive _target]}; if ((_waiting<=0) && _newpos) then { // did the leader die? _npc = [_npc,_members] call MON_getleader; if (!alive _npc || !canmove _npc || isplayer _npc ) exitwith {_exit=true;}; _currPos = getpos _npc; _newpos = false; _waiting = -1; _swimming=false; _GetIn_NearestVehicles = false; //Gets distance to targetpos _targetdist = [_currPos,_targetPos] call KRON_distancePosSqr; //If gothit and not in vehicle if (_gothit && _npc == vehicle (_npc) && alive _npc ) then { //Unidad suprimida if ((random 100) <50) then { //if (KRON_UPS_Debug>0) then {player sidechat format["%1 supressed by fire",_grpidx]}; //The unit is deleted, delete the current waypoint _supressed = true; _targetPos = _currPos; _targettext ="SUPRESSED"; _wptype = "HOLD"; //Prone { //Motion vanishes if ( _x iskindof "Man" && canmove _x && alive _x) then { if ((random 100)<40 || (primaryWeapon _x ) in KRON_UPS_MG_WEAPONS) then {[_x,"DOWN",20] spawn MON_setUnitPosTime; }else{ [_x,"Middle"] spawn MON_setUnitPos;}; }; sleep 0.01; } foreach units _npc; //All Retreat!! if ((random 100)<=60 && morale _npc < 0) then { _targetPos = _avoidPos;_targettext = "_avoidPos"; _wptype = "MOVE"; _flankdir = 0; if (!_newpos && KRON_UPS_Debug>0) then {player sidechat format["%1 All Retreat!!!",_grpidx]}; }; }; if ((random 100) < 15 && _targettext == "_avoidPos") then { [_npc,_target] call MON_throw_grenade; }; sleep 0.5; }; // did the leader die? _npc = [_npc,_members] call MON_getleader; if (!alive _npc || !canmove _npc || isplayer _npc ) exitwith {_exit=true;}; //If you have not been removed progress continue if (alive _npc) then { _currPos = getpos _npc; if ( _wptype == "MOVE") then { //Try to avoid stucked soldiers out of vehicles if ( _npc == vehicle _npc) then { { if (alive _x && canmove _x) then { //[_x] spawn MON_cancelstop; [_x] dofollow _npc; }; } foreach _members; }; sleep 0.05; //Search for vehicle if ((!_gothit && _targetdist >= ( KRON_UPS_searchVehicledist )) && _isSoldier ) then { if ( vehicle _npc == _npc && _dist > _closeenough ) then { _unitsIn = [_grpid,_npc] call MON_GetIn_NearestVehicles; if ( count _unitsIn > 0) then { _GetIn_NearestVehicles = true; _speedmode = "FULL"; _unitpos = "AUTO"; _npc setbehaviour "SAFE"; _npc setspeedmode "FULL"; _timeout = time + 60; _vehicle = objnull; _vehicles = []; { waituntil {vehicle _x != _x || !canmove _x || !canstand _x || !alive _x || time > _timeout || movetofailed _x}; if ( vehicle _x != _x && (isnull _vehicle || _vehicle != vehicle _x)) then { _vehicle = vehicle _x ; _vehicles = _vehicles + [_vehicle] }; }foreach _unitsIn; sleep 1; { _vehicle = _x; _cargo = _vehicle getvariable ("UPSMON_cargo"); if ( isNil("_cargo")) then {_cargo = [];}; _cargo ordergetin true; //Wait for other groups to getin { waituntil {vehicle _x != _x || !canmove _x || !canstand _x || !alive _x || time > _timeout || movetofailed _x}; } foreach _cargo; //Starts gunner control nul = [_vehicle] spawn MON_Gunnercontrol; sleep 0.1; // nul = [_x,30] spawn MON_domove; //!R just little kick to make sure it moves } foreach _vehicles; //Cheks if leader has dead until wait _npc = [_npc,_members] call MON_getleader; if (!alive _npc || !canmove _npc) exitwith {_exit=true;}; if ( "Air" countType [vehicle (_npc)]>0) then { _rnd = (random 2) * 0.1; _flyInHeight = round(KRON_UPS_flyInHeight * (0.9 + _rnd)); vehicle _npc flyInHeight _flyInHeight; //If you just enter the helicopter landing site is defined if (_GetIn_NearestVehicles) then { _GetOutDist = round(((KRON_UPS_paradropdist ) * (random 100) / 100 ) + 150); [vehicle _npc, _TargetPos, _GetOutDist, 90] spawn MON_doParadrop; // org _flyInHeight sleep 1; //Execute control stuck for helys [vehicle _npc] spawn MON_HeliStuckcontrol; if (KRON_UPS_Debug>0 ) then {player sidechat format["%1: flyingheiht=%2 paradrop at dist=%3",_grpidx, _flyInHeight, _GetOutDist,_rnd]}; }; }; }; }; }; }; sleep 0.05; //Get in combat vehicles if (!_gothit && !_GetIn_NearestVehicles && _fightmode != "walk" && _isSoldier) then { _dist2 = _dist / 4; if ( _dist2 <= 100 ) then { _unitsIn = []; _unitsIn = [_grpid,_npc,_dist2,false] call MON_GetIn_NearestCombat; _timeout = time + (_dist2/2); if ( count _unitsIn > 0) then { if (KRON_UPS_Debug>0 ) then {player sidechat format["%1: Geting in combat vehicle targetdist=%2",_grpidx,_npc distance _target]}; _npc setbehaviour "SAFE"; _npc setspeedmode "FULL"; { waituntil {vehicle _x != _x || !canmove _x || !canstand _x || !alive _x || time > _timeout || movetofailed _x}; }foreach _unitsIn; // did the leader die? _npc = [_npc,_members] call MON_getleader; if (!alive _npc || !canmove _npc || isplayer _npc ) exitwith {_exit=true;}; //Return to combat mode _npc setbehaviour _Behaviour; _timeout = time + 150; { waituntil {vehicle _x != _x || !canmove _x || !alive _x || time > _timeout || movetofailed _x}; }foreach _unitsIn; { if ( vehicle _x iskindof "Air") then { //moving hely for avoiding stuck if (driver vehicle _x == _x) then { _vehicle = vehicle (_x); nul = [_vehicle,1000] spawn MON_domove; //Execute control stuck for helys [_vehicle] spawn MON_HeliStuckcontrol; if (KRON_UPS_Debug>0 ) then {player sidechat format["%1: Geting in combat vehicle after",_grpidx,_npc distance _target]}; }; }; if (driver vehicle _x == _x) then { //Starts gunner control nul = [vehicle _x] spawn MON_Gunnercontrol; }; sleep 0.01; }foreach _unitsIn; }; }; }; sleep 0.05; // did the leader die? _npc = [_npc,_members] call MON_getleader; if (!alive _npc || !canmove _npc || isplayer _npc ) exitwith {_exit=true;}; //If use statics are enabled leader searches for static weapons near. if ((KRON_UPS_useStatics && (vehicle _npc == _npc) && !_GetIn_NearestVehicles && _isSoldier ) && ((_wptype == "HOLD" && (random 100) < 80) || (_wptype != "HOLD" && (random 100) < 60))) then { _unitsIn = [_grpid,_npc,_buildingdist] call MON_GetIn_NearestStatic; if ( count _unitsIn > 0) then { _npc setbehaviour "SAFE"; _npc setspeedmode "FULL"; _timeout = time + 60; { waituntil {vehicle _x != _x || !canmove _x || !alive _x || time > _timeout || movetofailed _x}; }foreach _unitsIn; }; sleep 0.05; }; // did the leader die? _npc = [_npc,_members] call MON_getleader; if (!alive _npc || !canmove _npc || isplayer _npc ) exitwith {_exit=true;}; //Buildings usage. if (!_GetIn_NearestVehicles) then { if ( _wptype == "HOLD" && vehicle _npc == _npc && ( _fortify ||(random 100) < 60) ) then { //if (KRON_UPS_Debug>0) then {player sidechat format["%1: Moving to nearest buildings",_grpidx]}; [_npc,_buildingdist,false,_wait] spawn MON_moveNearestBuildings; } else { //If we are close enough patrol in buildings for searching enemies if ((( _wptype != "HOLD" && vehicle _npc == _npc && (random 100) < 90 ) && _npc == vehicle _npc && _dist <= ( _closeenough ))) then { [_npc,_buildingdist,true] spawn MON_moveNearestBuildings; }; }; sleep 0.05; }; // did the leader die? _npc = [_npc,_members] call MON_getleader; if (!alive _npc || !canmove _npc || isplayer _npc ) exitwith {_exit=true;}; if (isnull _grp || _grp != group _npc) then { _grp = group _npc; }; _index = currentWaypoint _grp; //If the waypoing is different than it has or is different from what we set hold IF (_wptype != "HOLD" || _lastwptype != _wptype) then { //Has not completed or are waypoints //_index = 1 Waypoint by default, not use. if ( _index == 1 || _index > count waypoints _grp && !isnull _grp) then { _wp = _grp addWaypoint [_targetPos, 0]; _index = _wp select 1; // if (KRON_UPS_Debug>0) then {player sidechat format["%1: created wp %2 index %3",_grpidx,_wp, _index]}; } else { _wp = [_grp,_index]; // if (KRON_UPS_Debug>0) then {player globalchat format["%1: not created wp %2 index %3 %4",_grpidx,_wp, _index,_targetPos]}; }; }; // _wp = [_grp,_index]; // if iscar the run fast if targetpost is far. !R if ((!_gothit && _targetdist >= (_closeenough * 1.5)) && (vehicle _npc != _npc)) then { _speedmode = "FULL"; } else { // _speedmode = _orgSpeed; }; //We define the parameters of the new waypoint _wp setWaypointType _wptype; _wp setWaypointPosition [_targetPos, 0]; _wp setWaypointFormation _wpformation; _wp setWaypointSpeed _speedmode; _lastwptype = _wptype; //If you have more than 1 waypoints delete the obsolete { if ( _x select 1 < _index ) then { deleteWaypoint _x; }; sleep 0.05; } foreach waypoints _grp; //if (KRON_UPS_Debug>0) then {diag_log format["%1: waypoints %2 %3 %4 %5",_grpidx,count waypoints _grp, _grp, group _npc, group (leader _npc)]}; //Sets behaviour if (toupper(behaviour _npc) != toupper (_Behaviour)) then { _npc setBehaviour _Behaviour; }; //Refresh position vector KRON_targetsPos set [_grpid,_targetPos]; //Although there are predefined type of movement to a small percentage will vary on an individual level { if ((random 100)<95 && _x == vehicle _x && _x iskindof "Man" && !((primaryWeapon _x ) in KRON_UPS_MG_WEAPONS)) then { nul = [_x,_unitpos] spawn MON_setUnitPos; }else{ nul = [_x,"AUTO"] spawn MON_setUnitPos; }; } foreach units _npc; //If closeenough will leave some soldiers doing supress fire if (_gothit || _dist <= _closeenough) then { { if (!canStand _x || ((primaryWeapon _x ) in KRON_UPS_MG_WEAPONS) || (vehicle _x == _x && _x iskindof "Man" && (random 100) < 50) ) then { _x suppressFor 15; }; } foreach units _npc; }; }; _gothit = false; //if (KRON_UPS_Debug>0) then {player sidechat format["%1: %2 %3 %4 %5 %6 %7 %8 %9 %10",_grpidx, _wptype, _targettext,_dist, _speedmode, _unitpos, _Behaviour, _wpformation,_fightmode,count waypoints _grp];}; }; if (_track=="TRACK") then { switch (_fm) do { case 1: {_destname setmarkerSize [.4,.4]}; case 2: {_destname setmarkerSize [.6,.6]}; default {_destname setmarkerSize [.5,.5]}; }; _destname setMarkerPos _targetPos; }; //If in hely calculations must done faster if (_isplane || _inheli) then { _currcycle = _cycle/2; _flyInHeight = KRON_UPS_flyInHeight; vehicle _npc flyInHeight _flyInHeight; }; if ((_exit) || (isNil("_npc"))) then { _loop=false; } else { // slowly increase the cycle duration after an incident sleep _currcycle; }; }; //while {_loop} if (KRON_UPS_Debug>0) then {hint format["%1 exiting mainloop",_grpidx]}; //Limpiamos variables globales de este grupo KRON_targetsPos set [_grpid,[0,0]]; KRON_NPCs set [_grpid,objnull]; KRON_UPS_Exited=KRON_UPS_Exited+1; if (_track=="TRACK") then { //_trackername setMarkerType "Dot"; _trackername setMarkerType "Empty"; _destname setMarkerType "Empty"; }; //Gets dist from orinal pos if (!isnull _target) then { _dist = ([_orgpos,position _target] call KRON_distancePosSqr); }; // if (KRON_UPS_Debug>0) then {player sidechat format["%1 _dist=%2 _closeenough=%3",_grpidx,_dist,_closeenough]}; //does respawn of group ===================================================================================================== if (_respawn && _respawnmax > 0 && !_surrended && _dist > _closeenough) then { if (KRON_UPS_Debug>0) then {player sidechat format["%1 doing respawn",_grpidx]}; // copy group leader _unittype = _membertypes select 0; // make the clones civilians // use random Civilian models for single unit groups if ((_unittype=="Civilian") && (count _members==1)) then {_rnd=1+round(random 20); if (_rnd>1) then {_unittype=format["Civilian%1",_rnd]}}; _grp=createGroup _side; _lead = _grp createUnit [_unittype, _orgpos, [], 0, "form"]; _lead setVehicleInit _initstr; [_lead] join _grp; _grp selectLeader _lead; // copy team members (skip the leader) _i=0; { _i=_i+1; if (_i>1) then { _newunit = _grp createUnit [_x, _orgpos, [],0,"form"]; _newunit setVehicleInit _initstr; [_newunit] join _grp; sleep 0.1; }; } foreach _membertypes; if ( _lead == vehicle _lead) then { { if (alive _x && canmove _x) then { [_x] dofollow _lead; }; sleep 0.1; } foreach units _lead; }; { _targetpos = _orgpos findEmptyPosition [10, 200]; sleep .4; if (count _targetpos <= 0) then {_targetpos = _orgpos}; //if (KRON_UPS_Debug>0) then {player globalchat format["%1 create vehicle _newpos %2 ",_x,_targetpos]}; _newunit = _x createvehicle (_targetpos); } foreach _vehicletypes; //if (KRON_UPS_Debug>0) then {player globalchat format["%1 _vehicletypes: %2",_grpidx, _vehicletypes]}; //Set new parameters if (!_spawned) then { _UCthis = _UCthis + ["SPAWNED"]; if ((count _vehicletypes) > 0) then { _UCthis = _UCthis + ["VEHTYPE:"] + ["dummyveh"]; }; }; _UCthis set [0,_lead]; _respawnmax = _respawnmax - 1; _UCthis = ["RESPAWN:",_respawnmax,_UCthis] call KRON_UPSsetArg; sleep 0.1; _UCthis = ["VEHTYPE:",_vehicletypes,_UCthis] call KRON_UPSsetArg; // if (KRON_UPS_Debug>0) then {player globalchat format["%1 _UCthis: %2",_grpidx,_UCthis]}; //Exec UPSMON script _UCthis SPAWN UPSMON; sleep 0.1; processInitCommands; }; _friends=nil; _enemies=nil; _enemytanks = nil; _friendlytanks = nil; _roads = nil; _targets = nil; _members = nil; _membertypes = nil; _UCthis = nil; if (!alive _npc) then { deleteGroup _grp; }; // if(true) exitWith {}; // !R no needed ?Private["_oldScore","_newScore","_playerChanged"]; _playerChanged = _this select 0; _newScore = _this select 1; _oldScore = score _playerChanged; _playerChanged addScore -_oldScore; _playerChanged addScore _newScore; // WFBE_ChangeScore = [nil,'CLTFNCCHANGESCORE',[_playerChanged,_newScore]]; // publicVariable 'WFBE_ChangeScore'; // if (isHostedServer) then {[nil,'CLTFNCCHANGESCORE',[_playerChanged,_newScore]] Spawn HandlePVF}; [nil, "ChangeScore", [_playerChanged,_newScore]] Call WFBE_CO_FNC_SendToClients;Private["_commanderTeam","_logik","_name","_side","_team"]; _side = _this select 0; _name = _this select 1; _logik = (_side) Call WFBE_CO_FNC_GetSideLogic; if ((_logik getVariable "wfbe_votetime") <= 0) then { _team = -1; _commanderTeam = (_side) Call WFBE_CO_FNC_GetCommanderTeam; if (!isNull _commanderTeam) then { _team = (_logik getVariable "wfbe_teams") find _commanderTeam; }; //--- Set the commander votes. [_side, _team] Call SetCommanderVotes; (_side) Spawn WFBE_SE_FNC_VoteForCommander; [_side,"VotingForNewCommander"] Spawn SideMessage; [_side, "HandleSpecial", ["commander-vote-start", _name]] Call WFBE_CO_FNC_SendToClients; };Private ["_defenseType","_dir","_index","_manned","_pos","_side","_structure"]; _side = _this select 0; _defenseType = _this select 1; _pos = _this select 2; _dir = _this select 3; _manned = _this select 4; _index = (missionNamespace getVariable Format["WFBE_%1DEFENSENAMES",str _side]) find _defenseType; if (_index != -1) then { [_defenseType,_side,_pos,_dir,_manned,false] Call ConstructDefense; };Private["_canJoin","_get","_name","_player","_side","_sideOrigin","_uid"]; _player = _this select 0; _side = _this select 1; _name = name _player; _uid = getPlayerUID(_player); _canJoin = true; _get = missionNamespace getVariable Format["WFBE_JIP_USER%1",_uid]; if !(isNil '_get') then { //--- Retrieve JIP Information if there's any. _sideOrigin = _get select 2; //--- Get the original side. if (_sideOrigin != _side) then { //--- The joined side differs from the original one. _canJoin = false; if ((missionNamespace getVariable "WFBE_C_GAMEPLAY_UID_SHOW") == 0) then {_uid = "xxxxxxx"}; [nil, "LocalizeMessage", ['Teamswap',_name,_uid,_sideOrigin,_side]] Call WFBE_CO_FNC_SendToClients; //--- Inform the clients about the teamswap. ["INFORMATION", Format["RequestJoin.sqf: Player [%1] [%2] has been sent back to the lobby for teamswapping, original side [%3], joined side [%4].", _name,_uid,_sideOrigin,_side]] Call WFBE_CO_FNC_LogContent; }; } else { ["WARNING", Format["RequestJoin.sqf: Unable to find JIP information for player [%1] [%2].", _name, _uid]] Call WFBE_CO_FNC_LogContent; }; ["INFORMATION", Format["RequestJoin.sqf: Player [%1] [%2] can join? [%3].", _name, _uid, _canJoin]] Call WFBE_CO_FNC_LogContent; if (WF_A2_Vanilla) then { [_uid, "HandleSpecial", ["join-answer", _canJoin]] Call WFBE_CO_FNC_SendToClients; } else { [_player, "HandleSpecial", ["join-answer", _canJoin]] Call WFBE_CO_FNC_SendToClient; };[_this] Spawn MHQRepair;_this Spawn HandleSpecial;Private ['_dir','_index','_pos','_script','_side','_structure','_structureType']; _side = _this select 0; _structureType = _this select 1; _pos = _this select 2; _dir = _this select 3; _index = (missionNamespace getVariable Format ["WFBE_%1STRUCTURENAMES",str _side]) find _structureType; if (_index != -1) then { _script = (missionNamespace getVariable Format ["WFBE_%1STRUCTURESCRIPTS",str _side]) select _index; [_structureType,_side,_pos,_dir,_index] ExecVM (Format["Server\Construction\Construction_%1.sqf",_script]); };Private["_args","_properties","_team"]; _args = _this; _team = _args select 0; //--- One team. if (typeName _team == "ARRAY") then { { _x setBehaviour (_args select 1); _x setCombatMode (_args select 2); _x setFormation (_args select 3); _x setSpeedMode (_args select 4); ["INFORMATION", Format ["RequestTeamUpdate.sqf: Team [%1] properties were updated.", _x]] Call WFBE_CO_FNC_LogContent; } forEach _team; }; //--- The whole team. if (typeName _team == "SIDE") then { { _x setBehaviour (_args select 1); _x setCombatMode (_args select 2); _x setFormation (_args select 3); _x setSpeedMode (_args select 4); } forEach (missionNamespace getVariable Format["WFBE_%1TEAMS",str _team]); ["INFORMATION", Format ["RequestTeamUpdate.sqf: [%1] Teams properties were updated.", _team]] Call WFBE_CO_FNC_LogContent; };/* A client request an upgrade */ _this Spawn WFBE_SE_FNC_ProcessUpgrade;Private["_client","_locked","_side","_vehicle"]; _vehicle = _this select 0; _locked = _this select 1; _vehicle lock _locked; // WFBE_SetVehicleLock = [nil,'CLTFNCSETVEHICLELOCK',[_vehicle,_locked]]; // publicVariable 'WFBE_SetVehicleLock'; // if (isHostedServer) then {[nil,'CLTFNCSETVEHICLELOCK',[_vehicle,_locked]] Spawn HandlePVF}; [nil, "SetVehicleLock", [_vehicle,_locked]] Call WFBE_CO_FNC_SendToClients;Private["_group","_index","_logik","_model","_models","_position","_side","_unit","_workers"]; _side = _this select 0; _position = _this select 1; _index = _this select 2; _logik = (_side) Call WFBE_CO_FNC_GetSideLogic; _models = missionNamespace getVariable Format["WFBE_%1_WORKER", _side]; _model = _models select floor (random (count _models)); _group = createGroup _side; _position = [getPos _position, 30] Call GetSafePlace; _unit = [_model, _group, _position, _side] Call WFBE_CO_FNC_CreateUnit; _group setSpeedMode "LIMITED"; _workers = _logik getVariable "wfbe_workers"; _workers set [_index, _unit]; _logik setVariable ["wfbe_workers", _workers, true]; [_unit, _side, _index] ExecFSM "Server\FSM\workers.fsm";Private['_args','_bd','_cargo','_grp','_pilot','_playerTeam','_positionCoord','_ran','_ranDir','_ranPos','_side','_sideID','_timeStart','_vehicle','_vehicleCoord']; _args = _this; _side = _args select 1; _sideID = _side Call GetSideID; _playerTeam = (_args select 3); ["INFORMATION", Format ["Server_HandleSpecial.sqf: [%1] Team [%2] [%3] called in an Ammo Paradrop.", str _side, _playerTeam, name (leader _playerTeam)]] Call WFBE_CO_FNC_LogContent; _ranPos = []; _ranDir = []; _bd = missionNamespace getVariable 'WFBE_BOUNDARIESXY'; if !(isNil '_bd') then { _ranPos = [ [0+random(200),0+random(200),400+random(200)], [0+random(200),_bd-random(200),400+random(200)], [_bd-random(200),_bd-random(200),400+random(200)], [_bd-random(200),0+random(200),400+random(200)] ]; _ranDir = [45,145,225,315]; } else { _ranPos = [[0+random(200),0+random(200),400+random(200)],[15000+random(200),0+random(200),400+random(200)]]; _ranDir = [45,315]; }; _timeStart = time; _ran = round(random((count _ranPos)-1)); _grp = createGroup _side; _vehicle = createVehicle [missionNamespace getVariable Format ["WFBE_%1PARAVEHI",str _side],(_ranPos select _ran), [], (_ranDir select _ran), "FLY"]; _pilot = [missionNamespace getVariable Format ["WFBE_%1PILOT",str _side],_grp,[100,12000,0],_sideID] Call WFBE_CO_FNC_CreateUnit; [str _side,'VehiclesCreated',1] Call UpdateStatistics; [str _side,'UnitsCreated',1] Call UpdateStatistics; _pilot moveInDriver _vehicle; _grp setBehaviour 'CARELESS'; _grp setCombatMode 'STEALTH'; _pilot disableAI 'AUTOTARGET'; _pilot disableAI 'TARGET'; [_grp,(_args select 2),"MOVE",10] Call AIMoveTo; Call Compile Format ["_vehicle addEventHandler ['Killed',{[_this select 0,_this select 1,%1] Spawn WFBE_CO_FNC_OnUnitKilled}]",_sideID]; _vehicle setVehicleInit Format["[this,%1] ExecVM 'Common\Init\Init_Unit.sqf';",_sideID]; processInitCommands; _vehicle flyInHeight (200 + random(20)); _cargo = (crew _vehicle) - [driver _vehicle, gunner _vehicle, commander _vehicle]; while {true} do { sleep 1; if (!alive _pilot || !alive _vehicle || isNull _vehicle || isNull _pilot) exitWith {}; if (!(isPlayer (leader _playerTeam)) || time - _timeStart > 500) exitWith {{_x setDammage 1} forEach (_cargo+[_pilot,_vehicle]);deleteGroup _grp}; _vehicleCoord = [getPos _pilot select 0,getpos _pilot select 1]; _positionCoord = [(_args select 2) select 0,(_args select 2) select 1]; if (_vehicleCoord distance _positionCoord < 100) exitWith {}; }; [_vehicle,_side] Spawn { Private ['_ammo','_ammos','_chopper','_chute','_side']; _chopper = _this select 0; _side = _this select 1; _ammos = missionNamespace getVariable Format["WFBE_%1PARAAMMO",_side]; if (typeName _ammos != 'ARRAY') exitWith {["WARNING", Format ["Server_HandleSpecial.sqf: Expected array, given [%1] for ammunitions", typeName _ammos]] Call WFBE_CO_FNC_LogContent}; { _ammo = _x createVehicle [0,0,0]; [_chopper,_ammo,_side] Spawn { Private ['_ammo','_chopper','_chute','_pos','_side','_type']; _chopper = _this select 0; _ammo = _this select 1; _side = _this select 2; _chute = (missionNamespace getVariable Format['WFBE_%1PARACHUTE',str _side]) createVehicle [0,0,20]; _chute setPos [getPos _chopper select 0, getPos _chopper select 1, (getPos _chopper select 2) - 11]; _chute setDir (getDir _chopper); _ammo setPos getPos _chute; _ammo attachTo [_chute,[0,0,0]]; waitUntil {getPos _ammo select 2 < 3}; detach _ammo; _type = typeOf _ammo; _pos = getPos _ammo; deleteVehicle _ammo; _ammo = _type createVehicle _pos; Call Compile Format ["_ammo addEventHandler ['Killed',{[_this select 0,_this select 1,%1] Spawn WFBE_CO_FNC_OnUnitKilled}]",_sideID]; sleep 5; deleteVehicle _chute; }; sleep 0.8; } forEach _ammos; }; [_grp,(_ranPos select _ran),"MOVE",10] Call AIMoveTo; while {true} do { sleep 1; if (!alive _pilot || !alive _vehicle || isNull _vehicle || isNull _pilot) exitWith {}; _vehicleCoord = [getPos _pilot select 0,getpos _pilot select 1]; _positionCoord = [(_ranPos select _ran) select 0,(_ranPos select _ran) select 1]; if (_vehicleCoord distance _positionCoord < 200) exitWith {}; }; deleteVehicle _pilot; deleteVehicle _vehicle; deleteGroup _grp;Private['_bd','_built','_built_inf','_currentLevel','_currentUpgrades','_destination','_greenlight','_grp','_index','_paratroopers','_playerTeam','_ran','_ranDir','_ranPos','_side','_sideID','_starttime','_units','_vehicle','_vehicle_cargo','_vehicle_count','_vehicle_model','_vehicle_pilot','_vehicles']; _side = _this select 1; _destination = _this select 2; _playerTeam = _this select 3; _sideID = _side Call GetSideID; _starttime = time; ["INFORMATION", Format["Support_Paratroopers.sqf : [%1] Team [%2] has requested paratroopers.", _side, _playerTeam]] Call WFBE_CO_FNC_LogContent; //--- Determine a random spawn location. _ranPos = []; _ranDir = []; _bd = missionNamespace getVariable 'WFBE_BOUNDARIESXY'; if !(isNil '_bd') then { _ranPos = [ [0+random(200),0+random(200),400+random(200)], [0+random(200),_bd-random(200),400+random(200)], [_bd-random(200),_bd-random(200),400+random(200)], [_bd-random(200),0+random(200),400+random(200)] ]; _ranDir = [45,145,225,315]; } else { _ranPos = [[0+random(200),0+random(200),400+random(200)],[15000+random(200),0+random(200),400+random(200)]]; _ranDir = [45,315]; }; //--- Get the units and the air vehicle, exit if nil. _currentUpgrades = (_side) Call WFBE_CO_FNC_GetSideUpgrades; _currentLevel = _currentUpgrades select WFBE_UP_PARATROOPERS; _units = missionNamespace getVariable Format ["WFBE_%1PARACHUTELEVEL%2", str _side, _currentLevel]; _vehicle_model = missionNamespace getVariable Format ["WFBE_%1PARACARGO", str _side]; if (isNil '_units' || isNil '_vehicle_model') exitWith {["ERROR", Format["Support_Paratroopers.sqf : [%1] Paratrooping vehicle or units are not defined.", _side]] Call WFBE_CO_FNC_LogContent}; //--- Determine how many vehicles do we need. _vehicle_cargo = getNumber(configFile >> 'CfgVehicles' >> _vehicle_model >> 'transportSoldier'); if (_vehicle_cargo == 0) exitWith {["ERROR", Format["Support_Paratroopers.sqf : [%1] Paratrooping vehicle [%2] has no cargo capacity.", _side, _vehicle_model]] Call WFBE_CO_FNC_LogContent}; _vehicle_count = ceil((count _units) / _vehicle_cargo); //--- Create the vehicles. _vehicles = []; _vehicle_pilot = missionNamespace getVariable Format ["WFBE_%1PILOT",str _side]; _ran = floor(random count _ranPos); _grp = createGroup _side; _built = 0; for '_i' from 1 to _vehicle_count do { //--- Spawn the vehicle. _vehicle = createVehicle [missionNamespace getVariable Format ["WFBE_%1PARACARGO",str _side],(_ranPos select _ran), [], (_ranDir select _ran), "FLY"]; _vehicle addEventHandler ['killed', Format["[_this select 0, _this select 1, %1] Spawn WFBE_CO_FNC_OnUnitKilled",_sideID]]; _vehicle setVehicleInit Format["[this, %1] ExecVM 'Common\Init\Init_Unit.sqf';", _sideID]; [_vehicles, _vehicle] Call WFBE_CO_FNC_ArrayPush; //--- Spawn the pilot. _pilot = [_vehicle_pilot, _grp, [100,12000,0], _sideID] Call WFBE_CO_FNC_CreateUnit; _pilot moveInDriver _vehicle; _pilot doMove _destination; _grp setBehaviour 'CARELESS'; _grp setCombatMode 'STEALTH'; {_pilot disableAI _x} forEach ["AUTOTARGET","TARGET"]; _built = _built + 1; _vehicle flyInHeight (300 + random 15); _vehicle lockDriver true; }; [str _side, 'VehiclesCreated', _built] Call UpdateStatistics; //--- Global Init. processInitCommands; //--- Create the units. _built_inf = 0; _index = 0; _vehicle = _vehicles select _index; _paratroopers = []; { //--- Spawn the unit. _unit = [_x, _grp, [100,12000,0], _sideID] Call WFBE_CO_FNC_CreateUnit; _unit moveInCargo _vehicle; _built_inf = _built_inf + 1; [_paratroopers, _unit] Call WFBE_CO_FNC_ArrayPush; //--- If the unit amount exceed the cargo cap, swap to the next vehicle then. if (_built_inf >= _vehicle_cargo) then {_built = _built + _built_inf; _built_inf = 0; _index = _index + 1; _vehicle = _vehicles select _index}; } forEach _units; [str _side,'UnitsCreated', _built] Call UpdateStatistics; //--- Tell the group to move. [_grp, _destination, "MOVE", 10] Call AIMoveTo; //--- Loop until death or arrival. _greenlight = false; while {true} do { sleep 1; if (({alive _x} count _vehicles) == 0) exitWith {};//--- Vehicle destruction. if (({alive driver _x} count _vehicles) == 0) exitWith {};//--- Pilots are dead. if (!(isPlayer (leader _playerTeam)) || time - _starttime > 500) exitWith {};//--- Timeout out AI Controlled. _vehicleCoord = [(getPos vehicle (leader _grp)) select 0, (getPos vehicle (leader _grp)) select 1]; _positionCoord = [_destination select 0, _destination select 1]; if (_vehicleCoord distance _positionCoord < 300) exitWith {_greenlight = true};//--- Destination reached. }; //--- Units are ready to bail! if (_greenlight) then { _delay = if (_vehicle_model isKindOf "Plane") then {0.35} else {0.85}; { _vehicle = _x; { _x action ["EJECT", _vehicle]; sleep _delay; [_x] join (leader _playerTeam); } forEach ((crew _vehicle) - [driver _vehicle, gunner _vehicle, commander _vehicle]); } forEach _vehicles; //--- Once done, the air units can fly back to their source. [_grp, (_ranPos select _ran), "MOVE", 10] Call AIMoveTo; //--- Loop until death or arrival. while {true} do { sleep 1; if (({alive _x} count _vehicles) == 0) exitWith {};//--- Vehicle destruction. if (({alive driver _x} count _vehicles) == 0) exitWith {};//--- Pilots are dead. _vehicleCoord = [(getPos vehicle (leader _grp)) select 0, (getPos vehicle (leader _grp)) select 1]; _positionCoord = [(_ranPos select _ran) select 0, (_ranPos select _ran) select 1]; if (_vehicleCoord distance _positionCoord < 300) exitWith {};//--- Destination reached. }; } else { //--- Everything failed, remove the paratroopers. {deleteVehicle _x} forEach _paratroopers; }; //--- In any case, cleanup the transporters. { {deleteVehicle _x} forEach crew _x;//--- Remove the crew. deleteVehicle _x;//--- Remove the vehicle. } forEach _vehicles; //---- Clear the group. deleteGroup _grp;Private['_args','_bd','_cargo','_cargoVehicle','_grp','_pilot','_playerTeam','_positionCoord','_ran','_ranDir','_ranPos','_side','_sideID','_timeStart','_vehicle','_vehicleCoord']; _args = _this; _side = _args select 1; _sideID = (_side) Call GetSideID; _playerTeam = (_args select 3); ["INFORMATION", Format ["Server_HandleSpecial.sqf: [%1] Team [%2] [%3] called in a Vehicle Paradrop.", str _side, _playerTeam, name (leader _playerTeam)]] Call WFBE_CO_FNC_LogContent; _ranPos = []; _ranDir = []; _bd = missionNamespace getVariable 'WFBE_BOUNDARIESXY'; if !(isNil '_bd') then { _ranPos = [ [0+random(200),0+random(200),400+random(200)], [0+random(200),_bd-random(200),400+random(200)], [_bd-random(200),_bd-random(200),400+random(200)], [_bd-random(200),0+random(200),400+random(200)] ]; _ranDir = [45,145,225,315]; } else { _ranPos = [[0+random(200),0+random(200),400+random(200)],[15000+random(200),0+random(200),400+random(200)]]; _ranDir = [45,315]; }; _timeStart = time; _ran = round(random((count _ranPos)-1)); _grp = createGroup _side; _vehicle = createVehicle [missionNamespace getVariable Format ["WFBE_%1PARAVEHI",str _side],(_ranPos select _ran), [], (_ranDir select _ran), "FLY"]; [str _side,'VehiclesCreated',1] Call UpdateStatistics; [str _side,'UnitsCreated',1] Call UpdateStatistics; _pilot = [missionNamespace getVariable Format ["WFBE_%1PILOT",str _side],_grp,[100,12000,0],_sideID] Call WFBE_CO_FNC_CreateUnit; _pilot moveInDriver _vehicle; _pilot doMove (_args select 2); _grp setBehaviour 'CARELESS'; _grp setCombatMode 'STEALTH'; _pilot disableAI 'AUTOTARGET'; _pilot disableAI 'TARGET'; [_grp,(_args select 2),"MOVE",10] Call AIMoveTo; Call Compile Format ["_vehicle addEventHandler ['Killed',{[_this select 0,_this select 1,%1] Spawn WFBE_CO_FNC_OnUnitKilled}]",_sideID]; _vehicle setVehicleInit Format["[this,%1] ExecVM 'Common\Init\Init_Unit.sqf';",_sideID]; processInitCommands; _vehicle flyInHeight (300 + random(75)); _cargo = (crew _vehicle) - [driver _vehicle, gunner _vehicle, commander _vehicle]; _cargoVehicle = [missionNamespace getVariable Format ["WFBE_%1PARAVEHICARGO", _side], [0,0,50] ,_sideID, 0, false] Call WFBE_CO_FNC_CreateVehicle; _cargoVehicle attachTo [_vehicle,[0,0,-3]]; emptyQueu = emptyQueu + [_cargoVehicle]; _cargoVehicle Spawn HandleEmptyVehicle; while {true} do { sleep 1; if (!alive _pilot || !alive _vehicle || isNull _vehicle || isNull _pilot || !alive _cargoVehicle) exitWith {}; if (!(isPlayer (leader _playerTeam)) || time - _timeStart > 500) exitWith {{_x setDammage 1} forEach (_cargo+[_pilot,_vehicle,_cargoVehicle]);deleteGroup _grp}; _vehicleCoord = [getPos _pilot select 0,getpos _pilot select 1]; _positionCoord = [(_args select 2) select 0,(_args select 2) select 1]; if (_vehicleCoord distance _positionCoord < 100) exitWith {}; }; detach _cargoVehicle; [_cargoVehicle,_side] Spawn { Private ['_chute','_side','_vehicle']; _vehicle = _this select 0; _side = _this select 1; sleep 2; if (!alive _vehicle) exitWith {}; _chute = (missionNamespace getVariable Format['WFBE_%1PARACHUTE',str _side]) createVehicle [0,0,20]; _chute setPos [getPos _vehicle select 0, getPos _vehicle select 1, (getPos _vehicle select 2) - 11]; _chute setDir (getDir _vehicle); _vehicle attachTo [_chute,[0,0,0]]; waitUntil {getPos _vehicle select 2 < 10 || !alive _vehicle}; detach _vehicle; sleep 10; deleteVehicle _chute; }; [_grp,(_ranPos select _ran),"MOVE",10] Call AIMoveTo; while {true} do { sleep 1; if (!alive _pilot || !alive _vehicle || isNull _vehicle || isNull _pilot) exitWith {}; _vehicleCoord = [getPos _pilot select 0,getpos _pilot select 1]; _positionCoord = [(_ranPos select _ran) select 0,(_ranPos select _ran) select 1]; if (_vehicleCoord distance _positionCoord < 200) exitWith {}; }; deleteVehicle _pilot; deleteVehicle _vehicle; deleteGroup _grp;Private["_args","_driver","_gunner","_playerTeam","_side","_uav"]; _args = _this; _side = _args select 1; _uav = (_args select 2); _driver = driver _uav; _gunner = gunner _uav; _playerTeam = (_args select 3); ["INFORMATION", Format ["Server_HandleSpecial.sqf: [%1] Team [%2] [%3] called in an UAV.", str _side, _playerTeam, name (leader _playerTeam)]] Call WFBE_CO_FNC_LogContent; while {true} do { sleep 5; if (!(isPlayer (leader _playerTeam)) || !alive _uav) exitWith {}; }; if (!isNull _driver) then {if (alive _driver) then {_driver setDammage 1};if (isNil {_driver getVariable "wfbe_trashed"}) then {_driver setVariable ["wfbe_trashed", true];_driver Spawn TrashObject}}; if (!isNull _gunner) then {if (alive _gunner) then {_gunner setDammage 1};if (isNil {_gunner getVariable "wfbe_trashed"}) then {_gunner setVariable ["wfbe_trashed", true];_gunner Spawn TrashObject}}; if (!isNull _uav) then {if (alive _uav) then {_uav setDammage 1};if (isNil {_uav getVariable "wfbe_trashed"}) then {_uav setVariable ["wfbe_trashed", true];_uav Spawn TrashObject}}; Deploy MASH Déployer Hopital de Campagne Feldlazarett aufbauen Развернуть госпиталь Monta ospedale da campo Lockpick Crocheter Schloss knacken Открыть отмычкой Apri Serratura Repair Réparer Reparieren Ремонт Ripara Spot Repérer Beobachten Указать Individua Pack MASH Replier Hopital de Campagne Pack MASH Pack MASHь Pack MASH $%1 Received for neutralizing a %2. $%1 Gagné pour la neutralisation d'un %2. %2 neutralisiert! $%1 erhalten. +$%1 за нейтрализацию %2. $%1 Ricevuti per aver neutralizzato un %2. $%1 Received for the neutralization assistance of a %2. $%1 Gagné pour l'assistance à la neutralisation d'un %2. Für die Kampfunterstützung gegen %2 hast du $%1 erhalten. $%1 Received for the neutralization assistance of a %2. $%1 Received for the neutralization assistance of a %2. AI Commander Selected! Commandeur IA Sélectioné! KI wurde zum Commander gewählt! Командует ИИ! Comandante IA Selezionato! Our team has captured %2. $%1 Commander-Bonus. Our team has captured %2. $%1 Commander-Bonus. Unser Team hat %2 erobert. $%1 Commander-Bonus. Our team has captured %2. $%1 Commander-Bonus. Our team has captured %2. $%1 Commander-Bonus. Our team has captured a camp at %1. Un campement a été capturé à %1. Unser Team hat ein Camp bei %1 eingenommen. наша команда захватила лагерь в %1. Il nostro fazione ha catturato un campo a %1. Your Squad has captured a camp at %1. $%2 earned. Votre équipe à capturé un campement à %1. Vous gagné $%2. Dein Squad hat ein Camp bei %1 eingenommen. Du erhälst $%2. +$%2 за захват лагеря в %1. Il tuo Squad ha catturato un campo a %1. $%2 Guadagnati. You have received $%1 from %2. Vous avez reçu $%1 de la part de %2. Der Spieler %2 hat dir $%1 überwiesen. Вы получили $%1 от %2. Hai ricevuto $%1 da %2 ringrazialo. You were deducted from $%1 due to your gear Vous avez été déduit de $%1 en raison de votre équipement Dir werden $%1 für neue Ausrüstung abgezogen У вас изъято $%1 за ваше снаряжение You were deducted from $%1 due to your gear WARNNING! An Intercontinental ballistic missile launch has been detected! ATTENTION! Le lancement d'un Missile balistique intercontinental a été detecté! WARNUNG! Der Abschuss einer Interkontinentalrakete wurde gemeldet! ВНИМАНИЕ! Зафиксирован запуск ядерной ракеты! ATTENZIONE! Un Missile Balistico intercontinentale è stato avvistato! Deploying IR Smoke! %1 ammunitions remaining. Déploiement de l'écran de fumée IR! %1 munitions restantes. Deploying IR Smoke! %1 ammunitions remaining. Активирована дымовая защита! %1 зарядов осталось. Deploying IR Smoke! %1 ammunitions remaining. $%1 Lost for a civilian neutralization! Go to the ophthalmologist... $%1 Perdu pour la neutralisation d'un civil! soyer prudent! $%1 Strafe für die Tötung eines Zivilisten! Ab zum Augenarzt... $%1 Потерянно за убийство гражданского! будьте осторожны! $%1 Perduti per aver neutralizzato un civile! stai attento! You are the new Commander! Good luck! Vous êtes le Commandeur! Bonne Chance! Du bist der neue Commander! Viel Erfolg! Вы Командующий! Sei il Comandante! A "%1" structure has been sold! >Une structure de type "%1" à été vendu! Das Gebäude "%1" wurde verkauft! A "%1" строение проданно! A "%1" structure has been sold! A "%1" structure is going to be sold in %2 seconds! Une structure de type "%1" va être vendu dans %2 secondes! Das Gebäude "%1" wird in %2 Sekunden verkauft! A "%1" structure is going to be sold in %2 seconds! A "%1" structure is going to be sold in %2 seconds! Your Squad has been awarded with %1%2 for the completion of a secondary objective. Votre équipe à reçu %1%2 pour avoir completé un objectif secondaire. Dein Squad wurde für den erfolgreichen Abschluss einer Nebenmission mit %1%2 belohnt. Your Squad has been awarded with %1%2 for the completion of a secondary objective. Your Squad has been awarded with %1%2 for the completion of a secondary objective. $%1 Received for salvaging a %2 Vous avez reçu $%1 pour le recyclage d'un %2. $%1 erhalten für die Bergung von %2 $%1 Получено за утилизацию %2 $%1 Ricevuti recuperando i pezzi di un %2 %1 has been captured by %2 ! %1 a été capturé par l'équipe %2 ! Team %2 hat die Stadt %1 eingenommen! %1 has been captured by %2 ! %1 has been captured by %2 ! Your Squad has captured %1. $%2 earned. Votre équipe à capturé %1. Vous gagné $%2. Dein Squad hat %1 eingenommen. Du hast $%2 verdient. +$%2 за захват %1. Il tuo Squad ha conquistato %1. $%2 Guadagnati. Your squad has assisted in capturing %1. $%2 earned. Votre équipe à aidé à la capture de %1. Vous gagné $%2. Dein Squad gab Unterstützung beim Einnehmen von %1. $%2 verdient. +$%2 за помощь в захвате %1. Il tuo Squad ha assistito alla cattura di %1. $%2 Guadagnati. Player %1 (ID: %2) freaks out and rioted in Base (%3 has been destroyed)! Player %1 (ID: %2) freaks out and rioted in Base (%3 has been destroyed)! Der Spieler %1 (ID: %2) dreht hohl und randaliert in der Basis (%3 wurde bereits zerstört)! Player %1 (ID: %2) freaks out and rioted in Base (%3 has been destroyed)! Player %1 (ID: %2) freaks out and rioted in Base (%3 has been destroyed)! Player %1 (ID: %2) has teamswapped! (From %3 to %4) Le joueur %1 (ID: %2) a changé d'équipe! (De %3 à %4) Der Spieler %1 (ID: %2) hat das Team gewechselt! (von %3 nach %4) Игрок %1 (ID: %2) сменил сторону! (с %3 на %4) Il Giocatore %1 (ID: %2) ha cambiato squadra! (da %3 a %4) $%1 removed for a teamkill! go to the ophthalmologist... $%1 Enlever pour un tir fratricide. $%1 Strafe für einen Teamkill! Ab zum Augenarzt... -$%1 за огонь по своим. $%1 Rimossi per un Teamkill! Your commander has ordered you to perform a "%1" order for %2! Votre commandeur vous a donner l'ordre "%1" pour une durée de %2! Dein Commander hat dir befohlen, einen "%1"-Befehl für %2 durchzuführen! Ваш командир приказывает "%1" 2%! Il tuo comandante ti ha ordinato di "%1" per una durata di %2! Capture %1 Capturer %1 Erobere %1 Захватить %1 Catture %1 You will be sent back to the lobby for teamswapping. Please join your original team! Vous allez être renvoyé vers l'écran de séléction des rôles pour avoir changé d'équipe. Veuillez rejoindre votre équipe d'origine! Ein Teamwechsel ist nicht erlaubt. Bitte join dein ursprüngliches Team! Вы будете возвращены в лобби за смену команды. Пожалуйста вернитесь в вашу команду! You will be sent back to the lobby for teamswapping. Please join your original team! %1 Upgrade completed, %1 is now at Level %2. Amélioration %1 Complète, %1 est désormais au Niveau %2. %1 wurde ausgebaut und hat jetzt Stufe %2 erreicht. %1 модернизация завершена, достигнут уровень %2. Aggiornamento %1 Completato, %1 è ora a Livello %2. %1 is the Commander. %1 est le Commandeur. %1 ist jetzt der Commander. %1 командует. %1 è il Comandante. %1 has initiated a commander vote. %1 a débuté un vote de commandant. %1 has initiated a commander vote. %1 has initiated a commander vote. %1 has initiated a commander vote. All Tous Alle Все Tutti Auto AI: Enable AI Auto: Activée AutoKI aktivieren Авто ИИ: Вкл AI Automatica: Abilitata Auto AI: Disable AI Auto: Désact. AutoKI deaktivieren Авто ИИ: Откл AI Automatica: Disabilitata Behavior: Comportement: Verhalten: Поведение: Comportamento: Buy Types: Type d'Achats: Truppengattung: Тип отряда: Tipi di Acquisto: Combat Mode: Mode de combat: Kampfmodus: Режим боя: Modalità di Combattimento: Funds: $%1 Fonds: $%1 Kontostand: $%1 Деньги: $%1 Fondi: $%1 Defend Défense Verteidigung Защита Difendi Formation: Formation: Formation: Строй: Formazione: Mission Type Type de Mission Auftrag Тип задания Tipo di Missione Move Déplacement Bewegen Передвижение Muovi Patrol Patrouiller Patrouillieren Патрулирование Pattuglie Respawn Réapparaitre Respawnpunkt Возрождение Respawn Squad Respawn Réapparition Equipe Squad Respawn Squad Respawn Squad Respawn Set Buy Types Définir Type d'Achats Truppengattung des Squad festlegen Установить тип отряда Imposta tipo di acquisto Set Squad Respawn Définir Point de Réapparition Respawnpunkt des Squad festlegen Set Squad Respawn Set Squad Respawn Set Squad Properties Définir Propriétés Equipe Kampfverhalten des Squad festlegen Set Squad Properties Set Squad Properties Speed: Vitesse: Geschwindigkeit: Скорость: Velocità: Squadmember Management Management d'Equipiers Squadmitglieder verwalten Squadmember Management Squadmember Management Squad Management Management d'Equipes Squadverwaltung Squad Management Squad Management Take Towns Prendre Villes Städte einnehmen Захватывать города Cattura Città Special Tasks Tâches spécifiques Spezialaufträge Special Tasks Special Tasks Task Type Type de Tâche Auftrag Тип задачи Tipi di Incarichi Send the order to the squad Envoyer l'ordre à l'équipe Spezialauftrag an Squad senden Envoyer l'ordre à l'équipe Envoyer l'ordre à l'équipe Task Duration Durée de la Tâche Auftragsdauer Продолж. задачи Durata Incarichi Unflip Vehicle Retourner Fahrzeug aufrichten Перевернуть Ribalta Exchangeable Armament System Système d'Echange d'Armement Austauschbares Bewaffnungssystem Система Смены Вооружения Sistema di cambio Armamento Disband Worker Supprimer Travailleur Arbeiter entfernen Disband Worker Disband Worker Hire Worker Engager Travailleur Arbeiter anwerben Нанять рабочего Hire Worker Income Distribution: Distribution de Salaire: Einkommensverteilung: Income Distribution: Income Distribution: Commander Income Salaire Commandant Einkommen für den Commander Доход Командира Commander Income Squadleaders Income Salaire Chef d'Equipe Einkommen für die Squadleader Squadleaders Income Squadleaders Income Set Income Distribution Définir le Salaire Einkommensverteilung festlegen Set Income Distribution Set Income Distribution Sell Structure Vendre Structure Gebäude verkaufen Продать постройку Vendi Strutture HQ-Workers: HQ-Travailleurs: HQ-Arbeiter: HQ-рабочие: HQ-Workers: Soldiers Lost Soldats Perdus Soldaten verloren Погибло солдат Soldati Persi Soldier Recruited Soldats Recrutés Soldaten rekrutiert Мобилизовано солдат Soldati Reclutati Vehicles Built Véhicules Construits Fahrzeuge gebaut Техники построено Veicoli Costruiti Vehicles Lost Véhicules Perdus Fahrzeuge verloren Техники потеряно Veicoli Persi %1 Team has won L'équipe %1 a gagné Team %1 hat gewonnen %1 выиграл! %1 ha Vinto! Cost: Coût: Kosten: Цена: Costo: $%1 $%1 $%1 $%1 $%1 Funds: Fonds: Guthaben: Деньги: Fondi: Equipements Equipements Ausrüstung Снаряжение Equipaggiamento Information:\n\n You may not use the quick reload function since you don't have any custom gear, you need to purchase a loadout first. Information:\n\n Vous ne pouvez pas utiliser la fonction de rechargement rapide puisque vous n'avez pas d'équipement personnalisé, acheter-en un en premier. Information:\n\n You may not use the quick reload function since you don't have any custom gear, you need to purchase a loadout first. Information:\n\n You may not use the quick reload function since you don't have any custom gear, you need to purchase a loadout first. Information:\n\n You may not use the quick reload function since you don't have any custom gear, you need to purchase a loadout first. Squadmember: Equipier: Squadmitglied: Squadmember: Squadmember: Delete Template Supprimer Template Template löschen Delete Template Delete Template Save Template Sauvegarder Template Template speichern Save Template Save Template Information:\n\n You've reached the bases area limit, you can sell old buildings or build in an existing base area. Information:\n\n La limite de bases est atteinte, il est possible de vendre des vieilles structures ou de construire dans une base existante. Information:\n\n Die maximal erlaubte Anzahl an HQs wurde erreicht. Du kannst entweder alte Gebäude verkaufen oder in einer bereits bestehenden Base weiterbauen. Информация:\n\n Количество районов для баз достигло предела, вы можете продать старые здания, или построить в районе существующей базы. Informazioni:\n\n Hai raggiunto il limite di aree basi, puoi vendere le vecchie costruzioni o costruire in un area base esistente. <t color='#F8D664'>Information:</t><br/><br/> Infantry may not be purchased while camps in the city are held by the enemy. <t color='#F8D664'>Information:</t><br/><br/> Il est impossible d'acheter de l'infantrie tant que l'ennemi détient un ou plusieurs camps. <t color='#F8D664'>Information:</t><br/><br/> Infantry may not be purchased while camps in the city are held by the enemy. <t color='#F8D664'>Информация:</t><br/><br/> Infantry may not be purchased while camps in the city are held by the enemy. <t color='#F8D664'>Informazioni:</t><br/><br/> Infantry may not be purchased while camps in the city are held by the enemy. Information:\n\n Manned Vehicles cannot be hooked. Make sure that the vehicle is empty. Information:\n\n Les véhicules avec équipage ne peuvent être accrochées. Assurez-vous que le véhicule est vide. Information:\n\n Es können nur unbemannte Fahrzeuge an den Haken genommen werden. Versichere dich, dass das Fahrzeug leer ist und versuche es noch einmal. Информация:\n\n Техника с юнитами не может перевозиться. Убедись что техника пуста. Informazioni:\n\n I veicoli con a bordo personale non possono essere agganciati, assicurati che sia vuoto. Information:\n\n You've failed to unlock the vehicle. Information:\n\n Vous n'avez pas réussi à déverouiller le véhicule. Information:\n\n Der Versuch, das Fahrzeug mit einem Dietrich zu öffnen ist fehlgeschlagen.\n\n Scheint, als wurde der Dietrich im Baumarkt gekauft, versuche es weiter. Информация:\n\n Вам не удалось открыть транспорт отмычкой. Informazioni:\n\n Non sei riuscito ad aprire il veicolo. Information:\n\n The vehicle has been successfully unlocked. Information:\n\n Le véhicule à été déverouillé avec succès. Information:\n\n Du hast das Fahrzeug mittels einem Dietrich erfolgreich geöffnet. Информация:\n\n Транспорт успешно открыт отмычкой. Informazioni:\n\n Sei riuscito ad aprire il veicolo. Information:\n\n You cannot take another mission while you already have one. Complete it or abort it first. Information:\n\n Vous ne pouvez pas prendre une autre mission car il y a déjà une mission en cours. Terminée la ou abandonée la. Information:\n\n Es ist nicht möglich einen anderen Auftrag zu wählen wenn dir bereits einer zugeordnet ist. Erfülle diesen zuerst oder stoppe den laufenden Auftrag und wähle dann eine neue Stadt als Ziel aus. Информация:\n\n Вы не можете выбрать другое задание, не завершив или не отменив текущее. Informazioni:\n\n Non puoi prendere un'altra missione se ne hai già un'altra, completala o abbandonala prima. Information:\n\n Current Mission Aborted. Information:\n\n Mission en cours Annulé. Information:\n\n Der aktuelle Auftrag wurde abgebrochen. Информация:\n\n Текущее задание отменено. Informazioni:\n\n Missione Attuale Annullata. Information:\n\n You need at last one artillery in order to call a Fire Mission. Information:\n\n Au moins une unité d'artillerie est nécessaire pour utiliser un Appuie Feu. Information:\n\n Du benötigst mindestens eine Artillerie-Einheit, um einen Feuerbefehl erteilen zu können.\n\n Wenn du schon eine besitzt, versichere dich, dass du diese auch ausgewählt hast. Информация:\n\n Для вызова артиллерии у Вас должна быть хотя бы одна арт. установка. Informazioni:\n\n Hai bisogno di almeno un unità di artiglieria per chiamare il fuoco di soppressione. Information:\n\n An aerial unit has been called according to your order, it shall arrive here quite soon. Information:\n\n Une unité aérienne a été assigner sur votre demande, elle sera la sous peut. Information:\n\n Die angeforderten Fallschirmjäger sind auf dem Weg zur Absetzstelle. Информация:\n\n По вашему приказу вызван десантный ЛА, он скоро прибудет на место. Informazioni:\n\n Un unità aerea è stata assegnata su vostra richiesta, arriverà presto. Information:\n\n You can select a respawn location by clicking on the map Yellow Circle. Information:\n\n Il est possible de sélectionner un point de réapparation en cliquant sur les Cercles Jaunes de la carte. Information:\n\n Wähle deinen Respawnpunkt in dem du auf einen der gelben Kreise klickst. Информация:\n\n Вы можете выбрать место возрождения, кликнув по желтому кругу на карте. Informazioni:\n\n Puoi selezionare un punto di riapparizione cliccando sui cerchi gialli nella mappa. Information:\n\n The MHQ is already being repaired. Information:\n\n Le PC est déjà en cours de réparation. Information:\n\n Das MHQ ist bereits repariert. Информация:\n\n КШМ уже в ремонте. Informazioni:\n\n The MHQ is already being repaired. Information:\n\n %1 %2 Needed in order to repair the MHQ. Information:\n\n %1 %2 Manquant afin de réparer le PC. Information:\n\n %1 %2 sind erforderlich um das MHQ zu reparieren. Информация:\n\n %1 %2 необходимо для восстановления КШМ. Informazioni:\n\n %1 %2 Needed in order to repair the MHQ. Information:\n\n There is no MHQ to repair around. Information:\n\n Il n'y a aucun PC à réparer a proximité. Information:\n\n Es ist kein MHQ in der Nähe das repariert werden muss.\n\n Verichere dich, dass der Reparatur LKW nah genug am MHQ steht. Информация:\n\n There is no MHQ to repair around. Informazioni:\n\n There is no MHQ to repair around. Information:\n\n The MHQ is being fixed... Information:\n\n Le PC est en cours de réparation... Information:\n\n Das MHQ wird repariert... Информация:\n\n КШМ ремонтируется... Informazioni:\n\n The MHQ is being fixed... Information:\n\n A Supply truck of your team has delivered supplies at %1, the supply value is now %2/%3. $%4. Gained during the delivery. Information:\n\n Un Camion Logistique de votre équipe a livré de la logistique à %1, la valeur logistique est désormais de %2/%3. $%4. gagné lors de la livraison. Information:\n\n Ein Versorgungs LKW deines Teams hat Nachschub zu %1 geliefert, neuer Stand: %2/%3. Du hast $%4 für die Lieferung erhalten. Информация:\n\n Грузовик снабжения доставил 1% единиц припасов. Объем припасов %2/%3. $%4 Получено во время доставки. Informazioni:\n\n Un Camion Supply del tuo Team ha consegnato a %1, il valore dei rifornimenti è ora %2/%3. $%4. Aumentati durante la consegna. Information:\n\n A Supply truck of your team has delivered supplies at %1, the supply value is %2/%3. Information:\n\n Un Camion Logistique de votre équipe a livré de la logistique à %1, la valeur logistique est de %2/%3. Information:\n\n Ein Versorgungs LKW deines Teams hat Nachschub zu %1 geliefert, neuer Stand: %2/%3. Информация:\n\n Грузовик снабжения доставил %1 единиц припасов, Объем припасов %2/%3. Informazioni:\n\n Un Camion Supply del tuo Team ha consegnato a %1, il valore dei rifornimenti è ora %2/%3. Information:\n\n The Supply truck is fully loaded. Information:\n\n Le Camion Logistique est chargé au maximum. Information:\n\n Der Versorgungs LKW ist voll beladen. Информация:\n\n Грузовик снабжения заполнен. Informazioni:\n\n Il Camion Supply è completamente carico. Information:\n\n The Supply truck has %1 supplies in cargo. Information:\n\n Le Camion Logistique dispose de %1 logistique en chargement. Information:\n\n Der Versorgungs LKW hat %1 Einheiten geladen. Информация:\n\n В грузовик снабжения загружено %1 единиц поставки. Informazioni:\n\n Il Camion Supply ha caricato %1 Supply. Information:\n\n Spotting Ability require the use of binoculars. Information:\n\n Le Repérage requiert l'utilisation d'une paire de jumelle. Information:\n\n Zum Beobachten wird ein Fernglas benötigt!\n\n Über das Ausrüstungsmenü kannst du dir ein Fernglas kaufen. Информация:\n\n Чтобы указать цель используйте бинокль. Informazioni:\n\n Hai bisogno del binocolo per Individuare. Information:\n\n Starting %1 Upgrade. Information:\n\n Amélioration %1 en cours. Information:\n\n Der Ausbau für %1 wurde gestartet. Информация:\n\n Начата модернизация: %1. Informazioni:\n\n Aggiornamento %1 in corso. <t color='#F8D664'>Information:</t><br/><br/> Building <t color='#85B5FA'>%1</t>. <t color='#F8D664'>Information:</t><br/><br/> <t color='#85B5FA'>%1</t> en Production. <t color='#F8D664'>Information:</t><br/><br/> Dein <t color='#85B5FA'>%1</t> wird gebaut. <t color='#F8D664'>Информация:</t><br/><br/> <t color='#85B5FA'>%1</t> в производстве. <t color='#F8D664'>Informazioni:</t><br/><br/> <t color='#85B5FA'>%1</t> In Costruzione. <t color='#F8D664'>Information:</t><br/><br/> Your <t color='#85B5FA'>%1</t> has arrived. <t color='#F8D664'>Information:</t><br/><br/> Votre <t color='#85B5FA'>%1</t> est arrivé. <t color='#F8D664'>Information:</t><br/><br/> Dein <t color='#85B5FA'>%1</t> ist angekommen. <t color='#F8D664'>Информация:</t><br/><br/> <t color='#85B5FA'>%1</t> готов. <t color='#F8D664'>Informazioni:</t><br/><br/> il Tuo <t color='#85B5FA'>%1</t> è arrivato. <t color='#F8D664'>Information:</t><br/><br/> EASA Setup Purchased: <t color='#85B5FA'>%1</t>. <t color='#F8D664'>Information:</t><br/><br/> Configuration EASA achetée: <t color='#85B5FA'>%1</t>. <t color='#F8D664'>Information:</t><br/><br/> EASA Einstellung erworben: <t color='#85B5FA'>%1</t>. <t color='#F8D664'>Информация:</t><br/><br/> Приобретен набор EASA: <t color='#85B5FA'>%1</t>. <t color='#F8D664'>Informazioni:</t><br/><br/> EASA Setup Acquistato: <t color='#85B5FA'>%1</t>. <t align='left' color='#8A9269'>My Funds: $<t color='#76F563'>%1</t>.</t> <t align='left' color='#8A9269'>Mes Fonds: $<t color='#76F563'>%1</t>.</t> <t align='left' color='#8A9269'>My Funds: $<t color='#76F563'>%1</t>.</t> <t align='left' color='#8A9269'>My Funds: $<t color='#76F563'>%1</t>.</t> <t align='left' color='#8A9269'>My Funds: $<t color='#76F563'>%1</t>.</t> <t color='#F8D664'>Information:</t><br/><br/> You are currently missing $<t color='#85B5FA'>%1</t> in order to buy: <t color='#85B5FA'>%2</t>. <t color='#F8D664'>Information:</t><br/><br/> Il vous manque $<t color='#85B5FA'>%1</t> pour acheter: <t color='#85B5FA'>%2</t>. <t color='#F8D664'>Information:</t><br/><br/> Du hast nicht genug Geld!<br/><br/>Dir fehlen $<t color='#85B5FA'>%1</t> um <t color='#85B5FA'>%2</t> kaufen zu können. <t color='#F8D664'>Информация:</t><br/><br/> Не хватает $<t color='#85B5FA'>%1</t> для покупки: <t color='#85B5FA'>%2</t>. <t color='#F8D664'>Informazioni:</t><br/><br/> Ti Mancano $<t color='#85B5FA'>%1</t> per comprare: <t color='#85B5FA'>%2</t>. <t color='#F8D664'>Information:</t><br/><br/> You are currently missing $<t color='#85B5FA'>%1</t> in order to buy this loadout. <t color='#F8D664'>Information:</t><br/><br/> Il vous manque $<t color='#85B5FA'>%1</t> pour acheter cette configuration d'équipement. <t color='#F8D664'>Information:</t><br/><br/> Du hast nicht genug Geld!<br/><br/>Dir fehlen $<t color='#85B5FA'>%1</t> um dir deine Ausrüstung kaufen zu können. <t color='#F8D664'>Информация:</t><br/><br/> Не хватает $<t color='#85B5FA'>%1</t> для покупки снаряжения <t color='#F8D664'>Informazioni:</t><br/><br/> Ti Mancano $<t color='#85B5FA'>%1</t> per comprare questo equipaggiamento. <t color='#42b6ff' size='1.2' underline='1' shadow='1'>Information:</t><br/><br/> You may not transfer money to <t color='#BD63F5'>yourself</t>. <t color='#42b6ff' size='1.2' underline='1' shadow='1'>Information:</t><br/><br/> Il est impossible de s'envoyer de l'argent à <t color='#BD63F5'>soi-même</t>. <t color='#42b6ff' size='1.2' underline='1' shadow='1'>Information:</t><br/><br/> You may not transfer money to <t color='#BD63F5'>yourself</t>. <t color='#42b6ff' size='1.2' underline='1' shadow='1'>Information:</t><br/><br/> You may not transfer money to <t color='#BD63F5'>yourself</t>. <t color='#42b6ff' size='1.2' underline='1' shadow='1'>Information:</t><br/><br/> You may not transfer money to <t color='#BD63F5'>yourself</t>. <t color='#42b6ff' size='1.2' underline='1' shadow='1'>Information:</t><br/><br/> <t color='#76F563'>$%1.</t> were sent to <t color='#BD63F5'>%2</t>. <t color='#42b6ff' size='1.2' underline='1' shadow='1'>Information:</t><br/><br/> <t color='#76F563'>$%1.</t> ont été transférés à <t color='#BD63F5'>%2</t>. <t color='#42b6ff' size='1.2' underline='1' shadow='1'>Information:</t><br/><br/> <t color='#76F563'>$%1.</t> were sent to <t color='#BD63F5'>%2</t>. <t color='#42b6ff' size='1.2' underline='1' shadow='1'>Information:</t><br/><br/> <t color='#76F563'>$%1.</t> were sent to <t color='#BD63F5'>%2</t>. <t color='#42b6ff' size='1.2' underline='1' shadow='1'>Information:</t><br/><br/> <t color='#76F563'>$%1.</t> were sent to <t color='#BD63F5'>%2</t>. <t color='#F8D664'>Information:</t><br/><br/> This weapon/loadout cannot be purchased due to your current loadout settings. <br/><br/> (The <t color='#85B5FA'>Realistic Gear</t> parameter prevent the use of heavy primary weapons with launchers or backpacks). <t color='#F8D664'>Information:</t><br/><br/> Cette arme ou ensemble d'équipement ne peut être acheter en raison de votre équipement courant (Le paramètre <t color='#85B5FA'> Equipement réalistique </t> empêche l'utilisation d'armement lourd avec des lance-missiles ou des sac à dos). <t color='#F8D664'>Information:</t><br/><br/> Diese Waffe bzw. diese Ausrüstungszusammenstellung kann nicht gekauft werden.<br/><br/>Der Parameter <t color='#85B5FA'>Realistische Ausrüstung</t> verbietet die Verwendung von schweren Primärwaffen mit Raketenwerfern und/oder Rucksäcken. <t color='#F8D664'>Информация:</t><br/><br/> Это оружие/не может быть куплено из за настроек игры. <br/><br/> (The <t color='#85B5FA'>Реалистичное оружие</t> параметр использования тяжелого оружия с гранатометами или рюкзаками). <t color='#F8D664'>Informazioni:</t><br/><br/> Questo tipo di equipaggiamento non può essere acquistato a causa delle impostazioni attuali sull'armamento. <br/><br/> (Il parametro <t color='#85B5FA'>Armamento Realistico</t> impedisce l'uso di armi pesanti con lanciarazzi o zaini). <t color='#F8D664'>Information:</t><br/><br/> A <t color='#85B5FA'>%1</t> is being healed. <br/><br/>Please wait for <t color='#85B5FA'>%2</t> seconds during the healing... <t color='#F8D664'>Information:</t><br/><br/> Un <t color='#85B5FA'>%1</t> est en cours de soins. <br/><br/>Veuillez attendre <t color='#85B5FA'>%2</t> secondes durant les soins... <t color='#F8D664'>Information:</t><br/><br/> <t color='#85B5FA'>%1</t> wird behandelt. <br/><br/>Die Behandlung dauert <t color='#85B5FA'>%2</t> Sekunden... <t color='#F8D664'>Информация:</t><br/><br/> A <t color='#85B5FA'>%1</t> лечится. <br/><br/>Пожалуйста подождите <t color='#85B5FA'>%2</t> секунд для лечения... <t color='#F8D664'>Informazioni:</t><br/><br/> A <t color='#85B5FA'>%1</t> is being healed. <br/><br/>Please wait for <t color='#85B5FA'>%2</t> seconds during the healing... <t color='#F8D664'>Information:</t><br/><br/> A <t color='#85B5FA'>%1</t> has failed to be healed. <t color='#F8D664'>Information:</t><br/><br/> Un <t color='#85B5FA'>%1</t> n'a pas été soigner. <t color='#F8D664'>Information:</t><br/><br/> Die Behandlung des <t color='#85B5FA'>%1</t> ist fehlgeschlagen. <t color='#F8D664'>Информация:</t><br/><br/> <t color='#85B5FA'>%1</t> не вылечен. <t color='#F8D664'>Informazioni:</t><br/><br/> A <t color='#85B5FA'>%1</t> has failed to be healed. <t color='#F8D664'>Information:</t><br/><br/> A <t color='#85B5FA'>%1</t> has been successfully healed. <t color='#F8D664'>Information:</t><br/><br/> Un <t color='#85B5FA'>%1</t> a été soigner. <t color='#F8D664'>Information:</t><br/><br/> Der <t color='#85B5FA'>%1</t> wurde erfolgreich behandelt. <t color='#F8D664'>Информация:</t><br/><br/> A <t color='#85B5FA'>%1</t> вылечен. <t color='#F8D664'>Informazioni:</t><br/><br/> A <t color='#85B5FA'>%1</t> has been successfully healed. <t color='#F8D664'>Information:</t><br/><br/> Units Limit reached (<t color='#85B5FA'>%1</t> Units). <t color='#F8D664'>Information:</t><br/><br/> Maximum d'Unité atteint (<t color='#85B5FA'>%1</t> Unités). <t color='#F8D664'>Information:</t><br/><br/> Das Einheiten-Limit wurde erreicht<br /><br /> (max.<t color='#85B5FA'>%1</t> Einheiten). <t color='#F8D664'>Информация:</t><br/><br/> Достигнут лимит отряда (<t color='#85B5FA'>%1</t> человек). <t color='#F8D664'>Informazioni:</t><br/><br/> Limite Unità Raggiunto (<t color='#85B5FA'>%1</t> Unità). <t color='#EB0606'>Warning!</t> <br/><br/> You are leaving the battlefield!<br/><br/> <t color='#EB0606'> %1 </t> Seconds left. <t color='#EB0606'>Attention!</t> <br/><br/> Vous quittez le champs de bataille!<br/><br/> <t color='#EB0606'>%1</t> Secondes restantes. <t color='#EB0606'>Warnung!</t> <br/><br/> Du hast das Schlachtfeld verlassen!<br/><br/> Du hast <t color='#EB0606'>%1</t> Sekunden Zeit, um auf das Schlachtfeld zurückzukehren. <t color='#EB0606'>Warning!</t> <br/><br/> Вы покинули поле битвы!Осталось <br/><br/> <t color='#EB0606'>%1</t> секунд до наказания. <t color='#EB0606'>Warning!</t> <br/><br/> Stai lasciando il campo di battaglia!<br/><br/> <t color='#EB0606'>%1</t> Secondi rimasti. <t color='#F8D664'>Information:</t><br/><br/> <t color='#85B5FA'>%1</t> Queued. <t color='#F8D664'>Information:</t><br/><br/> <t color='#85B5FA'>%1</t> Mis en attente. <t color='#F8D664'>Information:</t><br/><br/> Dein <t color='#85B5FA'>%1</t> befindet sich in der Warteschlange. <t color='#F8D664'>Информация:</t><br/><br/> <t color='#85B5FA'>%1</t> на очереди. <t color='#F8D664'>Informazioni:</t><br/><br/> <t color='#85B5FA'>%1</t> In Coda. <t color='#F8D664'>Information:</t><br/><br/> The maximal queue has been reached for this factory (<t color='#85B5FA'>%1</t>), please be patient. <t color='#F8D664'>Information:</t><br/><br/> La file d'attente maximale à été atteinte pour cette usine (<t color='#85B5FA'>%1</t>), veuillez patienter. <t color='#F8D664'>Information:</t><br/><br/> Diese Fabrik hat das Limit für die Warteschlange erreicht (<t color='#85B5FA'>%1</t>), könnte also ein wenig dauern. <t color='#F8D664'>Информация:</t><br/><br/> очередь завода достигла максимума (<t color='#85B5FA'>%1</t>), пожалуйста подождите. <t color='#F8D664'>Informazioni:</t><br/><br/> The maximal queue has been reached for this factory (<t color='#85B5FA'>%1</t>), please be patient. <t color='#F8D664'>Information:</t><br/><br/> A <t color='#85B5FA'>%1</t> is being rearmed. <br/><br/>Please wait for <t color='#85B5FA'>%2</t> seconds during the rearm process... <t color='#F8D664'>Information:</t><br/><br/> Un <t color='#85B5FA'>%1</t> est en cours de réarmement. <br/><br/>Veuillez attendre <t color='#85B5FA'>%2</t> secondes durant la phase de réarmement... <t color='#F8D664'>Information:</t><br/><br/> <t color='#85B5FA'>%1</t> wird aufmunitioniert. <br/><br/>Das Aufmunitionieren dauert <t color='#85B5FA'>%2</t> Sekunden... <t color='#F8D664'>Информация:</t><br/><br/> <t color='#85B5FA'>%1</t> перевооружается. <br/><br/>Ждите <t color='#85B5FA'>%2</t> секунд для перезарядки... <t color='#F8D664'>Informazioni:</t><br/><br/> A <t color='#85B5FA'>%1</t> riarmo in corso. <br/><br/>Please wait for <t color='#85B5FA'>%2</t> seconds during the rearm process... <t color='#F8D664'>Information:</t><br/><br/> A <t color='#85B5FA'>%1</t> has failed to be rearmed. <t color='#F8D664'>Information:</t><br/><br/> Un <t color='#85B5FA'>%1</t> n'a pas été réarmé. <t color='#F8D664'>Information:</t><br/><br/> Das Aufmunitionieren von <t color='#85B5FA'>%1</t> ist fehlgeschlagen. <t color='#F8D664'>Информация:</t><br/><br/> <t color='#85B5FA'>%1</t> не перезаряжена. <t color='#F8D664'>Informazioni:</t><br/><br/> A <t color='#85B5FA'>%1</t> riarmo fallito. <t color='#F8D664'>Information:</t><br/><br/> A <t color='#85B5FA'>%1</t> has been rearmed. <t color='#F8D664'>Information:</t><br/><br/> Un <t color='#85B5FA'>%1</t> a été réarmé. <t color='#F8D664'>Information:</t><br/><br/> <t color='#85B5FA'>%1</t> wurde erfolgreich aufmunitioniert. <t color='#F8D664'>Информация:</t><br/><br/> <t color='#85B5FA'>%1</t> перезаряжена. <t color='#F8D664'>Informazioni:</t><br/><br/> A <t color='#85B5FA'>%1</t> è stato riarmato. <t color='#F8D664'>Information:</t><br/><br/> A <t color='#85B5FA'>%1</t> is being refueled. <br/><br/>Please wait for <t color='#85B5FA'>%2</t> seconds during the refuel process... <t color='#F8D664'>Information:</t><br/><br/> Un <t color='#85B5FA'>%1</t> est en cours de ravitaillement. <br/><br/>Veuillez attendre <t color='#85B5FA'>%2</t> secondes durant la phase de ravitaillement... <t color='#F8D664'>Information:</t><br/><br/> <t color='#85B5FA'>%1</t> wird aufgetankt. <br/><br/>Die Betankung dauert <t color='#85B5FA'>%2</t> Sekunden... <t color='#F8D664'>Информация:</t><br/><br/> <t color='#85B5FA'>%1</t> заправляется. <br/><br/>Пожалуйста ждите <t color='#85B5FA'>%2</t> секунд для заправки... <t color='#F8D664'>Informazioni:</t><br/><br/> A <t color='#85B5FA'>%1</t> rifornimento in corso. <br/><br/>Please wait for <t color='#85B5FA'>%2</t> seconds during the refuel process... <t color='#F8D664'>Information:</t><br/><br/> A <t color='#85B5FA'>%1</t> has failed to be refueled. <t color='#F8D664'>Information:</t><br/><br/> Un <t color='#85B5FA'>%1</t> n'a pas été ravitaillé. <t color='#F8D664'>Information:</t><br/><br/> Die Betankung von <t color='#85B5FA'>%1</t> ist fehlgeschlagen. <t color='#F8D664'>Информация:</t><br/><br/> <t color='#85B5FA'>%1</t> обломись с заправкой. <t color='#F8D664'>Informazioni:</t><br/><br/> A <t color='#85B5FA'>%1</t> rifornimento fallito. <t color='#F8D664'>Information:</t><br/><br/> A <t color='#85B5FA'>%1</t> has been refueled. <t color='#F8D664'>Information:</t><br/><br/> Un <t color='#85B5FA'>%1</t> a été ravitaillé. <t color='#F8D664'>Information:</t><br/><br/> Die Betankung von <t color='#85B5FA'>%1</t> wurde erfolgreich abgeschlossen. <t color='#F8D664'>Информация:</t><br/><br/> <t color='#85B5FA'>%1</t> полный бак. <t color='#F8D664'>Informazioni:</t><br/><br/> A <t color='#85B5FA'>%1</t> è stato rifornito. <t color='#F8D664'>Information:</t><br/><br/> A <t color='#85B5FA'>%1</t> is being repaired. <br/><br/>Please wait for <t color='#85B5FA'>%2</t> seconds during the reparations... <t color='#F8D664'>Information:</t><br/><br/> Un <t color='#85B5FA'>%1</t> est en cours de réparation. <br/><br/>Veuillez attendre <t color='#85B5FA'>%2</t> secondes durant les réparations... <t color='#F8D664'>Information:</t><br/><br/> <t color='#85B5FA'>%1</t> wird repariert. <br/><br/>Die Reparatur dauert <t color='#85B5FA'>%2</t> Sekunden... <t color='#F8D664'>Информация:</t><br/><br/> <t color='#85B5FA'>%1</t> ремонтируется. <br/><br/>Ждите <t color='#85B5FA'>%2</t> секунд для починки... <t color='#F8D664'>Informazioni:</t><br/><br/> A <t color='#85B5FA'>%1</t> riparazione in corso. <br/><br/>Please wait for <t color='#85B5FA'>%2</t> secondi al termine della riparazione... <t color='#F8D664'>Information:</t><br/><br/> A <t color='#85B5FA'>%1</t> has failed to be repaired. <t color='#F8D664'>Information:</t><br/><br/> Un <t color='#85B5FA'>%1</t> n'a pas été reparé. <t color='#F8D664'>Information:</t><br/><br/> Die Reparatur von <t color='#85B5FA'>%1</t> ist fehlgeschlagen. <t color='#F8D664'>Информация:</t><br/><br/> <t color='#85B5FA'>%1</t> обломись с починкой. <t color='#F8D664'>Informazioni:</t><br/><br/> A <t color='#85B5FA'>%1</t> riparazione fallita. <t color='#F8D664'>Information:</t><br/><br/> A <t color='#85B5FA'>%1</t> has been successfully repaired. <t color='#F8D664'>Information:</t><br/><br/> Un <t color='#85B5FA'>%1</t> a été reparé. <t color='#F8D664'>Information:</t><br/><br/> Die Reparatur von <t color='#85B5FA'>%1</t> wurde erfolgreich abgeschlossen. <t color='#F8D664'>Информация:</t><br/><br/> <t color='#85B5FA'>%1</t> все путем. <t color='#F8D664'>Informazioni:</t><br/><br/> A <t color='#85B5FA'>%1</t> è stato completamente riparato Command Center Center de Commandement Command Center Command Center Command Center Economy Economie Wirtschaft Economy Economy Funds Transfer Menu : Menu de Transfer de Fonds : Funds Transfer Menu : Funds Transfer Menu : Funds Transfer Menu : Groups Menu Menu de Groupes Groups Menu Groups Menu Groups Menu Purchase Units Achat Unités Einheiten kaufen Отряды Compra Unità Purchase Gear Achat Equipement Ausrüstung kaufen Снаряжение Equipaggiamento Service point Point de service Wartungsstation Пункт обслуживания Punto di servizio Team Equipe Team команда Team Tactical Center Centre Tactique Tactical Center Tactical Center Tactical Center Uptime: %1 days, %2 hours, %3 minutes, %4 seconds Uptime: %1 jours, %2 heures, %3 minutes, %4 secondes Spielzeit: %1 Tage, %2 Stunden, %3 Minuten, %4 Sekunden Время работы: %1 день, %2 часов, %3 минут, %4 секунд Uptime: %1 giorni, %2 ore, %3 minuti, %4 secondi Factory Upgrade Menu d'Amélioration Fabrikausbau Модернизация Menu Aggiornamenti Voting Vote Voting Голосование Voting One of our scout team has reported us that multiple resistance squads are heading toward our base.<br/><br/>According to the report, theirs arrival is imminent, we will have to defend the base at all cost, HQ has ordered us to neutralize the threat even if the base is lost.<br/><br/> Une de nos équipes de reconnaissance nous a informé de l'arrivé de plusieurs escouades resistantes vers notre base.<br/><br/>D'après le rapport officiel, leurs arrivées est imminente. Nous allons devoir défendre la base à tout prix, le QG nous a ordonné de neutraliser cette menace même si la base est perdue.<br/><br/> Eine unserer Aufklärungseinheit hat soeben berichtet, dass mehrere Einheiten des Widerstand, auf unser Hauptquartier zumaschieren.<br/><br/>Dem Bericht zufolge, steht ihre Ankunft und ein damit verbundener Angriff unmittelbar bevor. Das Hauptquartier muss unter allen Umständen verteidigt und die Aggressoren eliminiert werden, koste es was es wolle.<br/><br/> Одна из наших разведкоманд сообщает о многочисленных отрядах сопротивления приближающихся к нашей базе.<br/><br/>Из их доклада следует что нападение неизбежно, мы должны защитить базу любой ценой, штаб приказал нейтрализовать угрозу даже если база уничтожена.<br/><br/> One of our scout team has reported us that multiple resistance squads are heading toward our base.<br/><br/>According to the report, theirs arrival is imminent, we will have to defend the base at all cost, HQ has ordered us to neutralize the threat even if the base is lost.<br/><br/> Defense: Base Défense: Base Verteidigung: HQ Защитить Базу Defense: Base Search and Destroy: Vehicle Recherche et Destruction: Véhicule Search and Destroy: Luftangriff Найти и уничтожить: Машина Search and Destroy: Vehicle HQ warned us about an incomming mercenary helicopter hunting down our Squadleaders.<br/><br/>Your mission is to locate and destroy that helicopter.<br/><br/> Le QG nous à alerté de l'arrivée d'un hélicoptère mercenaire chassant nos chefs d'équipes.<br/><br/>Votre mission est de trouver et détruire cette hélicoptère.<br/><br/> Das Hauptquartier warnt vor einem feindlichen Hubschrauber, der Jagd auf unsere Squadleader macht.<br/><br/>Die Mission ist es, den Hubschrauber zu lokalisieren und zu zerstören.<br/><br/> Штаб уведомил нас о приближающемся вертолете наемников,охотящимся на командиров отделений.<br/><br/>Ваша задача - обнаружить и уничтожить вертолет.<br/><br/> HQ warned us about an incomming mercenary helicopter hunting down our Squadleaders.<br/><br/>Your mission is to locate and destroy that helicopter.<br/><br/> Defense: %1 Défense: %1 Verteidigung: %1 Защита: %1 Difesa: %1 Our intels has informed us that a resistance commander is planning an attack on <marker name='%1Depot'>%1<marker>.<br/><br/>The attack will be launched soon, make sure to defend that town at all cost.<br/><br/>A Search and Destroy mission will be necessary to complete %1 defense.<br/><br/> Nos renseignements nous indique qu'un commandant resistant plannifie d'attaquer <marker name='%1Depot'>%1<marker>.<br/><br/> L'attaque doit avoir lieu bientôt, assurez-vous de défendre cette ville à tout prix.<br/><br/>Une mission de Recherche et Destruction sera nécessaire finaliser la défense de %1.<br/><br/> Unser Geheimdienst hat Informationen, dass der Commander des Widerstands einen Angriff auf <marker name='%1Depot'>%1<marker>.<br/><br/> plant. Der Angriff wird voraussichtlich in Kürze stattfinden. Verteidige die Stadt unter allen Umständen.<br/><br/>Eine Search and Destroy Mission wird notwendig sein, um die Verteidigung von %1 sicherzustellen.<br/><br/> Наша разведка сообщила нам, что командующий силами сопротивления планирует нападение на <marker name='%1Depot'>%1<marker>.<br/><br/> Наступление начнется скоро, будте уверены, этот город должен быть защищен любой ценой.<br/><br/>Необходимо найти и уничтожить силы сопротивления %1 defense.<br/><br/> La nostra Inteligence ci ha informato che commando della resistenza sta pianificando un attacco a <marker name='%1Depot'>%1<marker>.<br/><br/>L'attacco verra lanciato preso, assicurati di difentere questa città a tutti i costi.<br/><br/>Una missione di ricerca e distruzione sarà necessaria per completare la difesa di %1.<br/><br/> From what we've learned from our intels, an UAV has been shot down in this area, retrieving it's module is essential for our team as it contains critical intel about enemy forces. <br/><br/>Once that your team has secured the crash site, we will send a team to retrieve the module, make sure to protect them.<br/><br/> D'après ce que nos renseignements nous ont appris, un Drone a été abattu dans cette zone, il est essentiel de recupérer son module en raison d'importants renseignements qu'il contient sur les forces enemies. <br/><br/> Une fois le site du crash sécurisé, nous enverrons une équipe récuperer le module, assurez-vous de les protéger.<br/><br/> Von dem was wir von unserem Geheimdienst wissen, wurde in dieser Gegend ein UAV abgeschossen. Das UAV hat im Laufe seines Einsatzes sehr wichtige Informationen über die feindlichen Streitkräfte sammeln können, die für uns von strategischer Wichtigkeit sind. Deshalb hat die Bergung des Moduls oberste Priorität. <br/><br/>Sobald die Absturzstelle gesichert wurde, werden wir einen Bergungstrupp aussenden, um das Modul zu bergen. Sichere die Absturzstelle, bis die Bergung abgeschlossen ist!<br/><br/> По данным нашей разведки БЛА был сбит в этом районе, нужно вернуть модуль БЛА так как он важен для нашей команды, поскольку содержит критически важные сведения о вражеских силах, <br/><br/> Как только Ваша команда обнаружит место крушения, мы пошлем команду, чтобы извлечь модуль, позаботьтесь об их защите.<br/><br/> Da quello che abbiamo appreso dalla nostra Inteligence, un UAV è stato abbattuto in questa area, recuperare il suo modulo è essenziale per noi perchè contiene informazioni critiche sulle forze nemiche <br/><br/> Una volta assicurata la zona dove è caduto, manderemo un team a recuperare il modulo, assicurati di proteggerlo.<br/><br/> Assist: UAV Module Retrieval Assistance: Recupération Module Drone Unterstützung: UAV-Modul bergen Помощь: Поиск модуля БЛА Assist: Recupero Modulo UAV AI: Client-side Delegation IA: Délégation Cliente AI: Client-side Delegation AI: Client-side Delegation AI: Client-side Delegation AI: Group Size Squads (AI) IA: Taille du Groupe (Equipes IA) KI: Max. Größe für Squads (KI) ИИ: Размер отряда IA: Dimensione Gruppo (Squadre IA) AI: Group Size Squads (Player) IA: Taille du Groupe (Joueur) KI: Max. Größe für Squads (Spieler) ИИ: Размер отряда (Игрок) IA: Dimensione Gruppo (Giocatore) AI: Keep units on JIP IA: Maintien des unités durant JIP KI: Squads bei JIP beibehalten ИИ: Сохранять состав отряда IA: Mantieni unità durante JIP AI: Squads IA: Equipes KI: Squads ИИ: Отряды IA: Squadre ARTILLERY: Calls ARTILLERIE: Support ARTILLERIE: Unterstützung Артиллерия: Вызов арт.удара Artiglieria ARTILLERY: Computer ARTILLERIE: Ordinateur ARTILLERIE: Computer Артилерийский компютер Artillery: Computer ARTILLERY: Interface ARTILLERIE: Interface ARTILLERIE: Interface Артиллерия: Интерфейс Artiglieria: Interfaccia BASE: Allow AI Commander BASE: Autoriser Commandant IA BASE: KI-Commander erlauben Base: Allow AI Commander Base: Allow IA Commander BASE: Allies BASE: Alliés BASE: Alliierte Basis bei Spielstart für База: Союзники Base: Alleati BASE: Anti-Air Radar BASE: Radar Anti-Air BASE: Luftraumüberwachungsradar База: Радар ПВО Base: Radar Anti Aereo BASE: Areas Limit BASE: Limite de Zones BASE: Anzahl limitieren База: Ограничение районов Base: Limite Area BASE: Auto manned Defenses BASE: Auto manned Defenses BASE: Autom. bemannte Verteidigungsanlagen База: Auto manned Defenses Base: Auto manned Defenses BASE: Auto Defenses Range BASE: Portée Défenses Auto BASE: Autom. Verteidigungsradius База: Область автоматической защиты Base: Raggio Difese Automatiche BASE: Buildings Limit (Servicepoint x2) BASE: Limite Batiments (Servicepoint x2) BASE: Gebäudelimit pro Base (Wartungsstation x2) База: Лимит строений Base: Limite Costruzioni BASE: Construction Mode BASE: Mode de Construction BASE: Aufbau erfolgt über База: Режим Строительства Base: Construction Mode BASE: Structures Placement BASE: Placement de Défenses BASE: Structures Placement BASE: Structures Placement BASE: Structures Placement BASE: HQ Deployment Cost BASE: Coût de deploiement HQ BASE: Aufbaukosten (HQ) База: Развертывание HQ Base: Costo dispiegamento HQ BASE: HQ Deploy Range BASE: Rayon de Deploiement du QG BASE: Aufbaugebiet (Radius) База: Штаб-Область развертывания Base: HQ Deploy Range BASE: Patrols (Infantry) BASE: Patrouilles (Infantrie) BASE: Patrols (Infantry) BASE: Patrols (Infantry) BASE: Patrols (Infantry) BASE: Start Near towns BASE: Placement près des Villes BASE: In Stadtnähe bei Spielstart База: Позиция около городов Base: Inizio Città Vicine BASE: Starting Distance BASE: Distance de Démarrage BASE: Distanz zum anderen Team bei Spielstart База: Начальная дистанция Base: Distanza Iniziale BASE: Starting Locations BASE: Position de Démarrage BASE: Geographische Lage bei Spielstart База: Позиция на старте Base: Posizione Iniziale ECONOMY: Currency ECONOMIE: Monaie ÖKONOMIE: Währungssystem Экономика: Валюта Economy: Currency ECONOMY: Income Interval ECONOMIE: Intervalle de Rémunération ÖKONOMIE: Einkommensinterval Экономика: Интервал дохода Economia: Intervallo Entrate ECONOMY: Income System ECONOMIE: Système de Rémunération ÖKONOMIE: Einkommenssystem Экономика: Приход денег Economia: Sistema Entrate ECONOMY: Starting Funds (East) ECONOMIE: Fonds de départ (Est) ÖKONOMIE: Startkapital für Spieler (Ostblock) Экономика: Деньги на старте (Восток) Economia: Fondi Iniziali (Est) ECONOMY: Starting Funds (Resistance) ECONOMIE: Fonds de départ (Résistance) ÖKONOMIE: Startkapital für Spieler (Widerstand) Экономика: Деньги на старте (Сопротивление) Economia: Fondi Iniziali (Resistenza) ECONOMY: Starting Funds (West) ECONOMIE: Fonds de départ (Ouest) ÖKONOMIE: Startkapital für Spieler (Westmächte) Экономика: Деньги на старте (Запад) Economia: Fondi Iniziali (Ovest) ECONOMY: Starting Supply (East) ECONOMIE: Logistique de départ (Est) ÖKONOMIE: Start-Supply (Ostblock) Экономика: Снабжение на старте (Восток) Economia: Supply Iniziali (Est) ECONOMY: Starting Supply (Resistance) ECONOMIE: Logistique de départ (Résistance) ÖKONOMIE: Start-Supply (Widerstand) Экономика: Снабжение на старте (Сопротивление) Economia: Supply Iniziali (Resistenza) ECONOMY: Starting Supply (West) ECONOMIE: Logistique de départ (Ouest) ÖKONOMIE: Start-Supply (Westmächte) Экономика: Снабжение на старте (Запад) Economia: Supply Iniziali (Ovest) ECONOMY: Supply System ECONOMIE: Système Logistique ÖKONOMIE: Versorgungssystem erfolgt über Экономика: Система снабжения Economia: Sistema Supply ENVIRONMENT: Fast Time ENVIRONEMENT: Temp Acceléré UMWELT: Zeitraffer Природа: Быстрое время Ambiente: Tempo Accellerato ENVIRONMENT: Starting Month ENVIRONEMENT: Mois de départ ENVIRONMENT: Starting Month ENVIRONMENT: Starting Month ENVIRONMENT: Starting Month ENVIRONMENT: Starting Hour ENVIRONEMENT: Heure de départ ENVIRONMENT: Starting Hour ENVIRONMENT: Starting Hour ENVIRONMENT: Starting Hour ENVIRONMENT: Volumetric Clouds ENVIRONEMENT: Nuages Volumétriques UMWELT: Volumetrische Wolken Природа: Объемные облака Ambiente: Nuvole Volumetriche ENVIRONMENT: Weather ENVIRONEMENT: Météo UMWELT: Wetter Природа: Погода Ambiente: Meteo EXTENSION: British Armed Forces EXTENSION: British Armed Forces ERWEITERUNG: British Armed Forces Расширение: британские Вооруженные силы Extension: British Armed Forces EXTENSION: Private Military Company EXTENSION: Private Military Company ERWEITERUNG: Private Military Company Дополнение: Private Military Company Extension: Private Military Company GAMEPLAY: Ambient Civilians (ALICE) JOUABILITÉ: Vie Civil (ALICE) SPIEL: Zivilbevölkerung (ALICE) Геймплей: Гражданское окружение (ALICE) Gameplay: Ambient Civilians (ALICE) GAMEPLAY: Airport Hangars JOUABILITÉ: Hangars (Aéroport) SPIEL: Flugzeugkauf bei Flugplatz/Hangar Геймплей: Авиация в ангарах Gameplay: Hangar GAMEPLAY: Bodies deletion Delay JOUABILITÉ: Délai de Suppression des Corps SPIEL: Dauer für tote Spieler & zerst. Fahrzeuge Геймплей: Удалять трупы Gameplay: Ritardo rimozione corpi GAMEPLAY: Empty Vehicles Lifespan JOUABILITÉ: Durée de Vie des Véhicules Vide SPIEL: Dauer für leere Fahrzeuge Геймплей: Удалять пустой транспорт Gameplay: Tempo di rimozione Veicoli Vuoti GAMEPLAY: Realistic Equipment JOUABILITÉ: Realistic Equipment SPIEL: Realistische Ausrüstung Геймплей: Realistic Equipment Gameplay: Realistic Equipment GAMEPLAY: Fast Travel JOUABILITÉ: Déplacement Rapide SPIEL: Schnelles Reisen Геймплей: Быстрое перемещение Gameplay: Fast Travel GAMEPLAY: Friendly Fire (Buildings) JOUABILITÉ: Tirs Fratricide (Bâtiments) SPIEL: Friendly Fire zerstört Basisgebäude Геймплей: Огонь по своим (Заводы) Gameplay: Friendly Fire (Costruzioni) GAMEPLAY: Grass Distance JOUABILITÉ: Distance Herbes SPIEL: Grasdichte Геймплей: Дистанция травы Gameplay: Distanza Erba GAMEPLAY: Kick Teamswappers JOUABILITÉ: Ejéction Teamswappers SPIEL: Kick bei Teamwechsel Геймплей: Запретить смену стороны Gameplay: Caccia Teamswappers GAMEPLAY: Limited Boundaries JOUABILITÉ: Frontières Limitées SPIEL: Karte begrenzen Геймплей: Ограничение границ Gameplay: Confini Limitati GAMEPLAY: Mando Missiles JOUABILITÉ: Mando Missiles SPIEL: Mando Missiles Геймплей: Mando Missiles Gameplay: Mando Missiles GAMEPLAY: Map Coloration JOUABILITÉ: Coloration de la Carte SPIEL: Farbschema der Hauptkarte Геймплей: Цветовая Схема Карты Gameplay: Map Coloration GAMEPLAY: Missile Range Limitation JOUABILITÉ: Limitation de la distance des Missiles. SPIEL: Reichweite für Raketen begrenzen Gameplay: Missile Range Limitation Gameplay: Missile Range Limitation GAMEPLAY: Secondary Missions JOUABILITÉ: Missions Secondaire SPIEL: Zufällige Nebenmissionen Геймплей: Вторичные миссии Gameplay: Missioni Secondarie GAMEPLAY: Show Player UID JOUABILITÉ: Affichage ID Joueur SPIEL: Spieler ID anzeigen Геймплей: Показывать UID Игрока Gameplay: Mostra UID Giocatore GAMEPLAY: Specialization JOUABILITÉ: Spécialisation SPIEL: Spezielle Spielkonfiguration Геймплей: Специализация Gameplay: Specialization GAMEPLAY: Thermal Imaging JOUABILITÉ: Images Thermique SPIEL: Wärmebildkameras Геймплей: ТВП Gameplay: Thermal Imaging GAMEPLAY: Track AI on Map (yellow dots) JOUABILITÉ: Affichage IA sur Carte (yellow dots) SPIEL: KI auf der Karte anzeigen (gelbe Punkte) Геймплей: Показывать ИИ на карте (yellow dots) Gameplay: Segna IA sulla Mappa (yellow dots) GAMEPLAY: Track Players on Map JOUABILITÉ: Affichage joueur sur Carte SPIEL: Spieler auf der Karte anzeigen Геймплей: Показывать игроков на карте Gameplay: Segna Giocatori sulla Mappa GAMEPLAY: Units Balancing JOUABILITÉ: Equilibrage Unitées SPIEL: Balancing (veränderte Ausrüstung) Геймплей: Баланс подразделений Gameplay: Bilanciamento Unità GAMEPLAY: Units Bounty JOUABILITÉ: Récompenses d'Unités (bounty) SPIEL: Kopfgeld für getötete Feinde Геймплей: Награда за убийство юнитов Gameplay: Taglia Unità GAMEPLAY: Upgrades JOUABILITÉ: Améliorations SPIEL: Upgradesystem Геймплей: Модернизация Gameplay: Aggiornamenti GAMEPLAY: Victory Condition JOUABILITÉ: Condition de Victoire SPIEL: Siegbedingung Геймплей: Условие для победы Gameplay: Condizioni di Vittoria GAMEPLAY: View Distance JOUABILITÉ: Distance de Vue SPIEL: Max. Sichtweite Геймплей: Дистанция видимости Gameplay: View Distance MODULE: EASA MODULE: EASA MODUL: Bewaffnungssystem (EASA) Модуль: EASA Модуль: EASA MODULE: High Command MODULE: Haut-Commandement MODUL: Oberbefehlshaber (HC) Модуль: Верховное командование Modulo: Alto Comando MODULE: ICBM MODULE: MBI MODUL: Nuklearwaffen (ICBM) Модуль: МБР Modulo: Missile Nucleare MODULE: IR Smoke MODULE: Fumée IR MODULE: IR Smoke MODULE: IR Smoke MODULE: IR Smoke MODULE: UPSMON AI MODULE: IA UPSMON MODUL: UPSMON (KI) Модуль: UPSMON AI Modulo: UPSMON IA MODULE: Countermeasures MODULE: Contres Mesures MODUL: Täuschkörper Модуль: Контрмеры Modulo: Contromisure RESPAWN: Camps RÉAPPARITION: Camps RESPAWN: Bei Camps Возрожд: В лагерях Respawn: Campi RESPAWN: Enemy near RÉAPPARITION: Enemy near RESPAWN: Verhindert durch nahe Feinde Возрожд: Враг рядом Respawn: Nemici Vicini RESPAWN: Delay RÉAPPARITION: Délai RESPAWN: Verzögerung Возрожд: Время Respawn: Ritardo RESPAWN: MASH RÉAPPARITION: Hôpital de Campagne RESPAWN: Bei Feldlazarett Возрожд: На госпитале Respawn: Ospedale da Campo RESPAWN: Group Leader RÉAPPARITION: Chef de Groupe RESPAWN: Group Leader Возрожд: Group Leader Respawn: Group Leader RESPAWN: Mobile RÉAPPARITION: Mobile RESPAWN: Mobil Возрожд: Медицинская машина Respawn: Mobile RESPAWN: Penalty RÉAPPARITION: Pénalité RESPAWN: Strafe Возрождение: Штраф Respawn: Penalità RESPAWN: Towns Range RÉAPPARITION: Distance Villes RESPAWN: Stadtentfernung Возрожд: Радиус в городе Respawn: Raggio delle Città RESTRICTION: Advanced Aircraft RÉSTRICTION: Aéronefs Avancées HANDICAP: Luftstreitkräfte limitieren Запрет: Тяжелая авиация Restrizione: Velivoli Avanzati RESTRICTION: Camp Gear RÉSTRICTION: Equipements Camps HANDICAP: Ausrüstungskauf bei Camp limitieren Запрет: Покупка оружия в лагерях Restrizioni: Equipaggiamento Campi RESTRICTION: Kamov RÉSTRICTION: Kamov HANDICAP: Kamov (KA-52) verbieten Запрет: КА-52 Restrizione: Kamov TOWNS: Amount VILLES: Nombre STÄDTE: Anzahl Город: Количество Città: Numero TOWNS: Camps VILLES: Camps STÄDTE: Camps Город: Лагеря Towns: Camps TOWNS: Equipment Purchase VILLES: Achat d'Equipement TOWNS: Equipment Purchase TOWNS: Equipment Purchase TOWNS: Equipment Purchase TOWNS: Capture Mode (Camps) VILLES: Mode de Capture (Camps) STÄDTE: Capture Modus (Camps) Город: Способ захвата (Camps) Città: Modalità Cattura (Camps) TOWNS: Civilians VILLES: Civils STÄDTE: Zivilbevölkerung Город: Гражданские Città: Civili TOWNS: Conquest Mode (Towns) VILLES: Mode de Conquête (Towns) STÄDTE: Conquest Modus (Städte) Towns: Conquest Mode (Towns) Towns: Conquest Mode (Towns) TOWNS: Occupation VILLES: Occupation STÄDTE: Haben KI-Besatzung wenn erobert Город: Захват Città: Occupazione TOWNS: Occupation Faction - East VILLES: Faction d'Occupation Est STÄDTE: Besatzer-Fraktion (Ostblock) Город: Охраняющая Фракция - Восток Towns: Occupation Faction - East TOWNS: Occupation Faction - West VILLES: Faction d'Occupation Ouest STÄDTE: Besatzer-Fraktion (Westmächte) Город: Охраняющая Фракция - Запад Towns: Occupation Faction - West TOWNS: Occupation Reinforcements VILLES: Renforts d'Occupation STÄDTE: KI-Besatzung ruft autom. Verstärkung Город: Подкрепл. сил противника Città: Rinforzi Occupazione TOWNS: Patrols Max. VILLES: Patrouilles STÄDTE: Max. Patrouillen des Widerstand Город: Патрули Сопротивл. кол-во Città: Pattuglie Massime. TOWNS: Protection Range VILLES: Distance de protection STÄDTE: MHQ-Verbot (Radius) Город: Радиус защиты Città: Raggio di Protezione TOWNS: Purchase Infantry VILLES: Achat d'Infantrie STÄDTE: Kauf von Infanterie möglich wenn erobert Город: Покупка пехоты Città: Compra Fanteria TOWNS: Defender VILLES: Défenseur TOWNS: Defender TOWNS: Defender TOWNS: Defender TOWNS: Resistance Faction VILLES: Faction Résistante STÄDTE: Widerstand (Fraktion) Город: Фракция сопротивления Towns: Fazione Resistenza TOWNS: Resistance Reinforcements VILLES: Renforts Résistants STÄDTE: Widerstand ruft autom. Verstärkung Город: Подкрепл. сил Сопротивл. Città: Rinforzi Resistenza TOWNS: Vehicle Lock (Defender) VILLES: Vérouillage Véhicule (Défenseur) TOWNS: Vehicle Lock (Defender) TOWNS: Vehicle Lock (Defender) TOWNS: Vehicle Lock (Defender) TOWNS: Starting Mode VILLES: Mode de démarrage STÄDTE: Aufteilung bei Spielbeginn Город: Начальные условия Città: Modalità Iniziale Yes Yes Ja Yes Yes No No Nein No No All Tous Alle Все Tutti Aircraft (expensive Land Vehicles) Aircraft (expensive Land Vehicles) Luftstreitkräfte (Landfahrzeuge teurer) Aircraft (expensive Land Vehicles) Aircraft (expensive Land Vehicles) Automatic Automatique Automatisch Автоматически Automatico Both Both Beide Both Both Camps Camps Camps Camps Camps Camps and Depot Camps et Dépôts Camps and Depot Camps and Depot Camps and Depot Classic Classique Klassisch Класический Classica Smooth Doux Smooth Smooth Smooth Strict Strict Strict Strict Strict Divided Towns Villes Divisés 50:50 Разделения городов Città Divise Default Défaut Standard По умолчанию Default Depot Dépôts Depot Depot Depot Enabled with Upgrade Activé avec Amélioration Aktiviert mit Upgrade Enabled with Upgrade Enabled with Upgrade Extra Small Très Petit Sehr wenig Очень мало Extra Piccolo Free Gratuit Gratis Свободные Free Fee Taxe Gebühr Плата Tassa Full Complet Alle Полные Full HQ-Workers HQ-Travailleurs HQ-Arbeiter HQ-рабочие HQ-Workers Hard Difficile Schwer Тяжелый Difficile Full Plein Voll (Bsp. 120SV = $1200/Teamplayer) 100% Pieno Half Moitié Halbiert (Bsp. 120SV = $600/Teamplayer) 50% Metà Commander Income - Realistic System Salaire Commandant - Système Réaliste Commander-Einkommen - Realistisches System Commander Income - Realistic System Commander Income - Realistic System Commander Income - Full Income System Salaire Commandant - Système de Salaire Complet Commander-Einkommen - Full Income System Commander Income - Full Income System Commander Income - Full Income System Infantry (expensive Land/Air) Infantry (expensive Land/Air) Infanterie (Land/Luft teurer) Infantry (expensive Land/Air) Infantry (expensive Land/Air) Impossible Impossible Sehr schwer Невозможно Impossibile Large Grand Viel Большой Grande Land Vehicles (expensive Aircraft) Land Vehicles (expensive Aircraft) Landfahrzeuge (Luftstreitkräfte teurer) Land Vehicles (expensive Aircraft) Land Vehicles (expensive Aircraft) Light Léger Leicht Легкий Leggero Long Longue Weit Большая Lungo Leaders Chefs d'Equipes Squadleader Командиры Leaders Medium Moyen Mittel Средний Medio Money and Supply Argent et Logistique Geld + Supply Деньги и снабжение Money and Supply Money Argent Geld Деньги Money Nearby Towns Villes Voisines Benachbarte Städte Близлежащие города Città Vicine None Aucun Keine Ни одного Niente Game parameters Game parameters Spielparameter Game parameters Game parameters West | East Ouest | Est Westmächte | Ostblock Запад | Восток Ovest | Est West | East | Resistance Ouest | Est | Résistance Westmächte | Ostblock | Widerstand Запад | Восток | Сопротивление Ovest | Est | Resistenza Occupation Only Occupation Seulement Nur als Besatzungsmacht möglich Только окупация Solo Occupazione Nearby Camps Camps à Proximité In der Nähe liegende Близлежащие лагеря Campi Vicini Gear Price Prix Equipement Voller Ausrüstungspreis Стоимость снаряжения Prezzo Equipaggiamento Gear Price on Mobile Respawn Prix Equipement lors de Réapparition Mobile Voller Ausrüstungspreis bei mobilem Respawn Стоимость снаражения на моб.респауне Gear Price on Mobile Respawn Gear Price 1/4 Prix Equipement 1/4 1/4 des Ausrüstungspreis 1/4 стоимости снаряжения Prezzo Equipaggiamento 1/4 Gear Price 1/2 Prix Equipement 1/2 1/2 des Ausrüstungspreis 1/2 стоимости снаражения Prezzo Equipaggiamento 1/2 Default Gear Equipement par Défaut Respawn mit Standardausrüstung Cнаряжения по умолчанию Equipaggiamento Default Helicopters Hélicoptères Nur Hubschrauber Вертолеты Helicopters Transport Helicopters Hélicoptères de Transport Nur Transporthubschrauber Транспортные вертолеты Transport Helicopters East Est Ostblock Восток Est West Ouest Westmächte Запад Ovest Short Courte Kurz Малая Corto Trucks Camions Lastwagen Грузовики Camion Random Aléatoire Zufällig Случайно Casuale West = North | East = South Ouest N | Est S Westmächte = Norden | Ostblock = Süden Запад С | Восток Ю Ovest N | Est S West = South | East = North Ouest S | Est N Westmächte = Süden | Ostblock = Norden Запад Ю | Восток С Ovest S | Est N Small Petit Wenig Маленький Piccolo All Camps are Required Tous les camp sont Nécessaire Alle Camps der Stadt notwendig Все Лагеря Требуются Tutti i campi richiesti Units Threshold Seuil d'Unités Camp-Verhältnis (Bsp. 2/3) Количество юнитов Soglia Unità Territorial Térritorial Territorial Territorial Territorial Time Temps Zeit Время A Tempo Annihilation Annihilation Totale Vernichtung Уничтожение Annihilation Assassination Assassination Attentat (HQ zerst. + alle Städte) Убийство Assassination Supremacy Suprémacie Übermacht (alle Fabriken zerst. + alle Städte) Превосходство Supremacy Towns Villes Städte (alle Städte) Города Città Vehicles Véhicules Nur für Fahrzeuge машины Vehicles Clear Clair Klar Чисто Sereno Cloudy Nuageux Bewölkt Облачно Nuovoloso Dynamic Dynamique Dynamisch Динамично Dinamiche Rainy Pluvieux Regnerisch Дождливая Piovoso Weapons Armes Nur für Waffen Вооружение Armi Default Gear Equip. par Défaut Standardausrüstung Default Gear Default Gear Keep current Gear Conserver Equip. Ausrüstung beibehalten Keep current Gear Keep current Gear <t color='#42b6ff'>Respawning in <t color='#F5D363'>%1</t></t> <t color='#42b6ff'>Réapparation dans <t color='#F5D363'>%1</t></t> <t color='#42b6ff'>Respawn in <t color='#F5D363'>%1</t></t> <t color='#42b6ff'>Respawning in <t color='#F5D363'>%1</t></t> <t color='#42b6ff'>Rinascerai in <t color='#F5D363'>%1</t></t> <t color='#42b6ff'>Respawning at <t color='#ADFF61'>%1</t></t> <t color='#42b6ff'>Réapparation à <t color='#ADFF61'>%1</t></t> <t color='#42b6ff'>Respawning at <t color='#ADFF61'>%1</t></t> <t color='#42b6ff'>Respawning at <t color='#ADFF61'>%1</t></t> <t color='#42b6ff'>Respawning at <t color='#ADFF61'>%1</t></t> Respawn Menu : Menu de Respawn : Respawn Menu : Respawn Menu : Respawn Menu : Exchangeable Armament System (EASA) Système d'Echange d'Armement (EASA) Bewaffnungssystem (EASA) Система Смены Вооружения (EASA) Sistema di cambio Armamento (EASA) Heal Soins Heilen Вылечить Medicazione Rearm Réarmer Aufmunitionieren Перезарядить Riarma Refuel Ravitailler Auftanken Заправить Rifornimento Repair Réparer Reparieren Ремонт Ripara Status: Etat: Status: Статус: Stato: Target-Radius: Radius de la cible: Zielradius: Target-Radius: Target-Radius: Artillery Overview Vue d'ensemble - Artillerie Artillerieübersicht Artillery Overview Artillery Overview Set Fire Mission Définir Appuie Feu Zielposition setzen Назначить арт. цель Imposta Fuoco di Sbarramento Call Fire Mission Appel Appuie Feu Feuerbefehl erteilen Вызвать арт. удар Richiedi Fuoco di Sbarramento Artillery: Artillerie: Artillerie: Артиллерия: Artiglieria An Artillery Minimap display fitler has been toggled Un filtre d'affichage de l'artillerie sur la carte à été activer Der Grafikfilter für die Artillerie-Karte wurde geändert Режим фильтра на артиллерийском дисплее был сменен An Artillery Minimap display fitler has been toggled Range OK A portée Reichweite OK Range OK Range OK Out of Range Hors de Portée Zielposition zu weit Out of Range Out of Range Too Close Trop Près Zielposition zu nah Too Close Too Close Available Disponible Verfügbar Доступно Disponibile Click on the map to activate the selected action Cliquer sur la carte pour activer l'action séléctionnée. Klick auf die Karte um die gewünschte Aktion auszuführen Click on the map to activate the selected action Click on the map to activate the selected action Fast Travel Déplacement Rapide Schnelles Reisen Быстрое перемещение Fast Travel Paradrop - Ammunition Parachutage - Munitions Abwurf - Munition Сброс - Аммуниция Paradrop - Ammunition Paradrop - Vehicle Parachutage - Véhicule Abwurf - Fahrzeug Сброс - Машина Paradrop - Vehicle Paratroops Parachutistes Fallschirmjäger Десант Paracadutisti Paradrop Parachutage Abwurf Высадка десанта Paradrop Price: Prix: Kosten: Цена: Prezzo: Request Demander Anfordern запрос Request Support: Support: Unterstützung: Support: Support: Unit Camera Camera Unité Einheitenkamera Unit Camera Unit Camera UAV - Deploy Drone - Déployer UAV - Einsetzen БЛА - развернуть UAV - Deploy UAV - Destroy Drone - Détruire UAV - Zerstören БЛА - уничтожить UAV - Destroy UAV - Remote Control Drone - Contrôle à Distance UAV - Remote Control БЛА - удаленный доступ UAV - Remote Control Squad AI: Membre IA: Squad KI: Squad AI: Squad AI: AI Disband Dissoudre IA KI entfernen AI Демобилизовать AI Smobilita Graphic-Filter: Filtre Graphique: Grafikfilter: Graphic-Filter: Graphic-Filter: Money Transfer: Transfert de fond: Geldtransfer: Money Transfer: Money Transfer: Funds Transfer: $%1 Transfert de fonds: $%1 Geldmenge: $%1 Денежный перевод: $%1 Trasferimento Fondi: $%1 Terrain Grid: %1 Grille de Terrain: %1 Gelände-Detailstufe: %1 Детализация земли: %1 Griglia Terreno: %1 Transfer Money Transfert Geld zusenden Перевести деньги Trasferisci Video-Options: Options vidéos: Grafikoptionen: Video-Options: Video-Options: View Distance: %1m Distance d'affichage: %1m Gelände-Sichtweite: %1m Дальность видимости: %1 Distanza Visiva: %1m This icon allows you to toggle between the different artillery display mode on the map Cet icône vous permet de changer le mode d'affichage de l'artillerie sur la carte Hier kannst du den Grafikfilter der Artillerie-Karte ändern Эта кнопка позволит вам переключать различные режимы отображения артиллерии на карте This icon allows you to toggle between the different artillery display mode on the map Back Retour Zurück Back Back Backpack Management (Require a backpack) Equipement: Management de Sac à dos (Requiert un sac) Rucksackinhalt verwalten (Rucksack muss gekauft sein) Backpack Management (Требуется рюкзак) Gestisci Zaino (Richiede uno zaino) Vehicle Commander Commandant du Véhicule Fahrzeug-Kommandant Vehicle Commander Vehicle Commander Driver Conducteur Fahrer Driver Driver Vehicle Special crew Equipage spécial du Véhicule Zusätzliche Fahrzeugbesatzung Vehicle Special crew Vehicle Special crew Gunner Tireur Boardschütze Gunner Gunner Vehicle lock Vérouillage du Véhicule Fahrzeug beim Kauf abgeschlossen Vehicle lock Vehicle lock Close Fermer Schließen Close Close Allows the commander to handle Squads, Squadmember and Special Tasks permet au commandant de gérer les Equipes et leur membres ainsi que les Tâches Spécifiques Als Commander kannst du die Squads, Squadmitglieder und Spezialaufträge verwalten Allows the commander to handle Squads, Squadmember and Special Tasks Allows the commander to handle Squads, Squadmember and Special Tasks Allows the commander to handle the income distribution and HQ-workers Permet au commandant de gérer les revenues et les travailleurs. Als Commander kannst du die Einkommensverteilung und HQ-Arbeiter verwalten Allows the commander to handle the income distribution and HQ-workers Allows the commander to handle the income distribution and HQ-workers Artillery, Ammo/Vehicle-drop, Paratroop, UnitCam, FastTravel, UAV and ICBM Artillerie, Parachutage de Munitions/Véhicule, Parachutistes, Caméra d'unité, Déplacement Rapide, Drone et MBI Artillerie, Munition/Fahrzeug-Abwurf, Fallschirmjäger, Einheitenkamera, Schnelles-Reisen, UAV und ICBM Artillery, Ammo/Vehicle-drop, Paratroop, UnitCam, FastTravel, UAV and ICBM Artillery, Ammo/Vehicle-drop, Paratroop, UnitCam, FastTravel, UAV and ICBM Rearm, Refuel, Repair, Heal and EASA Munitions, Essence, Réparation et Soins sont disponible ainsi que la liste des Paramètres et le Module EASA Aufmunitionieren, Auftanken, Reparaturen, Verwundete heilen und Bewaffnungssystem (EASA) Rearm, Refuel, Repair, Heal and EASA Rearm, Refuel, Repair, Heal and EASA Allows the commander to handle the factory enhancements En tant que commandant, il est possible de réaliser diverses améliorations Als Commander kannst du den Fabrikausbau verwalten Allows the commander to handle the factory expansion Allows the commander to handle the factory expansion All Weapons Toute les armes Alle Waffen All Weapons All Weapons Miscellaneous Weapon and Accessories Armes et accèsoire divers Sonstige Waffen und Zubehör Miscellaneous Weapon and Accessories Miscellaneous Weapon and Accessories Assaultrifles, MGs, Sniperrifle Fusils d'assault, mitrailleuse, snipers Sturmgewehre, MGs, Scharfschützengewehre Assaultrifles, MGs, Sniperrifle Assaultrifles, MGs, Sniperrifle Missilelauncher, Backpacks, Bags, Lasermarker Lance-missiles, Sac à dos, Désignateur laser, tout y est! Raketenwerfer, Rucksäcke, Taschen, Lasermarker Missilelauncher, Backpacks, Bags, Lasermarker Missilelauncher, Backpacks, Bags, Lasermarker Handgun Pistolés Handfeuerwaffen Handgun Handgun Weapontemplates Templates d'équipement Waffentemplates Weapontemplates Weapontemplates Clear the current loadout Effacer l'équipement présent Aktuelle Ausrüstung entfernen Очистить текущее снаряжение Annulla il carico attuale Reload the previous loadout Charger l'équipement précédent Vorherige Ausrüstung laden Вернуть предыдущее снаряжение Ricarica precedente Fix Headbug Règler Headbug Headbug beheben Исправить баг головы Fix Headbug Weapon, Ammonition, Backpacks, Bags and Misc Armes, Munitions, Sacs et Divers Waffen, Munition, Rucksäcke, Taschen und Sonstiges Weapon, Ammonition, Backpacks, Bags and Misc Weapon, Ammonition, Backpacks, Bags and Misc Infantry, Vehicles and Aircraft Infantrie, Vehicules et Aéronefs Infanterie, Landfahrzeuge, Hubschrauber und Flugzeuge Infantry, Vehicles and Aircraft Infantry, Vehicles and Aircraft Distance View/Details, Money Transfer and KI-Member Distance d'affichage/Détails, Transfert de fond et Management d'IA Gelände-Sichtweite, Gelände-Details, Geldtransfer und KI-Mitglieder Distance View/Details, Money Transfer and KI-Member Distance View/Details, Money Transfer and KI-Member Vote for a new Commander Vote pour l'éléction d'un nouveau commandant Abstimmung über einen neuen Commander Vote for a new Commander Vote for a new Commander Show game parameters Afficher les paramètres courant Spielparameter anzeigen Show game parameters Show game parameters Toggle between the default and current gear Intervetir entre le kit par défaut et le kit courrant Auswahl zwischen Standardausrüstung und aktueller Ausrüstung Toggle between the default and current gear Toggle between the default and current gear Respawn stucked Supply Trucks. ATTENTION => ALL Trucks will be destroyed! Réapparition des camions de ravitaillement. ATTENTION => tous les camions seront détruit! Respawn der feststeckenden Versorgungs-LKW`s. ACHTUNG => ALLE LKW`s werden dabei zerstört! Respawn stucked Supply Trucks. ATTENTION => ALL Trucks will be destroyed! Respawn stucked Supply Trucks. ATTENTION => ALL Trucks will be destroyed! Squad Managment Managment d'Equipe Squadverwaltung Squad Managment Squad Managment Special Tasks Tâches Spéciales Spezialaufträge Special Tasks Special Tasks Squadmember Managment Managment Equipiers Squadmitglieder verwalten Squadmember Managment Squadmember Managment Unflip Vehicle Retourner Umgefallenes Fahrzeug aufrichten Перевернуть Ribalta Purchase Infantry Achat d'Infantrie Infanterie-Einheiten kaufen Purchase Infantry Purchase Infantry Purchase light Vehicles (Hmmwv, Truck, Motorcycle, Bike, Boat ect.) Achat de véhicules légers (Hmmwv, Camions, Moto, Vélo, Bateaux ect.) Leichte Fahrzeuge kaufen (Jeeps, LKWs, Motorräder, Fahrräder, Boote usw.) Purchase light Vehicles (Hmmwv, Truck, Motorcycle, Bike, Boat ect.) Purchase light Vehicles (Hmmwv, Truck, Motorcycle, Bike, Boat ect.) Purchase heavy Vehicles (Tanks, Artillery ect.) Achat de véhicules lourd (Tanks, Artilleries ect.) Schwere Fahrzeuge kaufen (Panzer, Artillerie usw.) Purchase heavy Vehicles (Tanks, Artillery ect.) Purchase heavy Vehicles (Tanks, Artillery ect.) Purchase Aircarft (Gunship, Helicopter,Plane) Achat d'aéronefs (Hélicoptères, Avions) Lufteinheiten kaufen (Hubschrauber, Flugzeuge) Purchase Aircarft (Gunship, Helicopter,Plane) Purchase Aircarft (Gunship, Helicopter,Plane) Airport / Hangar Achat d'avions (Hangar) Bei Flugplätzen/Hangar Flugzeuge kaufen Airport / Hangar Airport / Hangar Buy Units on a conquered Depot Achat à partir du Dépot Bei erobertem Depot Einheiten kaufen Buy Units on a conquered Depot Buy Units on a conquered Depot Armor Blindage Panzerung Броня Armatura Money: $%1 Argent: $%1 Guthaben: $%1 Деньги: $%1 Money: $%1 Construction Time Temps de construction Bauzeit Construction Time Construction Time Faction selection Selection Faction Armeeauswahl Faction selection Faction selection Faction Faction Armee Faction Faction Factory: Usine: Fabrik: Завод: Fabrica: Information: Information: Information: Информация: Informazioni: Maximum Speed Vitesse Maximale Höchstgeschwindigkeit Максимальная скорость Massima Velocità Ammunition Munitions Munition Ammunition Ammunition Factory Queue: %1 Queu de fabrication: %1 Warteschlange: %1 Очередь завода: %1 Coda Produzione: Skill/Suitability Habilité/Efficacité Skill/Eignung Skill/Suitability Skill/Suitability Transport Capacity Capacité de transport Transportkapazität Вместимость транспорта Transport Capacity Gear Equipement Ausrüstung Gear Gear Artillery Ammunition Munition d'Artillerie Artilleriemunition Артиллерийская Амуниция Munizioni Artiglieria Airlift Transport Aérien Lufttransport Авиатранспортировка Trasporto Aereo An Upgrade is already running Une Amélioration est déjà en cours Ein anderer Ausbau läuft bereits Модернизация уже проводится. Un Aggiornamento è già in corso Artillery Reloading Rech. Artillerie Artillerienachladezeit Перезарядка артиллерии Tempi riarmo Artiglieria This upgrade requires a parameter to be enabled Cette Amélioration nécessite l'activation d'un paramètre Dieses Upgrade wurde per Parameter deaktiviert Эта модернизация должна быть разрешена в настройках миссии Questo aggiornamento ha bisogno di essere abilitato Cost: %1 Coût: %1 Kosten: %1 Цена: %1 Costo: %1 Countermeasures Contres Mesures Täuschkörper Контрмеры Contromisure This upgrade requires the %1 upgrade at level %2 Cette amélioration requiert que l'amélioration %1 soit au niveau %2 Für diese Upgrade muss %1 die Stufe %2 erreicht haben Требуется предварительная модернизация %1 до уровня %2 Questo aggiornamento richiede l'aggiornamento %1 al livello %2 Build Time: %1 Build Time: %1 Bauzeit: %1 Build Time: %1 Build Time: %1 Gear Equipement Ausrüstung Снаряжение Equipaggiamento IR Smoke Fumée IR IR Smoke IR Smoke IR Smoke Current Level: %1 Niveau Actuel: %1 Aktuelle Stufe: %1 Уровень: %1 Livello Attuale: %1 Upgrade Level Limit reached Niveau d'Amélioration maximal atteint Die maximale Ausbaustufe ist erreicht Достигнут предельный уровень модернизации Limite Livello Aggiornamenti raggiunto Upgrade in Progress Amélioration en Cours Der Ausbau läuft auf Hochtouren Проводится модернизация Upgrade in Progress Ambulance Range Porté d'Ambulance Ambulanzreichweite Радиус возрождения на мед. машинке Raggio Ambulanza Supply Logistique Versorgung Снабжение Supply Description: Description: Beschreibung: Description: Description: Allows the use of better infantry units.<br/><br/>Each level will improve the units choice in the barracks. Autorise l'utilisation de meilleurs unités d'infantrie.<br/><br/>Chaque niveau améliore le choix d'unités dans les casernes. Allows the use of better infantry units.<br/><br/>Each level will improve the units choice in the barracks. Allows the use of better infantry units.<br/><br/>Each level will improve the units choice in the barracks. Allows the use of better infantry units.<br/><br/>Each level will improve the units choice in the barracks. This upgrade unlocks Fast Travel.<br/><br/>Allows the use of Fast Traveling from the Tactical Center. Débloque le déplacement rapide.<br/><br/>Autorise le déplacement rapide via le Centre Tactique. Dieses Upgrade schaltet Schnelles Reisen frei.<br/><br/>Damit kann das Team über das Tactical Center, Schnelles Reisen anfordern. This upgrade unlocks Fast Travel.<br/><br/>Allows the use of Fast Traveling from the Tactical Center. This upgrade unlocks Fast Travel.<br/><br/>Allows the use of Fast Traveling from the Tactical Center. Upgrade the Weapons and Magazines loadouts.<br/><br/>The team may purchase better equipment in the Gear Menu. Améliore l'armement ainsi que les munitions.<br/><br/>L'Equipe peut acheter de meilleurs équipements au travers du menu d'équipement. Upgrade the Weapons and Magazines loadouts.<br/><br/>The team may purchase better equipment in the Gear Menu. Upgrade the Weapons and Magazines loadouts.<br/><br/>The team may purchase better equipment in the Gear Menu. Upgrade the Weapons and Magazines loadouts.<br/><br/>The team may purchase better equipment in the Gear Menu. This upgrade unlocks ammo and ordinance crates.<br/><br/>Ammo and Weapons crates may be placed from the Construction Menu. Débloque le placement de caisses d'armements.<br/><br/>Des caisses de munitions et d'armements peuvent être placées via le Menu de Construction. This upgrade unlocks ammo and ordinance crates.<br/><br/>Ammo and Weapons crates may be placed from the Construction Menu. This upgrade unlocks ammo and ordinance crates.<br/><br/>Ammo and Weapons crates may be placed from the Construction Menu. This upgrade unlocks ammo and ordinance crates.<br/><br/>Ammo and Weapons crates may be placed from the Construction Menu. Allows the use of better light vehicles units.<br/><br/>Each level will improve the units choice in the light vehicle factory. Autorise l'utilisation de meilleurs véhicules légers.<br/><br/>Chaque niveau améliore le choix d'unités dans les usines de véhicules légérs. Allows the use of better light vehicles units.<br/><br/>Each level will improve the units choice in the light vehicle factory Allows the use of better light vehicles units.<br/><br/>Each level will improve the units choice in the light vehicle factory Allows the use of better light vehicles units.<br/><br/>Each level will improve the units choice in the light vehicle factory This upgrade improve the supply delivery rate in towns.<br/><br/>%1 Permet d'améliorer la quantité de logistique livrée en ville.<br/><br/>%1 This upgrade improve the supply delivery rate in towns.<br/><br/>%1 This upgrade improve the supply delivery rate in towns.<br/><br/>%1 This upgrade improve the supply delivery rate in towns.<br/><br/>%1 Increases the mobile spawn range distance.<br/><br/>%1 Améliore la distance de réapparition mobile.<br/><br/>%1 Increases the mobile spawn range distance.<br/><br/>%1 Increases the mobile spawn range distance.<br/><br/>%1 Increases the mobile spawn range distance.<br/><br/>%1 Allows the use of better heavy vehicles units.<br/><br/>Each level will improve the units choice in the heavy vehicle factory. Autorise l'utilisation de meilleurs véhicules lourds.<br/><br/>Chaque niveau améliore le choix d'unités dans les usines de véhicules lourds. Allows the use of better heavy vehicles units.<br/><br/>Each level will improve the units choice in the heavy vehicle factory Allows the use of better heavy vehicles units.<br/><br/>Each level will improve the units choice in the heavy vehicle factory Allows the use of better heavy vehicles units.<br/><br/>Each level will improve the units choice in the heavy vehicle factory Decrease the Fire Mission cooldown timer of artillery.<br/><br/>%1 Diminue le temps d'attente du soutien d'artillery.<br/><br/>%1 Decrease the Fire Mission cooldown timer of artillery.<br/><br/>%1 Decrease the Fire Mission cooldown timer of artillery.<br/><br/>%1 Decrease the Fire Mission cooldown timer of artillery.<br/><br/>%1 This upgrade unlocks new ammunition for artillery pieces.<br/><br/>This allows the artillery-units to fire improved ammunition such as LASER, WP, SADARM, ILLUM. Débloque l'accès à de nouvelles munitions pour les pièces d'artilleries.<br/><br/>De nouvelles munitions peuvent être tirées par les pièces d'artilleries comme LASER, WP, SADARM, ILLUM. This upgrade unlocks new ammunition for artillery pieces.<br/><br/>This allows the artillery-units to fire improved ammunition such as LASER, WP, SADARM, ILLUM. This upgrade unlocks new ammunition for artillery pieces.<br/><br/>This allows the artillery-units to fire improved ammunition such as LASER, WP, SADARM, ILLUM. This upgrade unlocks new ammunition for artillery pieces.<br/><br/>This allows the artillery-units to fire improved ammunition such as LASER, WP, SADARM, ILLUM. Allows the use of better air vehicles units.<br/><br/>Each level will improve the units choice in the air vehicle factory. Autorise l'utilisation de meilleurs véhicules lourds.<br/><br/>Chaque niveau améliore le choix d'unités dans les usines d'aréonefs. Allows the use of better air vehicles units.<br/><br/>Each level will improve the units choice in the air vehicle factory Allows the use of better air vehicles units.<br/><br/>Each level will improve the units choice in the air vehicle factory Allows the use of better air vehicles units.<br/><br/>Each level will improve the units choice in the air vehicle factory This upgrade unlocks airlifting.<br/><br/>Airlift may be used to lift vehicles by the air. Cette amélioration débloque le transport de véhicules par les airs. This upgrade unlocks airlifting.<br/><br/>Airlift may be used to lift vehicles by the air. This upgrade unlocks airlifting.<br/><br/>Airlift may be used to lift vehicles by the air. This upgrade unlocks airlifting.<br/><br/>Airlift may be used to lift vehicles by the air. This upgrade unlocks supply paradrop.<br/><br/>Vehicle or Ammo paradrop may be called from the Tactical Center. Débloque l'appel de soutien logistique aérien.<br/><br/>Un véhicule ou des munitions peuvent être parachutées au travers du Centre Tactique. This upgrade unlocks supply paradrop.<br/><br/>Vehicle or Ammo paradrop may be called from the Tactical Center. This upgrade unlocks supply paradrop.<br/><br/>Vehicle or Ammo paradrop may be called from the Tactical Center. This upgrade unlocks supply paradrop.<br/><br/>Vehicle or Ammo paradrop may be called from the Tactical Center. This upgrade unlocks paratroopers.<br/><br/> Calls a %1 with infantry in cargo, the amount of infantry in cargo is based on the upgrade level:<br/><br/>%2 Cette amélioration débloque les parachutistes.<br/><br/> Apple un %1 avec de l'infantrie en cargo, le nombre d'unités est basé sur le niveau d'amélioration:<br/><br/>%2 This upgrade unlocks paratroopers.<br/><br/> Calls a %1 with infantry in cargo, the amount of infantry in cargo is based on the upgrade level:<br/><br/>%2 This upgrade unlocks paratroopers.<br/><br/> Calls a %1 with infantry in cargo, the amount of infantry in cargo is based on the upgrade level:<br/><br/>%2 This upgrade unlocks paratroopers.<br/><br/> Calls a %1 with infantry in cargo, the amount of infantry in cargo is based on the upgrade level:<br/><br/>%2 This upgrade unlocks UAV.<br/><br/>This allows the team to buy a UAV from the Tactical Center. Cette amélioration permet l'utilisation de drones.<br/><br/>Un drone peut être acheté à partir du Centre Tactique. Dieses Upgrade schaltet das UAV frei.<br/><br/>Dadurch kann das Team über das Tactical Center, UAV-unterstützung anfordern. This upgrade unlocks UAV.<br/><br/>This allows the team to buy a UAV from the Tactical Center. This upgrade unlocks UAV.<br/><br/>This allows the team to buy a UAV from the Tactical Center. Unlock the use of countermeasures on aircraft.<br/><br/>This allows the use of defensive countermeasures (flares) on aircraft. Débloque l'utilisation de Contre-mesures.<br/><br/>Des contre-mesures de défenses sont installés sur les aeronefs. Unlock the use of countermeasures on aircraft.<br/><br/>This allows the use of defensive countermeasures (flares) on aircraft. Unlock the use of countermeasures on aircraft.<br/><br/>This allows the use of defensive countermeasures (flares) on aircraft. Unlock the use of countermeasures on aircraft.<br/><br/>This allows the use of defensive countermeasures (flares) on aircraft. This upgrade unlocks ICBM.<br/><br/>The commander can purchase ICBM from the Tactical Center menu. Débloque l'utilisation de MIB.<br/><br/>Le commandant peut appeller un MIB via le Centre Tactique. This upgrade unlocks ICBM.<br/><br/>The commander can purchase ICBM from the Tactical Center menu. This upgrade unlocks ICBM.<br/><br/>The commander can purchase ICBM from the Tactical Center menu. This upgrade unlocks ICBM.<br/><br/>The commander can purchase ICBM from the Tactical Center menu. This upgrade unlocks EASA.<br/><br/>EASA may be used to change the loadout of aircraft.<br/> - Bomb<br/> - AT Guided Missile<br/> - AA Guided Missile Cette amélioration débloque l'utilisation de l'EASA.<br/><br/>EASA peut être utilisé pour changé l'armement des aéronefs.<br/> - Bombes<br/> - Missiles Anti-Tank<br/> - Missiles Anti-Aériens This upgrade unlocks EASA.<br/><br/>EASA may be used to change the loadout of aircraft.<br/> - Bomb<br/> - AT Guided Missile<br/> - AA Guided Missile This upgrade unlocks EASA.<br/><br/>EASA may be used to change the loadout of aircraft.<br/> - Bomb<br/> - AT Guided Missile<br/> - AA Guided Missile This upgrade unlocks EASA.<br/><br/>EASA may be used to change the loadout of aircraft.<br/> - Bomb<br/> - AT Guided Missile<br/> - AA Guided Missile The IR smoke improve the current smoke deployment system.<br/><br/> All vehicles equiped with this system have a chance to dodge IR Locked projectile as long as they remain in the deployed smoke. L'écran de fumée IR améliore les véhicules disposant d'un système de déploiement de fumée standard.<br/><br/> Tout véhicules équipés de ce système ont une chance d'éviter les projectiles IR tant qu'ils restent concis dans l'écran de fumée. The IR smoke improve the current smoke deployment system.<br/><br/> All vehicles equiped with this system have a chance to dodge IR Locked projectile as long as they remain in the deployed smoke. The IR smoke improve the current smoke deployment system.<br/><br/> All vehicles equiped with this system have a chance to dodge IR Locked projectile as long as they remain in the deployed smoke. The IR smoke improve the current smoke deployment system.<br/><br/> All vehicles equiped with this system have a chance to dodge IR Locked projectile as long as they remain in the deployed smoke. Camera mode: Camera mode: Kameramodus: Camera mode: Camera mode: Squadmember (KI): Equipier (KI): Squadmitglieder (KI): Squadmember (KI): Squadmember (KI): Vote-PopUp activate Vote-PopUp activé Vote-PopUp aktivieren Vote-PopUp activate Vote-PopUp activate Vote-PopUp disable Vote-PopUp désactivé Vote-PopUp deaktivieren Vote-PopUp disable Vote-PopUp disable Time : Temps : Zeit : Time : Time : Commander Vote : Vote Commandant : Commander Vote : Commander Vote : Commander Vote : Receiving mission Réception de la mission Receiving mission Receiving mission Receiving mission Ammunition Munitions Munition Боеприпасы Munizioni Amount: Montant: Amount: Amount: Amount: Disabled Désactivé Deaktiviert Отключить Disabilitato Enabled Activé Aktiviert Включить Abilitato Enabled (Default Gear) Activé (Equipement par Défaut) Aktiviert (Respawn mit Standardausrüstung) Включить (Cнаряжения по умолчанию) Abilitato (Equipaggiamento Default) Buy Achat Kaufen Купить Compra Income: $%1 ($%2/Min) Salaire: $%1 ($%2/Min) Einkommen: $%1 ($%2/Min) Наличные: $%1 ($%2/мин) Entrate: $%1 ($%2/Min) ICBM MBI ICBM МБР ICBM Price Prix Kosten Цена Prezzo Service Point Menu de Soutien Wartungsstation Меню поддержки Menu Supporto Seconds Secondes Sekunden Секунды Secondi Send Envoyer Send Send Send Aircraft Factory Usine aviation Lufteinheiten-Fabrik Авиазавод Fabbrica velivoli Command Center Centre de Commandement Befehlsstelle Командный центр Centro di Comando Fortification Fortification Feldbefestigungen Укрепления Fortificazione Strategic Stratégique Strategische Anlagen Стратегические Strategico Auto Defenses Defenses Auto Auto Verteidigung Auto Defenses Auto Defenses On On An On On Off Off Aus Off Off Construction Menu Menu de Construction Konstruktionsmenü меню строительства Menu Costruzione Construction Menu (Repair Truck) Menu de Construction (Camion de Réparation) Konstruktionsmenü (Reparatur LKW) меню строительства (Рем. грузовик) Menu Costruzione (Camion Riparazioni) Eject Cargo / jump Ejection de la cargaison / sauter Fracht abwerfen / abspringen lassen Eject Cargo / jump Eject Cargo / jump Attach (Vehicle) Attacher (Véhicule) Befestigen (Fahrzeug) Прицепить (Транспорт) Aggancia (Veicolo) Detach (Vehicle) Détacher (Véhicule) Lösen (Fahrzeug) Отцепить (Транспорт) Sgancia (Veicolo) Lock Verrouiller Abschließen Запереть Chiudi Lock MHQ Verrouiller PC MHQ abschließen Запереть ШТАБ Chiudi MHQ >> WF Menu >> WF Menu >> WF Menü >> WF Menu >> WF Menu Push (Vehicle) Pousser (Véhicule) Anschieben (Fahrzeug) Толкнуть (Транспорт) Spingi (Veicolo) Repair (Camp) Réparation (Camp) Reparatur (Camp) Восстановить (Camp) Riparazione (Camp) Information:\n\n The camp is already repaired. Information:\n\n Le camp est déjà réparé. Information:\n\n The camp is already repaired. Information:\n\n The camp is already repaired. Information:\n\n The camp is already repaired. Information:\n\n The camp is being repaired. Information:\n\n Le camp est en cours de réparation. Information:\n\n The camp is being repaired. Information:\n\n The camp is being repaired. Information:\n\n The camp is being repaired. Information:\n\n The camp is repaired. Information:\n\n Le camp est réparé. Information:\n\n The camp is repaired. Information:\n\n The camp is repaired. Information:\n\n The camp is repaired. Information:\n\n There is no nearby camps which can be repaired. Information:\n\n Aucun camp à proximité ne peut être réparé. Information:\n\n There is no nearby camps which can be repaired. Information:\n\n There is no nearby camps which can be repaired. Information:\n\n There is no nearby camps which can be repaired. Information:\n\n You are currently missing $%1. in order to repair a camp. Information:\n\n Il vous manque actuellement $%1. afin de réparer le camp. Information:\n\n You are currently missing $%1. in order to repair a camp. Information:\n\n You are currently missing $%1. in order to repair a camp. Information:\n\n You are currently missing $%1. in order to repair a camp. Information:\n\n None of the nearby camps are destroyed. Information:\n\n Aucun camp à proximité n'est détruit. Information:\n\n None of the nearby camps are destroyed. Information:\n\n None of the nearby camps are destroyed. Information:\n\n None of the nearby camps are destroyed. Repair (MHQ) Réparation (PC) Reparatur (MHQ) Восстановить (КШМ) Riparazione (MHQ) Information:\n\n The repair truck is either too far or destroyed. Information:\n\n Le camion de réparation est trop loin de la cible ou à été détruit. Information:\n\n The repair truck is either too far or destroyed. Information:\n\n The repair truck is either too far or destroyed. Information:\n\n The repair truck is either too far or destroyed. Taxi Reverse Marche Arrière Rückwärts fahren Задний Ход Retromarcia Unlock Déverrouiller Aufschließen Открыть Apri Unlock MHQ Déverrouiller PC MHQ aufschließen Открыть ШТАБ Apri MHQ Capturing <marker name='%1Depot'>%1<marker> is essential to our team, neutralizing <marker name='%1Depot'>%1<marker> Depot will ensure it's capture.<br/><br/> Capturer <marker name='%1Depot'>%1<marker> est éssentiel à notre équipe, neutraliser le Dépot de <marker name='%1Depot'>%1<marker> pour procéder à la capture.<br/><br/> Die Ortschaft <marker name='%1Depot'>%1<marker> zu erobern, ist für unser Team von großer Wichtigkeit!<br />Neutralisiere den Feind und besetze das zentrale Depot, um somit die Stadt einzunehmen.<br/><br/> Захват <marker name='%1Depot'>%1<marker> имеет большое значение для нас. Захватите бункер в центре для захвата города.<br/><br/> Conquistare <marker name='%1Depot'>%1<marker> è fondamentale per il nostro Team, neutralizza il deposito di <marker name='%1Depot'>%1<marker> per catturarlo.<br/><br/> <marker name='%1Depot'>%1<marker> has been captured by our team, Defending <marker name='%1Depot'>%1<marker> Depot and Camps might be necessary to prevent enemies from taking it. Notre équipe à capturé <marker name='%1Depot'>%1<marker>, la défense du Dépot de <marker name='%1Depot'>%1<marker> et de ses Camps sera peut être nécessaire pour empêcher l'énemie de s'en emparer. Die Ortschaft <marker name='%1Depot'>%1<marker> wurde von unserem Team eingenommen.<br />Um sie zu halten, müssen das Depot und die Camps von <marker name='%1Depot'>%1<marker> unter allen Umständen verteidigt werden. Der Feind darf keine Chance bekommen, den Ort zurückzuerobern! <цель='%1Depot'>%1<marker> было захвачено вашей командой, Защитите <marker name='%1Depot'>%1<marker> контролировать склад и лагеря необходимо для контроля города. <marker name='%1Depot'>%1<marker> è stato catturata dal tuo team, difendere <marker name='%1Depot'>%1<marker> Depositi e Campi è essere necessario per evitare che vengano catturati dai nemici. AI Commander AI Commander KI Commander ИИ Commander AI Commander Commander: %1 Commandant: %1 Commander: %1 Командир: %1 Comandante: %1. Current Mission: %1 Mission en cours: %1 Aktueller Auftrag: %1 Текущее задание: %1 Missione attuale: %1 Resistance Résistance Widerstand Сопротивление Resistenza Minefield Champs de Mines Minenfeld Минное поле Campo Minato Earthen artillery nest Nid artil. terre Erd-Artilleriestellung Окоп артиллерии Nido mitragliatrici di terra Town SV: %1/%2 Ville SV: %1/%2 Town SV: %1/%2 Town SV: %1/%2 Town SV: %1/%2 /* Description: Define which 'part' to run. */ /* DEBUG */ //#define WF_DEBUG 1 /* Gameplay: Change the overall camo */ //#define WF_CAMO 1 /* Gamemode to run */ #define COMBINEDOPS 1 //#define VANILLA 1 //#define ARROWHEAD 1 /* Description.ext Specific */ #define WF_MAXPLAYERS 32 #define WF_MISSIONNAME "Warfare Benny Edition V2.073 Lite CO - OFrP Version Modified by [MAKO]Hybrid - Takistan" #define WF_RESPAWNDELAY 2 /* Load Screen (OA/CO) */ #ifndef VANILLA //#define WF_LOADSCREEN "ca\Missions_e\MPScenarios\MPE_MountainWarfare.Takistan\loading_mpwarfare_co.paa" #define WF_LOADSCREEN __EVAL(["ca\Missions_e\campaign\missions\CE7B_PhoenixOp.Takistan\img\loading08_phoenixop_co.paa","ca\Missions_e\campaign\missions\CE7A_FinishingTouch.Takistan\img\loading08_finishingtouch_co.paa","ca\Missions_e\campaign\missions\CE6_EyeOfTheHurricane.Zargabad\img\loading07_co.paa","ca\Missions_e\campaign\missions\CE5B_FromHell.Takistan\img\loading06_fromhell_co.paa","ca\Missions_e\campaign\missions\CE5A_Sandstorm.Takistan\img\loading06_sandstorm_co.paa","ca\Missions_e\campaign\missions\CE4_OpenSeason.Takistan\img\loading05_co.paa","ca\Missions_e\campaign\missions\CE3_ColtanBlues.Takistan\img\loading04_co.paa","ca\Missions_e\campaign\missions\CE2_Pathfinder.Takistan\img\loading03_co.paa","ca\Missions_e\campaign\missions\CE1_GoodMorningTStan.Takistan\img\loading02_goodmorning_co.paa","ca\Missions_e\campaign\missions\CE0_Backstab.Zargabad\img\loading01_co.paa","ca\Missions_e\scenarios\SPE1_Jackal.Takistan\loading_jackal_co.paa","ca\Missions_e\scenarios\SPE1_Vehicles_US.Takistan\loading_showus_co.paa","ca\Missions_e\scenarios\SPE1_Vehicles_TKG.Zargabad\loading_showgue_co.paa","ca\Missions_e\scenarios\SPE1_Vehicles_TKA.Zargabad\loading_showtk_co.paa","ca\Missions_e\scenarios\SPE1_Vehicles_Civilian.Zargabad\loading_showciv_co.paa","ca\Missions_e\scenarios\SPE1_Vehicles_Allies.Takistan\loading_shownato_co.paa","ca\Missions_e\scenarios\SPE1_SteelPanthers.Takistan\loading_steelpanthers_co.paa","ca\Missions_e\scenarios\SPE1_OneShotOneKill.Takistan\loading_oneshotonekill_co.paa","ca\Missions_e\scenarios\SPE1_Littlebird.Takistan\loading_littlebird_co.paa","ca\Missions_e\scenarios\SPE1_LaserShow.Takistan\loading_lasershow_co.paa","ca\Missions_e\scenarios\SPE1_HikeInTheHills.Takistan\loading_hikeinthehills_co.paa","ca\Missions_e\scenarios\SPE1_DeathFromAbove.Takistan\loading_deathfromabove_co.paa","ca\Missions_e\scenarios\SPE1_Benchmark1.Takistan\loading_benchmark_co.paa","ca\Missions_e\MPScenarios\MPE1_Dogfighters.Takistan\loading_mpdogfight_co.paa","ca\Missions_e\MPScenarios\MPE_MountainWarfare.Takistan\loading_mpwarfare_co.paa","ca\Missions_e\MPScenarios\MPE_SectorControl.Zargabad\img\loading_mpsectorcontrol_co.paa"] select round random 25) #endif P$֖@wp?4